Dan Anglin
90638f5569
Add functionality to display the default help message when running spruce without any arguments or when the help flag is used. Customise the help message for the subcommands. Additional changes: - Refactor: move the Runner interface to the internal cmd package - Fix: Add a summary for each of the subcommands. - Refactor: Use string builder to replace string literals. - Perf: Use a switch statement to only create the subcommand that the user calls.
65 lines
1.2 KiB
Go
65 lines
1.2 KiB
Go
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)
|
|
}
|
|
}
|