Skip to content

ci(release): harden the package release flow - #102

Merged
sthanikan2000 merged 1 commit into
mainfrom
chore/release-flow
Oct 12, 2026
Merged

sthanikan2000 merged 1 commit into
mainfrom
chore/release-flow

Conversation

@sthanikan2000

@sthanikan2000 sthanikan2000 commented Oct 9, 2026 •

Copy link
Copy Markdown
Member

Stacked on #104 (staging releases on npm). The base branch is ci/npm-staged-publishing, so the diff below is only the hardening. After #104 merges (it is squash-merged), retarget this PR to main and rebase: git rebase --onto origin/main bf75ae5 chore/release-flow.

Summary

Packages here release independently, but the release notes didn't: GitHub's generated notes list every merged PR, there were no package or type labels, and the step from a merged bump to a release was manual. This makes the notes per package and tightens the bump and publish workflows.

It follows the OpenNSW/nsw-srilanka release procedure where that fits (label-driven notes, auto-labelling plus a label check, a drafting skill) and changes what a monorepo needs: per-package tags, and PRs scoped to a package by Package/<dir> label or by changed files.

Type of change

  • Bug fix
  • New feature
  • Improvement to an existing feature
  • Breaking change (consumers must change their code)
  • Docs, tests, refactor or CI only

Changes made

PR checks

  • pr-title.yml: require a Conventional Commit PR title. main is squash-only, so the title is the commit subject.
  • pr-labels.yml: add Package/<dir> from the changed files, and Type/New Feature, Type/Bug or breaking change from the title (bots and chore(release) bumps get skip-changelog). The "Release notes label" check fails until the PR is classified.
  • PR template with a consumer-facing Release notes section, and a .github/release.yml fallback for GitHub's "Generate release notes" button.

Release steps

  • release-package skill (.claude/skills/release-package/): after the bump PR merges, collects only the PRs that belong to the package since its previous tag, drafts the notes in the existing format, and creates a draft GitHub Release pinned to the bump commit. It never tags, pushes or publishes.
  • version-bump.yml: inputs go through env instead of being interpolated into shell, the new version must be strictly higher, it fails early if the branch or tag already exists, labels the PR, and its PR body points at the skill.
  • release.yml: refuses a tagged commit that isn't on main; skips a version that's already on npm (so re-running an approved release is safe); stages pre-releases under the next dist-tag (npm 11 requires an explicit tag for them).

Docs

  • CONTRIBUTING.md: PR titles, labels, and the release procedure with the skill; adding a package. Fixes the root README's "Releasing" section, which linked a workflow file that doesn't exist.

Testing

  • actionlint, shellcheck and prettier --check are clean
  • collect.sh reproduces the existing jsonforms-renderers-v0.11.0 notes (same PRs, same three new contributors); for auth it returns only feat(auth): add @opennsw/auth shared OIDC helpers #92 from the root commit and nothing after auth-v0.1.0
  • resolve.sh guards: refuses an already-released version, a missing bump commit, a bad package name
  • pr-labels.yml script run against 10 mocked scenarios (package labels, bot bump, no package, breaking across two packages, skip + breaking rejected, title edit swaps the type label)
  • The workflows themselves haven't run. pull_request_target workflows run from main, so pr-labels.yml can't be exercised on this PR. After merge I'll open a throwaway PR touching packages/auth/ to check it.

Release notes

N/A. No package changes (skip-changelog).

Notes

  • Conventional Commit Title and Release notes label are advisory: the branch ruleset has no required status checks, and changing it needs an admin.
  • Already done on GitHub, not part of this diff: the new labels are created, the 21 PRs from the open, post-v0.11.0 and v0.11.0-window sets are labelled, and auth-v0.1.0 is tagged at d0bf312 as auth's baseline for its first notes.

@sthanikan2000 sthanikan2000 added the skip-changelog Leave this PR out of the release notes label Oct 9, 2026
@coderabbitai

coderabbitai Bot commented Oct 9, 2026 •

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: a7663f59-6492-413b-824a-9fdef3cd55d5

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@sthanikan2000 sthanikan2000 added Package/jsonforms-renderers Changes to packages/jsonforms-renderers and removed Package/jsonforms-renderers Changes to packages/jsonforms-renderers labels Oct 9, 2026
@sthanikan2000 sthanikan2000 self-assigned this Oct 9, 2026
@sthanikan2000
sthanikan2000 added this pull request to stack #105 October 9, 2026 15:38
@sthanikan2000
sthanikan2000 removed this pull request from stack #105 October 9, 2026 15:39
@sthanikan2000
sthanikan2000 changed the base branch from main to ci/npm-staged-publishing October 9, 2026 15:53
@sthanikan2000
sthanikan2000 added this pull request to stack #106 October 9, 2026 15:55
Base automatically changed from ci/npm-staged-publishing to main October 10, 2026 04:32
@sthanikan2000
sthanikan2000 force-pushed the chore/release-flow branch 2 times, most recently from c32905e to 1aba617 Compare October 10, 2026 11:16

@ginaxu1 ginaxu1 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Lgtm

Make releases per package, with release notes that carry only what changed
in that package.

PR checks
- pr-title.yml: require a Conventional Commit PR title (main is squash-only,
  so the title is the commit subject).
- pr-labels.yml: label each PR with Package/<dir> from its changed files and
  a Type/* or breaking change label from its title; fail the "Release notes
  label" check until the PR is classified or marked skip-changelog.
- Add a PR template with a consumer-facing "Release notes" section, and a
  .github/release.yml fallback for GitHub's generate-notes button.

Release steps
- release-package skill: after the bump PR merges, collect only the PRs that
  belong to a package (Package/<dir> label or files under packages/<dir>/)
  since its previous tag, draft the notes, and create a DRAFT GitHub Release
  pinned to the bump commit. It never tags or publishes.
- version-bump.yml: pass inputs through env, require a strictly higher
  version, fail early if the branch or tag exists, label the PR, and point
  the PR body at the skill.
- release.yml: refuse a tagged commit that is not on main, skip a version
  that is already on npm, and stage pre-releases under the next dist-tag.

Docs
- CONTRIBUTING.md: PR titles, labels, and the release procedure with the
  skill; adding a package. Fix the stale Releasing section in the root README.
@sthanikan2000
sthanikan2000 merged commit 57235c0 into main Oct 12, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

skip-changelog Leave this PR out of the release notes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants