Skip to content

ci: automate release notes and PR labeling#392

Merged
dcalhoun merged 7 commits intotrunkfrom
feat/automated-release-notes
Mar 22, 2026
Merged

ci: automate release notes and PR labeling#392
dcalhoun merged 7 commits intotrunkfrom
feat/automated-release-notes

Conversation

@dcalhoun
Copy link
Member

@dcalhoun dcalhoun commented Mar 21, 2026

What?

Adds GitHub configuration and documentation to automate release notes generation and PR labeling based on Conventional Commits.

Why?

Release notes were noisy — Dependabot dependency bump PRs dominated the changelog, making it hard to see meaningful changes. There was also no consistent labeling of PRs by type, and the commit/PR conventions lived only in AGENTS.md (AI agent guidance) rather than human-facing docs.

How?

  • .github/release.yml: Configures GitHub's automatic release notes to exclude Dependabot PRs and group changes into four categories — "Breaking Changes", "Features & Enhancements", "Bug Fixes", and "Other Changes" — using existing repository type labels. Noise labels ([Type] Automated Testing, [Type] Build Tooling, [Type] Task, [Type] Developer Documentation, dependencies) are excluded from "Other Changes" to keep the changelog focused on user-visible changes.
  • .github/workflows/label-pr.yml: On PR open or edit, parses the Conventional Commits prefix and breaking change indicator (!) from the PR title and applies the matching repository label. When ! is present (e.g. feat!:, fix(scope)!:), only [Type] Breaking Change is applied. Skips if a conflicting type label is already present, so developers can override the auto-assigned label.
  • bin/release.sh: Release commits now follow the Conventional Commits format (chore(release): x.y.z).
  • docs/code/developer-workflows.md (new): Human-facing documentation covering Conventional Commits usage, PR guidelines, and the automatic labeling rules.
  • docs/releases.md: Added a "Release Notes" section explaining category groupings, Dependabot exclusions, and linking to the labeling rules.
  • docs/code/README.md: Linked to the new developer-workflows.md.
  • AGENTS.md: Replaced inline commit/PR guidelines with a pointer to the new doc.

Conventional Commits → label mapping:

Prefix Label
feat [Type] Enhancement
fix [Type] Bug
perf [Type] Performance
test [Type] Automated Testing
docs [Type] Developer Documentation
build, ci [Type] Build Tooling
refactor, task, chore, style [Type] Task
any type with ! [Type] Breaking Change

Testing Instructions

We can forgo testing for now, as the changes will not take effect until they are merged.

Accessibility Testing Instructions

N/A — no UI changes.

dcalhoun and others added 2 commits March 21, 2026 07:26
Exclude Dependabot PRs from release notes and group changes into
"Features & Enhancements", "Bug Fixes", and "Other Changes" categories
using existing repository labels.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Apply repository type labels to PRs automatically when opened or edited,
based on the Conventional Commits prefix in the PR title. Respects
manually applied labels by skipping when a conflicting type label already
exists.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@dcalhoun dcalhoun added the [Type] Build Tooling Issues or PRs related to build tooling label Mar 21, 2026
Add docs/code/developer-workflows.md covering Conventional Commits
usage, PR guidelines, and automatic labeling rules. Add a Release Notes
section to docs/releases.md explaining category groupings and Dependabot
exclusions. Link both from docs/code/README.md. Replace the inline
commit/PR guidelines in AGENTS.md with a pointer to the new doc.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@dcalhoun dcalhoun marked this pull request as ready for review March 21, 2026 12:41
@dcalhoun dcalhoun enabled auto-merge (squash) March 21, 2026 12:41
@dcalhoun dcalhoun requested a review from nbradbury March 21, 2026 12:41
@nbradbury
Copy link
Contributor

@dcalhoun This looks good, but I should mention that Claude found one potential issue (which most likely isn't a problem):

Dependabot's GitHub actor is dependabot[bot]. Some repos need to use that full name for the exclusion to match. I'd verify this works as-is, or change it to dependabot[bot] to be safe.

Also, can you clarify what is meant by, "Creating a release and confirming Dependabot PRs are excluded?" If this means a signed release build I don't believe I'm able to do that.

dcalhoun and others added 4 commits March 21, 2026 15:57
Avoid including Dependabot alias.
- add Breaking Changes section to release.yml using [Type] Breaking Change label
- update label-pr regex to correctly parse Conventional Commits breaking change indicator (!)
- apply [Type] Breaking Change exclusively when ! is present, skipping the type label

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Excludes [Type] Automated Testing, [Type] Build Tooling, [Type] Task,
[Type] Developer Documentation, and dependencies from the Other Changes
category, keeping release notes focused on user-visible changes.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@dcalhoun
Copy link
Member Author

dcalhoun commented Mar 21, 2026

@dcalhoun This looks good, but I should mention that Claude found one potential issue (which most likely isn't a problem):

Dependabot's GitHub actor is dependabot[bot]. Some repos need to use that full name for the exclusion to match. I'd verify this works as-is, or change it to dependabot[bot] to be safe.

@nbradbury thanks for sharing. I was unable to find definitive documentation on which name is correct. I ultimately excluded both in bb3c820 to be sure.

I add a few additional changes as well:

  • 48394dd - separate breaking changes in the release notes
  • 3e5c429 - further reduce release notes noise by excluding non-feature/bug changes
  • a9c2dfc - use Conventional Commits spec for the ./bin/release.sh script commits

Also, can you clarify what is meant by, "Creating a release and confirming Dependabot PRs are excluded?" If this means a signed release build I don't believe I'm able to do that.

I meant creating a new release via the project's ./bin/release.sh script. We should not do so now. We'll see if these changes work as expected for the next release. Sorry I did not clearly communicate that we can forgo testing now.

@nbradbury
Copy link
Contributor

@dcalhoun I'll approve this but wanted to mention a couple of items Claude suggested upon re-review:

  1. Missing "Breaking Changes" in docs/releases.md — The release notes section lists three categories (Features & Enhancements, Bug Fixes, Other Changes) but omits "Breaking Changes", which is the first category in .github/release.yml. The docs are inconsistent with the config.
  2. Missing ! breaking change convention in docs/code/developer-workflows.md — The labeling workflow supports the ! indicator (e.g., feat!:, fix(scope)!:) and maps it to [Type] Breaking Change, but the developer-facing documentation doesn't mention this convention at all. Developers won't know how to signal a breaking change.

Copy link
Contributor

@nbradbury nbradbury left a comment

Choose a reason for hiding this comment

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

Looks good! :shipit:

@dcalhoun dcalhoun merged commit ab5e6a9 into trunk Mar 22, 2026
14 checks passed
@dcalhoun dcalhoun deleted the feat/automated-release-notes branch March 22, 2026 11:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

[Type] Build Tooling Issues or PRs related to build tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants