From 5bc424d441e1cfd06b0f9b3d4971753d6513eb5d Mon Sep 17 00:00:00 2001 From: MerCry Date: Tue, 24 Feb 2026 11:56:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=88=9D=E5=A7=8B=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6=20=E9=80=82=E9=85=8Dgitea[AC-INIT]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/pr-check.yaml | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/.gitea/workflows/pr-check.yaml b/.gitea/workflows/pr-check.yaml index 53262aa..26d00dc 100644 --- a/.gitea/workflows/pr-check.yaml +++ b/.gitea/workflows/pr-check.yaml @@ -45,14 +45,28 @@ jobs: - name: 1. Commit Message Check shell: sh run: | + set -eu echo "Checking commit messages for [AC-...] or [TASK-...] (range: refs/remotes/origin/main..HEAD)" - # refs/remotes/origin/main is fetched in the checkout step - git log --no-merges --format=%B refs/remotes/origin/main..HEAD | cat - - if git log --no-merges --format=%B refs/remotes/origin/main..HEAD | grep -Eq '\[(AC|TASK)-'; then + + range="refs/remotes/origin/main..HEAD" + + # Ignore tool-generated merge commits and filter out merge titles + msgs="$(git log --format=%B --no-merges "$range" || true)" + + if [ -z "${msgs}" ]; then + echo "WARNING: No non-merge commits found in range ${range}. Skipping commit message gate." + exit 0 + fi + + echo "$msgs" | cat + + # Drop lines like "Merge branch ..." just in case + filtered="$(echo "$msgs" | grep -Ev '^(Merge( branch)? |Merge pull request )' || true)" + + if echo "$filtered" | grep -Eq '\[(AC|TASK)-'; then echo "OK: Found [AC-...] or [TASK-...] in PR commits" else - echo "ERROR: At least one commit message in the PR must contain [AC-...] or [TASK-...]" + echo "ERROR: At least one non-merge commit message in the PR must contain [AC-...] or [TASK-...]" exit 1 fi