package cmd import ( "flag" "fmt" ) type VersionCommand struct { *flag.FlagSet fullVersion bool binaryVersion string buildTime string goVersion string gitCommit string } func NewVersionCommand(binaryVersion, buildTime, goVersion, gitCommit string) *VersionCommand { vc := VersionCommand{ FlagSet: flag.NewFlagSet("version", flag.ExitOnError), binaryVersion: binaryVersion, buildTime: buildTime, goVersion: goVersion, gitCommit: gitCommit, } vc.BoolVar(&vc.fullVersion, "full", false, "prints the full version") return &vc } func (v *VersionCommand) Run() error { var version string if v.fullVersion { fullVersionFmt := `Spruce Version: %s Git commit: %s Go version: %s Build date: %s ` version = fmt.Sprintf(fullVersionFmt, v.binaryVersion, v.gitCommit, v.goVersion, v.buildTime) } else { version = v.binaryVersion + "\n" } fmt.Print(version) return nil }