From f5b31340e2a4bd92635fe325eaf0cc0aaa7120ef Mon Sep 17 00:00:00 2001 From: LandonTClipp <11232769+LandonTClipp@users.noreply.github.com> Date: Thu, 2 Jan 2025 10:56:47 -0600 Subject: [PATCH] Fix mockery failing on `--help` or `--version` Closes #879. `version` is instead now a subcommand instead of a flag. --- .mockery.yaml => .mockery.yml | 0 Taskfile.yml | 2 +- cmd/mockery.go | 73 +++++++++++++++++------------------ cmd/version.go | 18 +++++++++ 4 files changed, 54 insertions(+), 39 deletions(-) rename .mockery.yaml => .mockery.yml (100%) create mode 100644 cmd/version.go diff --git a/.mockery.yaml b/.mockery.yml similarity index 100% rename from .mockery.yaml rename to .mockery.yml diff --git a/Taskfile.yml b/Taskfile.yml index ab489e52..5b8b4c05 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -27,7 +27,7 @@ tasks: mocks.generate.mockery: silent: True cmds: - - MOCKERY_CONFIG=./.mockery.yaml go run . + - MOCKERY_CONFIG=./.mockery.yml go run . mocks.generate.moq: silent: True diff --git a/cmd/mockery.go b/cmd/mockery.go index e14302c8..9b5c0cc4 100644 --- a/cmd/mockery.go +++ b/cmd/mockery.go @@ -20,12 +20,13 @@ import ( ) var ( - cfgFile = "" + cfgFile = "" + ErrCfgFileNotFound = errors.New("config file not found") ) func NewRootCmd() (*cobra.Command, error) { viperCfg, err := getConfig(nil, nil) - if err != nil { + if err != nil && !errors.Is(err, ErrCfgFileNotFound) { return nil, err } cmd := &cobra.Command{ @@ -46,7 +47,6 @@ func NewRootCmd() (*cobra.Command, error) { pFlags := cmd.PersistentFlags() pFlags.StringVar(&cfgFile, "config", "", "config file to use") - pFlags.Bool("version", false, "prints the installed version of mockery") pFlags.String("tags", "", "space-separated list of additional build tags to load packages") pFlags.String("mock-build-tags", "", "set the build tags of the generated mocks. Read more about the format: https://pkg.go.dev/cmd/go#hdr-Build_constraints") pFlags.String("log-level", "info", "Level of logging") @@ -58,6 +58,7 @@ func NewRootCmd() (*cobra.Command, error) { } cmd.AddCommand(NewShowConfigCmd()) + cmd.AddCommand(NewVersionCmd()) return cmd, nil } @@ -100,47 +101,43 @@ func getConfig( viperObj.SetEnvKeyReplacer(strings.NewReplacer("-", "_")) viperObj.AutomaticEnv() - if !viperObj.GetBool("disable-config-search") { - if configPath == nil && cfgFile != "" { - // Use config file from the flag. - viperObj.SetConfigFile(cfgFile) - } else if configPath != nil { - viperObj.SetConfigFile(configPath.String()) - } else if viperObj.IsSet("config") { - viperObj.SetConfigFile(viperObj.GetString("config")) - } else { - // Find home directory. - home, err := homedir.Dir() - if err != nil { - log.Fatal().Err(err).Msgf("Failed to find homedir") - } + if configPath == nil && cfgFile != "" { + // Use config file from the flag. + viperObj.SetConfigFile(cfgFile) + } else if configPath != nil { + viperObj.SetConfigFile(configPath.String()) + } else if viperObj.IsSet("config") { + viperObj.SetConfigFile(viperObj.GetString("config")) + } else { + // Find home directory. + home, err := homedir.Dir() + if err != nil { + log.Fatal().Err(err).Msgf("Failed to find homedir") + } - currentDir := baseSearchPath + currentDir := baseSearchPath - for { - viperObj.AddConfigPath(currentDir.String()) - if len(currentDir.Parts()) <= 1 { - break - } - currentDir = currentDir.Parent() + for { + viperObj.AddConfigPath(currentDir.String()) + if len(currentDir.Parts()) <= 1 { + break } - - viperObj.AddConfigPath(home) - viperObj.SetConfigName(".mockery") - } - if err := viperObj.ReadInConfig(); err != nil { - log, _ := logging.GetLogger("debug") - log.Err(err).Msg("couldn't read any config file") - return nil, err + currentDir = currentDir.Parent() } + + viperObj.AddConfigPath(home) + viperObj.SetConfigName(".mockery") + } + if err := viperObj.ReadInConfig(); err != nil { + log, _ := logging.GetLogger("debug") + log.Debug().Err(err).Msg("couldn't read any config file") + return viperObj, ErrCfgFileNotFound } viperObj.Set("config", viperObj.ConfigFileUsed()) return viperObj, nil } -const regexMetadataChars = "\\.+*?()|[]{}^$" - type RootApp struct { pkg.Config } @@ -206,6 +203,10 @@ func (r *RootApp) Run() error { return err } log.Info().Msgf("Starting mockery") + if r.Config.Config == "" { + log.Error().Msg("Config file not found. Mockery requires a config file to run.") + return ErrCfgFileNotFound + } log.Info().Msgf("Using config: %s", r.Config.Config) ctx := log.WithContext(context.Background()) @@ -213,10 +214,6 @@ func (r *RootApp) Run() error { return err } - if r.Config.Version { - fmt.Println(logging.GetSemverInfo()) - return nil - } buildTags := strings.Split(r.Config.BuildTags, " ") configuredPackages, err := r.Config.GetPackages(ctx) diff --git a/cmd/version.go b/cmd/version.go new file mode 100644 index 00000000..0bff2ed9 --- /dev/null +++ b/cmd/version.go @@ -0,0 +1,18 @@ +package cmd + +import ( + "fmt" + + "github.com/spf13/cobra" + "github.com/vektra/mockery/v3/pkg/logging" +) + +func NewVersionCmd() *cobra.Command { + return &cobra.Command{ + Use: "version", + Short: "Print the version of mockery", + Run: func(cmd *cobra.Command, args []string) { + fmt.Println(logging.GetSemverInfo()) + }, + } +}