2023-02-18 21:01:28 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
2023-08-12 12:02:44 +01:00
|
|
|
"fmt"
|
|
|
|
"log/slog"
|
2023-02-18 21:01:28 +00:00
|
|
|
"os"
|
2023-08-12 10:26:23 +01:00
|
|
|
|
|
|
|
"codeflow.dananglin.me.uk/apollo/spruce/internal/cmd"
|
2023-02-18 21:01:28 +00:00
|
|
|
)
|
|
|
|
|
2023-08-12 10:26:23 +01:00
|
|
|
var (
|
|
|
|
binaryVersion string
|
|
|
|
buildTime string
|
|
|
|
goVersion string
|
|
|
|
gitCommit string
|
|
|
|
)
|
2023-02-18 21:01:28 +00:00
|
|
|
|
|
|
|
func main() {
|
2023-08-13 17:45:33 +01:00
|
|
|
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)
|
|
|
|
}
|
|
|
|
|
2023-08-12 12:02:44 +01:00
|
|
|
logOptions := slog.HandlerOptions{
|
|
|
|
AddSource: false,
|
|
|
|
}
|
|
|
|
|
|
|
|
logger := slog.New(slog.NewTextHandler(os.Stdout, &logOptions))
|
|
|
|
|
|
|
|
slog.SetDefault(logger)
|
|
|
|
|
2023-08-13 17:45:33 +01:00
|
|
|
subcommand := args[0]
|
|
|
|
|
|
|
|
var runner cmd.Runner
|
|
|
|
|
|
|
|
switch subcommand {
|
|
|
|
case "version":
|
|
|
|
runner = cmd.NewVersionCommand(
|
2023-08-12 10:26:23 +01:00
|
|
|
binaryVersion,
|
|
|
|
buildTime,
|
|
|
|
goVersion,
|
|
|
|
gitCommit,
|
2023-08-13 17:45:33 +01:00
|
|
|
)
|
|
|
|
case "generate":
|
|
|
|
runner = cmd.NewGenerateCommand()
|
|
|
|
case "create":
|
|
|
|
runner = cmd.NewCreateCommand()
|
|
|
|
default:
|
2023-08-12 12:02:44 +01:00
|
|
|
slog.Error("unknown subcommand", "subcommand", subcommand)
|
2023-08-13 17:45:33 +01:00
|
|
|
cmd.SpruceUsage()
|
2023-08-12 12:02:44 +01:00
|
|
|
os.Exit(1)
|
2023-02-21 08:23:26 +00:00
|
|
|
}
|
|
|
|
|
2023-08-11 18:33:26 +01:00
|
|
|
if err := runner.Parse(os.Args[2:]); err != nil {
|
2023-08-12 12:02:44 +01:00
|
|
|
slog.Error(fmt.Sprintf("unable to parse the command line flags; %v.", err))
|
|
|
|
os.Exit(1)
|
2023-02-21 08:23:26 +00:00
|
|
|
}
|
|
|
|
|
2023-08-11 18:33:26 +01:00
|
|
|
if err := runner.Run(); err != nil {
|
2023-08-12 12:02:44 +01:00
|
|
|
slog.Error(fmt.Sprintf("unable to run '%s'; %v.", runner.Name(), err))
|
|
|
|
os.Exit(1)
|
2023-02-21 08:23:26 +00:00
|
|
|
}
|
2023-03-08 00:42:04 +00:00
|
|
|
}
|