From d7d9ec89d44391d41e6433a004d99d031a2b2606 Mon Sep 17 00:00:00 2001 From: randypanding Date: Sat, 22 Aug 2026 12:35:43 +0800 Subject: [PATCH] =?UTF-8?q?fix(gateway):=20org-adr-required=20=E8=A1=A5?= =?UTF-8?q?=E5=85=85=20PR=20head=20=E7=9A=84=20ADR=20=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增 ADR 在合入前不在 main 分支 decisions/ 清单中——原检查仅拉主线清单, 对『PR 新增并自引的新 ADR』误判幽灵 ADR。补充 PR files API 抽取 decisions/ADR-NNNN-* 文件名,合并进存在性校验池(与 agent-registry gate.yml 的 adr-required 同逻辑)。 Card: Cloudbird-Software/.github#259 Ref: ADR-0046 --- .github/workflows/org-gate.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/org-gate.yml b/.github/workflows/org-gate.yml index 744676c..6495b0a 100644 --- a/.github/workflows/org-gate.yml +++ b/.github/workflows/org-gate.yml @@ -91,11 +91,17 @@ jobs: echo "::error::agent-registry/decisions 清单拉取失败——ADR 存在性无法校验(fail-closed)" exit 1 fi + # 补充 PR 自身新增的 ADR 文件(新增 ADR 在合入前不在 main 分支清单中——仅靠 + # 主线清单会误判幽灵 ADR;与 agent-registry gate.yml 同逻辑:PR head 的 + # decisions/ 文件同样计入存在性校验)。 + PR_ADR_LISTING=$(gh api "$PR_API/files?per_page=100" --paginate \ + --jq '.[] | select(.filename | startswith("decisions/")) | .filename | capture("^decisions/(ADR-[0-9]{4}-[^/]+)$") | .captures[0].string' 2>/dev/null) + ADR_LISTING=$(printf '%s\n%s' "$ADR_LISTING" "$PR_ADR_LISTING" | grep -v '^$' | sort -u) MISSING=0 for ref in $( { echo "$PR_TITLE"; echo "$PR_BODY"; } | grep -oE "$ADR_RE" | sort -u ); do num="${ref#ADR-}" grep -q "^ADR-${num}-" <<<"$ADR_LISTING" || { - echo "::error::引用的 ${ref} 在 agent-registry/decisions/ 无对应文件(幽灵 ADR)"; MISSING=1; } + echo "::error::引用的 ${ref} 在 agent-registry/decisions/(含 PR head)无对应文件(幽灵 ADR)"; MISSING=1; } done exit $MISSING