github.com/telepresenceio/telepresence/v2@v2.20.0-pro.6.0.20240517030216-236ea954e789/pkg/version/version.go (about) 1 package version 2 3 import ( 4 "os" 5 "runtime/debug" 6 "strings" 7 8 "github.com/blang/semver/v4" 9 ) 10 11 // Version is a "vSEMVER" string, and is either populated at build-time using `--ldflags -X`, or at 12 // init()-time by inspecting the binary's own debug info. 13 var ( 14 Version string //nolint:gochecknoglobals // constant 15 Structured semver.Version //nolint:gochecknoglobals // constant 16 ) 17 18 func init() { 19 // Prefer version number inserted at build using --ldflags, but if it's not set... 20 Version, Structured = Init(Version, "TELEPRESENCE_VERSION") 21 } 22 23 func Init(s, envKey string) (string, semver.Version) { 24 if s == "" { 25 if info, ok := debug.ReadBuildInfo(); ok { 26 // Fall back to version info from "go get" 27 s = info.Main.Version 28 } 29 if s == "" { 30 if s = os.Getenv(envKey); s == "" { 31 s = "0.0.0-unknown" 32 } 33 } 34 } 35 if s == "(devel)" { 36 s = "0.0.0-devel" 37 } 38 s = strings.TrimPrefix(s, "v") 39 sv, err := semver.Parse(s) 40 if err != nil { 41 panic(err) 42 } 43 return "v" + s, sv 44 } 45 46 func GetExecutable() (string, error) { 47 executable, err := os.Executable() 48 if err != nil { 49 return "", err 50 } 51 return executable, nil 52 }