Files
ReleaseKit/internal/runtimeinfo/version.go

39 lines
980 B
Go

// Package runtimeinfo implements the private runtime version state used by the
// public buildinfo facade.
package runtimeinfo
import (
"runtime/debug"
"sync"
)
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 {
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) })
}
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"
}