Add a new CI step to detect raw issue references in commit messages #4916
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: GNU Commit Format Checker | |
on: | |
pull_request: | |
branches: | |
- master | |
- gcc-patch-dev | |
merge_group: | |
jobs: | |
check-commit-changelogs: | |
runs-on: ubuntu-latest | |
name: check-changelogs | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
ref: ${{ github.event.pull_request.head.sha }} | |
fetch-depth: 0 | |
- name: Install Deps | |
run: | | |
sudo apt-get update; | |
sudo apt-get install -y \ | |
python3 \ | |
python3-git | |
- name: GCC check PR Commits | |
run: | | |
if ${{ github.event_name == 'pull_request' }}; then | |
python3 contrib/gcc-changelog/git_check_commit.py origin/${{ github.event.pull_request.base.ref }}..${{ github.event.pull_request.head.sha }} | |
fi | |
check-commit-prefixes: | |
runs-on: ubuntu-latest | |
name: check-gccrs-prefix | |
if: ${{ github.base_ref == 'gcc-patch-dev' }} # master commits don't need the gccrs prefix | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
ref: ${{ github.event.pull_request.head.sha }} | |
fetch-depth: 0 | |
- name: Check for `gccrs` prefix | |
run: | | |
retval=0 | |
for commit in $(git rev-list origin/${{ github.event.pull_request.base.ref }}..${{ github.event.pull_request.head.sha }}); | |
do | |
echo -n "Checking gccrs prefix for $commit: " >> results | |
if [[ $(git log -1 --format="%s" $commit) = gccrs:* ]]; then | |
echo "OK" >> results | |
else | |
retval=1 | |
echo "KO" >> results | |
fi | |
done | |
exit $retval | |
check-commit-signoff: | |
runs-on: ubuntu-latest | |
name: check-commit-signoff | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
ref: ${{ github.event.pull_request.head.sha }} | |
fetch-depth: 0 | |
- name: Check for DCO Sign-Off line/possible FSF Copyright Assignment | |
run: | | |
retval=0; | |
rev_list="origin/${{ github.event.pull_request.base.ref }}..${{ github.event.pull_request.head.sha }}" | |
for commit in $(git rev-list --reverse "$rev_list"); do | |
echo -n "Checking for DCO Sign-Off for commit $commit... "; | |
if [[ $(git log "$commit" -1 --format="%B" | tail -n 2) = Signed-off-by:* ]]; then | |
echo "OK"; | |
continue; | |
fi | |
author=$(git log -1 --format=%an "$commit"); | |
if [[ "$(( $(git log --author="$author"|wc -l) - $(git log --author="$author" --grep='Signed-off-by'|wc -l )))" -ne 0 ]]; then | |
echo "OK" | |
echo "$author probably has FSF Copyright Assignment. Check manually that the lack of DCO Sign-Off is allowed." | |
else | |
echo "KO" | |
retval=1; | |
fi | |
done; | |
## check no Signed-off-by in the middle. | |
while read -r f; do | |
echo -n "$f : " | |
if awk 'BEGIN { in_footer = 0; error = 0;} | |
{ DEFAULT = 1; } | |
/^(Signed-off|Co-authored|Reviewed|Tested)-by/ { in_footer = 1; DEFAULT = 0;} | |
/^\s*$/ { DEFAULT = 0; } | |
DEFAULT { if (in_footer == 1) { printf $0 " appears after some Signed-off-by/Co-authored-by/Tested-by/Reviewed-by line "; error = 1; exit (1);} }'; | |
then | |
echo OK | |
else | |
echo KO | |
retval=1 | |
fi < <(git log "$f" -1 --format="%B") | |
done < <(git rev-list --reverse "$rev_list" ) | |
exit $retval; | |
check-issue-reference: | |
runs-on: ubuntu-latest | |
continue-on-error: true # We do not want to block merge if it is a legitimate GCC bugzilla reference. | |
name: check-issue-reference | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
ref: ${{ github.event.pull_request.head.sha }} | |
fetch-depth: 0 | |
- name: Check for issue number reference in commit messages | |
run: | | |
retval=0; | |
rev_list="origin/${{ github.event.pull_request.base.ref }}..${{ github.event.pull_request.head.sha }}" | |
for commit in $(git rev-list --reverse "$rev_list"); do | |
if [ "$(git log --format=%B -n 1 \"$commit\" | grep '#[0-9]*' | grep -v -i 'Rust-GCC/gccrs#[0-9]*' | wc -l)" -ne 0 ]; then | |
echo "$commit: KO" | |
retval=1 | |
else | |
echo "$commit: OK" | |
fi | |
done; | |
if [ "$retval" -ne 0 ]; then | |
echo "Some raw issue references were found (eg. #4242)." | |
echo "You shall rewrite the faulty commit message with this format: Rust-GCC/gccrs#4242" | |
echo "You may ignore this CI step if it represents a valid GCC bugzilla reference instead." | |
fi | |
exit $retval; |