From 07d888c2c60d727dab49aa8dbc905cb3ccedd7aa Mon Sep 17 00:00:00 2001 From: James Mills <1290234+prologic@users.noreply.github.com> Date: Sat, 21 Jan 2023 11:25:30 +1000 Subject: Fix build and versioning (borrowed from yarn) --- version.go | 46 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 7 deletions(-) (limited to 'version.go') diff --git a/version.go b/version.go index 86587e6..d4f60a9 100644 --- a/version.go +++ b/version.go @@ -1,18 +1,50 @@ -package main +package tube import ( "fmt" + runtime "runtime/debug" + "strings" +) + +const ( + defaultVersion = "0.0.0" + defaultCommit = "HEAD" + defaultBuild = "0000-01-01:00:00+00:00" ) var ( - // Version release version - Version = "0.0.1" + // Version is the tagged release version in the form .. + // following semantic versioning and is overwritten by the build system. + Version = defaultVersion - // Commit will be overwritten automatically by the build system - Commit = "HEAD" + // Commit is the commit sha of the build (normally from Git) and is overwritten + // by the build system. + Commit = defaultCommit + + // Build is the date and time of the build as an RFC3339 formatted string + // and is overwritten by the build system. + Build = defaultBuild ) -// FullVersion returns the full version and commit hash +// FullVersion display the full version and build func FullVersion() string { - return fmt.Sprintf("%s@%s", Version, Commit) + var sb strings.Builder + + isDefault := Version == defaultVersion && Commit == defaultCommit && Build == defaultBuild + + if !isDefault { + sb.WriteString(fmt.Sprintf("%s@%s %s", Version, Commit, Build)) + } + + if info, ok := runtime.ReadBuildInfo(); ok { + if isDefault { + sb.WriteString(fmt.Sprintf(" %s", info.Main.Version)) + } + sb.WriteString(fmt.Sprintf(" %s", info.GoVersion)) + if info.Main.Sum != "" { + sb.WriteString(fmt.Sprintf(" %s", info.Main.Sum)) + } + } + + return sb.String() } -- cgit v1.2.3