GNU Commit Format Checker #4918
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; |