tool/gocross: make gocross opt-in instead of opt-out

gocross is not needed like it used to be, now that Go does
version stamping itself.

We keep it for the xcode and Windows builds for now.

This simplifies things in the build, especially with upcoming build
system updates.

Updates tailscale/corp#28679
Updates tailscale/corp#26717

Change-Id: Ib4bebe6f50f3b9c3d6cd27323fca603e3dfb43cc
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
Brad Fitzpatrick 2025-06-15 08:25:36 -07:00 committed by Brad Fitzpatrick
parent 259bab9bff
commit 5b086cd2ad
4 changed files with 35 additions and 5 deletions

View File

@ -161,7 +161,6 @@ jobs:
if: matrix.buildflags == '' # skip on race builder if: matrix.buildflags == '' # skip on race builder
working-directory: src working-directory: src
run: | run: |
export TS_USE_TOOLCHAIN=1
./build_dist.sh --extra-small ./cmd/tailscaled ./build_dist.sh --extra-small ./cmd/tailscaled
./build_dist.sh --box ./cmd/tailscaled ./build_dist.sh --box ./cmd/tailscaled
./build_dist.sh --extra-small --box ./cmd/tailscaled ./build_dist.sh --extra-small --box ./cmd/tailscaled

View File

@ -3,8 +3,11 @@
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
# gocross-wrapper.sh is a wrapper that can be aliased to 'go', which # gocross-wrapper.sh is a wrapper that can be aliased to 'go', which
# transparently builds gocross using a "bootstrap" Go toolchain, and # transparently runs the version of github.com/tailscale/go as specified repo's
# then invokes gocross. # go.toolchain.rev file.
#
# It also conditionally (if TS_USE_GOCROSS=1) builds gocross and uses it as a go
# wrapper to inject certain go flags.
set -euo pipefail set -euo pipefail
@ -76,6 +79,14 @@ case "$REV" in
;; ;;
esac esac
# gocross is opt-in as of 2025-06-16. See tailscale/corp#26717.
# It's primarily used for xcode builds, and a bit still for Windows.
# In the past we needed it for git version stamping on Linux etc, but
# Go does that itself nowadays.
if [ "${TS_USE_GOCROSS:-}" != "1" ]; then
exit 0 # out of subshell
fi
if [[ -d "$toolchain" ]]; then if [[ -d "$toolchain" ]]; then
# A toolchain exists, but is it recent enough to compile gocross? If not, # A toolchain exists, but is it recent enough to compile gocross? If not,
# wipe it out so that the next if block fetches a usable one. # wipe it out so that the next if block fetches a usable one.
@ -119,4 +130,23 @@ if [[ "$gocross_ok" == "0" ]]; then
fi fi
) # End of the subshell execution. ) # End of the subshell execution.
exec "${BASH_SOURCE%/*}/../../gocross" "$@" repo_root="${BASH_SOURCE%/*}/../.."
# gocross is opt-in as of 2025-06-16. See tailscale/corp#26717
# and comment above in this file.
if [ "${TS_USE_GOCROSS:-}" != "1" ]; then
read -r REV <"${repo_root}/go.toolchain.rev"
case "$REV" in
/*)
toolchain="$REV"
;;
*)
# If the prior subshell completed successfully, this toolchain location
# should be valid at this point.
toolchain="$HOME/.cache/tsgo/$REV"
;;
esac
exec "$toolchain/bin/go" "$@"
fi
exec "${repo_root}/gocross" "$@"

View File

@ -15,7 +15,7 @@ import (
func TestGocrossWrapper(t *testing.T) { func TestGocrossWrapper(t *testing.T) {
for i := range 2 { // once to build gocross; second to test it's cached for i := range 2 { // once to build gocross; second to test it's cached
cmd := exec.Command("./gocross-wrapper.sh", "version") cmd := exec.Command("./gocross-wrapper.sh", "version")
cmd.Env = append(os.Environ(), "CI=true", "NOBASHDEBUG=false") // for "set -x" verbosity cmd.Env = append(os.Environ(), "CI=true", "NOBASHDEBUG=false", "TS_USE_GOCROSS=1") // for "set -x" verbosity
out, err := cmd.CombinedOutput() out, err := cmd.CombinedOutput()
if err != nil { if err != nil {
t.Fatalf("gocross-wrapper.sh failed: %v\n%s", err, out) t.Fatalf("gocross-wrapper.sh failed: %v\n%s", err, out)

View File

@ -20,6 +20,7 @@ var stringLazy = sync.OnceValue(func() string {
if gitCommit() != "" { if gitCommit() != "" {
fmt.Fprintf(&ret, " tailscale commit: %s%s\n", gitCommit(), dirtyString()) fmt.Fprintf(&ret, " tailscale commit: %s%s\n", gitCommit(), dirtyString())
} }
fmt.Fprintf(&ret, " long version: %s\n", Long())
if extraGitCommitStamp != "" { if extraGitCommitStamp != "" {
fmt.Fprintf(&ret, " other commit: %s\n", extraGitCommitStamp) fmt.Fprintf(&ret, " other commit: %s\n", extraGitCommitStamp)
} }