I just had to backfill a year of docs release notes for an OSS repo. I ended up writing a small release tag driven generator: it walks git tags, collects merged PRs between releases, buckets them into categories, and renders Markdown/MDX grouped by year -> month -> category -> version. I also added an optional LLM step that outputs structured JSON via Pydantic schema for PR bullets that includes monthly summaries. It is idempotent and preserves manual edits or omissions, so you can auto-generate, then curate over time.
I’m curious what works for you in practice:
- Towncrier?
- reno?
- GitHub Releases / auto-generated notes?
- something else?
What do you like/hate about your current setup? Any tools you’d recommend?
If anyone wants to see the script I wrote, I am happy to share it and would love some constructive feedback.
It walks git tags, finds merged PRs between releases, buckets them into categories, and renders MDX (Docusaurus in our case) organized by year -> month -> category -> version. There is an optional LLM mode that produces structured JSON via a Pydantic schema for PR entry and monthly summaries.
Example:
python .scripts/changelog/generate.py --year 2025 --github --ai --ai-model gpt-5.2 (or --help)
Gotcha: if you use --github, set GITHUB_TOKEN or you will most likely hit GitHub rate limits.
Repo script: https://github.com/confident-ai/deepeval/blob/main/.scripts/...
Disclosure: I maintain DeepEval. Happy to answer questions and take feedback.