Skip to content

Commit

Permalink
Introduce release notes template
Browse files Browse the repository at this point in the history
This PR introduce the release notes template using Jinja [1]. Also
improved the script to merge changelogs to include the upcoming
.unreleased/RELEASE_NOTES.md.j2 where we'll actually write the release
notes for the next release.
  • Loading branch information
fabriziomello committed Apr 29, 2024
1 parent acc73b9 commit 72bb953
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 12 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/changelog-check.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ jobs:
folder=".unreleased"
# Get the list of modified files in this pull request
files=$(git --no-pager diff --diff-filter=ACMR --name-only $(git merge-base HEAD ${{ github.event.pull_request.base.sha }}) HEAD)
files=$(git --no-pager diff --diff-filter=ACMR --name-only $(git merge-base HEAD ${{ github.event.pull_request.base.sha }}) HEAD ':!.unreleased/*.j2')
if echo "$BODY" | egrep -qsi "Disable-check:[[:space:]]*force-changelog-file"; then
# skip changelog checks if forced
Expand Down
16 changes: 16 additions & 0 deletions .unreleased/template.release_notes.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{#
# Variables:
# release_current = the release version that has being builded
# release_previous = previous release version
# release_date = date of the release in format YYYY-MM-DD
#}
## {{ release_current }} ({{ release_date }})

This release contains performance improvements and bug fixes since
the {{ release_previous }} release. We recommend that you upgrade at the next
available opportunity.

In addition, it includes these noteworthy features:
* feature 1
* feature 2
* feature N
50 changes: 39 additions & 11 deletions scripts/merge_changelogs.sh
Original file line number Diff line number Diff line change
@@ -1,14 +1,42 @@
#!/bin/bash
#!/usr/bin/env bash

# skip the template file
echo "**Features**"
grep -i '^Implements:' .unreleased/* | grep -v '.unreleased/template.rfc822' | cut -d: -f3- | sort | uniq | sed -e 's/^[[:space:]]*//' -e 's/^/* /'
echo
#
# This script build a CHANGELOG.md entry for a new release
#

echo "**Bugfixes**"
grep -i '^Fixes:' .unreleased/* | grep -v '.unreleased/template.rfc822' | cut -d: -f3- | sort | uniq | sed -e 's/^[[:space:]]*//' -e 's/^/* /'
echo
RELEASE_NOTES_TEMPLATE='.unreleased/RELEASE_NOTES.md.j2'

echo "**Thanks**"
grep -i '^Thanks:' .unreleased/* | grep -v '.unreleased/template.rfc822' | cut -d: -f3- | sort | sed -e 's/^[[:space:]]*//' -e 's/^/* /'
echo
echo_changelog() {
echo "${1}"
# skip the template and release notes files
grep -i "${2}" .unreleased/* | \
grep -v '.unreleased/template.*' | \
grep -v "${RELEASE_NOTES_TEMPLATE}" | \
cut -d: -f3- | sort | uniq | sed -e 's/^[[:space:]]*//' -e 's/^/* /'
echo
}

get_version_config_var() {
grep "${1}" version.config | awk '{print $3}' | sed 's/-dev//'
}

RELEASE_CURRENT=$(get_version_config_var '^version')
RELEASE_PREVIOUS=$(get_version_config_var '^update_from_version')
RELEASE_DATE=$(date +"%Y-%m-%d")

#
# To install jinja template client:
# $ pip install jinja-cli
#
if [ -f "${RELEASE_NOTES_TEMPLATE}" ];
then
jinja \
-D release_current "${RELEASE_CURRENT}" \
-D release_previous "${RELEASE_PREVIOUS}" \
-D release_date "${RELEASE_DATE}" ${RELEASE_NOTES_TEMPLATE}
echo
fi

echo_changelog '**Features**' '^Implements:'
echo_changelog '**Bugfixes**' '^Fixes:'
echo_changelog '**Thanks**' '^Thanks:'

0 comments on commit 72bb953

Please sign in to comment.