cli/cmd/root.go (69 lines of code) (raw):
package cmd
import (
"os"
"github.com/GoogleCloudPlatform/cloud-foundation-toolkit/cli/bpbuild"
"github.com/GoogleCloudPlatform/cloud-foundation-toolkit/cli/bptest"
"github.com/GoogleCloudPlatform/cloud-foundation-toolkit/cli/report"
"github.com/GoogleCloudPlatform/cloud-foundation-toolkit/cli/scorecard"
log "github.com/inconshreveable/log15"
"github.com/spf13/cobra"
"github.com/spf13/viper"
)
// rootCmd represents the base command when called without any subcommands
var rootCmd = &cobra.Command{
Use: "cft",
Short: "Google Cloud Foundation Toolkit CLI",
Long: "Google Cloud Foundation Toolkit CLI",
Args: cobra.NoArgs,
Run: func(cmd *cobra.Command, args []string) {
// no params means same as -h flag
if len(args) == 0 {
cmd.HelpFunc()(cmd, args)
}
},
PersistentPreRun: func(cmd *cobra.Command, args []string) {
if !flags.verbose {
// discard logs
scorecard.Log.SetHandler(log.DiscardHandler())
bptest.Log.SetHandler(log.DiscardHandler())
bpbuild.Log.SetHandler(log.DiscardHandler())
}
// We want to dump to stdout by default
cmd.SetOut(cmd.OutOrStdout())
},
}
var flags struct {
// Common flags
verbose bool
}
func init() {
rootCmd.SetUsageTemplate(`Usage:
{{if .Runnable}}{{.UseLine}}{{end}}
{{if .HasAvailableSubCommands}}{{.CommandPath}} [command] [flags]{{end}}{{if gt (len .Aliases) 0}}
Aliases:
{{.NameAndAliases}}{{end}}{{if .HasExample}}
Examples:
{{.Example}}{{end}}{{if .HasAvailableSubCommands}}
Available Commands:{{range .Commands}}{{if (or .IsAvailableCommand (eq .Name "help"))}}
{{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableLocalFlags}}
Flags:
{{.LocalFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasAvailableInheritedFlags}}
Global Flags:
{{.InheritedFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasHelpSubCommands}}
Additional help topics:{{range .Commands}}{{if .IsAdditionalHelpTopicCommand}}
{{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableSubCommands}}
Use "{{.CommandPath}} [command] --help" for more information about a command.{{end}}
`)
if os.Args == nil {
rootCmd.SetArgs([]string{"-h"})
}
rootCmd.PersistentFlags().BoolVar(&flags.verbose, "verbose", false, "Log output to stdout")
err := viper.BindPFlag("verbose", rootCmd.PersistentFlags().Lookup("verbose"))
if err != nil {
panic(err)
}
rootCmd.AddCommand(scorecard.Cmd)
rootCmd.AddCommand(report.Cmd)
rootCmd.AddCommand(bptest.Cmd)
rootCmd.AddCommand(bpbuild.Cmd)
}
func Execute() {
if err := rootCmd.Execute(); err != nil {
os.Exit(1)
}
}