The Changelog Bot (auto-changelog.yml) automatically maintains CHANGELOG.md entries on pull requests, eliminating manual changelog updates and reducing GitHub Actions costs.
- Trigger: Activates on PR events (opened, edited, labeled, unlabeled)
- Categorization: Determines change category from PR labels or title keywords
- Entry Creation: Generates changelog entry and adds to
[Unreleased]section - Deduplication: Skips if PR #N already exists in changelog
- Auto-Commit: Commits changes back to the feature branch
Use these labels to control changelog category assignment:
| Label | Category | Use For |
|---|---|---|
type: feature |
Added | New functionality, rendering features, templates |
type: fix |
Fixed | Bug fixes, error corrections |
type: docs |
Documentation | Documentation updates, guides |
type: refactor |
Changed | Code restructuring, improvements |
type: chore |
Maintenance | Dependency updates, cleanup |
If no label is applied:
- Title contains "add" → Added
- Title contains "fix" → Fixed
- Default → Changed
For PR #42 with title "Add SVG gradient rendering", the bot generates:
## [Unreleased]
### Added
- **Add SVG gradient rendering** — PR #42For PR #43 with title "Fix memory leak in rasterizer" and type: fix label:
### Fixed
- **Fix memory leak in rasterizer** — PR #43- Developer manually writes changelog entries
- No CI validation of format
- Inconsistent entry quality
- Merge checklist item = additional delays
- 0 seconds of developer time per PR
- 0 runner minutes of CI overhead (GitHub Actions native)
- Consistent format guaranteed by script
- Zero delays to merge workflow
Estimated monthly savings: 50+ PR × 2 minutes per changelog write = 100+ developer-minutes per month
The bot respects the existing CHANGELOG.md structure:
- Parses
## [Unreleased]section - Locates or creates category subsection (
### Added,### Fixed, etc.) - Prepends new entry at the top of the category
- Commits with message:
docs: auto-update CHANGELOG.md for PR #N
To prevent auto-changelog for a PR, add the skip-changelog label or mark the PR as a draft.
If the bot generates an incorrect entry:
- Edit the
CHANGELOG.mdcommit on the PR - Update the entry as needed
- Push to the same branch
- Future bot runs won't duplicate the PR reference
- Use consistent PR titles — descriptive titles generate better changelog entries
- Label PRs early — labels set when PR is created ensure correct categorization
- Review changelog — before merging, verify entries match expected categories
- No drafts — bot skips draft PRs to avoid noise during early development
To add new categories or change label mappings, edit .github/workflows/auto-changelog.yml:
// Example: add support for new label
if (labelNames.includes('type: performance')) {
category = 'Performance';
}The bot detected this PR reference already exists. This is safe and expected for subsequent runs.
- Verify the PR label matches the intended category
- Update the label to the correct one
- Re-run the workflow (edit the PR to trigger)
- Check if PR is marked as draft (bot skips drafts)
- Verify the branch is
mainordevelop - Ensure the
CHANGELOG.mdfile exists and is readable
Status: Active. Runs on every PR event with 0 configuration needed per PR.