github.com/Benchkram/bob@v0.0.0-20220321080157-7c8f3876e225/cli/cmd_root.go (about) 1 package cli 2 3 import ( 4 "fmt" 5 "os" 6 "runtime" 7 "strconv" 8 9 "github.com/Benchkram/bob/pkg/boblog" 10 11 "github.com/Benchkram/bob/bob" 12 "github.com/spf13/cobra" 13 ) 14 15 var zsh bool 16 17 func init() { 18 configInit() 19 20 // completionCmd 21 completionCmd.Flags().BoolVarP(&zsh, "zsh", "z", 22 zsh, "Create zsh completion") 23 rootCmd.AddCommand(completionCmd) 24 25 rootCmd.Flags().Bool("version", false, "Show the CLI's version") 26 27 rootCmd.AddCommand(verifyCmd) 28 rootCmd.AddCommand(cleanCmd) 29 30 // clone 31 CmdClone.Flags().Bool("fail-fast", false, "Fail on first error without user prompt") 32 rootCmd.AddCommand(CmdClone) 33 34 // workspace 35 cmdAdd.Flags().Bool("plain", false, "Do not infer contrary protocol url") 36 cmdWorkspace.AddCommand(cmdWorkspaceNew) 37 cmdWorkspace.AddCommand(cmdAdd) 38 rootCmd.AddCommand(cmdWorkspace) 39 40 // runCmd 41 runCmd.Flags().Bool("no-cache", false, "Set to true to not use cache") 42 runCmd.AddCommand(runListCmd) 43 rootCmd.AddCommand(runCmd) 44 45 // buildCmd 46 buildCmd.Flags().Bool("dummy", false, "Create a dummy bobfile") 47 buildCmd.Flags().Bool("no-cache", false, "Set to true to not use cache") 48 buildCmd.AddCommand(buildListCmd) 49 rootCmd.AddCommand(buildCmd) 50 51 // gitCmd 52 CmdGitCommit.Flags().StringP("message", "m", "", "Set the commit message for all repository") 53 CmdGit.AddCommand(CmdGitAdd) 54 CmdGit.AddCommand(CmdGitCommit) 55 CmdGit.AddCommand(CmdGitStatus) 56 rootCmd.AddCommand(CmdGit) 57 } 58 59 var rootCmd = &cobra.Command{ 60 Use: "bob", 61 Short: "A build tool from space, down on earth.", 62 Long: `A build tool from space, down on earth. 63 64 Commonly used cmds: 65 bob build execute the default build task 66 bob workspace new create a new workspace 67 bob git status git like status for multi repositories`, 68 FParseErrWhitelist: cobra.FParseErrWhitelist{ 69 UnknownFlags: true, 70 }, 71 PersistentPreRun: func(cmd *cobra.Command, args []string) { 72 if cmd.Flag("version") != nil { 73 showVersion, err := strconv.ParseBool(cmd.Flag("version").Value.String()) 74 if err == nil && showVersion { 75 //TODO for go 1.18: check what we can use from runtime/debug: https://github.com/golang/go/issues/49168 76 //bi, ok := debug.ReadBuildInfo() 77 //if ok { 78 // 79 //} 80 81 boblog.Log.Info(fmt.Sprintf("bob version %s %s/%s\n", bob.Version, runtime.GOOS, runtime.GOARCH)) 82 os.Exit(0) 83 } 84 } 85 86 readGlobalConfig() 87 logInit(GlobalConfig.Verbosity) 88 _stopProfiling = profiling( 89 GlobalConfig.CPUProfile, 90 GlobalConfig.MEMProfile, 91 ) 92 }, 93 Run: func(cmd *cobra.Command, args []string) { 94 err := cmd.Help() 95 boblog.Log.Error(err, "Unable to generate bash completion") 96 }, 97 }