mirror of
https://github.com/tailscale/tailscale.git
synced 2026-05-05 04:06:35 +02:00
go.cmd used cmd.exe to invoke PowerShell, which mangled arguments: cmd.exe treats ^ as an escape character (so -run "^$" became -run "$", running all tests instead of none) and = signs also caused issues in the PowerShell→cmd.exe argument passing layer. Replace it with a tiny no_std Rust binary (19KB, 32-bit x86 for universal Windows compat: x86/x64/ARM64) that directly invokes the Tailscale Go toolchain via CreateProcessW. The raw command line from GetCommandLineW is passed through to CreateProcessW with only argv[0] replaced, so arguments are never parsed or re-escaped. The binary also handles first-run toolchain download natively using curl.exe and tar.exe (both ship with Windows 10+), so PowerShell is no longer required for normal operation. The PowerShell fallback is only used for the rare TS_USE_GOCROSS=1 path. PowerShell prefers go.exe over go.cmd when resolving ./tool/go, so this is a drop-in replacement. With go.exe in place, the CI can use the natural -bench=. -benchtime=1x -run="^$" flags directly. Also removes tool/go-win.ps1 which is now unused. Updates #19255 Change-Id: I80da23285b74796e7694b89cff29a9fa0eaa6281 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
21 lines
792 B
Plaintext
21 lines
792 B
Plaintext
What is go.exe, and why's a 32-bit x86 Windows binary checked into the repo?
|
|
|
|
See https://github.com/tailscale/tailscale/pull/19256
|
|
|
|
In summary, our previous attempts to provide a version of ./tool/go (a
|
|
shell script) on Windows with PowerShell and cmd.exe both were
|
|
lacking.
|
|
|
|
So now we we're regrettably checking in a binary to the tree. Its
|
|
source code is in ./tool/goexe. It's written in Rust without std so
|
|
it's very small (smaller than plenty of of our source code files!) and
|
|
it's 32-bit x86 so it runs on 32-bit x86, 64-bit x86, and arm64 Windows
|
|
where it's emulated.
|
|
|
|
This binary is not required, but it's used by our build system and
|
|
people working on Tailscale who are used to being able to run
|
|
"./tool/go" and have it do the right hermetic thing, using the correct
|
|
Go toolchain.
|
|
|
|
|