Add label-driven automatic release pipeline#7
Conversation
Replaces the manual "bump version, tag by hand, hope the appcast commit
to main works" flow that kept breaking. New flow:
PR + one release:* label -> merge -> CI does everything
- release-label-check.yml: PR gate — requires exactly one
release:{patch,minor,major,skip} label, comments the next version.
- prepare-release.yml: on PR merge, computes the next version from the
latest tag, pushes the tag, dispatches release.yml. Never commits to main.
- release.yml: adds a concurrency guard (kills the duplicate-run race that
lost the v1.7.2 release), injects MARKETING_VERSION from the tag, makes
the GitHub release idempotent, and publishes appcast.xml to the dedicated
gh-pages branch instead of writing back to protected main.
- next-version.sh: pure tag math, shared by the workflows and humans.
- release.sh: local builds also take the version from the latest git tag.
- CLAUDE.md: documents the process and the "never push to main" rule.
No PAT required — the tag is pushed with GITHUB_TOKEN and release.yml is
started via explicit workflow_dispatch.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
Warning Rate limit exceeded
You’ve run out of usage credits. Purchase more in the billing tab. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (6)
✨ Finishing Touches🧪 Generate unit tests (beta)
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 |
scripts/release/ matched the `release/` .gitignore rule, so the helper never got committed. Use scripts/next-version.sh instead. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
What
Replaces the fragile manual release flow with a label-driven pipeline.
New flow: open PR → add one
release:*label → merge → CI tags, builds, notarizes, signs, publishes the GitHub Release, and updates the Sparkle appcast ongh-pages.Why
The v1.7.2 release CI failed on a duplicate-run race; v1.14.1 (Diduny) failed because the appcast-commit step can't write to protected
main. This removes both failure classes:concurrencyguard → no duplicate-run racesgh-pagesbranch → never touchesmainFiles
release-label-check.yml,prepare-release.yml,scripts/release/next-version.shrelease.yml(concurrency + workflow_dispatch + version-from-tag + appcast→gh-pages + idempotent release),release.sh,CLAUDE.mdPrereqs already done
release:{patch,minor,major,skip}labels createdgh-pagesbranch seeded with currentappcast.xml; Pages source switched togh-pagesNo PAT needed.