1
0
Fork 0
mirror of https://github.com/imjasonh/version synced 2026-07-06 22:12:27 +00:00
version/version.go
Jason Hall 993c9c191e
embed main version too
Signed-off-by: Jason Hall <jason@chainguard.dev>
2025-04-08 13:23:42 -04:00

51 lines
929 B
Go

package version
import (
"fmt"
"log/slog"
"runtime/debug"
"sync"
)
type Version struct {
Revision, Version, Time string
Dirty bool
}
var ver = Version{
Revision: "unknown",
Version: "unknown",
Time: "unknown",
Dirty: false,
}
func (v Version) String() string {
return fmt.Sprintf(`Revision: %s
Version: %s
BuildTime: %s
Dirty: %t`, v.Revision, v.Version, v.Time, v.Dirty)
}
func Get() Version {
sync.OnceFunc(func() {
bi, ok := debug.ReadBuildInfo()
if !ok {
slog.Warn("version: no build info detected")
return
}
if bi.Main.Version != "" && bi.Main.Version != "(devel)" {
ver.Version = bi.Main.Version
}
for _, setting := range bi.Settings {
switch setting.Key {
case "vcs.revision":
ver.Revision = setting.Value
case "vcs.time":
ver.Time = setting.Value
case "vcs.modified":
ver.Dirty = setting.Value == "true"
}
}
})()
return ver
}