Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add a script to generate a draft CHANGELOG update #2377

Merged
merged 1 commit into from
Jun 27, 2023

Conversation

nickcharlton
Copy link
Member

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

Copy link
Collaborator

@pablobm pablobm left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Amazing!

bin/build-changelog Outdated Show resolved Hide resolved
@nickcharlton nickcharlton force-pushed the nc-add-script-to-build-changelog branch from ef15490 to ebccde7 Compare June 27, 2023 11:09
@nickcharlton
Copy link
Member Author

It's been bugging me that I can't seem to work out how to split this line out:

commits_since=$(git log --author="^(?!dependabot).*$" --perl-regexp "${revision_range}" "${commit_format}")

Everything I've tried breaks the regex, but it's taken me too long to come up with anything, so I'm giving in and accepting it how it is. If anyone knows how to do such a thing in a POSIX shell compliant way, I'd love to know.

@nickcharlton nickcharlton force-pushed the nc-add-script-to-build-changelog branch from ebccde7 to 9512598 Compare June 27, 2023 11:12
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
@nickcharlton nickcharlton force-pushed the nc-add-script-to-build-changelog branch from 9512598 to 4f4db78 Compare June 27, 2023 14:44
@nickcharlton nickcharlton merged commit 8e5f6aa into main Jun 27, 2023
@nickcharlton nickcharlton deleted the nc-add-script-to-build-changelog branch June 27, 2023 14:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants