Release Notes Generator is a minimal GitHub Action that automatically generates release notes from merged pull requests.
It is designed to eliminate manual release-note writing while staying simple, predictable, and easy to audit.
The action:
- Uses Git tags to determine the release range
- Collects merged pull requests since the previous tag
- Groups pull requests by common labels (bug, enhancement, chore, docs, etc.)
- Writes formatted release notes to the GitHub Actions Step Summary
- Optionally creates or updates a draft GitHub Release
It does not require conventional commits or strict workflows.
On tag push:
- Current tag to previous tag
On manual run:
- Latest tag to now
- Falls back to a configurable number of days if no tags exist
From v1.6.0 to v1.7.0
- Fix login redirect loop (#412) @alice
- Support dark mode (#418) @bob
- Upgrade dependencies (#420) @carol
name: Release Notes
on:
push:
tags:
- "v*"
permissions:
contents: write
pull-requests: read
jobs:
notes:
runs-on: ubuntu-latest
steps:
- uses: lukekania/generate-release-notes-@v0.1.0
with:
github_token: ${{ secrets.GITHUB_TOKEN }}| Input | Default | Description |
|---|---|---|
| base_branch | main | Base branch PRs must be merged into |
| create_release | true | Create or update a GitHub Release on tag push |
| draft | true | Create the release as a draft |
| since_days | 30 | Fallback lookback if no tags exist |
| max_prs | 200 | Maximum number of PRs to include |
| section_map | JSON map of label to section name (overrides default grouping) | |
| exclude_labels | Comma-separated labels to exclude PRs from release notes | |
| include_labels | Comma-separated labels to include (only matching PRs appear) | |
| ignore_deps | false | Ignore PRs where all labels are dependency-related |
| use_conventional_commits | false | Fall back to conventional commit prefixes when PRs have no labels |
| preview_on_pr | false | Post a preview comment on PRs showing which section they belong to |
| changelog_file | Path to write/prepend release notes (e.g., CHANGELOG.md). Empty = disabled. |
- Fixed: bug, fix
- Added: enhancement, feat, feature
- Changed: chore, refactor, deps, dependencies
- Docs: docs, documentation
- Other: everything else
- Heuristics over ceremony
- Zero required configuration
- One clear output
- No AI or opaque logic
- Relies on GitHub Search API heuristics
- Label quality affects grouping quality
- Large repositories may need tighter limits
MIT