ci: create CI job to check if news needs to be updated (#21142)

If any commit message in the PR is either of type "feat" or is a
breaking change, then there's a high probability that news.txt should be
updated. Give an error if news.txt hasn't been updated in that case.

This workflow cannot 100% correctly determine if news.txt should be
updated even if the commit messages were exactly correct. The entries in
news.txt is determined by changes between releases, while the commit
messages are based on the master branch. While it is an approximation,
it is still a useful enough one that it's still valuable to have this
job as a reminder even if it gives an error if it shouldn't. In these
cases it is perfectly fine to ignore the failure for this job.
This commit is contained in:
dundargoc 2022-12-05 11:58:30 +01:00 committed by GitHub
parent 5c52971f60
commit 6c285a6e49
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

31
.github/workflows/news.yml vendored Normal file
View File

@ -0,0 +1,31 @@
name: "news.txt check"
on:
pull_request:
branches:
- 'master'
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
ref: ${{ github.event.pull_request.head.sha }}
fetch-depth: ${{ github.event.pull_request.commits }}
- name: news.txt needs to be updated
run: |
for commit in $(git rev-list HEAD); do
message=$(git log -n1 --pretty=format:%s $commit)
type="$(echo "$message" | sed -E 's|([[:alpha:]]+)(\(.*\))?!?:.*|\1|')"
breaking="$(echo "$message" | sed -E 's|[[:alpha:]]+(\(.*\))?!:.*|breaking-change|')"
if [[ "$type" == "feat" ]] || [[ "$breaking" == "breaking-change" ]]; then
git diff HEAD~$((${{ github.event.pull_request.commits }}-1)) --name-only | grep runtime/doc/news.txt ||
{
echo "
Pull request includes a new feature or a breaking change, but
news.txt hasn't been updated yet. news.txt is our primary way of
communicating changes to users so it's important to keep it up to
date."
exit 1
}
fi
done