Skip to content

Commit

Permalink
version: add Go build tags to output
Browse files Browse the repository at this point in the history
Build tags allow different implementations of code sections to be
included in the binary, so can be important to understand the exact
behaviour expected at runtime.

This change includes build tags at the end of the `BuildContext` string,
and as an extra label on the info metric.

Signed-off-by: Bryan Boreham <bjboreham@gmail.com>
  • Loading branch information
bboreham committed Feb 24, 2023
1 parent d9a31c0 commit 56d83af
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 6 deletions.
5 changes: 4 additions & 1 deletion version/info.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ func NewCollector(program string) prometheus.Collector {
"goversion": GoVersion,
"goos": GoOS,
"goarch": GoArch,
"tags": getTags(),
},
},
func() float64 { return 1 },
Expand All @@ -66,6 +67,7 @@ var versionInfoTmpl = `
build date: {{.buildDate}}
go version: {{.goVersion}}
platform: {{.platform}}
tags: {{.tags}}
`

// Print returns version information.
Expand All @@ -79,6 +81,7 @@ func Print(program string) string {
"buildDate": BuildDate,
"goVersion": GoVersion,
"platform": GoOS + "/" + GoArch,
"tags": getTags(),
}
t := template.Must(template.New("version").Parse(versionInfoTmpl))

Expand All @@ -96,5 +99,5 @@ func Info() string {

// BuildContext returns goVersion, platform, buildUser and buildDate information.
func BuildContext() string {
return fmt.Sprintf("(go=%s, platform=%s, user=%s, date=%s)", GoVersion, GoOS+"/"+GoArch, BuildUser, BuildDate)
return fmt.Sprintf("(go=%s, platform=%s, user=%s, date=%s, tags=%s)", GoVersion, GoOS+"/"+GoArch, BuildUser, BuildDate, getTags())
}
4 changes: 4 additions & 0 deletions version/info_default.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,7 @@ package version
func getRevision() string {
return Revision
}

func getTags() string {
return "unknown" // Not available prior to Go 1.18
}
19 changes: 14 additions & 5 deletions version/info_go118.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ package version
import "runtime/debug"

var computedRevision string
var computedTags string

func getRevision() string {
if Revision != "" {
Expand All @@ -27,19 +28,24 @@ func getRevision() string {
return computedRevision
}

func getTags() string {
return computedTags
}

func init() {
computedRevision = computeRevision()
computedRevision, computedTags = computeRevision()
}

func computeRevision() string {
func computeRevision() (string, string) {
var (
rev = "unknown"
tags = "unknown"
modified bool
)

buildInfo, ok := debug.ReadBuildInfo()
if !ok {
return rev
return rev, tags
}
for _, v := range buildInfo.Settings {
if v.Key == "vcs.revision" {
Expand All @@ -50,9 +56,12 @@ func computeRevision() string {
modified = true
}
}
if v.Key == "-tags" {
tags = v.Value
}
}
if modified {
return rev + "-modified"
return rev + "-modified", tags
}
return rev
return rev, tags
}

0 comments on commit 56d83af

Please sign in to comment.