package cmd import ( "GoSungrow/Only" "fmt" "github.com/spf13/cobra" ) func AttachRootCmd(cmd *cobra.Command) *cobra.Command { // ******************************************************************************** // var rootCmd = &cobra.Command{ Use: DefaultBinaryName, Short: fmt.Sprintf("%s - Manage an SunGrow instance", DefaultBinaryName), Long: fmt.Sprintf("%s - Manage an SunGrow instance", DefaultBinaryName), Run: gbRootFunc, TraverseChildren: true, PersistentPreRunE: func(cmd *cobra.Command, args []string) error { // You can bind cobra and viper in a few locations, but PersistencePreRunE on the root command works well return initConfig(cmd) }, } if cmd != nil { cmd.AddCommand(rootCmd) } rootCmd.Example = PrintExamples(rootCmd, "") rootCmd.SetHelpTemplate(DefaultHelpTemplate) rootCmd.SetUsageTemplate(DefaultUsageTemplate) rootCmd.SetVersionTemplate(DefaultVersionTemplate) rootCmd.PersistentFlags().StringVarP(&Cmd.ApiUsername, flagApiUsername, "u", "", fmt.Sprintf("SunGrow: api username.")) rootViper.SetDefault(flagApiUsername, "") rootCmd.PersistentFlags().StringVarP(&Cmd.ApiPassword, flagApiPassword, "p", "", fmt.Sprintf("SunGrow: api password.")) rootViper.SetDefault(flagApiPassword, "") rootCmd.PersistentFlags().StringVarP(&Cmd.ApiAppKey, flagApiAppKey, "", defaultApiAppKey, fmt.Sprintf("SunGrow: api application key.")) rootViper.SetDefault(flagApiAppKey, defaultApiAppKey) rootCmd.PersistentFlags().StringVarP(&Cmd.ApiUrl, flagApiUrl, "", defaultHost, fmt.Sprintf("SunGrow: Provider API URL.")) rootViper.SetDefault(flagApiUrl, defaultHost) rootCmd.PersistentFlags().DurationVarP(&Cmd.ApiTimeout, flagApiTimeout, "", defaultTimeout, fmt.Sprintf("SunGrow: API timeout.")) rootViper.SetDefault(flagApiTimeout, defaultTimeout) rootCmd.PersistentFlags().StringVar(&Cmd.ApiLastLogin, flagApiLastLogin, "", "SunGrow: last login.") rootViper.SetDefault(flagApiLastLogin, "") // _ = rootCmd.PersistentFlags().MarkHidden(flagApiLastLogin) rootCmd.PersistentFlags().StringVarP(&Cmd.GoogleSheet, flagGoogleSheet, "", "", fmt.Sprintf("Google: Sheet URL for updates.")) rootViper.SetDefault(flagGoogleSheet, "") rootCmd.PersistentFlags().BoolVarP(&Cmd.GoogleSheetUpdate, flagGoogleSheetUpdate, "", false, fmt.Sprintf("Update Google sheets.")) rootViper.SetDefault(flagGoogleSheetUpdate, false) _ = rootCmd.PersistentFlags().MarkHidden(flagGoogleSheetUpdate) rootCmd.PersistentFlags().StringVarP(&Cmd.MqttUsername, flagMqttUsername, "", "", fmt.Sprintf("HASSIO: mqtt username.")) rootViper.SetDefault(flagMqttUsername, "") rootCmd.PersistentFlags().StringVarP(&Cmd.MqttPassword, flagMqttPassword, "", "", fmt.Sprintf("HASSIO: mqtt password.")) rootViper.SetDefault(flagMqttPassword, "") rootCmd.PersistentFlags().StringVarP(&Cmd.MqttHost, flagMqttHost, "", "", fmt.Sprintf("HASSIO: mqtt host.")) rootViper.SetDefault(flagMqttHost, "") rootCmd.PersistentFlags().StringVarP(&Cmd.MqttPort, flagMqttPort, "", "", fmt.Sprintf("HASSIO: mqtt port.")) rootViper.SetDefault(flagMqttPort, "") rootCmd.PersistentFlags().StringVarP(&Cmd.GitRepo, flagGitRepo, "", "", fmt.Sprintf("Git: Repo url for updates.")) rootViper.SetDefault(flagGitRepo, "") rootCmd.PersistentFlags().StringVarP(&Cmd.GitRepoDir, flagGitRepoDir, "", "", fmt.Sprintf("Git: Local repo directory.")) rootViper.SetDefault(flagGitRepoDir, "") rootCmd.PersistentFlags().StringVarP(&Cmd.GitUsername, flagGitUsername, "", "", fmt.Sprintf("Git: Repo username.")) rootViper.SetDefault(flagGitUsername, "") rootCmd.PersistentFlags().StringVarP(&Cmd.GitPassword, flagGitPassword, "", "", fmt.Sprintf("Git: Repo password.")) rootViper.SetDefault(flagGitPassword, "") rootCmd.PersistentFlags().StringVarP(&Cmd.GitKeyFile, flagGitKeyFile, "", "", fmt.Sprintf("Git: Repo SSH keyfile.")) rootViper.SetDefault(flagGitKeyFile, "") rootCmd.PersistentFlags().StringVarP(&Cmd.GitToken, flagGitToken, "", "", fmt.Sprintf("Git: Repo token string.")) rootViper.SetDefault(flagGitToken, "") rootCmd.PersistentFlags().StringVarP(&Cmd.GitDiffCmd, flagGitDiffCmd, "", "tkdiff", fmt.Sprintf("Git: Command for diffs.")) rootViper.SetDefault(flagGitDiffCmd, "tkdiff") rootCmd.PersistentFlags().StringVar(&Cmd.ConfigFile, flagConfigFile, Cmd.ConfigFile, fmt.Sprintf("%s: config file.", DefaultBinaryName)) // _ = rootCmd.PersistentFlags().MarkHidden(flagConfigFile) rootCmd.PersistentFlags().BoolVarP(&Cmd.Debug, flagDebug, "", false, fmt.Sprintf("%s: Debug mode.", DefaultBinaryName)) rootViper.SetDefault(flagDebug, false) rootCmd.PersistentFlags().BoolVarP(&Cmd.Quiet, flagQuiet, "q", false, fmt.Sprintf("%s: Silence all messages.", DefaultBinaryName)) rootViper.SetDefault(flagQuiet, false) rootCmd.PersistentFlags().SortFlags = false rootCmd.Flags().SortFlags = false return rootCmd } func gbRootFunc(cmd *cobra.Command, args []string) { for range Only.Once { if len(args) == 0 { _ = cmd.Help() break } } }