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 }