| name | release-notes |
| description | Generate release notes between two git tags and publish as a GitHub release. Input format: "<new-tag> from <base-tag>" (e.g. "v0.5.2 from v0.5.0"). |
Release Notes Generator
Steps
- Parse args to extract
NEW_TAG and BASE_TAG (format: v0.5.2 from v0.5.0).
- Run
git log <BASE_TAG>..<NEW_TAG> --oneline --merges to list merge commits (PRs).
- For each merge commit, extract the PR number and title using
gh pr view <number> --json number,title,author — match PR numbers from commit messages like #123 or Merge pull request #123.
- If no PR number is found in a merge commit, use the commit subject as the entry with the committer as author.
- Write release notes in the format below.
- Publish the GitHub release:
gh release create <NEW_TAG> --title "<title>" --notes "<body>".
- If the tag does not yet exist on the remote, add
--target main (or the default branch).
- If the release already exists, use
gh release edit <NEW_TAG> --notes "<body>" instead.
- Print the release URL from the
gh output.
Output Format
## <NEW_TAG> — <short label derived from the tag, e.g. "0.5.2">
<2-3 sentence Slack-ready summary. What shipped, why it matters, any breaking changes. Plain prose, no bullet points. No internal jargon.>
## What's Changed
- <PR title> by @<author> in #<number>
- <PR title> by @<author> in #<number>
...
**Full Changelog**: https://github.com/<owner>/<repo>/compare/<BASE_TAG>...<NEW_TAG>
Rules
- Derive
<owner>/<repo> from gh repo view --json nameWithOwner -q .nameWithOwner.
- Release title format:
<NEW_TAG> (just the tag — GitHub prepends the repo name automatically).
- The Slack summary goes at the top of the release body, before "What's Changed".
- List only PRs merged between the two tags — do not include direct commits that have no PR.
- If a commit has no associated PR, skip it silently unless it's the only change, in which case list it as
- <subject> by @<author>.
- Do NOT include "Merge branch" or "Merge pull request" boilerplate lines.
- The summary must be usable as-is in a Slack message — no markdown headers, no code spans.
- After publishing, print the final release URL so the user can share it.