From 8b2ae47c31c9574dc1a4b9c714724b78a09ada15 Mon Sep 17 00:00:00 2001 From: David Anderson Date: Fri, 10 Feb 2023 22:20:36 -0800 Subject: [PATCH] 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 --- Dockerfile | 6 ++--- build_dist.sh | 2 +- build_docker.sh | 12 +++++----- cmd/tailscale/cli/update.go | 10 ++++---- cmd/tailscaled/tailscaled_windows.go | 2 +- cmd/tsconnect/build-pkg.go | 4 ++-- derp/derp_server.go | 2 +- envknob/envknob.go | 2 +- hostinfo/hostinfo.go | 2 +- ipn/ipnlocal/c2n.go | 2 +- ipn/ipnlocal/cert.go | 2 +- ipn/ipnlocal/local.go | 6 ++--- ipn/localapi/localapi.go | 4 ++-- logpolicy/logpolicy.go | 2 +- net/dns/resolver/forwarder.go | 2 +- tsweb/debug.go | 2 +- tsweb/tsweb.go | 2 +- version/print.go | 12 +++++----- version/prop.go | 14 +++++------ version/version.go | 36 +++++++++++++++++----------- 20 files changed, 67 insertions(+), 59 deletions(-) diff --git a/Dockerfile b/Dockerfile index 9c6b2bd6d..e2263f8dc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -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 diff --git a/build_dist.sh b/build_dist.sh index 5b7370bda..32df3efee 100755 --- a/build_dist.sh +++ b/build_dist.sh @@ -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 diff --git a/build_docker.sh b/build_docker.sh index 4099ce07e..ccae6c530 100755 --- a/build_docker.sh +++ b/build_docker.sh @@ -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}" \ diff --git a/cmd/tailscale/cli/update.go b/cmd/tailscale/cli/update.go index 8f332b922..0ebd33ae5 100644 --- a/cmd/tailscale/cli/update.go +++ b/cmd/tailscale/cli/update.go @@ -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 } diff --git a/cmd/tailscaled/tailscaled_windows.go b/cmd/tailscaled/tailscaled_windows.go index 8bea3eb39..46ca2b2f5 100644 --- a/cmd/tailscaled/tailscaled_windows.go +++ b/cmd/tailscaled/tailscaled_windows.go @@ -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) diff --git a/cmd/tsconnect/build-pkg.go b/cmd/tsconnect/build-pkg.go index 5c97258e0..1b93e5ba0 100644 --- a/cmd/tsconnect/build-pkg.go +++ b/cmd/tsconnect/build-pkg.go @@ -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 { diff --git a/derp/derp_server.go b/derp/derp_server.go index 7714943cb..327f104a1 100644 --- a/derp/derp_server.go +++ b/derp/derp_server.go @@ -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 } diff --git a/envknob/envknob.go b/envknob/envknob.go index 6d24f392e..931a215a7 100644 --- a/envknob/envknob.go +++ b/envknob/envknob.go @@ -485,5 +485,5 @@ func IPCVersion() string { if v := String("TS_DEBUG_FAKE_IPC_VERSION"); v != "" { return v } - return version.Long + return version.Long() } diff --git a/hostinfo/hostinfo.go b/hostinfo/hostinfo.go index 1920e2de8..e258ad2bf 100644 --- a/hostinfo/hostinfo.go +++ b/hostinfo/hostinfo.go @@ -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(), diff --git a/ipn/ipnlocal/c2n.go b/ipn/ipnlocal/c2n.go index 86c5542a6..4b2b94819 100644 --- a/ipn/ipnlocal/c2n.go +++ b/ipn/ipnlocal/c2n.go @@ -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 } diff --git a/ipn/ipnlocal/cert.go b/ipn/ipnlocal/cert.go index 844b01037..1b3264253 100644 --- a/ipn/ipnlocal/cert.go +++ b/ipn/ipnlocal/cert.go @@ -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 */) diff --git a/ipn/ipnlocal/local.go b/ipn/ipnlocal/local.go index 64b9999cb..96b84d89f 100644 --- a/ipn/ipnlocal/local.go +++ b/ipn/ipnlocal/local.go @@ -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() diff --git a/ipn/localapi/localapi.go b/ipn/localapi/localapi.go index d4e48a97f..047fefb2b 100644 --- a/ipn/localapi/localapi.go +++ b/ipn/localapi/localapi.go @@ -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()), }) diff --git a/logpolicy/logpolicy.go b/logpolicy/logpolicy.go index 011d578e5..7d349c669 100644 --- a/logpolicy/logpolicy.go +++ b/logpolicy/logpolicy.go @@ -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) diff --git a/net/dns/resolver/forwarder.go b/net/dns/resolver/forwarder.go index 8bd9b719d..47be991c8 100644 --- a/net/dns/resolver/forwarder.go +++ b/net/dns/resolver/forwarder.go @@ -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 { diff --git a/tsweb/debug.go b/tsweb/debug.go index cd9a63f2f..358cfe9aa 100644 --- a/tsweb/debug.go +++ b/tsweb/debug.go @@ -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)) diff --git a/tsweb/tsweb.go b/tsweb/tsweb.go index a5fbb99e2..58150b045 100644 --- a/tsweb/tsweb.go +++ b/tsweb/tsweb.go @@ -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() })) diff --git a/version/print.go b/version/print.go index f17fe4927..ef5aad31b 100644 --- a/version/print.go +++ b/version/print.go @@ -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()) diff --git a/version/prop.go b/version/prop.go index 95f3e774d..e4e0589b1 100644 --- a/version/prop.go +++ b/version/prop.go @@ -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), } diff --git a/version/version.go b/version/version.go index 04e3d79c4..84a4f757f 100644 --- a/version/version.go +++ b/version/version.go @@ -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