owpengram-server/cmd/telesrv/buildinfo.go

54 lines
1.1 KiB
Go

package main
import "runtime/debug"
var (
gitCommit = ""
gitBranch = ""
gitTreeState = ""
buildTime = ""
)
type buildMetadata struct {
Commit string
Branch string
TreeState string
BuildTime string
GoVersion string
}
func currentBuildMetadata() buildMetadata {
meta := buildMetadata{
Commit: valueOrUnknown(gitCommit),
Branch: valueOrUnknown(gitBranch),
TreeState: valueOrUnknown(gitTreeState),
BuildTime: valueOrUnknown(buildTime),
}
if info, ok := debug.ReadBuildInfo(); ok {
meta.GoVersion = info.GoVersion
settings := map[string]string{}
for _, setting := range info.Settings {
settings[setting.Key] = setting.Value
}
if meta.Commit == "unknown" {
meta.Commit = valueOrUnknown(settings["vcs.revision"])
}
if meta.TreeState == "unknown" {
switch settings["vcs.modified"] {
case "true":
meta.TreeState = "dirty"
case "false":
meta.TreeState = "clean"
}
}
}
meta.GoVersion = valueOrUnknown(meta.GoVersion)
return meta
}
func valueOrUnknown(v string) string {
if v == "" {
return "unknown"
}
return v
}