github.com/grafana/tanka@v0.26.1-0.20240506093700-c22cfc35c21a/cmd/tk/main.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"strings"
     7  
     8  	"github.com/go-clix/cli"
     9  	"github.com/rs/zerolog"
    10  	"golang.org/x/term"
    11  
    12  	"github.com/grafana/tanka/pkg/tanka"
    13  )
    14  
    15  var interactive = term.IsTerminal(int(os.Stdout.Fd()))
    16  
    17  func main() {
    18  	rootCmd := &cli.Command{
    19  		Use:     "tk",
    20  		Short:   "tanka <3 jsonnet",
    21  		Version: tanka.CurrentVersion,
    22  	}
    23  
    24  	// workflow commands
    25  	addCommandsWithLogLevelOption(
    26  		rootCmd,
    27  		applyCmd(),
    28  		showCmd(),
    29  		diffCmd(),
    30  		pruneCmd(),
    31  		deleteCmd(),
    32  	)
    33  
    34  	addCommandsWithLogLevelOption(
    35  		rootCmd,
    36  		envCmd(),
    37  		statusCmd(),
    38  		exportCmd(),
    39  	)
    40  
    41  	// jsonnet commands
    42  	addCommandsWithLogLevelOption(
    43  		rootCmd,
    44  		fmtCmd(),
    45  		lintCmd(),
    46  		evalCmd(),
    47  		initCmd(),
    48  		toolCmd(),
    49  	)
    50  
    51  	// external commands prefixed with "tk-"
    52  	addCommandsWithLogLevelOption(
    53  		rootCmd,
    54  		prefixCommands("tk-")...,
    55  	)
    56  
    57  	// Run!
    58  	if err := rootCmd.Execute(); err != nil {
    59  		fmt.Fprintln(os.Stderr, "Error:", err)
    60  		os.Exit(1)
    61  	}
    62  }
    63  
    64  func addCommandsWithLogLevelOption(rootCmd *cli.Command, cmds ...*cli.Command) {
    65  	for _, cmd := range cmds {
    66  		levels := []string{zerolog.Disabled.String(), zerolog.FatalLevel.String(), zerolog.ErrorLevel.String(), zerolog.WarnLevel.String(), zerolog.InfoLevel.String(), zerolog.DebugLevel.String(), zerolog.TraceLevel.String()}
    67  		cmd.Flags().String("log-level", zerolog.InfoLevel.String(), "possible values: "+strings.Join(levels, ", "))
    68  
    69  		cmdRun := cmd.Run
    70  		cmd.Run = func(cmd *cli.Command, args []string) error {
    71  			level, err := zerolog.ParseLevel(cmd.Flags().Lookup("log-level").Value.String())
    72  			if err != nil {
    73  				return err
    74  			}
    75  			zerolog.SetGlobalLevel(level)
    76  
    77  			return cmdRun(cmd, args)
    78  		}
    79  		rootCmd.AddCommand(cmd)
    80  	}
    81  }