package cmd import ( "fmt" "log/slog" "os" "github.com/spf13/cobra" "github.com/spf13/viper" ) var ( cfgFile string dbFile string debug bool rootCmd = &cobra.Command{Use: "gorum"} ) func init() { cobra.OnInitialize(initLogger) cobra.OnInitialize(initConfig) rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "gorum.yaml", "config file") rootCmd.PersistentFlags().StringVar(&dbFile, "db", "gorum.db", "database file") rootCmd.PersistentFlags().BoolVar(&debug, "debug", false, "verbose debug output") viper.BindPFlag("db", serverCmd.Flags().Lookup("db")) rootCmd.AddCommand(serverCmd) rootCmd.AddCommand(migrateCmd) rootCmd.AddCommand(userCmd) } func initLogger() { level := slog.LevelInfo if debug { level = slog.LevelDebug } logger := slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{Level: level}) slog.SetDefault(slog.New(logger)) } func initConfig() { viper.SetConfigFile(cfgFile) if err := viper.ReadInConfig(); err != nil { slog.Warn("can't read config", slog.Any("error", err)) } } func Execute() { if err := rootCmd.Execute(); err != nil { fmt.Println(err) os.Exit(1) } }