Problem
On Windows, the structure_test binary downloaded by the Bazel toolchain has no file extension. When the generated .bat launcher script tries to invoke it (via bash.exe calling the binary, or via PowerShell's & operator), Windows does not recognise it as an executable.
Instead of running, Windows displays an "Open With" application picker dialog. The test process then returns exit code 0 (the dialog closes without error), so Bazel marks the test as PASSED without any structure tests having actually run.
Root cause
The Windows toolchain BUILD registers the binary without an extension:
# container/repositories.bzl — generated BUILD for windows_amd64
structure_test_toolchain(
name = "structure_test_toolchain",
structure_test = "structure_test" # no .exe
)
Windows requires an extension to recognise a file as directly executable. The binary is a valid PE (.exe), just named without the extension.
Reproduction
- Use
container_structure_test with driver = "tar" on a Windows Bazel host.
- Run the generated test target.
- An "Open With" dialog appears briefly and disappears; the test reports
PASSED.
- No structure tests were actually executed.
Fix
Symlink the binary to <name>.exe in the Bazel action graph when building on Windows. This is safe — the binary is a valid PE regardless of its name — and the generated launcher scripts use rlocation to resolve the path at runtime, so they automatically pick up the .exe copy.
is_windows = ctx.target_platform_has_constraint(ctx.attr._windows_constraint[...])
if is_windows and not test_bin.basename.endswith(".exe"):
test_bin_exe = ctx.actions.declare_file(test_bin.basename + ".exe")
ctx.actions.symlink(output = test_bin_exe, target_file = test_bin)
test_bin = test_bin_exe
A PR with this fix is attached.
Problem
On Windows, the
structure_testbinary downloaded by the Bazel toolchain has no file extension. When the generated.batlauncher script tries to invoke it (viabash.execalling the binary, or via PowerShell's&operator), Windows does not recognise it as an executable.Instead of running, Windows displays an "Open With" application picker dialog. The test process then returns exit code 0 (the dialog closes without error), so Bazel marks the test as PASSED without any structure tests having actually run.
Root cause
The Windows toolchain BUILD registers the binary without an extension:
Windows requires an extension to recognise a file as directly executable. The binary is a valid PE (
.exe), just named without the extension.Reproduction
container_structure_testwithdriver = "tar"on a Windows Bazel host.PASSED.Fix
Symlink the binary to
<name>.exein the Bazel action graph when building on Windows. This is safe — the binary is a valid PE regardless of its name — and the generated launcher scripts userlocationto resolve the path at runtime, so they automatically pick up the.execopy.A PR with this fix is attached.