package main import ( "fmt" "log/slog" "os" "codeflow.dananglin.me.uk/apollo/spruce/internal/cmd" ) var ( binaryVersion string buildTime string goVersion string gitCommit string ) func main() { args := os.Args[1:] if len(args) < 1 || args[0] == "--help" || args[0] == "-h" || args[0] == "help" || args[0] == "-help" { cmd.SpruceUsage() os.Exit(0) } logOptions := slog.HandlerOptions{ AddSource: false, } logger := slog.New(slog.NewTextHandler(os.Stdout, &logOptions)) slog.SetDefault(logger) subcommand := args[0] var runner cmd.Runner switch subcommand { case "version": runner = cmd.NewVersionCommand( binaryVersion, buildTime, goVersion, gitCommit, ) case "generate": runner = cmd.NewGenerateCommand() case "create": runner = cmd.NewCreateCommand() default: slog.Error("unknown subcommand", "subcommand", subcommand) cmd.SpruceUsage() os.Exit(1) } if err := runner.Parse(os.Args[2:]); err != nil { slog.Error(fmt.Sprintf("unable to parse the command line flags; %v.", err)) os.Exit(1) } if err := runner.Run(); err != nil { slog.Error(fmt.Sprintf("unable to run '%s'; %v.", runner.Name(), err)) os.Exit(1) } }