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 (5552B)


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