Skip to content

chore(release): rebuild automatic release notes pipeline#146

Merged
SantiagoDePolonia merged 2 commits intomainfrom
chore/releases-improvements
Mar 15, 2026
Merged

chore(release): rebuild automatic release notes pipeline#146
SantiagoDePolonia merged 2 commits intomainfrom
chore/releases-improvements

Conversation

@SantiagoDePolonia
Copy link
Copy Markdown
Contributor

@SantiagoDePolonia SantiagoDePolonia commented Mar 13, 2026

Summary

  • switch GoReleaser changelog generation to GitHub native PR release notes
  • add release categories/exclusions via .github/release.yml
  • enforce Conventional Commit PR titles in CI
  • auto-apply release labels from PR title type
  • document release hygiene and add PR template guidance

Validation

  • pre-commit run check-yaml --files .goreleaser.yaml .github/release.yml .github/workflows/pr-title.yml .github/workflows/release-labels.yml
  • go run github.com/rhysd/actionlint/cmd/actionlint@latest .github/workflows/*.yml
  • go run github.com/goreleaser/goreleaser/v2@latest check --config .goreleaser.yaml

Summary by CodeRabbit

  • Chores
    • Improved automated release process: enforced PR title format, automatic release labeling, and more consistent changelog generation for clearer release notes.
  • Documentation
    • Added release hygiene guidance describing PR title conventions, label usage, and how to exclude changes from release notes.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Mar 13, 2026

📝 Walkthrough

Walkthrough

Adds PR template, PR-title validation workflow, automatic release-label management workflow, release.yml for changelog categories, updates goreleaser to github-native changelog, and documents release hygiene in DEVELOPMENT.md.

Changes

Cohort / File(s) Summary
PR Template & Validation
.github/pull_request_template.md, .github/workflows/pr-title.yml
Adds a PR template and a workflow that enforces Conventional Commits-style PR titles using amannn/action-semantic-pull-request.
Release Label Management
.github/workflows/release-labels.yml
Adds a workflow that creates/maintains release-related labels, maps PR title types (and breaking indicators) to labels, removes unmanaged labels, and applies desired labels to PRs with error handling for existing/missing labels.
Changelog / Release Config
.github/release.yml, .goreleaser.yaml
Introduces release.yml defining changelog categories/label mappings and switches goreleaser changelog generation from commit-based to github-native (PR-based).
Docs
DEVELOPMENT.md
Documents Release Hygiene: Conventional Commit enforcement, auto-labeling, exclusion rules (e.g., release:skip), and recommended merge strategy.

Sequence Diagram

sequenceDiagram
    actor Developer
    participant GitHub
    participant PRValidator as PR Title Validator
    participant LabelManager as Release Label Manager
    participant Goreleaser
    participant GitHubRelease as GitHub Release

    Developer->>GitHub: Open/Edit PR
    GitHub->>PRValidator: trigger pr-title workflow
    PRValidator->>GitHub: validate title (Conventional Commits)
    alt title invalid
        PRValidator-->>Developer: check failed
    else title valid
        PRValidator-->>GitHub: check passed
    end

    GitHub->>LabelManager: trigger release-labels workflow
    LabelManager->>GitHub: ensure release labels exist
    LabelManager->>GitHub: map PR title -> release label(s)
    LabelManager->>GitHub: add/remove labels on PR

    Developer->>GitHub: Merge PR
    GitHub->>Goreleaser: run release (uses PR labels)
    Goreleaser->>GitHubRelease: generate changelog & create/update release
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~22 minutes

Possibly related PRs

Poem

🐰 I hopped through titles, tidy and neat,

Labels I planted on every PR seat,
Commits now converse, tidy and bright,
Releases assemble, rolling at night,
A carrot-cheer for automated flight!

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly describes the main change: rebuilding the automatic release notes pipeline with Conventional Commits enforcement, release labels, and PR templates.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch chore/releases-improvements
📝 Coding Plan
  • Generate coding plan for human review comments

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 and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.github/pull_request_template.md:
- Line 1: Change the first-line heading to a top-level H1 to satisfy MD041:
either replace the existing "## Summary" with "# Summary" or insert a top-level
H1 line above the current "## Summary" (so the file begins with an H1 followed
by the existing secondary heading); update the header text if you prefer a more
descriptive project title.
- Around line 9-10: The PR template's header "`type(scope): short summary`"
implies a required scope but the release-labels workflow regex `(\([^)]+\))?`
allows an optional scope; update the template to match the automation by
changing the example to use an optional-scope form (e.g., "type(scope)?: short
summary" or simply "type(optional-scope): short summary") or alternatively make
the workflow regex require a scope—pick one and make both
`.github/pull_request_template.md` (the `type(scope): short summary` example)
and `.github/workflows/release-labels.yml` (the `(\([^)]+\))?` pattern)
consistent.

In @.github/workflows/pr-title.yml:
- Line 17: The workflow step currently uses a floating tag "uses:
amannn/action-semantic-pull-request@v5"; replace that floating tag with the
action pinned to a full commit SHA (e.g. "uses:
amannn/action-semantic-pull-request@<full-commit-sha>") to remove supply-chain
risk, ensuring the exact commit SHA is used wherever "uses:
amannn/action-semantic-pull-request@v5" appears (the pull_request_target
workflow step).

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: da44a9ff-1a82-4457-8111-596ca544b443

📥 Commits

Reviewing files that changed from the base of the PR and between 414ccab and ccbdecd.

📒 Files selected for processing (6)
  • .github/pull_request_template.md
  • .github/release.yml
  • .github/workflows/pr-title.yml
  • .github/workflows/release-labels.yml
  • .goreleaser.yaml
  • DEVELOPMENT.md

Comment on lines +9 to +10
`type(scope): short summary`

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.

⚠️ Potential issue | 🟡 Minor

“Required scope” wording is inconsistent with current automation.

Line 9 says type(scope): ... (required scope), but .github/workflows/release-labels.yml Line 22 accepts optional scope ((\([^)]+\))?). Please align docs or enforcement.

Suggested wording adjustment (docs-aligned option)
-`type(scope): short summary`
+`type(scope?): short summary`
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
`type(scope): short summary`
`type(scope?): short summary`
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/pull_request_template.md around lines 9 - 10, The PR template's
header "`type(scope): short summary`" implies a required scope but the
release-labels workflow regex `(\([^)]+\))?` allows an optional scope; update
the template to match the automation by changing the example to use an
optional-scope form (e.g., "type(scope)?: short summary" or simply
"type(optional-scope): short summary") or alternatively make the workflow regex
require a scope—pick one and make both `.github/pull_request_template.md` (the
`type(scope): short summary` example) and `.github/workflows/release-labels.yml`
(the `(\([^)]+\))?` pattern) consistent.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

♻️ Duplicate comments (1)
.github/pull_request_template.md (1)

9-10: ⚠️ Potential issue | 🟡 Minor

Align template wording with optional-scope automation.

Line 9 currently implies scope is required (type(scope): ...), while your release-label automation was previously defined to allow optional scope. Please change the example to an optional form (for example, type(scope?): short summary) so contributors follow the same rule enforced by CI.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/pull_request_template.md around lines 9 - 10, Update the example in
the PR template so the scope is shown as optional by replacing the current
literal `type(scope): short summary` with an optional-scope form such as
`type(scope?): short summary` so it matches the release-label automation and CI
rules; locate and edit the template example string `type(scope): short summary`
and change it to `type(scope?): short summary`.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In @.github/pull_request_template.md:
- Around line 9-10: Update the example in the PR template so the scope is shown
as optional by replacing the current literal `type(scope): short summary` with
an optional-scope form such as `type(scope?): short summary` so it matches the
release-label automation and CI rules; locate and edit the template example
string `type(scope): short summary` and change it to `type(scope?): short
summary`.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: d8bd295a-b69d-4f8d-bf3b-62958185ece8

📥 Commits

Reviewing files that changed from the base of the PR and between ccbdecd and dae182e.

📒 Files selected for processing (1)
  • .github/pull_request_template.md

@SantiagoDePolonia SantiagoDePolonia merged commit 9e1b407 into main Mar 15, 2026
13 checks passed
@SantiagoDePolonia SantiagoDePolonia deleted the chore/releases-improvements branch April 4, 2026 11:51
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.

1 participant