diff options
Diffstat (limited to 'vendor/codeberg.org/gruf/go-debug/debug.go')
-rw-r--r-- | vendor/codeberg.org/gruf/go-debug/debug.go | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/vendor/codeberg.org/gruf/go-debug/debug.go b/vendor/codeberg.org/gruf/go-debug/debug.go index 61e4eda41..6b5e56548 100644 --- a/vendor/codeberg.org/gruf/go-debug/debug.go +++ b/vendor/codeberg.org/gruf/go-debug/debug.go @@ -1,5 +1,9 @@ package debug +import ( + _debug "runtime/debug" +) + // DEBUG returns whether debugging is enabled. func DEBUG() bool { return debug @@ -11,3 +15,44 @@ func Run(fn func()) { fn() } } + +// BuildInfo will return a useful new-line separated build info string for current binary, setting name as given value. +func BuildInfo(name string) string { + // Read build info from current binary + build, ok := _debug.ReadBuildInfo() + if !ok { + return "name=" + name + "\n" + } + + var flags, vcs, commit, time string + + // Parse build information from BuildInfo.Settings + for i := 0; i < len(build.Settings); i++ { + switch build.Settings[i].Key { + case "-gcflags": + flags += ` -gcflags="` + build.Settings[i].Value + `"` + case "-ldflags": + flags += ` -ldflags="` + build.Settings[i].Value + `"` + case "-tags": + flags += ` -tags="` + build.Settings[i].Value + `"` + case "vcs": + vcs = build.Settings[i].Value + case "vcs.revision": + commit = build.Settings[i].Value + if len(commit) > 8 { + commit = commit[:8] + } + case "vcs.time": + time = build.Settings[i].Value + } + } + + return "" + + "name=" + name + "\n" + + "vcs=" + vcs + "\n" + + "commit=" + commit + "\n" + + "version=" + build.Main.Version + "\n" + + "path=" + build.Path + "\n" + + "build=" + build.GoVersion + flags + "\n" + + "time=" + time + "\n" +} |