github.com/voedger/voedger@v0.0.0-20240520144910-273e84102129/pkg/goutils/cobrau/rootcmd.go (about)

     1  /*
     2  * Copyright (c) 2023-present unTill Pro, Ltd.
     3  * @author Maxim Geraskin
     4   */
     5  
     6  package cobrau
     7  
     8  import (
     9  	"fmt"
    10  
    11  	"github.com/spf13/cobra"
    12  	"github.com/voedger/voedger/pkg/goutils/logger"
    13  )
    14  
    15  /*
    16  
    17  Persistent flags:
    18  
    19    -v, --verbose   Print verbose output (detailed level)
    20        --trace     Print trace output   (most detailed level)
    21  
    22  */
    23  
    24  func PrepareRootCmd(use string, short string, args []string, version string, cmds ...*cobra.Command) *cobra.Command {
    25  
    26  	var rootCmd = &cobra.Command{
    27  		Use:   use,
    28  		Short: short,
    29  		PersistentPreRun: func(cmd *cobra.Command, args []string) {
    30  			if ok, _ := cmd.Flags().GetBool("trace"); ok {
    31  				logger.SetLogLevel(logger.LogLevelTrace)
    32  				logger.Verbose("Using logger.LogLevelTrace...")
    33  			} else if ok, _ := cmd.Flags().GetBool("verbose"); ok {
    34  				logger.SetLogLevel(logger.LogLevelVerbose)
    35  				logger.Verbose("Using logger.LogLevelVerbose...")
    36  			}
    37  		},
    38  	}
    39  
    40  	var versionCmd = &cobra.Command{
    41  		Use:     "version",
    42  		Short:   "Print current version",
    43  		Aliases: []string{"ver"},
    44  		Run: func(cmd *cobra.Command, args []string) {
    45  			fmt.Println(version)
    46  		},
    47  	}
    48  
    49  	rootCmd.SetArgs(args[1:])
    50  	rootCmd.AddCommand(versionCmd)
    51  	rootCmd.AddCommand(cmds...)
    52  	rootCmd.PersistentFlags().BoolP("verbose", "v", false, "Verbose output")
    53  	rootCmd.PersistentFlags().Bool("trace", false, "Extremely verbose output")
    54  	rootCmd.SilenceUsage = true
    55  	return rootCmd
    56  }