2023-08-12 10:26:23 +01:00
|
|
|
package cmd
|
2023-08-11 18:33:26 +01:00
|
|
|
|
|
|
|
import (
|
|
|
|
"flag"
|
|
|
|
"fmt"
|
2023-08-13 17:45:33 +01:00
|
|
|
"strings"
|
2023-08-11 18:33:26 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
type VersionCommand struct {
|
2023-08-11 19:26:24 +01:00
|
|
|
*flag.FlagSet
|
2023-08-13 17:45:33 +01:00
|
|
|
summary string
|
2023-08-12 10:26:23 +01:00
|
|
|
fullVersion bool
|
2023-08-11 18:33:26 +01:00
|
|
|
binaryVersion string
|
|
|
|
buildTime string
|
|
|
|
goVersion string
|
|
|
|
gitCommit string
|
2023-08-12 10:26:23 +01:00
|
|
|
}
|
2023-08-11 18:33:26 +01:00
|
|
|
|
2023-08-12 10:26:23 +01:00
|
|
|
func NewVersionCommand(binaryVersion, buildTime, goVersion, gitCommit string) *VersionCommand {
|
2023-08-11 18:33:26 +01:00
|
|
|
vc := VersionCommand{
|
2023-08-12 10:26:23 +01:00
|
|
|
FlagSet: flag.NewFlagSet("version", flag.ExitOnError),
|
|
|
|
binaryVersion: binaryVersion,
|
|
|
|
buildTime: buildTime,
|
|
|
|
goVersion: goVersion,
|
|
|
|
gitCommit: gitCommit,
|
2023-08-13 17:45:33 +01:00
|
|
|
summary: "Print the application's build information.",
|
2023-08-11 18:33:26 +01:00
|
|
|
}
|
|
|
|
|
2023-08-13 17:45:33 +01:00
|
|
|
vc.BoolVar(&vc.fullVersion, "full", false, "prints the full build information")
|
|
|
|
|
|
|
|
vc.Usage = usageFunc(vc.Name(), vc.summary, vc.FlagSet)
|
2023-08-11 18:33:26 +01:00
|
|
|
|
|
|
|
return &vc
|
|
|
|
}
|
|
|
|
|
|
|
|
func (v *VersionCommand) Run() error {
|
2023-08-13 17:45:33 +01:00
|
|
|
var b strings.Builder
|
2023-08-11 18:33:26 +01:00
|
|
|
if v.fullVersion {
|
2023-08-13 17:45:33 +01:00
|
|
|
fmt.Fprintf(&b, "Spruce\n Version: %s\n Git commit: %s\n Go version: %s\n Build date: %s\n", v.binaryVersion, v.gitCommit, v.goVersion, v.buildTime)
|
2023-08-11 18:33:26 +01:00
|
|
|
} else {
|
2023-08-13 17:45:33 +01:00
|
|
|
fmt.Fprintln(&b, v.binaryVersion)
|
2023-08-11 18:33:26 +01:00
|
|
|
}
|
|
|
|
|
2023-08-13 17:45:33 +01:00
|
|
|
fmt.Print(b.String())
|
2023-08-11 18:33:26 +01:00
|
|
|
return nil
|
|
|
|
}
|