Repository navigation
Download vexctl instead of compiling it on Linux/Windows - #500
Conversation
The test job compiled vexctl v0.3.0 with `go install` on every OS: ~80s on ubuntu and ~180s on windows per run, where test (windows) is the slowest job in CI and gates the yarn/cargo matrices. The compile also builds sigstore/cosign and reads dozens of sum.golang.org tiles, which has failed the step on otherwise-green runs. Linux and Windows now download the release binary and check it against a pinned sha256 (from the release's vexctl_checksums.txt). macOS keeps the retried compile: the release's darwin binaries are built with go1.22.7 and have no LC_UUID, which the runner's dyld refuses to load. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LPCZKE7kADjPbgE9NrbgdS
|
bugbot run Generated by Claude Code |
…built # Conflicts: # .github/workflows/ci.yml
|
Burn-down agent: ready for review at
Generated by Claude Code |
|
BugBot review Generated by Claude Code |
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit ec0d507. Configure here.
|
Reviewed No blocking findings. The Linux/Windows download paths fail closed on checksum mismatch, preserve the executable names expected by the tests, and publish PATH only after the version smoke test succeeds. The macOS source-build path remains intact. Validation: Verified both pinned SHA-256 values against the upstream v0.3.0 release checksum manifest. Compared actionlint output against the PR merge base: the same 55 existing matrix-property diagnostics occur on both, with no added diagnostics. Current Linux/Windows/macOS CI checks pass; I did not locally execute the Linux/Windows binaries. |
Problem
The
testjob inci.ymlcompiles vexctl v0.3.0 withgo installon every OS, on every CI run. Here is how long theInstall vexctlstep took across the last 7 successful CI runs:test (windows-latest)is the slowest job in the workflow: 1656s on main run 36899292199.yarn-classic-matrix,yarn-berry-e2e,cargo-vex-matrixandcargo-old-toolchainsall wait on it withneeds: test, so in that run they started only at 18:13, after Windows finished. That makes the windows compile part of every run's wall-clock. The compile also builds sigstore/cosign and reads dozens of sum.golang.org tiles. That has failed the step on otherwise-green runs; the step's own comment records the 2026-08-20 incident and already suggested this fix as the follow-up.Fix
The
Install vexctlstep in.github/workflows/ci.yml:vexctl-linux-amd64/vexctl-windows-amd64.exefrom the v0.3.0 release and checks each against a sha256 pinned in the workflow (copied from the release'svexctl_checksums.txt). It runsvexctl versiononce as a smoke test and puts the binary's directory onPATH. On Windows the file is namedvexctl.exe, which is the namefind_vexctl_on_pathintests/e2e_vex.rslooks for.go installexactly as before. The release's darwin binaries are built with go1.22.7 and have no LC_UUID load command: I parsed the Mach-O header ofvexctl-darwin-arm64(17 load commands, no0x1b). The runner's dyld refuses such a binary, which is why the Go 1.24 pin exists.env. Go setup is unchanged, since the Go e2e suites still need it.Proof
I downloaded all three assets and
sha256sum -c vexctl_checksums.txtpassed.go version -m vexctl-darwin-arm64reportsgo1.22.7, which confirms macOS has to keep compiling.I ran the step's script locally with
RUNNER_OS=Linux. It downloaded the binary, passed the checksum, printedGitVersion: v0.3.0 … GoVersion: go1.22.7and wrote the directory toGITHUB_PATH. When I set a wrong digest, the step exits 1 atsha256sum -cand writes nothing toGITHUB_PATH.With that binary on
PATH,cargo test -p socket-patch-cli --test e2e_vexgives16 passed, and noskipping vexctl validationline is printed, so thevexctl mergevalidation really ran.actionlintv1.7.7 reports no issues onci.yml.Expected saving: about 4.3 job-minutes per CI run (≈177s + ≈81s, minus a few seconds of download). On the Windows leg it cuts ~3 min from the job that ends the run.
Measured on this PR. On CI run 36926566381 (head
ec0d507), every workflow is green: CI, PDM, vlt, Pin check and Audit GHA Workflows. Here is how longInstall vexctltook:test (windows-latest)took 1320s in total, down from 1656s on the main run cited above. The whole CI run took 25 minutes.Where tests run
Nothing moved or removed. All three
testlegs still validate thevexoutput with vexctl v0.3.0. Job and check names are unchanged.🤖 Generated with Claude Code
https://claude.ai/code/session_01LPCZKE7kADjPbgE9NrbgdS
Generated by Claude Code
Note
Low Risk
Workflow-only change with checksum-verified release binaries; application code and test semantics stay the same aside from faster, more reliable CI installs.
Overview
Speeds up CI by changing the
testjob’s Install vexctl step inci.yml: on Linux and Windows it now downloads the pinned v0.3.0 release asset from GitHub, verifies sha256 digests from env, runsvexctl version, and prepends the temp bin dir toPATHinstead of runninggo install(~minutes per leg).macOS still uses the existing retried
go installpath because release darwin binaries lack LC_UUID and fail under the runner’s dyld; the compile loop now references$VEXCTL_VERSIONlike the download path.Go setup and e2e behavior are unchanged—tests still resolve
vexctl/vexctl.exeonPATHfor OpenVEX validation.Reviewed by Cursor Bugbot for commit ec0d507. Configure here.
Generated by Claude Code