github.com/badrootd/nibiru-cometbft@v0.37.5-0.20240307173500-2a75559eee9b/cmd/cometbft/commands/root.go (about) 1 package commands 2 3 import ( 4 "fmt" 5 "os" 6 7 "github.com/spf13/cobra" 8 "github.com/spf13/viper" 9 10 cfg "github.com/badrootd/nibiru-cometbft/config" 11 "github.com/badrootd/nibiru-cometbft/libs/cli" 12 cmtflags "github.com/badrootd/nibiru-cometbft/libs/cli/flags" 13 "github.com/badrootd/nibiru-cometbft/libs/log" 14 ) 15 16 var ( 17 config = cfg.DefaultConfig() 18 logger = log.NewTMLogger(log.NewSyncWriter(os.Stdout)) 19 ) 20 21 func init() { 22 registerFlagsRootCmd(RootCmd) 23 } 24 25 func registerFlagsRootCmd(cmd *cobra.Command) { 26 cmd.PersistentFlags().String("log_level", config.LogLevel, "log level") 27 } 28 29 // ParseConfig retrieves the default environment configuration, 30 // sets up the CometBFT root and ensures that the root exists 31 func ParseConfig(cmd *cobra.Command) (*cfg.Config, error) { 32 conf := cfg.DefaultConfig() 33 err := viper.Unmarshal(conf) 34 if err != nil { 35 return nil, err 36 } 37 38 var home string 39 if os.Getenv("CMTHOME") != "" { 40 home = os.Getenv("CMTHOME") 41 } else if os.Getenv("TMHOME") != "" { 42 // XXX: Deprecated. 43 home = os.Getenv("TMHOME") 44 logger.Error("Deprecated environment variable TMHOME identified. CMTHOME should be used instead.") 45 } else { 46 home, err = cmd.Flags().GetString(cli.HomeFlag) 47 if err != nil { 48 return nil, err 49 } 50 } 51 52 conf.RootDir = home 53 54 conf.SetRoot(conf.RootDir) 55 cfg.EnsureRoot(conf.RootDir) 56 if err := conf.ValidateBasic(); err != nil { 57 return nil, fmt.Errorf("error in config file: %v", err) 58 } 59 if warnings := conf.CheckDeprecated(); len(warnings) > 0 { 60 for _, warning := range warnings { 61 logger.Info("deprecated usage found in configuration file", "usage", warning) 62 } 63 } 64 return conf, nil 65 } 66 67 // RootCmd is the root command for CometBFT core. 68 var RootCmd = &cobra.Command{ 69 Use: "cometbft", 70 Short: "BFT state machine replication for applications in any programming languages", 71 PersistentPreRunE: func(cmd *cobra.Command, args []string) (err error) { 72 if cmd.Name() == VersionCmd.Name() { 73 return nil 74 } 75 76 config, err = ParseConfig(cmd) 77 if err != nil { 78 return err 79 } 80 81 if config.LogFormat == cfg.LogFormatJSON { 82 logger = log.NewTMJSONLogger(log.NewSyncWriter(os.Stdout)) 83 } 84 85 logger, err = cmtflags.ParseLogLevel(config.LogLevel, logger, cfg.DefaultLogLevel) 86 if err != nil { 87 return err 88 } 89 90 if viper.GetBool(cli.TraceFlag) { 91 logger = log.NewTracingLogger(logger) 92 } 93 94 logger = logger.With("module", "main") 95 return nil 96 }, 97 }