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
Copy Markdown
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
Copy Markdown
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
Copy Markdown
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
Copy Markdown
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
Copy Markdown
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
jkmassel added a commit that referenced this pull request Apr 13, 2026
Address review feedback — the comprehensive per-PR lists are redundant
with the auto-generated GitHub Release notes from #392. The CHANGELOG
now focuses exclusively on breaking changes, which is the one thing
GitHub Releases can't surface ahead of time via the Trunk staging area.
jkmassel added a commit that referenced this pull request Apr 15, 2026
…tle (#423)

* docs: add CHANGELOG.md with breaking change tracking

Add a CHANGELOG.md following the release-toolkit format with historical
entries back to v0.3.0. Each version is categorized into Breaking Changes,
New Features, Bug Fixes, and Internal Changes.

The release script now automatically manages the Trunk section during
releases, and the developer workflow docs mention updating the changelog
when merging user-facing changes.

* docs: scope CHANGELOG.md to breaking changes only

Address review feedback — the comprehensive per-PR lists are redundant
with the auto-generated GitHub Release notes from #392. The CHANGELOG
now focuses exclusively on breaking changes, which is the one thing
GitHub Releases can't surface ahead of time via the Trunk staging area.

* ci: add PR validation check for type label or Conventional Commits title

Ensures every PR has either a valid Conventional Commits prefix in the
title (which triggers automatic labeling via label-pr.yml) or a manually
applied [Type] label. This prevents PRs from falling through the cracks
in auto-generated release notes.

* ci: remove redundant breaking change warning from PR validation

The label-pr workflow already applies the [Type] Breaking Change label
when it sees ! in the title — no need to warn about it separately.

* docs: remove CHANGELOG.md in favor of GitHub Releases

The new PR validation check ensures every PR has either a Conventional
Commits title or a type label, so GitHub Releases will reliably capture
breaking changes going forward. A manual CHANGELOG is redundant.

* ci: use pull_request trigger for PR validation

pull_request_target only runs the workflow from the default branch, so
the check can't fire until it's merged — a chicken-and-egg problem.

This workflow only needs read access (title + labels), so pull_request
is the correct trigger. pull_request_target is only needed for the
label-pr workflow which writes labels.

* ci: add synchronize trigger to PR validation workflow

Force-pushes (e.g. rebases) fire the synchronize event, not opened or
edited. Without this, the check wouldn't re-run after a rebase.
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