ci(release): move to scheduled weekly releases with relnotes tooling#756
Merged
ci(release): move to scheduled weekly releases with relnotes tooling#756
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Pull request overview
Moves semantic-release from “every push to main” into an explicit weekly (Sunday) scheduled workflow, while adding scripts to run the real release and to validate the release pipeline via a safe dry-run on PRs.
Changes:
- Add a new scheduled GitHub Actions workflow (cron + manual dispatch) to run releases.
- Add
ci/release/run.bashandci/release/dry-run.bashto standardize publishing and PR validation of the release config. - Update CI to run only the dry-run on PRs, and update the Nix dev shell to include
nodejs+jqfor local script use.
Reviewed changes
Copilot reviewed 5 out of 5 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
flake.nix |
Adds nodejs and jq to the dev shell for running the new release scripts locally. |
ci/release/run.bash |
Introduces an npx -p wrapper to run semantic-release in the scheduled workflow. |
ci/release/dry-run.bash |
Adds a worktree-based dry-run that strips the GitHub plugin and simulates the full pipeline on PRs. |
.github/workflows/scheduled-release.yml |
New weekly scheduled release workflow using a GitHub App token + ci/release/run.bash. |
.github/workflows/ci.yml |
Removes publish-on-push behavior; adds PR-only semantic-release dry-run job and wires it into the CI gate. |
- Remove per-push semantic-release from CI; releases now run on a weekly Sunday schedule or via manual workflow_dispatch - Add ci/release/dry-run.bash: worktree-based dry run that strips the github plugin, exercises the full pipeline, and prints release notes - Add ci/release/run.bash: thin wrapper for the actual release - Add scheduled-release.yml workflow (Sundays 2pm UTC + manual trigger) - CI still runs dry-run on PRs to validate the release config - Add nodejs and jq to the Nix dev shell for local script usage Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Configure commit-analyzer and release-notes-generator with the conventionalcommits preset for grouped release notes - Drop redundant bundled plugin -p entries from scripts - Add conventional-changelog-conventionalcommits dependency - Use sponge instead of tmp file in dry-run script - Use --no-verify for the disposable worktree commit - Drop unnecessary git config from dry-run script - Add moreutils to flake dev shell for sponge Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replace sponge with temp file in dry-run (moreutils not on CI runners) - Use git worktree add -b for proper branch creation - Make cleanup resilient to missing branch - Verify HEAD passed CI before running scheduled release - Remove moreutils from devshell (no longer needed) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
aa5a110 to
37a4cbc
Compare
CI runners have no global git user config, so the disposable worktree commit needs explicit user.email and user.name. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add checks: read permission for check-runs API - Select most recent CI Result run via sort_by(.completed_at) - Pin conventional-changelog-conventionalcommits@8.0.0 - Add ncurses and less to relnotes runtimeInputs Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Check CI Result, Lint Result, and Security Result are all success before running semantic-release. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Instead of hardcoding check names, dynamically query the
repos/{owner}/{repo}/rules/branches/main API to get the list of
required status checks. Stays in sync with ruleset changes
automatically.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Fetch all check runs for HEAD in one call and verify required checks in jq instead of looping with N separate API calls. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Move the empty-checks validation into the gh --jq filter, eliminating the separate shell if/jq-length check. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
cpcloud
added a commit
that referenced
this pull request
Mar 19, 2026
…756) ## Summary - Stop releasing on every push to main; semantic-release now runs on a weekly Sunday cron (2pm UTC) or via manual `workflow_dispatch` - Add `ci/release/dry-run.bash`: worktree-based simulation that strips the github plugin, unsets `GITHUB_ACTIONS` to exercise the full pipeline - Add `ci/release/run.bash`: explicit `npx -p` wrapper for the actual release - Add `scheduled-release.yml` workflow with cron + manual trigger; dynamically fetches required checks from the branch ruleset API and verifies HEAD passed all of them before releasing - CI runs the dry-run on PRs to validate the release config - Add `conventionalcommits` preset to `.releaserc.json` for grouped release notes (Features, Bug Fixes, Performance, Refactors, Documentation) - Add `.conventionalcommits.js` bridge config (reads types from `.releaserc.json`) for `conventional-changelog-cli` - Add `relnotes` dev shell tool: preview unreleased changelog locally via glow - Add `nodejs`, `jq`, `glow` to the Nix dev shell - Add `*.js` to biome's file includes --------- Co-authored-by: CI <ci@localhost> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
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.
Summary
workflow_dispatchci/release/dry-run.bash: worktree-based simulation that strips the github plugin, unsetsGITHUB_ACTIONSto exercise the full pipelineci/release/run.bash: explicitnpx -pwrapper for the actual releasescheduled-release.ymlworkflow with cron + manual trigger; dynamically fetches required checks from the branch ruleset API and verifies HEAD passed all of them before releasingconventionalcommitspreset to.releaserc.jsonfor grouped release notes (Features, Bug Fixes, Performance, Refactors, Documentation).conventionalcommits.jsbridge config (reads types from.releaserc.json) forconventional-changelog-clirelnotesdev shell tool: preview unreleased changelog locally via glownodejs,jq,glowto the Nix dev shell*.jsto biome's file includes