diff --git a/cmd/image-builder/main.go b/cmd/image-builder/main.go index 8efbde6..33fe4b0 100644 --- a/cmd/image-builder/main.go +++ b/cmd/image-builder/main.go @@ -232,14 +232,13 @@ func cmdBuild(cmd *cobra.Command, args []string) error { return err } - var uploadUnsupported *UploadTypeUnsupportedError - var missingUploadConfig *MissingUploadConfigError uploader, err := uploaderFor(cmd, res.ImgType.Name()) - if err != nil && !errors.As(err, &missingUploadConfig) && !errors.As(err, &uploadUnsupported) { - return err + if errors.Is(err, ErrUploadTypeUnsupported) || errors.Is(err, ErrUploadConfigNotProvided) { + err = nil } - if missingUploadConfig != nil && !missingUploadConfig.allMissing { - return fmt.Errorf("partial upload config provided: %w", err) + + if err != nil { + return err } if uploader != nil { diff --git a/cmd/image-builder/main_test.go b/cmd/image-builder/main_test.go index 651b821..5ae0e74 100644 --- a/cmd/image-builder/main_test.go +++ b/cmd/image-builder/main_test.go @@ -343,7 +343,7 @@ func TestBuildIntegrationHappy(t *testing.T) { assert.NoError(t, err) // ensure osbuild was run exactly one - assert.Equal(t, 1, len(fakeOsbuildCmd.Calls())) + require.Equal(t, 1, len(fakeOsbuildCmd.Calls())) osbuildCall := fakeOsbuildCmd.Calls()[0] // --cache is passed correctly to osbuild storePos := slices.Index(osbuildCall, "--store") diff --git a/cmd/image-builder/upload.go b/cmd/image-builder/upload.go index 718b3b7..8e57b28 100644 --- a/cmd/image-builder/upload.go +++ b/cmd/image-builder/upload.go @@ -2,6 +2,7 @@ package main import ( "bufio" + "errors" "fmt" "io" "os" @@ -14,22 +15,14 @@ import ( "github.com/osbuild/images/pkg/cloud/awscloud" ) -type MissingUploadConfigError struct { - missing []string - allMissing bool -} - -func (e *MissingUploadConfigError) Error() string { - return fmt.Sprintf("missing upload configuration: %q", e.missing) -} +// ErrMissingUploadConfig is returned when the upload configuration is missing +var ErrMissingUploadConfig = errors.New("missing upload configuration") -type UploadTypeUnsupportedError struct { - typ string -} +// ErrUploadConfigNotProvided is returned when all the upload configuration is missing +var ErrUploadConfigNotProvided = errors.New("missing all upload configuration") -func (e *UploadTypeUnsupportedError) Error() string { - return fmt.Sprintf("unsupported upload type %q", e.typ) -} +// ErrUploadTypeUnsupported is returned when the upload type is not supported +var ErrUploadTypeUnsupported = errors.New("unsupported type") var awscloudNewUploader = awscloud.NewUploader @@ -73,7 +66,7 @@ func uploaderFor(cmd *cobra.Command, typeOrCloud string) (cloud.Uploader, error) case "ami", "aws": return uploaderForCmdAWS(cmd) default: - return nil, &UploadTypeUnsupportedError{typeOrCloud} + return nil, fmt.Errorf("%w: %q", ErrUploadTypeUnsupported, typeOrCloud) } } @@ -104,10 +97,11 @@ func uploaderForCmdAWS(cmd *cobra.Command) (cloud.Uploader, error) { } } if len(missing) > 0 { - return nil, &MissingUploadConfigError{ - missing: missing, - allMissing: len(missing) == len(requiredArgs), + if len(missing) == len(requiredArgs) { + return nil, fmt.Errorf("%w: %q", ErrUploadConfigNotProvided, missing) } + + return nil, fmt.Errorf("%w: %q", ErrMissingUploadConfig, missing) } return awscloudNewUploader(region, bucketName, amiName, nil) diff --git a/cmd/image-builder/upload_test.go b/cmd/image-builder/upload_test.go index 422e71c..bbda00f 100644 --- a/cmd/image-builder/upload_test.go +++ b/cmd/image-builder/upload_test.go @@ -98,7 +98,7 @@ func TestUploadCmdlineErrors(t *testing.T) { `missing --to parameter, try --to=aws`, }, { []string{"--to=aws"}, - `missing upload configuration: ["--aws-ami-name" "--aws-bucket" "--aws-region"]`, + `missing all upload configuration: ["--aws-ami-name" "--aws-bucket" "--aws-region"]`, }, { []string{"--to=aws", "--aws-ami-name=1"}, @@ -242,5 +242,5 @@ func TestBuildAndUploadWithAWSPartialCmdlineErrors(t *testing.T) { defer restore() err := main.Run() - assert.EqualError(t, err, `partial upload config provided: missing upload configuration: ["--aws-ami-name" "--aws-bucket"]`) + assert.EqualError(t, err, `missing upload configuration: ["--aws-ami-name" "--aws-bucket"]`) }