spruce/main.go

66 lines
1.2 KiB
Go
Raw Normal View History

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)
}
}