github.com/seilagamo/poc-lava-release@v0.3.3-rc3/cmd/lava/main.go (about) 1 // Copyright 2023 Adevinta 2 3 // Lava runs security checks locally. 4 package main 5 6 import ( 7 "flag" 8 "fmt" 9 "log/slog" 10 "os" 11 12 "github.com/jroimartin/clilog" 13 14 "github.com/seilagamo/poc-lava-release/cmd/lava/internal/base" 15 "github.com/seilagamo/poc-lava-release/cmd/lava/internal/help" 16 "github.com/seilagamo/poc-lava-release/cmd/lava/internal/initialize" 17 "github.com/seilagamo/poc-lava-release/cmd/lava/internal/scan" 18 ) 19 20 func init() { 21 base.Commands = []*base.Command{ 22 scan.CmdScan, 23 initialize.CmdInit, 24 25 help.HelpLavaYAML, 26 help.HelpMetrics, 27 } 28 } 29 30 func main() { 31 h := clilog.NewCLIHandler(os.Stderr, &clilog.HandlerOptions{Level: base.LogLevel}) 32 slog.SetDefault(slog.New(h)) 33 34 flag.Usage = help.PrintUsage 35 flag.Parse() //nolint:errcheck 36 37 args := flag.Args() 38 if len(args) < 1 { 39 help.PrintUsage() 40 os.Exit(2) 41 } 42 43 if args[0] == "help" { 44 help.Help(args[1:]) 45 return 46 } 47 48 for _, cmd := range base.Commands { 49 if cmd.Run == nil { 50 continue 51 } 52 cmd.Flag.Usage = cmd.Usage 53 if cmd.Name() == args[0] { 54 cmd.Flag.Parse(args[1:]) //nolint:errcheck 55 args = cmd.Flag.Args() 56 if err := cmd.Run(args); err != nil { 57 fmt.Fprintf(os.Stderr, "error: %v\n", err) 58 os.Exit(1) 59 } 60 return 61 } 62 } 63 64 fmt.Fprintf(os.Stderr, "Unknown command %q. Run 'lava help'.\n", args[0]) 65 os.Exit(2) 66 }