@@ -241,7 +241,7 @@ The following are the steps for making the release:
241241
2422422 . Edit CHANGES.md to reflect the correct date of the release and ensure it
243243 includes any last-minute changes that were made during beta or release
244- candidate stages.
244+ candidate stages. Please see the section "Generating release notes" below.
245245
2462463 . Push it to ** your** GitHub, make sure it passes CI.
247247
@@ -352,3 +352,86 @@ Odds and ends to do after the tag is pushed and the announcements are sent:
352352 (blank) heading for the next patch or release.
353353
354354
355+ ## Generating release notes
356+
357+ We strongly encourage the use of "conventional commit" prefixes in commit
358+ messages. See [ CONTRIBUTING.md] ( CONTRIBUTING.md#commit-messages ) for details.
359+
360+ Many PRs are submitted (even by the author of this section you are now
361+ reading!) without the conventional commit prefix. The person who approves and
362+ merges the commit should take responsibility during the merge process to edit
363+ the commit message to add the appropriate prefix (and for that matter, to edit
364+ any part of the commit message for clarity). But at the end of the day, if we
365+ end up with some commits lacking a conventional commit prefix, it's no big
366+ deal -- we can fix it all up by hand when we make the release notes. But
367+ having CC prefixes in as many commit messages possible helps make the release
368+ notes process be simpler and more automated.
369+
370+ We have been using the [ git-cliff] ( https://github.com/orhun/git-cliff ) tool
371+ as the starting point for relese notes. The command we use is:
372+
373+ git cliff -c src/doc/cliff.toml -d v1.2.3.4..HEAD > cliff.out.md
374+
375+ where v1.2.3.4 in this example is the tag of the last release. You could also
376+ use commit hashes to denote the range of changes you want to document.
377+
378+ ** For monthly patch releases**
379+
380+ We have found that the git-cliff output is most of what we need for the patch
381+ releases, and can be copied into the CHANGES.md file with only some minor
382+ editing needed. The template for the patch release notes can be found in
383+ [ Changes-skeleton-patch.md] ( docs/dev/Changes-skeleton-patch.md ) .
384+
385+ * Get rid of the headings that git-cliff generates. We don't use the headings
386+ for the patch releases.
387+ * Add prefixes to any commits that don't have them (they will be marked as
388+ "uncategorized" by git-cliff), and feel free to change any of the existing
389+ prefixes that you think are wrong or could be improved for clarity.
390+ * Rearrange the order of the entries to be logical and readable. I prefer the
391+ order: feature enhancements, bug fixes, build system fixes that might impact
392+ users, internal changes, test improvements, documentation and administrative
393+ changes.
394+ * For patch releases, feel free to omit any entries that you think are not
395+ user-facing and are too minor to be worth mentioning in the release notes.
396+
397+ Strive to keep the release notes just long enough for users to know if the
398+ patch contains any fixes relevant to them, but short enough to be read at a
399+ glance and without extraneous detail.
400+
401+ Here is an example of well-constructed monthly patch release notes:
402+ https://github.com/AcademySoftwareFoundation/OpenImageIO/releases/tag/v2.5.12.0
403+
404+ ** For annual major/minor releases**
405+
406+ For major releases, the git-cliff output is just a starting point and need
407+ significant editing to get the detail and quality level we expect for our
408+ major releases. A simple bullet list of commits is not sufficient -- we aim
409+ for a prose-based description of important changes that "tell the story" of
410+ the year's work and will be thoroughly understood by our stakeholders who need
411+ to understand what has changed.
412+
413+ * Copy all the headings from [ Changes-skeleton-major.md] ( docs/dev/Changes-skeleton-major.md )
414+ or the previous year's release notes to get the skeleton of the major and
415+ minor headers that you fit everything into. Note that it mostly corresponds
416+ to sections of the git-cliff output, but with a more carefully constructed
417+ hierarchy of categories.
418+ * Add prefixes to any commits that don't have them (they will be marked as
419+ "uncategorized" by git-cliff), and feel free to change any of the existing
420+ prefixes that you think are wrong or could be improved for clarity.
421+ * Rearrange the git-cliff output into the hierarchy of our preferred major
422+ release notes organization. Within each section and subsection, group
423+ similar changes together. The chronological order of the commits isn't as
424+ important as clearly explaining what changed over the course of the year.
425+ * The git-cliff output is a good starting point for populating the notes with
426+ every PR, plus automatically adding a reference and link to the PR and the
427+ name of the author of the patch.
428+ * Look with a skeptical eye at the one-line bullet points from git-cliff (i.e,
429+ from the first line of each PR's commit message). Often, they are too terse
430+ or tend to [ bury the lede] ( https://www.dictionary.com/e/slang/bury-the-lede/ ) .
431+ Expand into as much explanation is necessary for users who need to know
432+ about the change or feature to know whether it is relevant and have some
433+ idea what to do or that they should look at the relevant PRs for more
434+ detail.
435+
436+ Here is an example of well-constructed annual major release notes:
437+ https://github.com/AcademySoftwareFoundation/OpenImageIO/releases/tag/v2.5.4.0
0 commit comments