Skip to content

Commit

Permalink
Add a script to generate a draft CHANGELOG update (#2377)
Browse files Browse the repository at this point in the history
The majority of the effort in making a new release is in putting
together a good CHANGELOG. Back in #1968, we added a script to generate
a list of templates that had changed since the last (provided) tag.
This helped ensure we'd communicate any template changes, whilst
requiring little effort to do so.

The next step in assembling a CHANGELOG was to put together a list of
commits the release would include. By convention this has been:

    [KEY] [PR NUMBER] Commit Message

So far, this has required a lot of manual text manipulation, and when
the commit wasn't introduced via a squash on GitHub, the PR reference
needed to be tracked down (which could take some time).

This script attempts to automate the rest of this process by assembling
a draft that needs much less effort to publish. By using the GitHub
CLI, we're able to match commits back to the originating pull request
and then automate much of the text manipulation which was needed before.

We then pull over the template warning checker from before, but in
this implementation skip over the `spec` changes, as they shouldn't
matter to end users.

We can also assume we want changes since the last tag, to remove the
need to provide an argument.

An example run (trimmed):

    The following templates have changed since v0.18.0:

      app/views/administrate/application/_collection.html.erb
      app/views/administrate/application/_index_header.html.erb

    If your application overrides any of them, make sure to review your
    custom templates to ensure that they remain compatible.

    * [] [#2367] Update to Ruby 3.2.2
    * [] [#2371] Adapt to deprecations in the Faker API
    * [] [#2348] Field::Select to handle ActiveRecord enums correctly

https://cli.github.com/
https://git-scm.com/docs/pretty-formats#Documentation/pretty-formats.txt-trailersoptions
https://stackoverflow.com/a/18558871
https://stackoverflow.com/a/30035045
  • Loading branch information
nickcharlton committed Jun 27, 2023
1 parent 03226f1 commit 8e5f6aa
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 37 deletions.
38 changes: 38 additions & 0 deletions bin/build-changelog
@@ -0,0 +1,38 @@
#!/bin/sh

set -e

if ! command -v gh > /dev/null; then
echo "Please install the GitHub CLI: https://cli.github.com/"
exit 1
fi

last_release=$(git describe --tag --abbrev=0)

template_changes=$(git diff --name-only "${last_release}" | grep html.erb)

echo "The following templates have changed since ${last_release}:"
echo
echo "$template_changes" | while read -r line; do
if case $line in spec*) false;; esac; then
echo " ${line}"
fi
done
echo
echo "If your application overrides any of them, make sure to review your"
echo "custom templates to ensure that they remain compatible."
echo

revision_range="${last_release}..origin/main"
commit_format="--pretty=tformat:%h %s"
commits_since=$(git log --author="^(?!dependabot).*$" --perl-regexp "${revision_range}" "${commit_format}")

echo "$commits_since" | while read -r line; do
sha=$(echo "${line}" | awk '{print $1}')
commit_message=$(echo "${line}" | awk '{print substr($0, index($0, " ")+1)}')

pr_number=$(gh pr list --search "$sha" --state merged --json number --jq '.[].number')
trimmed_commit=$(echo "${commit_message}"| sed "s/(\#$pr_number)//g")

echo "* [] [#${pr_number}] ${trimmed_commit}"
done
37 changes: 0 additions & 37 deletions bin/changelog

This file was deleted.

0 comments on commit 8e5f6aa

Please sign in to comment.