logo

drewdevault.com

[mirror] blog and personal website of Drew DeVault git clone https://hacktivis.me/git/mirror/drewdevault.com.git

How-to-write-release-notes.md (5577B)


  1. ---
  2. title: How to write release notes
  3. date: 2021-05-19
  4. outputs: [html, gemtext]
  5. ---
  6. Release notes are a concept most of us are familiar with. When a new software
  7. release is prepared, the release notes tell you what changed, so you understand
  8. what you can expect and how to prepare for the update. They are also
  9. occasionally used to facilitate conversations:
  10. [![](https://imgs.xkcd.com/comics/update_notes_2x.png)](https://xkcd.com/2010/)
  11. Many of the people tasked with writing release notes have never found themselves
  12. on that side of the screen before. If that describes you, I would like to offer
  13. some advice on how to nail it. Note that this mostly applies to free and open
  14. source software, which is the only kind of software which is valid.
  15. So, it's release day, and you're excited about all of the cool new features
  16. you've added in this release. I know the feeling! Your first order of business,
  17. however, is to direct that excitement into the blog or mailing list post
  18. announcing the release, rather than into the release notes. When I read the
  19. release notes, the first thing I need answered is: "what do I need to do when I
  20. upgrade?" You should summarize the breaking changes upfront, and what steps the
  21. user will need to take in order to address them. After this, you may follow up
  22. with a *short* list of the flagship improvements which are included in this
  23. release. Keep it short — remember that we're not advertising the release,
  24. but facilitating the user's upgrade. This is a clerical document.
  25. That said, you do have a good opportunity to add a *small* amount of faffery
  26. after this. Some projects say "$project version $X includes $Y changes from $Z
  27. contributors". The detailed changelog should follow, including every change
  28. which shipped in the release. This is what users are going to scan to see if
  29. that one bug which has been bothering them was addressed in this version. If you
  30. have [good git discipline][0], you can take advantage of [git shortlog][1] to
  31. automatically generate a summary of the changes.
  32. [0]: https://drewdevault.com/2019/02/25/Using-git-with-discipline.html
  33. [1]: https://git-scm.com/docs/git-shortlog
  34. Once you've prepared this document, where should you put it? In my opinion,
  35. there's only one appropriate place for it: an annotated git tag. I don't like
  36. "CHANGELOG" files and I definitely don't like GitHub releases. If you add "-a"
  37. to your "git tag" command, git will fire up an editor and you can fill in your
  38. changelog just like you write your git commit messages. This associates your
  39. changelog with the git data it describes, and automatically distributes it to
  40. all users of the git repository. Most web services which host git repositories
  41. will display it on their UI as well. It's also written in plaintext, which
  42. conveniently prevents you from being too extra with your release notes —
  43. no images or videos or such.
  44. I have written a small tool which will make all of this easier for you to do:
  45. "[semver](https://git.sr.ht/~sircmpwn/dotfiles/tree/master/bin/semver)". This
  46. automatically determines the next release number, optionally runs a custom
  47. script to automate any release bookkeeping you need to do (e.g. updating the
  48. version in your Makefile), then generates the git shortlog and plops you into an
  49. editor to flesh out the release notes. I wrote more about this tool in [How to
  50. fuck up software releases][2].
  51. [2]: https://drewdevault.com/2019/10/12/how-to-fuck-up-releases.html
  52. I hope this advice helps you improve your release notes! Happy shipping.
  53. P.S. Here's an example of a changelog which follows this advice:
  54. ```
  55. wlroots 0.12.0 includes the following breaking changes:
  56. # New release key
  57. The PGP key used to sign this release has changed to
  58. 34FF9526CFEF0E97A340E2E40FDE7BE0E88F5E48. A proof of legitimacy signed with the
  59. previous key is available here:
  60. https://github.com/swaywm/wlroots/issues/2462#issuecomment-723578521
  61. # render/gles2: remove gles2_procs global (#2351)
  62. The wlr_gles2_texture_from_* family of functions are no longer public API.
  63. # output: fix blurred hw cursors with fractional scaling (#2107)
  64. For backends: wlr_output_impl.set_cursor now takes a float "scale" instead of an
  65. int32_t.
  66. # Introduce wlr_output_event_commit (#2315)
  67. The wlr_output.events.commit event now has a data argument of type
  68. struct wlr_output_event_commit * instead of struct wlr_output *.
  69. Antonin Décimo (3):
  70. Fix typos
  71. Fix incorrect format parameters
  72. xwayland: free server in error path
  73. Isaac Freund (6):
  74. xdg-shell: split last-acked and current state
  75. layer-shell: add for_each_popup
  76. layer-shell: error on 0 dimension without anchors
  77. xdg_positioner: remove unused field
  78. wlr_drag: remove unused point_destroy field
  79. xwayland: remove unused listener
  80. Roman Gilg (3):
  81. output-management-v1: add head identifying events
  82. output-management-v1: send head identifying information
  83. output-management-v1: send complete head state on enable change
  84. Ryan Walklin (4):
  85. Implement logind session SetType method to change session type to wayland
  86. Also set XDG_SESSION_TYPE
  87. Don't set XDG_SESSION_TYPE unless logind SetType succeeds
  88. Quieten failure to set login session type
  89. Scott Moreau (2):
  90. xwm: Set _NET_WM_STATE_FOCUSED property for the focused surface
  91. foreign toplevel: Fix whitespace error
  92. ```
  93. *Note: I borrowed the real wlroots 0.12.0 release notes and trimmed them down
  94. for illustrative purposes. The actual release included a lot more changes and
  95. does not actually follow all of my recommendations.*