diff --git a/cmd/common.go b/cmd/common.go index bedc856..bc4b272 100644 --- a/cmd/common.go +++ b/cmd/common.go @@ -65,6 +65,12 @@ func NewRunFilter(opts FilterOpts) (check.Predicate, error) { func runChecks(nodetype check.NodeType) { var summary check.Summary + // Verify config file was loaded into Viper during Cobra sub-command initialization. + if configFileError != nil { + colorPrint(check.FAIL, fmt.Sprintf("Failed to read config file: %v\n", configFileError)) + os.Exit(1) + } + def := loadConfig(nodetype) in, err := ioutil.ReadFile(def) if err != nil { diff --git a/cmd/root.go b/cmd/root.go index 04011f8..ad11f82 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -49,6 +49,7 @@ var ( filterOpts FilterOpts includeTestOutput bool outputFile string + configFileError error ) // RootCmd represents the base command when called without any subcommands @@ -134,7 +135,14 @@ func initConfig() { // If a config file is found, read it in. if err := viper.ReadInConfig(); err != nil { - colorPrint(check.FAIL, fmt.Sprintf("Failed to read config file: %v\n", err)) - os.Exit(1) + if _, ok := err.(viper.ConfigFileNotFoundError); ok { + // Config file not found; ignore error for now to prevent commands + // which don't need the config file exiting. + configFileError = err + } else { + // Config file was found but another error was produced + colorPrint(check.FAIL, fmt.Sprintf("Failed to read config file: %v\n", err)) + os.Exit(1) + } } }