From f1291edf432a048e161d991fdbfc000f63af9b32 Mon Sep 17 00:00:00 2001 From: Marco Donadoni Date: Tue, 6 Aug 2024 15:25:30 +0200 Subject: [PATCH] ci(commitlint): check PR number presence in merge commits (#810) --- .github/workflows/ci.yml | 2 +- run-tests.sh | 19 +++++++++++-------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d3203a84..bba12a96 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -33,7 +33,7 @@ jobs: - name: Check commit message compliance of the pull request if: github.event_name == 'pull_request' run: | - ./run-tests.sh --check-commitlint ${{ github.event.pull_request.head.sha }}~${{ github.event.pull_request.commits }} ${{ github.event.pull_request.head.sha }} ${{ github.event.pull_request.number }} + ./run-tests.sh --check-commitlint ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }} ${{ github.event.pull_request.number }} lint-shellcheck: runs-on: ubuntu-24.04 diff --git a/run-tests.sh b/run-tests.sh index e21ba846..90d707b6 100755 --- a/run-tests.sh +++ b/run-tests.sh @@ -19,20 +19,23 @@ check_commitlint () { commit_hash=$(echo "$line" | cut -d ' ' -f 1) commit_title=$(echo "$line" | cut -d ' ' -f 2-) commit_number_of_parents=$(git rev-list --parents "$commit_hash" -n1 | awk '{print NF-1}') + # (i) skip checking release commits generated by Release Please + if [ "$commit_number_of_parents" -le 1 ] && echo "$commit_title" | grep -qP "^chore\(.*\): release"; then + continue + fi + # (ii) check presence of PR number + if ! echo "$commit_title" | grep -qP "\(\#$pr\)$"; then + echo "✖ Headline does not end by '(#$pr)' PR number: $commit_title" + found=1 + fi + # (iii) check absence of merge commits in feature branches if [ "$commit_number_of_parents" -gt 1 ]; then if echo "$commit_title" | grep -qP "^chore\(.*\): merge "; then - break + break # skip checking maint-to-master merge commits else echo "✖ Merge commits are not allowed in feature branches: $commit_title" found=1 fi - elif echo "$commit_title" | grep -qP "^chore\(.*\): release"; then - true - elif echo "$commit_title" | grep -qP "\(\#$pr\)$"; then - true - else - echo "✖ Headline does not end by '(#$pr)' PR number: $commit_title" - found=1 fi done < <(git log "$from..$to" --format="%H %s") if [ $found -gt 0 ]; then