From 87f8fc14859801ed79155d12c8ab1f53eb2296ae Mon Sep 17 00:00:00 2001 From: JianFeeeee Date: Tue, 29 Sep 2026 14:03:25 +0800 Subject: [PATCH] =?UTF-8?q?ci(release):=20[skip-release-tests]=20=E6=A0=87?= =?UTF-8?q?=E8=AE=B0=E6=94=B9=E6=9F=A5=E5=8F=91=E7=89=88=E6=8F=90=E4=BA=A4?= =?UTF-8?q?=EF=BC=8C=E4=B8=8D=E5=86=8D=E6=9F=A5=20HEAD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原实现用 `git log -1 --pretty=%B`(即 HEAD)找标记。但发版提交之后 往往还会跟几个提交(同步 workflow、改文档、修脚本),HEAD 一移动, 标记就被顶掉 —— 跳过机制**静默失效**,流水线又回去撞旧线的红测试。 改为查**改动 internal/meta/meta.go 的那个提交**(语义上正是「发版提交」): REL_COMMIT=$(git log -1 --format=%H -- internal/meta/meta.go) 顺带把 grep -qF 换成 case 匹配,避免多层引号嵌套。 自测(本地 worktree): 发版提交 472d908 → 命中标记 ✓ HEAD fa5b1b4 → 不命中(旧逻辑会在此静默失效) actionlint 全绿。 --- .github/workflows/release.yml | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d7584b6..616f461 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -96,11 +96,19 @@ jobs: # 是否跳过发版前的 go test 门(默认不跳)。 # 两个来源:手动触发的输入,或发版 commit 里的显式标记。 # 后者使决定落在定义该次发版的 commit 上,可以从 git 历史审计。 + # + # 标记查在**改动 meta.Version 的那个提交**上,而不是 HEAD: + # 发版提交之后往往还会跟几个提交(如同步 workflow、改文档), + # 若只看 HEAD,标记就会被后续提交顶掉,静默失效。 SKIP="${{ inputs.skip_tests }}" MARKER=0 - if git log -1 --pretty=%B | grep -qF '[skip-release-tests]'; then - MARKER=1 - fi + REL_COMMIT=$(git log -1 --format=%H -- internal/meta/meta.go) + REL_MSG=$(git log -1 --pretty=%B "$REL_COMMIT") + case "$REL_MSG" in + *'[skip-release-tests]'*) MARKER=1 ;; + *) MARKER=0 ;; + esac + echo " 发版提交: ${REL_COMMIT:0:12}" if [ "$SKIP" = "true" ] || [ "$MARKER" = "1" ]; then echo "skip_tests=true" >> "$GITHUB_OUTPUT" echo ""