Files
tailscale/assert_ts_toolchain_match.go
Brad Fitzpatrick a58a8fc1e8 .: permit running binary built with TS_GO_NEXT=1
The old check was too aggressive and required TS_GO_NEXT=1 at runtime
as well, which is too strict and onerous.

This is a sanity check only (and an outdated one, at that); it's okay for
it to be slightly loose and permit two possible values. If either is working,
we're already way past the old bug that this was introduced to catch.

Updates tailscale/corp#36382

Change-Id: Ib9a62e10382cd889ba590c3539e6b8535c6b19fe
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2026-02-23 09:37:04 -08:00

31 lines
1.1 KiB
Go

// Copyright (c) Tailscale Inc & contributors
// SPDX-License-Identifier: BSD-3-Clause
//go:build tailscale_go
package tailscaleroot
import (
"fmt"
"os"
"strings"
)
func init() {
tsRev, ok := tailscaleToolchainRev()
if !ok {
panic("binary built with tailscale_go build tag but failed to read build info or find tailscale.toolchain.rev in build info")
}
want := strings.TrimSpace(GoToolchainRev)
// Also permit the "next" toolchain rev, which is used in the main branch and will eventually become the new "current" rev.
// This allows building with TS_GO_NEXT=1 and then running the resulting binary without TS_GO_NEXT=1.
wantAlt := strings.TrimSpace(GoToolchainNextRev)
if tsRev != want && tsRev != wantAlt {
if os.Getenv("TS_PERMIT_TOOLCHAIN_MISMATCH") == "1" {
fmt.Fprintf(os.Stderr, "tailscale.toolchain.rev = %q, want %q; but ignoring due to TS_PERMIT_TOOLCHAIN_MISMATCH=1\n", tsRev, want)
return
}
panic(fmt.Sprintf("binary built with tailscale_go build tag but Go toolchain %q doesn't match github.com/tailscale/tailscale expected value %q; override this failure with TS_PERMIT_TOOLCHAIN_MISMATCH=1", tsRev, want))
}
}