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  }