diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 6a3c3ce1..4bdd63f8 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -17,4 +17,4 @@ jobs: env: VERSION: ${{ matrix.emacs_version }} run: >- - make docker CMD="make lint" + make docker CMD="make lint lint-changelog" diff --git a/Makefile b/Makefile index 24fda898..1e2b7aa1 100644 --- a/Makefile +++ b/Makefile @@ -107,3 +107,7 @@ fmt-changed: ## Get list of changed formatters on this PR .PHONY: fmt-test # env var: FORMATTERS fmt-test: ## Actually run formatter tests @test/formatters/run-func.bash apheleia-ft-test + +.PHONY: lint-changelog +lint-changelog: ## Report an error if the changelog wasn't updated + @scripts/lint-changelog.bash diff --git a/scripts/lint-changelog.bash b/scripts/lint-changelog.bash new file mode 100755 index 00000000..99e3df04 --- /dev/null +++ b/scripts/lint-changelog.bash @@ -0,0 +1,39 @@ +#!/usr/bin/env bash + +set -euo pipefail + +changed_files="$(git diff --name-only origin/main)" +if [[ -z "${changed_files}" ]]; then + exit 0 +fi + +commit_messages="$(git log origin/main..)" +if tr '[:upper:]' '[:lower:]' <<< "${commit_messages}" | \ + tr '\n' ' ' | sed -E 's/[[:space:]]+/ /g' | \ + grep -q "no changelog update needed"; then + exit 0 +fi + +if ! grep -qF CHANGELOG.md <<< "${changed_files}"; then + cat <<"EOF" +<== lint-changelog ==> + +Please update the changelog to cover the changes you made. Or, if the +changes don't need to be documented in the changelog, add the text "no +changelog update needed" to one of your commit messages. Line breaks +and case sensitivity do not matter. + +Remember, when writing a changelog entry, the idea is a user can use +it to understand what differences they might notice after upgrading to +the new version. So, include enough context for someone who isn't +working directly on the code to understand. If user-visible behavior +hasn't changed since the last release, for example because you're +fixing a bug that was just introduced, then you don't need a changelog +entry. + +<== lint-changelog ==> + +EOF + echo >&2 "lint-changelog: Please update the changelog to cover the changes you made." + exit 1 +fi