package cmd import ( "fmt" "os" "git.devices.local/mawas/skel/lib/config" "github.com/spf13/cobra" ) var ( Version string APPName string APPDescription string ) var rootCmd = &cobra.Command{ Use: APPName, Short: APPDescription, Long: APPDescription, // SilenceUsage: true, // SilenceErrors: true, Run: func(cmd *cobra.Command, args []string) { }, } var versionCmd = &cobra.Command{ Use: "version", Short: "Print the version number", Long: "Print the version number", Run: func(cmd *cobra.Command, args []string) { fmt.Println(APPName, "version:", Version) os.Exit(0) }, } var sampleCfgCmd = &cobra.Command{ Use: "sample-config", Short: "Print sample config", Long: "Print an example configuration file content", Run: func(cmd *cobra.Command, args []string) { fmt.Println(config.Sample) os.Exit(0) }, } func Initialize(version string, appName string, appDescription string) error { var cfgFile string Version = version APPName = appName APPDescription = appDescription rootCmd.SetHelpFunc(func(cmd *cobra.Command, args []string) { if err := cmd.Usage(); err != nil { os.Exit(1) } os.Exit(0) }) rootCmd.AddCommand(versionCmd) rootCmd.AddCommand(sampleCfgCmd) rootCmd.Flags().StringVarP(&cfgFile, "config", "c", "", "config file") flagCfg := map[string]interface{}{ "application.environment": rootCmd.Flags().StringP("environment", "e", "", "application environment"), "application.listenaddress": rootCmd.Flags().StringP("listenaddress", "l", "", "application listenaddress or host"), "application.port": rootCmd.Flags().IntP("port", "p", 0, "application listenport"), "database.host": rootCmd.Flags().StringP("database-host", "H", "", "database host"), "database.port": rootCmd.Flags().IntP("database-port", "P", 0, "database port"), "database.dialect": rootCmd.Flags().StringP("database-dialect", "D", "", "database dialect"), "database.database": rootCmd.Flags().StringP("database-name", "d", "", "database name"), "database.user": rootCmd.Flags().StringP("database-user", "u", "", "database user"), "database.password": rootCmd.Flags().StringP("database-password", "s", "", "database password"), "database.maxopenconn": rootCmd.Flags().IntP("database-maxopen", "o", 0, "database max open connections"), "database.maxidleconn": rootCmd.Flags().IntP("database-maxidle", "i", 0, "database max idle connections"), "database.maxlifetime": rootCmd.Flags().IntP("database-maxlifetime", "t", 0, "database max connection lifetime"), } if err := rootCmd.Execute(); err != nil { return err } if err := config.Initialize(appName, cfgFile, flagCfg); err != nil { return err } return nil }