Skip to content

ci(release): move to scheduled weekly releases with relnotes tooling#756

Merged
cpcloud merged 11 commits intomainfrom
worktree-greedy-moseying-fox
Mar 11, 2026
Merged

ci(release): move to scheduled weekly releases with relnotes tooling#756
cpcloud merged 11 commits intomainfrom
worktree-greedy-moseying-fox

Conversation

@cpcloud
Copy link
Collaborator

@cpcloud cpcloud commented Mar 11, 2026

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

Copilot AI review requested due to automatic review settings March 11, 2026 12:34
@codecov
Copy link

codecov bot commented Mar 11, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 76.33%. Comparing base (7a85049) to head (b782828).
⚠️ Report is 3 commits behind head on main.

Additional details and impacted files

see 4 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.bash and ci/release/dry-run.bash to 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 + jq for 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.

@cpcloud cpcloud changed the title ci(release): move to scheduled weekly releases ci(release): move to scheduled weekly releases with relnotes tooling Mar 11, 2026
CI and others added 4 commits March 11, 2026 10:57
- 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>
Copilot AI review requested due to automatic review settings March 11, 2026 15:33
@cpcloud cpcloud force-pushed the worktree-greedy-moseying-fox branch from aa5a110 to 37a4cbc Compare March 11, 2026 15:33
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 9 comments.

cpcloud and others added 2 commits March 11, 2026 14:36
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>
Copilot AI review requested due to automatic review settings March 11, 2026 19:12
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 3 comments.

cpcloud and others added 2 commits March 11, 2026 15:29
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>
Copilot AI review requested due to automatic review settings March 11, 2026 19:34
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

cpcloud and others added 2 commits March 11, 2026 15:56
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>
Copilot AI review requested due to automatic review settings March 11, 2026 19:57
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>
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

@cpcloud cpcloud merged commit a9903b1 into main Mar 11, 2026
25 checks passed
@cpcloud cpcloud deleted the worktree-greedy-moseying-fox branch March 11, 2026 20:07
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants