diff --git a/pkg/cmd/cli/cmd/generate.go b/pkg/cmd/cli/cmd/generate.go index 732e455be..244b411b0 100644 --- a/pkg/cmd/cli/cmd/generate.go +++ b/pkg/cmd/cli/cmd/generate.go @@ -5,6 +5,7 @@ import ( "github.com/containers/image/v5/transports/alltransports" "github.com/containers/image/v5/types" "github.com/spf13/cobra" + "strings" "github.com/openshift/source-to-image/pkg/api" "github.com/openshift/source-to-image/pkg/api/constants" @@ -55,6 +56,14 @@ func adjustConfigWithImageLabels(cfg *api.Config, labels map[string]string) { } +// CanonizeBuilderImageArg appends 'docker://' if the builder image doesn't contain the a schema. +func CanonizeBuilderImageArg(builderImage string) string { + if strings.Contains(builderImage, "://") { + return builderImage + } + return "docker://" + builderImage +} + // NewCmdGenerate implements the S2I cli generate command. func NewCmdGenerate(cfg *api.Config) *cobra.Command { generateCmd := &cobra.Command{ @@ -71,7 +80,9 @@ $ s2i generate docker://docker.io/centos/nodejs-10-centos7 Dockerfile.gen return cmd.Help() } - ref, err := alltransports.ParseImageName(cmd.Flags().Arg(0)) + builderImageArg := CanonizeBuilderImageArg(cmd.Flags().Arg(0)) + + ref, err := alltransports.ParseImageName(builderImageArg) if err != nil { return err } diff --git a/test/generate_test.go b/test/generate_test.go new file mode 100644 index 000000000..e5a0ede54 --- /dev/null +++ b/test/generate_test.go @@ -0,0 +1,18 @@ +package test + +import ( + "github.com/openshift/source-to-image/pkg/cmd/cli/cmd" + "testing" +) + +func TestGenerate_canonizeBuilderImageArg(t *testing.T) { + assertCanonize := func(t *testing.T, input string, expected string) { + got := cmd.CanonizeBuilderImageArg(input) + if got != expected { + t.Fail() + } + } + + assertCanonize(t, "docker://docker.io/centos/nodejs-10-centos7", "docker://docker.io/centos/nodejs-10-centos7") + assertCanonize(t, "docker.io/centos/nodejs-10-centos7", "docker://docker.io/centos/nodejs-10-centos7") +}