package cmd import ( "flag" "fmt" "os" "strings" ) type VersionCommand struct { *flag.FlagSet summary string fullVersion bool binaryVersion string buildTime string goVersion string gitCommit string } func NewVersionCommand(binaryVersion, buildTime, goVersion, gitCommit, name, summary string) *VersionCommand { command := VersionCommand{ FlagSet: flag.NewFlagSet(name, flag.ExitOnError), binaryVersion: binaryVersion, buildTime: buildTime, goVersion: goVersion, gitCommit: gitCommit, summary: summary, } command.BoolVar(&command.fullVersion, "full", false, "prints the full build information") command.Usage = usageFunc(command.Name(), command.summary, command.FlagSet) return &command } func (c *VersionCommand) Run() error { var builder strings.Builder if c.fullVersion { fmt.Fprintf( &builder, "Spruce\n Version: %s\n Git commit: %s\n Go version: %s\n Build date: %s\n", c.binaryVersion, c.gitCommit, c.goVersion, c.buildTime, ) } else { fmt.Fprintln(&builder, c.binaryVersion) } fmt.Fprint(os.Stdout, builder.String()) return nil }