Repository navigation
ci(release): shorten the release pipeline without dropping a check - #499
Conversation
Measured on v0.28.1, tagging to report took about 51 minutes. Most of the wait was work done twice or work waiting behind something it did not need. Release prerequisites (16 min, bounded by the Windows unit suite): - The unit suite still runs on all three platforms, but the second run now happens on Linux only. The repeat catches a test that passes once and not twice, which is a property of the test rather than of the platform. - The twelve cross-builds run as three jobs, one per target operating system, instead of one after another in the Java stability job. They now use -trimpath, the flag a release is built with. - The two fuzz targets that compile most of the module graph start first, so the other 28 fuzz while those compile instead of the job ending on six minutes of compiling alone. Release (29 min): - The unit tests run beside the build instead of before it. publish still needs them to pass. - The draft-verification jobs skip the Go cache. They only run the assurance tool; restoring the cache for it took five minutes on Windows. Release assessment: the install-script jobs skip the Go cache for the same reason. Co-Authored-By: Claude Fable 5.1 <[email protected]>
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 21 minutes. View limit detailsLimit details: You’ve used the included review currently available. Review configuration: ⚙️ Run configuration
📒 Files selected for processing (11)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Bomly Diff SummaryCompared Overview
Dependency Changes✅ No dependency changes. Vulnerabilities✅ No vulnerability changes. License Changes✅ No license changes. Project Posture✅ No project posture changes ( Policy Findings✅ No policy differences were identified. |
|
Measured: the prerequisites stage on this branch (run) passed in 10.3 minutes, against 16.3 for v0.28.1.
Fuzzing and the Linux unit suite now set the total. Fuzzing is bounded by compiling the The release and assessment changes are not measured: they cannot run before a release. 🤖 Generated with Claude Code |
The unit suite no longer repeats in the release prerequisites stage. The repeat guarded against a single lucky pass, but the same suite already runs on every pull request, on every push to main and in the release workflow, so an intermittent test surfaces there. The unit-portable claim now says what is done: the suite passes on Linux, macOS and Windows. Fuzzing was the slowest remaining job, and more targets at once would not help: it is bounded by compiling the two targets whose packages pull in most of the module graph. Those two now run as their own job, beside the 28 parser targets, so neither waits on the other. The fuzz check reports two instances, parsers and engine-and-plugin. Co-Authored-By: Claude Fable 5.1 <[email protected]>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 2fd0931d09
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…onfirmed Running the unit suite beside the GoReleaser build let the build finish first when the suite failed, and GoReleaser opens the Homebrew, Scoop and WinGet pull requests as it runs. The build waits on validate again. What made the wait pointless is that preflight has already confirmed the release prerequisites stage for this commit, which runs the same suite on three operating systems. validate now skips its steps in that case and runs them, ahead of the build, when preflight could not confirm it. Also sum targets_failed across fuzz instances, now that the fuzz check reports two; the report's top-level figure had dropped out. Co-Authored-By: Claude Fable 5.1 <[email protected]>
The macOS leg of the prerequisites stage failed on a TLS handshake timeout to the module proxy: TestPluginDoctorJSON builds a plugin in a temporary module and had to download the SDK inside the test. It is the second time a macOS runner has failed this way. The modules are now fetched in their own step, retried up to three times, so the tests find them in the cache. Co-Authored-By: Claude Fable 5.1 <[email protected]>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e139c923db
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Two attempts to avoid re-running the suite in the release workflow were each found unsafe in review, so the job is back to what it was: - beside the build, GoReleaser could open package-manager pull requests for a release whose tests then failed; - skipped when preflight confirmed the prerequisites stage, a hand-made tag on an untested child of a verified commit would be built without tests, and vet would not run at all. The decision is recorded on the job so it is not tried a third time. Co-Authored-By: Claude Fable 5.1 <[email protected]>
Why
Measured on v0.28.1, the pipeline took about 51 minutes from starting Auto Version to the report being committed: 16 for the prerequisites stage, 29 for Release, 6 for the assessment. Most of the wait was work done twice, or work queued behind something it did not need.
What changes
Release prerequisites (was 16.3 min, bounded by the Windows unit suite at 15.1)
unit-portableclaim is updated to match. Modules are downloaded, with retries, before the suite, after a macOS runner timed out reaching the module proxy mid-test.cross-buildcheck now has three instances. Builds use-trimpath, the flag a release is built with.engine,plugin) start first. In the last run the other 28 targets were done after 5.5 minutes and the job then spent 6 more compiling those two alone. Those two now run as their own job beside the 28 parser targets; thefuzzcheck reports two instances.Release (was 28.7 min)
validate(the unit suite and vet) is unchanged: it still runs before the build on every release. Two ways of not repeating it were tried in review and removed; the reason is recorded on the job.verify-draftskips the Go cache. Those jobs onlygo runthe assurance tool, which has one small dependency; restoring the cache took 5.1 of the Windows job's 5.9 minutes.Release assessment: the install-script jobs skip the Go cache for the same reason (3.7 of 4.2 minutes on Windows).
Not changed
No check is removed. Smoke, SBOM interoperability and draft verification are untouched.
Verification
make testandmake lintpass locally.release.ymlandassurance-assessment.ymlchanges cannot run before a release. The assurance tool was run from an empty module and build cache locally to confirm it needs no restored cache.🤖 Generated with Claude Code