2026-10-05 16:49:54 +00:00
|
|
|
// Package runtimeinfo implements the private runtime version state used by the
|
|
|
|
|
// public buildinfo facade.
|
|
|
|
|
package runtimeinfo
|
|
|
|
|
|
2026-10-09 01:46:07 +00:00
|
|
|
import (
|
|
|
|
|
"runtime/debug"
|
|
|
|
|
"sync"
|
|
|
|
|
)
|
2026-10-05 16:49:54 +00:00
|
|
|
|
|
|
|
|
var injectedVersion string
|
|
|
|
|
|
|
|
|
|
// Version returns the injected version or the running executable's main module
|
|
|
|
|
// version, falling back to "dev" when neither provides a release identifier.
|
|
|
|
|
func Version() string {
|
2026-10-09 01:46:07 +00:00
|
|
|
if injectedVersion != "" {
|
|
|
|
|
return injectedVersion
|
|
|
|
|
}
|
|
|
|
|
return fallbackVersion()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var fallbackVersion = newFallbackVersion(debug.ReadBuildInfo)
|
|
|
|
|
|
|
|
|
|
func newFallbackVersion(readBuildInfo func() (*debug.BuildInfo, bool)) func() string {
|
|
|
|
|
return sync.OnceValue(func() string { return version("", readBuildInfo) })
|
2026-10-05 16:49:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func version(injected string, readBuildInfo func() (*debug.BuildInfo, bool)) string {
|
|
|
|
|
if injected != "" {
|
|
|
|
|
return injected
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
info, ok := readBuildInfo()
|
|
|
|
|
if ok && info != nil && info.Main.Version != "" && info.Main.Version != "(devel)" {
|
|
|
|
|
return info.Main.Version
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return "dev"
|
|
|
|
|
}
|