-
Notifications
You must be signed in to change notification settings - Fork 6
/
buildinfo.go
46 lines (39 loc) · 1 KB
/
buildinfo.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package buildinfo
import (
"runtime/debug"
"strings"
)
const (
goOS = "GOOS"
goArch = "GOARCH"
vcsRevision = "vcs.revision"
vcsTime = "vcs.time"
)
var version = "devel"
type Info struct {
*debug.BuildInfo
settingsMap map[string]string
Version string
}
func ReadVersionInfo() Info {
info := Info{
Version: version,
}
if buildInfo, ok := debug.ReadBuildInfo(); ok {
info.BuildInfo = buildInfo
info.settingsMap = make(map[string]string, len(buildInfo.Settings))
for _, kv := range buildInfo.Settings {
info.settingsMap[kv.Key] = kv.Value
}
}
return info
}
func (info Info) String() string {
var sb strings.Builder
sb.WriteString("Version: " + info.Version + "\n")
sb.WriteString("Go Version: " + info.GoVersion + "\n")
sb.WriteString("Git Commit: " + info.settingsMap[vcsRevision] + "\n")
sb.WriteString("Built: " + info.settingsMap[vcsTime] + "\n")
sb.WriteString("OS/Arch: " + info.settingsMap[goOS] + "/" + info.settingsMap[goArch])
return sb.String()
}