ci(release): drop the stable approval gate and run nightlies once a day
Summary
Every release run spent seconds deciding and minutes queued: Plan executes in ~12s, while recent schedule runs waited 30s–31min for an ubuntu-latest runner. Seven of the eight daily cron runs only reported "shipped today".
- No stable approval. The
v*tag ruleset (creation/update/deletion, org-admin bypass only) already gates stable releases, and Plan still refuses to publish if that ruleset or thenpm-publishbranch policy weakens. Thereleaseenvironment approval was a second click by the same admin. Drops theapprovejob and the reviewer check. - Fixes
Tag nightly, which never ran: a skippedapproveskipped every job downstream ofpublishon nightlies, so nonightly/*tag exists. - Nightly once a day (
23 1 * * *). Plan waits up to 20 minutes for main's HEAD CI, as tags already did; failed, cancelled, or still-running CI skips that day. Run Release onmainto publish one by hand. Removes the same-day npm lookup. - Every main commit gets its own CI run.
ci.ymlkeyed its concurrency group by ref, so each main push cancelled the previous commit's run; v0.21.28's Plan failed when the next merge cancelled CI on its tag. Main runs are now grouped by SHA; pull requests still cancel superseded runs. Costs more runner time on busy days.
Docs: CONTRIBUTING.md release channels and one-time setup. 6 files.
Keep the release environment until v0.21.28 ships: its tag predates this change, so any retry on it still runs the approval job. Delete the environment afterwards.
Validation
At e60e96f9c and 8ba6f31d9: pnpm check:affected --run passed; scripts/__tests__/release-plan.test.ts and test/ci/release-workflow.test.ts pass (13 tests). A fresh-context review found the skip wording too narrow (fixed) and a dead test input (fixed). The PR's own Release dry run exercises the workflow.
🤖 Generated with Claude Code