// MIT License // // Copyright (c) 2024 vinchent // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all // copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. package version import ( "encoding/json" "fmt" "runtime" "github.com/gosuri/uitable" ) // Version info format var ( GitVersion = "v0.0.0-master+$Format:%h$" // BuildDate is the output of $(date -u + '%Y-%m-%dT%H:%M:%SZ') BuildDate = "1970-01-01T00:00:00Z" // GitCommit is the SHA1 GitCommit = "$Format:%H$" // GitTreeState clean or dirty GitTreeState = "" ) type Info struct { GitVersion string `json:"git_version"` GitCommit string `json:"git_commit"` GitTreeState string `json:"git_tree_state"` BuildDate string `json:"build_date"` GoVersion string `json:"go_version"` Compiler string `json:"compiler"` Platform string `json:"platform"` } func (info Info) String() string { table := uitable.New() table.RightAlign(0) table.MaxColWidth = 80 table.Separator = " " table.AddRow("git version:", info.GitVersion) table.AddRow("git commit:", info.GitCommit) table.AddRow("git tree state:", info.GitTreeState) table.AddRow("build date:", info.BuildDate) table.AddRow("go version:", info.GoVersion) table.AddRow("compiler:", info.Compiler) table.AddRow("platform:", info.Platform) return table.String() } func (info Info) JSON() string { s, _ := json.Marshal(info) return string(s) } func Get() Info { return Info{ GitVersion: GitVersion, GitCommit: GitCommit, GitTreeState: GitTreeState, BuildDate: BuildDate, GoVersion: runtime.Version(), Compiler: runtime.Compiler, Platform: fmt.Sprintf("%s/%s", runtime.GOOS, runtime.GOARCH), } }