package version import ( "bytes" "encoding/json" "flag" "fmt" "gopkg.in/yaml.v2" "os" "runtime" "github.com/beego/bee/v2/cmd/commands" "github.com/beego/bee/v2/config" beeLogger "github.com/beego/bee/v2/logger" "github.com/beego/bee/v2/logger/colors" ) const verboseVersionBanner string = `%s%s______ | ___ \ | |_/ / ___ ___ | ___ \ / _ \ / _ \ | |_/ /| __/| __/ \____/ \___| \___| v{{ .BeeVersion }}%s %s%s ├── GoVersion : {{ .GoVersion }} ├── GOOS : {{ .GOOS }} ├── GOARCH : {{ .GOARCH }} ├── NumCPU : {{ .NumCPU }} ├── GOPATH : {{ .GOPATH }} ├── GOROOT : {{ .GOROOT }} ├── Compiler : {{ .Compiler }} └── Date : {{ Now "Monday, 2 Jan 2006" }}%s ` const shortVersionBanner = `______ | ___ \ | |_/ / ___ ___ | ___ \ / _ \ / _ \ | |_/ /| __/| __/ \____/ \___| \___| v{{ .BeeVersion }} ` var CmdVersion = &commands.Command{ UsageLine: "version", Short: "Prints the current Bee version", Long: ` Prints the current Bee, Beego and Go version alongside the platform information. `, Run: versionCmd, } var outputFormat string const version = config.Version func init() { fs := flag.NewFlagSet("version", flag.ContinueOnError) fs.StringVar(&outputFormat, "o", "", "Set the output format. Either json or yaml.") CmdVersion.Flag = *fs commands.AvailableCommands = append(commands.AvailableCommands, CmdVersion) } func versionCmd(cmd *commands.Command, args []string) int { cmd.Flag.Parse(args) stdout := cmd.Out() if outputFormat != "" { runtimeInfo := RuntimeInfo{ GoVersion: runtime.Version(), GOOS: runtime.GOOS, GOARCH: runtime.GOARCH, NumCPU: runtime.NumCPU(), GOPATH: os.Getenv("GOPATH"), GOROOT: runtime.GOROOT(), Compiler: runtime.Compiler, BeeVersion: version, } switch outputFormat { case "json": { b, err := json.MarshalIndent(runtimeInfo, "", " ") if err != nil { beeLogger.Log.Error(err.Error()) } fmt.Println(string(b)) return 0 } case "yaml": { b, err := yaml.Marshal(&runtimeInfo) if err != nil { beeLogger.Log.Error(err.Error()) } fmt.Println(string(b)) return 0 } } } coloredBanner := fmt.Sprintf(verboseVersionBanner, "\x1b[35m", "\x1b[1m", "\x1b[0m", "\x1b[32m", "\x1b[1m", "\x1b[0m") InitBanner(stdout, bytes.NewBufferString(coloredBanner)) return 0 } // ShowShortVersionBanner prints the short version banner. func ShowShortVersionBanner() { output := colors.NewColorWriter(os.Stdout) InitBanner(output, bytes.NewBufferString(colors.MagentaBold(shortVersionBanner))) }