version: unexport all vars, turn Short/Long into funcs

The other formerly exported values aren't used outside the package,
so just unexport them.

Signed-off-by: David Anderson <danderson@tailscale.com>
pull/7258/head
David Anderson 1 year ago committed by Dave Anderson
parent 9e6b4d7ad8
commit 8b2ae47c31

@ -62,9 +62,9 @@ ENV VERSION_GIT_HASH=$VERSION_GIT_HASH
ARG TARGETARCH
RUN GOARCH=$TARGETARCH go install -ldflags="\
-X tailscale.com/version.Long=$VERSION_LONG \
-X tailscale.com/version.Short=$VERSION_SHORT \
-X tailscale.com/version.GitCommit=$VERSION_GIT_HASH" \
-X tailscale.com/version.long=$VERSION_LONG \
-X tailscale.com/version.short=$VERSION_SHORT \
-X tailscale.com/version.gitCommit=$VERSION_GIT_HASH" \
-v ./cmd/tailscale ./cmd/tailscaled ./cmd/containerboot
FROM alpine:3.16

@ -46,7 +46,7 @@ EOF
fi
tags=""
ldflags="-X tailscale.com/version.Long=${LONG} -X tailscale.com/version.Short=${SHORT} -X tailscale.com/version.GitCommit=${GIT_HASH}"
ldflags="-X tailscale.com/version.long=${LONG} -X tailscale.com/version.short=${SHORT} -X tailscale.com/version.gitCommit=${GIT_HASH}"
# build_dist.sh arguments must precede go build arguments.
while [ "$#" -gt 1 ]; do

@ -43,9 +43,9 @@ case "$TARGET" in
tailscale.com/cmd/tailscaled:/usr/local/bin/tailscaled, \
tailscale.com/cmd/containerboot:/usr/local/bin/containerboot" \
--ldflags="\
-X tailscale.com/version.Long=${VERSION_LONG} \
-X tailscale.com/version.Short=${VERSION_SHORT} \
-X tailscale.com/version.GitCommit=${VERSION_GIT_HASH}" \
-X tailscale.com/version.long=${VERSION_LONG} \
-X tailscale.com/version.short=${VERSION_SHORT} \
-X tailscale.com/version.gitCommit=${VERSION_GIT_HASH}" \
--base="${BASE}" \
--tags="${TAGS}" \
--repos="${REPOS}" \
@ -58,9 +58,9 @@ case "$TARGET" in
go run github.com/tailscale/mkctr \
--gopaths="tailscale.com/cmd/k8s-operator:/usr/local/bin/operator" \
--ldflags="\
-X tailscale.com/version.Long=${VERSION_LONG} \
-X tailscale.com/version.Short=${VERSION_SHORT} \
-X tailscale.com/version.GitCommit=${VERSION_GIT_HASH}" \
-X tailscale.com/version.long=${VERSION_LONG} \
-X tailscale.com/version.short=${VERSION_SHORT} \
-X tailscale.com/version.gitCommit=${VERSION_GIT_HASH}" \
--base="${BASE}" \
--tags="${TAGS}" \
--repos="${REPOS}" \

