Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

version: use Go 1.18's git stamping as default implementation #4185

Merged
merged 1 commit into from
Mar 16, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion cmd/tailscale/depaware.txt
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ tailscale.com/cmd/tailscale dependencies: (generated by github.com/tailscale/dep
reflect from crypto/x509+
regexp from github.com/tailscale/goupnp/httpu+
regexp/syntax from regexp
runtime/debug from golang.org/x/sync/singleflight
runtime/debug from golang.org/x/sync/singleflight+
sort from compress/flate+
strconv from compress/flate+
strings from bufio+
Expand Down
6 changes: 5 additions & 1 deletion version/print.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,11 @@ func String() string {
ret.WriteString(Short)
ret.WriteByte('\n')
if GitCommit != "" {
fmt.Fprintf(&ret, " tailscale commit: %s\n", GitCommit)
var dirty string
if GitDirty {
dirty = "-dirty"
}
fmt.Fprintf(&ret, " tailscale commit: %s%s\n", GitCommit, dirty)
}
if ExtraGitCommit != "" {
fmt.Fprintf(&ret, " other commit: %s\n", ExtraGitCommit)
Expand Down
59 changes: 50 additions & 9 deletions version/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,28 +6,64 @@
package version

import (
"runtime/debug"
"strings"

tailscaleroot "tailscale.com"
)

// Long is a full version number for this build, of the form
// "x.y.z-commithash", or "date.yyyymmdd" if no actual version was
// provided.
var Long = "date.20220107"
// "x.y.z-commithash" for builds stamped in the usual way (see
// build_dist.sh in the root) or, for binaries built by hand with the
// go tool, it's of the form "1.23.0-dev20220316-t29837428937{,-dirty}"
// where "1.23.0" comes from ../VERSION.txt and the part after dev
// is YYYYMMDD of the commit time, and the part after -t is the commit
// hash. The dirty suffix is whether there are uncommitted changes.
var Long = ""

// Short is a short version number for this build, of the form
// "x.y.z", or "date.yyyymmdd" if no actual version was provided.
// "x.y.z" for builds stamped in the usual way (see
// build_dist.sh in the root) or, for binaries built by hand with the // go tool, it's like Long's dev form, but ending at the date part,
// of the form "1.23.0-dev20220316".
var Short = ""

func init() {
// If it hasn't been link-stamped with -X (via build_dist.sh or similar),
// then use the VERSION.txt file in the root and the date in the Long
// variable above which we occasionally bump by hand.
if Short == "" {
Long = strings.TrimSpace(tailscaleroot.Version) + "-" + Long
if Long != "" && Short != "" {
// Built in the recommended way, using build_dist.sh.
return
}

bi, ok := debug.ReadBuildInfo()
if !ok {
Long = strings.TrimSpace(tailscaleroot.Version) + "-ERR-BuildInfo"
Short = Long
return
}
var dirty string // "-dirty" suffix if dirty
var commitHashAbbrev, commitDate string
for _, s := range bi.Settings {
switch s.Key {
case "vcs.revision":
GitCommit = s.Value
if len(s.Value) >= 9 {
commitHashAbbrev = s.Value[:9]
}
case "vcs.time":
if len(s.Value) >= len("yyyy-mm-dd") {
commitDate = s.Value[:len("yyyy-mm-dd")]
commitDate = strings.ReplaceAll(commitDate, "-", "")
}
case "vcs.modified":
if s.Value == "true" {
dirty = "-dirty"
GitDirty = true
}
}
}

// Backup path, using Go 1.18's built-in git stamping.
Short = strings.TrimSpace(tailscaleroot.Version) + "-dev" + commitDate
Long = Short + "-t" + commitHashAbbrev + dirty
}

// GitCommit, if non-empty, is the git commit of the
Expand All @@ -36,6 +72,11 @@ func init() {
// --exclude "*" --dirty --abbrev=200`.
var GitCommit = ""

// GitDirty is whether Go stamped the binary has having dirty version
// control changes in the working directory (debug.ReadBuildInfo
// setting "vcs.modified" was true).
var GitDirty bool

// ExtraGitCommit, if non-empty, is the git commit of a "supplemental"
// repository at which Tailscale was built. Its format is the same as
// gitCommit.
Expand Down