Ask HN: How do you automate your release notes?

10 points by dustfinger ↗ HN
How are you generating release notes in your projects?

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.

11 comments

[ 3.2 ms ] story [ 35.1 ms ] thread
All I can say is I hate when projects just lazily list every pull request for its change log / release notes. It makes it very difficult to discover what breaking changes there are.
That has been my concern as well. The script I wrote tries to bucket entries into categories, including "Backward Incompatible Change" so those are easier to spot. Since it is automated I am trading some accuracy for time saved, which seemed like the only practical choice for me, since I had to backfill a lot of history, but it’s been surprisingly decent so far.

I am also planning to add some PR templates so contributors include the context up front, which should make any release note generation more accurate.

Are you using any tooling to help with changelog curration? I know towncrier is all about fragments, so contributors must had write a brief summary of their contribution, which would be more in-line with your preference.

Not related really, as you can (and should) publish BREAKING.md separately. Release notes should inform more about new stuff than the update process. Usually PRs have details, so release notes can be easily automated. Migrations, on the other hand…
I add release notes to a draft Markdown file in the same commit as every change, under the appropriate Breaking / Changes etc. heading, so when I'm ready to release that becomes the next release notes.

I've never seen an auto-generated set of release notes I liked, a list of PRs doesn't cut it.

We have our release notes fully automated from git tags, and it's unfortunately useless as people don't actually the right tags on things, so everyone ends up manually editing it.
Unpopular opinions:

1. Release notes should never be created mechanically but focus on the consumer of the release.

2. The best changelog is your git. It is OK to generate a calcified changelog for an audience that prefers that.

Last and least:

3. The commit messages are a private space where developers communicate. The messages should never end up at the customer without thorough filtering and distillation.

Apart from that: git-cliff is excellent. If you must generate a document from commits, use that.

Claude - write some plausible release notes that management will buy but make no actual sense and save it as xml.
Full disclosure, I’m one of the owners of ReleaseNotes.io. Not trying to pitch, just sharing what we see across a lot of teams.

1. For OSS projects, GitHub Releases honestly work really well. You usually have contributors who understand the context, and readers who are technical enough to parse a changelog.

2. If you're talking to users, Release notes stop being a dev artifact and become a communication channel. They need to show up where users already are, in-app, email, Slack, etc. There are a bunch of tools like us (ReleaseNotes.io), LaunchNotes, AnnounceKit, Canny and others that help with that.

3. From what we see, the teams that have the most success with automation of this process treat GitHub PRs or Jira, Azure DevOps, Linear, GitHub issues as the source of truth. Also their issues/PR descriptions tend to clearly describe the problem and the solution.

4. Any automation of this process leans heavily on the quality of your issue/PR descriptions as garbage-in = garbage-out. Because of this it's tricky to fully automate the process as at some level you usually need a person casting an eye over the release note just to sense check.

Appreciate this breakdown and the disclosure.

+1 for highlighting that PR quality is the bottleneck. Garbage-in/garbage-out is exactly what I ran into and it’s why I’m planning to introduce PR templates so the why/what changed/impact is consistently present. For sparse PR bodies, I also optionally add truncated diff context for the LLM summary so the output isn’t just a long list of raw PR titles.

Also agree there is a split between dev-facing changelogs vs user-facing release comms that need to land where users are. What I built is aimed at the "developer-consumer" audience, people using the library, not contributing to it: it renders into our docs and is meant to be readable as a curated changelog, not a raw list of commits.

For me automating release notes is like recording an audio and play it each time you introduce your kid to somebody.

You worked hard you added all those new features and fixed several bugs and hopefully introduced no new ones, take the time and write the release notes yourself or with the team, make it a moment of celebration, read them and refine them (even with LLMs) but be proud of what you just accomplished.

For me writing release notes is a joy moment why should automate it?

I agree that the best quality notes are the ones hand written by a thoughtful human. In my case we had about two years of history with no curated notes, and writing that by hand would have meant significant time investment vs shipping fixes and features. The generator helped us get coverage fast, organized the notes chronologically and categorically. I specifically designed the generator with your your concern in mind, in that it preserves manual edits as well as omissions, so we can gradually curate it into something we are proud of.