54 lines
1.1 KiB
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
|
|
}
|