@ -160,12 +160,12 @@ type updater struct {
}
func (up *updater) currentOrDryRun(ver string) bool {
if version.Short == ver {
if version.Short() == ver {
fmt.Printf("already running %v; no update needed\n", ver)
return true
}
if updateArgs.dryRun {
fmt.Printf("Current: %v, Latest: %v\n", version.Short, ver)
fmt.Printf("Current: %v, Latest: %v\n", version.Short(), ver)
return true
}
return false
@ -173,11 +173,11 @@ func (up *updater) currentOrDryRun(ver string) bool {
func (up *updater) confirm(ver string) error {
if updateArgs.yes {
log.Printf("Updating Tailscale from %v to %v; --yes given, continuing without prompts.\n", version.Short, ver)
log.Printf("Updating Tailscale from %v to %v; --yes given, continuing without prompts.\n", version.Short(), ver)
return nil
}
fmt.Printf("This will update Tailscale from %v to %v. Continue? [y/n] ", version.Short, ver)
fmt.Printf("This will update Tailscale from %v to %v. Continue? [y/n] ", version.Short(), ver)
var resp string
fmt.Scanln(&resp)
resp = strings.ToLower(resp)
@ -430,7 +430,7 @@ func installMSI(msi string) error {
if err == nil {
break
}
uninstallVersion := version.Short
uninstallVersion := version.Short()
if v := os.Getenv("TS_DEBUG_UNINSTALL_VERSION"); v != "" {
uninstallVersion = v
}

@ -267,7 +267,7 @@ func beWindowsSubprocess() bool {
// Remove the date/time prefix; the logtail + file loggers add it.
log.SetFlags(0)
log.Printf("Program starting: v%v: %#v", version.Long, os.Args)
log.Printf("Program starting: v%v: %#v", version.Long(), os.Args)
log.Printf("subproc mode: logid=%v", logid)
if err := envknob.ApplyDiskConfigError(); err != nil {
log.Printf("Error reading environment config: %v", err)

@ -54,7 +54,7 @@ func runBuildPkg() {
log.Fatalf("Cannot copy readme: %v", err)
}
log.Printf("Built package version %s", version.Long)
log.Printf("Built package version %s", version.Long())
}
func precompressWasm() error {
@ -78,7 +78,7 @@ func updateVersion() error {
if err := json.Unmarshal(packageJSONBytes, &packageJSON); err != nil {
return fmt.Errorf("Could not unmarshal package.json: %w", err)
}
packageJSON["version"] = version.Long
packageJSON["version"] = version.Long()
packageJSONBytes, err = json.MarshalIndent(packageJSON, "", " ")
if err != nil {

@ -1736,7 +1736,7 @@ func (s *Server) ExpVar() expvar.Var {
}))
m.Set("counter_tcp_rtt", &s.tcpRtt)
var expvarVersion expvar.String
expvarVersion.Set(version.Long)
expvarVersion.Set(version.Long())
m.Set("version", &expvarVersion)
return m
}

@ -485,5 +485,5 @@ func IPCVersion() string {
if v := String("TS_DEBUG_FAKE_IPC_VERSION"); v != "" {
return v
}
return version.Long
return version.Long()
}

@ -34,7 +34,7 @@ func New() *tailcfg.Hostinfo {
hostname, _ := os.Hostname()
hostname = dnsname.FirstLabel(hostname)
return &tailcfg.Hostinfo{
IPNVersion: version.Long,
IPNVersion: version.Long(),
Hostname: hostname,
OS: version.OS(),
OSVersion: GetOSVersion(),

@ -145,7 +145,7 @@ func (b *LocalBackend) handleC2NUpdate(w http.ResponseWriter, r *http.Request) {
res.Err = "invalid JSON from cmd/tailscale version --json"
return
}
if ver.Long != version.Long {
if ver.Long != version.Long() {
res.Err = "cmd/tailscale version mismatch"
return
}

@ -261,7 +261,7 @@ func (b *LocalBackend) getCertPEM(ctx context.Context, logf logger.Logf, traceAC
}
ac := &acme.Client{
Key: key,
UserAgent: "tailscaled/" + version.Long,
UserAgent: "tailscaled/" + version.Long(),
}
a, err := ac.GetReg(ctx, "" /* pre-RFC param */)

@ -592,7 +592,7 @@ func (b *LocalBackend) updateStatus(sb *ipnstate.StatusBuilder, extraLocked func
b.mu.Lock()
defer b.mu.Unlock()
sb.MutateStatus(func(s *ipnstate.Status) {
s.Version = version.Long
s.Version = version.Long()
s.TUN = !wgengine.IsNetstack(b.e)
s.BackendState = b.state.String()
s.AuthURL = b.authURLSticky
@ -1853,7 +1853,7 @@ func (b *LocalBackend) WatchNotifications(ctx context.Context, mask ipn.NotifyWa
b.mu.Lock()
const initialBits = ipn.NotifyInitialState | ipn.NotifyInitialPrefs | ipn.NotifyInitialNetMap
if mask&initialBits != 0 {
ini = &ipn.Notify{Version: version.Long}
ini = &ipn.Notify{Version: version.Long()}
if mask&ipn.NotifyInitialState != 0 {
ini.State = ptr.To(b.state)
if b.state == ipn.NeedsLogin {
@ -1952,7 +1952,7 @@ func (b *LocalBackend) send(n ipn.Notify) {
n.Prefs = ptr.To(stripKeysFromPrefs(*n.Prefs))
}
if n.Version == "" {
n.Version = version.Long
n.Version = version.Long()
}
b.mu.Lock()

@ -155,7 +155,7 @@ func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
http.Error(w, "invalid localapi request", http.StatusForbidden)
return
}
w.Header().Set("Tailscale-Version", version.Long)
w.Header().Set("Tailscale-Version", version.Long())
w.Header().Set("Tailscale-Cap", strconv.Itoa(int(tailcfg.CurrentCapabilityVersion)))
w.Header().Set("Content-Security-Policy", `default-src 'none'; frame-ancestors 'none'; script-src 'none'; script-src-elem 'none'; script-src-attr 'none'`)
w.Header().Set("X-Frame-Options", "DENY")
@ -731,7 +731,7 @@ func InUseOtherUserIPNStream(w http.ResponseWriter, r *http.Request, err error)
return false
}
js, err := json.Marshal(&ipn.Notify{
Version: version.Long,
Version: version.Long(),
State: ptr.To(ipn.InUseOtherUser),
ErrMessage: ptr.To(err.Error()),
})

@ -612,7 +612,7 @@ func NewWithConfigPath(collection, dir, cmdName string) *Policy {
log.SetOutput(logOutput)
log.Printf("Program starting: v%v, Go %v: %#v",
version.Long,
version.Long(),
goVersion(),
os.Args)
log.Printf("LogID: %v", newc.PublicID)

@ -413,7 +413,7 @@ func (f *forwarder) sendDoH(ctx context.Context, urlBase string, c *http.Client,
}
req.Header.Set("Content-Type", dohType)
req.Header.Set("Accept", dohType)
req.Header.Set("User-Agent", "tailscaled/"+version.Long)
req.Header.Set("User-Agent", "tailscaled/"+version.Long())
hres, err := c.Do(req)
if err != nil {

@ -52,7 +52,7 @@ func Debugger(mux *http.ServeMux) *DebugHandler {
mux.Handle("/debug/pprof/profile", http.HandlerFunc(pprof.Profile))
ret.KVFunc("Uptime", func() any { return Uptime() })
ret.KV("Version", version.Long)
ret.KV("Version", version.Long())
ret.Handle("vars", "Metrics (Go)", expvar.Handler())
ret.Handle("varz", "Metrics (Prometheus)", http.HandlerFunc(VarzHandler))
ret.Handle("pprof/", "pprof", http.HandlerFunc(pprof.Index))

@ -37,7 +37,7 @@ import (
func init() {
expvar.Publish("process_start_unix_time", expvar.Func(func() any { return timeStart.Unix() }))
expvar.Publish("version", expvar.Func(func() any { return version.Long }))
expvar.Publish("version", expvar.Func(func() any { return version.Long() }))
expvar.Publish("go_version", expvar.Func(func() any { return runtime.Version() }))
expvar.Publish("counter_uptime_sec", expvar.Func(func() any { return int64(Uptime().Seconds()) }))
expvar.Publish("gauge_goroutines", expvar.Func(func() any { return runtime.NumGoroutine() }))

@ -11,20 +11,20 @@ import (
func String() string {
var ret strings.Builder
ret.WriteString(Short)
ret.WriteString(short)
ret.WriteByte('\n')
if IsUnstableBuild() {
fmt.Fprintf(&ret, " track: unstable (dev); frequent updates and bugs are likely\n")
}
if GitCommit != "" {
if gitCommit != "" {
var dirty string
if GitDirty {
if gitDirty {
dirty = "-dirty"
}
fmt.Fprintf(&ret, " tailscale commit: %s%s\n", GitCommit, dirty)
fmt.Fprintf(&ret, " tailscale commit: %s%s\n", gitCommit, dirty)
}
if ExtraGitCommit != "" {
fmt.Fprintf(&ret, " other commit: %s\n", ExtraGitCommit)
if extraGitCommit != "" {
fmt.Fprintf(&ret, " other commit: %s\n", extraGitCommit)
}
fmt.Fprintf(&ret, " go version: %s\n", runtime.Version())
return strings.TrimSpace(ret.String())

@ -110,7 +110,7 @@ func IsUnstableBuild() bool {
}
func initUnstable() {
_, rest, ok := strings.Cut(Short, ".")
_, rest, ok := strings.Cut(short, ".")
if !ok {
return
}
@ -187,12 +187,12 @@ type Meta struct {
func GetMeta() Meta {
return Meta{
MajorMinorPatch: majorMinorPatch,
Short: Short,
Long: Long,
GitCommit: GitCommit,
GitDirty: GitDirty,
ExtraGitCommit: ExtraGitCommit,
IsDev: strings.Contains(Short, "-dev"), // TODO(bradfitz): could make a bool for this in init
Short: short,
Long: long,
GitCommit: gitCommit,
GitDirty: gitDirty,
ExtraGitCommit: extraGitCommit,
IsDev: strings.Contains(short, "-dev"), // TODO(bradfitz): could make a bool for this in init
UnstableBranch: IsUnstableBuild(),
Cap: int(tailcfg.CurrentCapabilityVersion),
}

@ -11,6 +11,10 @@ import (
tailscaleroot "tailscale.com"
)
var long = ""
var short = ""
// Long is a full version number for this build, of the form
// "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
@ -18,23 +22,27 @@ import (
// 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 = ""
func Long() string {
return long
}
// Short is a short version number for this build, of the form
// "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 Short() string {
return short
}
func init() {
defer func() {
// Must be run after Short has been initialized, easiest way to do that
// is a defer.
majorMinorPatch, _, _ = strings.Cut(Short, "-")
majorMinorPatch, _, _ = strings.Cut(short, "-")
}()
if Long != "" && Short != "" {
if long != "" && short != "" {
// Built in the recommended way, using build_dist.sh.
return
}
@ -43,8 +51,8 @@ func init() {
// stamping.
bi, ok := debug.ReadBuildInfo()
if !ok {
Long = strings.TrimSpace(tailscaleroot.VersionDotTxt) + "-ERR-BuildInfo"
Short = Long
long = strings.TrimSpace(tailscaleroot.VersionDotTxt) + "-ERR-BuildInfo"
short = long
return
}
var dirty string // "-dirty" suffix if dirty
@ -52,7 +60,7 @@ func init() {
for _, s := range bi.Settings {
switch s.Key {
case "vcs.revision":
GitCommit = s.Value
gitCommit = s.Value
case "vcs.time":
if len(s.Value) >= len("yyyy-mm-dd") {
commitDate = s.Value[:len("yyyy-mm-dd")]
@ -61,30 +69,30 @@ func init() {
case "vcs.modified":
if s.Value == "true" {
dirty = "-dirty"
GitDirty = true
gitDirty = true
}
}
}
commitHashAbbrev := GitCommit
commitHashAbbrev := gitCommit
if len(commitHashAbbrev) >= 9 {
commitHashAbbrev = commitHashAbbrev[:9]
}
// Backup path, using Go 1.18's built-in git stamping.
Short = strings.TrimSpace(tailscaleroot.VersionDotTxt) + "-dev" + commitDate
Long = Short + "-t" + commitHashAbbrev + dirty
short = strings.TrimSpace(tailscaleroot.VersionDotTxt) + "-dev" + commitDate
long = short + "-t" + commitHashAbbrev + dirty
}
// GitCommit, if non-empty, is the git commit of the
// github.com/tailscale/tailscale repository at which Tailscale was
// built. Its format is the one returned by `git describe --always
// --exclude "*" --dirty --abbrev=200`.
var GitCommit = ""
var gitCommit = ""
// GitDirty is whether Go stamped the binary as having dirty version
// control changes in the working directory (debug.ReadBuildInfo
// setting "vcs.modified" was true).
var GitDirty bool
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
@ -96,7 +104,7 @@ var GitDirty bool
// Android OSS repository). Together, GitCommit and ExtraGitCommit
// exactly describe what repositories and commits were used in a
// build.
var ExtraGitCommit = ""
var extraGitCommit = ""
// majorMinorPatch is the major.minor.patch portion of Short.
var majorMinorPatch string

Loading…
Cancel
Save