Skip to content

fix(ci): give the wrapper smoke a Go toolchain and a deletable work tree - #2669

Merged
DeusData merged 1 commit into
mainfrom
fix/smoke-setup-go
Oct 16, 2026
Merged

DeusData merged 1 commit into
mainfrom
fix/smoke-setup-go

Conversation

@DeusData

Copy link
Copy Markdown
Owner

The v0.12.1 release run (38931715884) failed in the smoke stage on every leg, in Phase 13w: the package-wrapper install gate added in #2664. Three separate causes, one per platform family:

Platform Failure Fix
macOS (arm64 + Intel) FAIL go: SMOKE_REQUIRE_WRAPPERS=1 but go is not available — the runner images have no Go on PATH actions/setup-go (go-version-file pkg/go/go.mod, the pinned step _test.yml's wrapper job already uses) in pr-smoke and all three release smoke jobs
Windows mkdir: cannot change permissions of …cbm-smoke-wrappers… — mkdir -m 700 changes the mode in a second step, which MSYS2 cannot do under the smoke profile's owner-only DACL mktemp -d (mode set at creation; its parent dirs in the same profile are mktemp -d dirs too)
Linux all wrappers OK and smoke-test: ALL PASSED, then thousands of rm: cannot remove …/home/go/pkg/mod/golang.org/toolchain@…: Permission denied — the runner's older Go downloaded the 1.26.1 toolchain into the smoke profile's HOME, read-only all Go state (GOPATH, GOMODCACHE, GOCACHE) stays in the wrapper's own work tree; its cleanup restores write permission before removing it

npm and PyPI passed on every leg that reached them. The gate is unchanged: SMOKE_REQUIRE_WRAPPERS=1 still fails a leg that cannot install a wrapper.

Proof (local, macOS, real v0.12.0 darwin-arm64 archive):

  • Linux cause reproduced by forcing the toolchain download (GOTOOLCHAIN=go1.26.1): with main's script, 11,510 read-only files are left in HOME and rm -rf fails (rc 1); with this change, 0 read-only files, HOME deletes cleanly, the work tree is gone, OK go.
  • npm, PyPI and Go all OK with this change.
  • Contracts green: lane gate/wiring/selector, coverage map, release gate chain, security gate fail-closed, smoke fixture, venue parity, Windows bundle.
  • The Windows (owner-only DACL) and macOS-runner causes are CI-only; this PR's pr-smoke legs exercise them before merge.

The v0.12.1 release smoke failed on every leg in Phase 13w, the
package-wrapper install gate added in #2664:

- macOS: the runner images have no Go on PATH, and
  SMOKE_REQUIRE_WRAPPERS=1 rightly fails without one. pr-smoke and the
  three release smoke jobs now set up Go from pkg/go/go.mod, with the
  same pinned step the wrapper test job uses.
- Windows: `mkdir -m 700` changes the mode in a second step, which MSYS2
  cannot do under the smoke profile's owner-only DACL. mktemp -d sets
  the mode at creation.
- Linux: the runner's older Go downloaded the 1.26.1 toolchain into the
  smoke profile's HOME. Go writes its module cache read-only, so the
  harness could not delete its profile afterwards. All Go state now stays
  in the wrapper's own work tree, and its cleanup restores write
  permission before removing it.

npm and PyPI passed on every leg that reached them; the gate itself is
unchanged.

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
@DeusData
DeusData merged commit a7158ac into main Oct 16, 2026
39 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant