The Subtle Art of the Changelog
commandbar.com
commandbar.com
https://www.gnu.org/prep/standards/standards.html#Change-Log...
Of course, what everybody is now calling “Changelog” used to be known as a “NEWS” file:
Now, we use https://github.com/twisted/towncrier . Every change goes through pull requests, and every PR must have a newsfragment file - and we enforce this with a test that fails if it isn't present (with convenience functions of rewriting the number to match the PR if you name the news file XXX.{category}). If it's not a user-facing change, then we just have a category that is ignored.
On releases (or on individual PRS along the way), the release manager generates the changelog, but also edits them into a relatively coherent style (or rewrites developers news fragments along the way).
Every change has a note written aimed at the user. Every entry in the changelog has a link to the relevant PR or commit. We have much better changelogs now.
I then take that and try to pick the top 3 or so items for use in the summary.
I then rewrite the summary condensing into a tweet.
It's a lot of work!
But it's a godsend for those who care about it (as you obviously do or you wouldn't put in the effort). It was only through a recent changelog entry in Emscripten that i was able to locate a truly obscure bug in the sqlite3 wasm builds (triggered by a default-value change in Emscripten's stack size). Without that hint i'd _still_ be searching for the cause of that bug (more than a month later).
Fairly boring, but useful.
Here's a changelog that covers about 14 years: https://github.com/bmlt-enabled/bmlt-root-server/blob/main/C...
The first ten years are all me, but a new team has taken the reins, and are doing fantastic.
3.X is 100% theirs.
1. Categorised list of human-written points, e.g. breaking changes/features/bugfixes for developer facing software, features with overview of how to use them for end user facing (see vs code)
2. Breaking changes, followed by git shortlog
3. Developer picked highlights only
4. Literally just the git shortlog
5. A bunch of issue tracker links (especially if you later decomm that issues tracker)
6. Nothing
Would be a cool (but painful to do) analysis to look at whether this happens and at what scale companies throw in the towel.
¹ https://github.com/ohmyzsh/ohmyzsh/commits/master
² https://github.com/ohmyzsh/ohmyzsh/blob/master/tools/changel...
The result is something like this
BREAKING CHANGES:
- 61dd368 [nats]
Rename `nsc` plugin to `nats`
Features:
- eb2147c [aws] Load profiles from credentials file (#11196)
- 4b5076b [extract] Add `pbzip2` and `pixz` (#11435)
Bug fixes:
- f1a8000 [brew] Rename `buf` alias to `bfu`
- df65835 [clipboard] Move wsl detection to higher priority (#11440)
Performance:
- ba8777f [fzf] Speed up startup on debian (#11122)
Documentation:
- 6dc6646 [git] Add missing entries and run formatter
- 0f71cfd [qrsvg] Fix command example (#11436)https://twitter.com/jaredsinclair/status/633407338347634688?...
To a dark place this line of thought will carry us. Changelogs are first and foremost about sharing information effectively. Never lose sight of that.