diff --git a/changelog/fragments/bugfix-generate-no-project-name.yaml b/changelog/fragments/bugfix-generate-no-project-name.yaml new file mode 100644 index 0000000000..41032f33e8 --- /dev/null +++ b/changelog/fragments/bugfix-generate-no-project-name.yaml @@ -0,0 +1,4 @@ +entries: + - description: > + Project version now determines how package name is retrieved for a project + kind: bugfix diff --git a/internal/cmd/operator-sdk/generate/bundle/bundle.go b/internal/cmd/operator-sdk/generate/bundle/bundle.go index 20351c9d30..cf8d98efe5 100644 --- a/internal/cmd/operator-sdk/generate/bundle/bundle.go +++ b/internal/cmd/operator-sdk/generate/bundle/bundle.go @@ -105,21 +105,9 @@ https://github.com/operator-framework/operator-registry/#manifest-format const defaultRootDir = "bundle" // setDefaults sets defaults useful to all modes of this subcommand. -func (c *bundleCmd) setDefaults() error { - if projutil.HasProjectFile() { - cfg, err := projutil.ReadConfig() - if err != nil { - return err - } - if c.packageName == "" { - c.packageName = cfg.ProjectName - } - c.layout = projutil.GetProjectLayout(cfg) - } else { - if c.packageName == "" { - return fmt.Errorf("package name is required if PROJECT config file is not present") - } - c.layout = "unknown" +func (c *bundleCmd) setDefaults() (err error) { + if c.packageName, c.layout, err = genutil.GetPackageNameAndLayout(c.packageName); err != nil { + return err } return nil } diff --git a/internal/cmd/operator-sdk/generate/internal/genutil.go b/internal/cmd/operator-sdk/generate/internal/genutil.go index 0b6f6672cb..ad1afc53ab 100644 --- a/internal/cmd/operator-sdk/generate/internal/genutil.go +++ b/internal/cmd/operator-sdk/generate/internal/genutil.go @@ -24,6 +24,7 @@ import ( "strings" "github.com/blang/semver" + "github.com/operator-framework/operator-sdk/internal/util/projutil" apiextv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" apiextv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" "sigs.k8s.io/controller-runtime/pkg/client" @@ -158,3 +159,37 @@ func IsExist(path string) bool { _, err := os.Stat(path) return err == nil || errors.Is(err, os.ErrExist) } + +// GetPackageNameAndLayout returns packageName and layout, if any, for a project. +// These values are determined by project version and whether a PROJECT file exists. +func GetPackageNameAndLayout(defaultPackageName string) (packageName string, layout string, _ error) { + packageName = defaultPackageName + if projutil.HasProjectFile() { + cfg, err := projutil.ReadConfig() + if err != nil { + return "", "", err + } + if packageName == "" { + switch { + case cfg.IsV2(): + wd, err := os.Getwd() + if err != nil { + return "", "", err + } + packageName = strings.ToLower(filepath.Base(wd)) + default: + if cfg.ProjectName == "" { + return "", "", errors.New("--package-name must be set if \"projectName\" is not set in the PROJECT config file") + } + packageName = cfg.ProjectName + } + } + layout = projutil.GetProjectLayout(cfg) + } else { + if packageName == "" { + return "", "", errors.New("--package-name must be set if PROJECT config file is not present") + } + layout = "unknown" + } + return packageName, layout, nil +} diff --git a/internal/cmd/operator-sdk/generate/packagemanifests/packagemanifests.go b/internal/cmd/operator-sdk/generate/packagemanifests/packagemanifests.go index 7ef7b5bcf8..c99af553a9 100644 --- a/internal/cmd/operator-sdk/generate/packagemanifests/packagemanifests.go +++ b/internal/cmd/operator-sdk/generate/packagemanifests/packagemanifests.go @@ -26,7 +26,6 @@ import ( "github.com/operator-framework/operator-sdk/internal/generate/clusterserviceversion/bases" "github.com/operator-framework/operator-sdk/internal/generate/collector" genpkg "github.com/operator-framework/operator-sdk/internal/generate/packagemanifest" - "github.com/operator-framework/operator-sdk/internal/util/projutil" ) const ( @@ -78,21 +77,9 @@ https://github.com/operator-framework/operator-registry/#manifest-format const defaultRootDir = "packagemanifests" // setDefaults sets command defaults. -func (c *packagemanifestsCmd) setDefaults() error { - if projutil.HasProjectFile() { - cfg, err := projutil.ReadConfig() - if err != nil { - return err - } - if c.packageName == "" { - c.packageName = cfg.ProjectName - } - c.layout = projutil.GetProjectLayout(cfg) - } else { - if c.packageName == "" { - return fmt.Errorf("package name is required if PROJECT config file is not present") - } - c.layout = "unknown" +func (c *packagemanifestsCmd) setDefaults() (err error) { + if c.packageName, c.layout, err = genutil.GetPackageNameAndLayout(c.packageName); err != nil { + return err } if c.inputDir == "" { @@ -103,6 +90,7 @@ func (c *packagemanifestsCmd) setDefaults() error { c.outputDir = defaultRootDir } } + return nil }