ci(release): stop running the macOS suite twice per release and drop the unused Homebrew setup - #2208
Merged
Merged
Conversation
…the unused Homebrew setup
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Cleanup of the release pipeline, from profiling the v0.66.0 run (32167949766). That run took ~50 minutes against 40m35s for v0.65.0.
Speed
The macOS suite ran twice on the same commit.
/releasepushes the version commit to main and then tags it, somacos-tests.ymlfires once directly and once throughbuild.yml'sworkflow_call. Both ran SHA8cd3514. The concurrency group is keyed ongithub.ref, sorefs/heads/mainandrefs/tags/v0.66.0never collided. The duplicate is also what left the release's ownapp-testsqueued for 8m51s, since the account runs five macOS jobs at a time. Thechangesjob now stands down for a push to main whose subject is a release commit, and the tag run does the work.I did not merge the concurrency groups, which was the first thing I tried. Whichever run enters the group second cancels the other, and that ordering is not guaranteed if the two pushes are ever combined. Losing the tag run means the release dies. The guard here fails toward running twice instead.
The x86_64 job spent 5m15s on Homebrew for a library it never opened.
prepare-libs.shcopiesLibs/libmariadb_x86_64.a,project.ymlforce-loads$(SRCROOT)/Libs/libmariadb.a, the headers are vendored underPlugins/MySQLDriverPlugin/CMariaDB/include, andLIBRARY_SEARCH_PATHSnames no Homebrew prefix.app-testsalready proves it: that job links all 31 plugin bundles with no Homebrew mariadb installed. Rosetta went with it, since nothing x86_64 executes during a cross-compile.create-dmgis the only formula either job needs.Also:
registry-readinessmoves toubuntu-latest(it reads two integers and fetches a JSON manifest), the build jobs cache the~/.spm-cachecheckouts thatbuild-release.shalready clones into, andlintmoves tomacos-26so the workflow stops straddling two runner images.Correctness of the release
Two steps could fail without failing the release:
if: env.SPARKLE_PRIVATE_KEY != ''. This job only runs for av*tag, so a missing or rotated key was never legitimate, and it published a release no installed copy could see under a green check. Gate removed.Commit appcast.xml to repowascontinue-on-error: true, which made a failed push indistinguishable from a clean release: every updater keeps reporting "up to date" for a version that shipped. It now rebases and retries up to three times, and fails the job if the push still will not land.That step also moved after
Create GitHub Release, so the feed never advertises a download URL that still 404s.Hygiene
paths-ignorefrom the tag trigger. GitHub does not evaluate path filters for tag pushes, so it never excluded anything.concurrencywithcancel-in-progress: false, so a re-tag queues instead of cancelling a run mid-notarization.build.yml,macos-tests.ymlandios-tests.yml. I read each new major'saction.ymland release notes first. Every input in use survives, and the breaking changes are opt-in (archive,skip-decompress) or wanted here (v8 errors on a download digest mismatch instead of warning).scripts/build-release.sh:25claiming CI pre-copies libmariadb "from Homebrew". It comes fromLibs. That sentence is most likely why the Homebrew step existed..claude/skills/release/SKILL.mdnow says to wait for the app release before pushing plugin tags. On v0.66.0 seven plugin tags pushed two minutes after the app tag, and one plugin build did not start for 20 minutes.Testing
No unit tests: every change is workflow configuration. Verification was:
actionlinton all three workflows. The only findings are 4 pre-existing SC2086 infos in the keychain steps, identical on the HEAD versions.push+refs/heads/main+ arelease: v<digit>subject. Therefs/tags/v*path thatworkflow_callsees still returnsrun=true, as doworkflow_dispatchon main and a prose subject likerelease: verify the funnel.action.yml.What cannot be exercised without a real tag is the release job's new step order and the appcast retry.
gh workflow run build.yml --ref ci/release-pipeline-cleanupcovers both build jobs, and so the Homebrew removal and the SPM cache, without publishing anything:registry-readinessandreleaseare both gated onrefs/tags/v.Not done
DerivedData caching. For release builds a stale cache can yield a subtly wrong binary that then gets signed, notarized and shipped, and at multi-GB against a 10GB repo budget shared with the
Libscache it would likely cost more in restore and save time than it returns. The 15-minute compile needs a real fix, not a cache.build-plugin.ymlstill usescheckout@v4. It had uncommitted changes in the working tree while I was editing, so I left it alone.