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  }