Automated Release Notes

Automating BookNest's Release Notes with the API

BookNest's last tag is v1.1.0, from Git; since then about two dozen pull requests have merged. The generate-notes endpoint drafts the notes for a future tag from the pull requests merged between two tags, without creating anything:

Drafting the notes for v1.2.0 from the merged pull requestsShell
gh api repos/{owner}/{repo}/releases/generate-notes -f tag_name=v1.2.0 \
  -f target_commitish=main -f previous_tag_name=v1.1.0 --jq '.name, .body'
Output
v1.2.0
## What's Changed
* Filter books by author by @binarybehemoth in
https://github.com/binarybehemoth/booknest/pull/7
...
* Add a webhook receiver and a dev container by @binarybehemoth in
https://github.com/binarybehemoth/booknest/pull/31
## New Contributors
* @binarybehemoth made their first contribution in
https://github.com/binarybehemoth/booknest/pull/7
**Full Changelog**: https://github.com/binarybehemoth/booknest/compare/v1.1.0...v1.2.0

The body is Markdown for a release page. A .github/release.yml shapes it: changelog.categories groups pull requests by label, and exclude drops labels or authors such as dependabot. gh 29 release create v1.2.0 --generate-notes uses the same engine but also creates the tag, triggering publish-image.yml (Pushing to GHCR), so that release is left to BookNest's maintainers. A workflow on push: tags: [v*] with contents: write can create each release this way, so notes are never written by hand.