Improve version info, add build time

This commit is contained in:
Daniel 2024-04-10 13:47:49 +02:00
parent a90357bbc2
commit 3248926cfb
2 changed files with 42 additions and 24 deletions

View file

@ -14,6 +14,7 @@ var (
name string name string
version = "dev build" version = "dev build"
buildSource = "[source unknown]" buildSource = "[source unknown]"
buildTime = "[build time unknown]"
license = "[license unknown]" license = "[license unknown]"
info *Info info *Info
@ -25,19 +26,25 @@ type Info struct {
Name string Name string
Version string Version string
License string License string
Commit string
Time string Source string
Source string BuildTime string
Dirty bool
Commit string
CommitTime string
Dirty bool
debug.BuildInfo debug.BuildInfo
} }
// Set sets meta information via the main routine. This should be the first thing your program calls. // Set sets meta information via the main routine. This should be the first thing your program calls.
func Set(setName string, setVersion string, setLicenseName string, compareVersionToTag bool) { func Set(setName string, setVersion string, setLicenseName string) {
name = setName name = setName
version = setVersion
license = setLicenseName license = setLicenseName
if setVersion != "" {
version = setVersion
}
} }
// GetInfo returns all the meta information about the program. // GetInfo returns all the meta information about the program.
@ -50,14 +57,22 @@ func GetInfo() *Info {
} }
info = &Info{ info = &Info{
Name: name, Name: name,
Version: version, Version: version,
License: license, License: license,
BuildInfo: *buildInfo, Source: buildSource,
Source: buildSource, BuildTime: buildTime,
Commit: buildSettings["vcs.revision"], Commit: buildSettings["vcs.revision"],
Time: buildSettings["vcs.time"], CommitTime: buildSettings["vcs.time"],
Dirty: buildSettings["vcs.modified"] == "true", Dirty: buildSettings["vcs.modified"] == "true",
BuildInfo: *buildInfo,
}
if info.Commit == "" {
info.Commit = "[commit unknown]"
}
if info.CommitTime == "" {
info.CommitTime = "[commit time unknown]"
} }
}) })
@ -78,14 +93,21 @@ func Version() string {
// FullVersion returns the full and detailed version string. // FullVersion returns the full and detailed version string.
func FullVersion() string { func FullVersion() string {
info := GetInfo() info := GetInfo()
builder := new(strings.Builder) builder := new(strings.Builder)
builder.WriteString(fmt.Sprintf("%s\nversion %s\n", info.Name, Version())) // Name and version.
builder.WriteString(fmt.Sprintf("%s %s\n", info.Name, Version()))
// Build info.
builder.WriteString(fmt.Sprintf("\nbuilt with %s (%s) %s/%s\n", runtime.Version(), runtime.Compiler, runtime.GOOS, runtime.GOARCH))
builder.WriteString(fmt.Sprintf(" at %s\n", info.BuildTime))
// Commit info.
builder.WriteString(fmt.Sprintf("\ncommit %s\n", info.Commit)) builder.WriteString(fmt.Sprintf("\ncommit %s\n", info.Commit))
builder.WriteString(fmt.Sprintf("built with %s (%s) %s/%s\n", runtime.Version(), runtime.Compiler, runtime.GOOS, runtime.GOARCH)) builder.WriteString(fmt.Sprintf(" at %s\n", info.CommitTime))
builder.WriteString(fmt.Sprintf(" on %s\n", info.Time)) builder.WriteString(fmt.Sprintf(" from %s\n", info.Source))
builder.WriteString(fmt.Sprintf("\nLicensed under the %s license.\nThe source code is available here: %s", license, info.Source))
builder.WriteString(fmt.Sprintf("\nLicensed under the %s license.", license))
return builder.String() return builder.String()
} }
@ -102,10 +124,6 @@ func CheckVersion() error {
if name == "[NAME]" || license == "[license unknown]" { if name == "[NAME]" || license == "[license unknown]" {
return errors.New("must call SetInfo() before calling CheckVersion()") return errors.New("must call SetInfo() before calling CheckVersion()")
} }
if version == "[version unknown]" {
return errors.New("please build using the supplied build script.\n$ ./build {main.go|...}")
}
} }
return nil return nil

View file

@ -17,7 +17,7 @@ func registerInfoMetric() error {
map[string]string{ map[string]string{
"version": checkUnknown(meta.Version), "version": checkUnknown(meta.Version),
"commit": checkUnknown(meta.Commit), "commit": checkUnknown(meta.Commit),
"build_date": checkUnknown(meta.Time), "build_date": checkUnknown(meta.BuildTime),
"build_source": checkUnknown(meta.Source), "build_source": checkUnknown(meta.Source),
"go_os": runtime.GOOS, "go_os": runtime.GOOS,
"go_arch": runtime.GOARCH, "go_arch": runtime.GOARCH,