60 lines
1.3 KiB
Go
60 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
"runtime/debug"
|
|
"strings"
|
|
)
|
|
|
|
var (
|
|
version = "dev"
|
|
gitCommit = "unknown"
|
|
buildTime = "unknown"
|
|
)
|
|
|
|
type binaryBuildInfo struct {
|
|
Version string `json:"version"`
|
|
GitCommit string `json:"git_commit"`
|
|
BuildTime string `json:"build_time"`
|
|
}
|
|
|
|
func currentBuildInfo() binaryBuildInfo {
|
|
out := binaryBuildInfo{
|
|
Version: version,
|
|
GitCommit: gitCommit,
|
|
BuildTime: buildTime,
|
|
}
|
|
|
|
if bi, ok := debug.ReadBuildInfo(); ok {
|
|
if out.Version == "" || out.Version == "dev" {
|
|
if bi.Main.Version != "" && bi.Main.Version != "(devel)" {
|
|
out.Version = bi.Main.Version
|
|
}
|
|
}
|
|
for _, s := range bi.Settings {
|
|
if s.Key == "vcs.revision" && (out.GitCommit == "" || out.GitCommit == "unknown") {
|
|
if len(s.Value) > 12 {
|
|
out.GitCommit = s.Value[:12]
|
|
} else {
|
|
out.GitCommit = s.Value
|
|
}
|
|
}
|
|
if s.Key == "vcs.time" && (out.BuildTime == "" || out.BuildTime == "unknown") {
|
|
out.BuildTime = s.Value
|
|
}
|
|
}
|
|
}
|
|
|
|
out.Version = normalizeBuildField(out.Version, "dev")
|
|
out.GitCommit = normalizeBuildField(out.GitCommit, "unknown")
|
|
out.BuildTime = normalizeBuildField(out.BuildTime, "unknown")
|
|
return out
|
|
}
|
|
|
|
func normalizeBuildField(v string, fallback string) string {
|
|
v = strings.TrimSpace(v)
|
|
if v == "" {
|
|
return fallback
|
|
}
|
|
return v
|
|
}
|