From 4fac04b4150039a67a2b7d6cfeb7472b76ad5465 Mon Sep 17 00:00:00 2001 From: ReSerendipity Date: Thu, 24 Sep 2026 14:59:07 +0800 Subject: [PATCH] =?UTF-8?q?ci:=20=E8=AE=A9=20DCO=20=E5=9C=A8=20bot=20PR=20?= =?UTF-8?q?=E4=B8=8A=E7=9C=9F=E8=B7=91=EF=BC=8Cdocker-build=20=E5=8A=A0?= =?UTF-8?q?=E5=B9=B6=E5=8F=91=E5=8E=BB=E9=87=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit dco.yml:删掉作业级 if: github.actor != 'dependabot[bot]'。 实测该行让作业在 #148/#149/#150 上结论为 skipped —— 被 skip 的检查拿不到 conclusion=pass,于是 DCO 永远无法设为必需检查。豁免本来就在脚本体内按 "提交作者"判(BOT_AUTHOR_EMAILS 含 dependabot 与 github-actions 两个邮箱), 放开后 bot PR 会真跑并 exit 0。四场景已用工作流原文脚本在临时仓验过: dependabot 未签名=pass / github-actions 未签名=pass / 人类未签名=仍 fail / 人类带签名=pass,闸门不会因此变永真。 docker-build.yml:加 concurrency = workflow+ref、cancel-in-progress=true。 该作业 push:false + load:true,不写注册表也不用 buildx 层缓存,取消无外部副作用; 单程 20+ 分钟,同分支连续 push 不必再堆队列。 docker-publish.yml 本次不动:它写共享层缓存(cache-to type=gha,scope=tts-mm), 且文件内注释记录了 2026-09-22 的实测结论 —— 恒定 group 是有意做的全局互斥, "按 ref 分组"当时被否掉(重叠的两条恰是不同 ref),而 cancel-in-progress 关掉是 因为中途取消会留半份层缓存、并可能让 :latest 停在中间态。改它等于推翻一次实测, 留给维护者裁定。 Signed-off-by: ReSerendipity --- .github/workflows/dco.yml | 14 ++++++++------ .github/workflows/docker-build.yml | 7 +++++++ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/.github/workflows/dco.yml b/.github/workflows/dco.yml index c2e60b2..3300c86 100644 --- a/.github/workflows/dco.yml +++ b/.github/workflows/dco.yml @@ -11,12 +11,14 @@ jobs: dco: name: DCO Check # DCO 的 Signed-off-by 是对**人类**贡献者的来源认证;机器生成的 commit 无从签名。 - # 原先这里只放过 dependabot[bot],于是 release-please 开的 release PR 永远红: - # 它的提交作者是 github-actions[bot](用 GitHub API 建提交,不走本地 git, - # 工作流里的 GIT_AUTHOR_* 环境变量对它无效),既没有也**不可能有** Signed-off-by。 - # 净效果 = 分支保护要求 DCO 的仓库里,自动发版路径结构上不可用(#115/#120/#132 都撞在这)。 - # 现在按"提交作者"而不是"PR 作者"判,豁免名单见脚本里的 BOT_AUTHOR_EMAILS。 - if: github.actor != 'dependabot[bot]' + # 豁免按"提交作者"而不是"PR 作者"判,名单见脚本里的 BOT_AUTHOR_EMAILS: + # release-please 的 release PR 作者是 github-actions[bot](用 GitHub API 建提交, + # 不走本地 git,工作流里的 GIT_AUTHOR_* 对它无效),既没有也**不可能有** Signed-off-by。 + # + # 这里原先还挂着一行 `if: github.actor != 'dependabot[bot]'`,删掉它的原因是实测: + # 它让作业在 dependabot PR 上整体 **skipped**(#148/#149/#150 三条的 dco 作业结论都是 + # skipped),而 skipped 的检查拿不到 conclusion=pass —— 于是 DCO 永远无法被设为必需检查。 + # 脚本体自己会跳过机器提交并 `exit 0`,所以放开后 bot PR 上是真 pass,不是变红。 runs-on: ubuntu-latest steps: - name: Checkout diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index 4d2dc3c..18600f4 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -10,6 +10,13 @@ permissions: contents: read security-events: write +# 同一 PR / 同一分支的连续 push 只留最新一条:本作业 `push: false` + `load: true`, +# 既不写注册表也不用 buildx 层缓存(对比 docker-publish.yml 的固定 scope gha 缓存), +# 所以被后来者取消没有外部副作用;而单次要 20+ 分钟,堆队列纯属浪费。 +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: build: name: Build & Scan Image