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@v4 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@v4 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@v4 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@v4 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 or external repository reference instead." fi exit $retval;