From c16c78aaf8bed4c409d58e0360f4cfcde61fbc83 Mon Sep 17 00:00:00 2001 From: claude_dev Date: Fri, 14 Aug 2026 19:52:03 +0800 Subject: [PATCH] =?UTF-8?q?ci(vps-gate):=20vps-deploy=E5=8A=A0=E5=8F=A3?= =?UTF-8?q?=E4=BB=A4=E9=97=B8=E9=97=A8(=E7=94=A8=E6=88=B7=E6=8B=8D?= =?UTF-8?q?=E6=9D=BF):=20dispatch=E5=BF=85=E5=A1=ABconfirm=3D=E6=8E=A8vps,?= =?UTF-8?q?=E4=B8=8D=E7=AC=A6=E7=AC=AC=E4=B8=80=E6=AD=A5fail;=20=E5=89=8D?= =?UTF-8?q?=E7=BD=AE=3Dnas-verify=E7=BB=BF+=E7=94=A8=E6=88=B7NAS=E9=AA=8C?= =?UTF-8?q?=E6=94=B6+=E6=8A=A5=E5=BE=85=E6=8E=A8=E6=B8=85=E5=8D=95+?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=8E=9F=E8=AF=9D=E8=AF=B4=E3=80=8C=E6=8E=A8?= =?UTF-8?q?vps=E3=80=8D,=E4=B8=8D=E5=BE=97=E4=BB=A3=E5=A1=AB/=E6=8E=A8?= =?UTF-8?q?=E6=96=AD/=E6=B2=BF=E7=94=A8=E6=97=A7=E6=8E=88=E6=9D=83(2026-08?= =?UTF-8?q?-14=E4=B8=A4=E6=AC=A1=E8=BF=9D=E8=A7=84=E6=95=99=E8=AE=AD?= =?UTF-8?q?=E5=9B=BA=E5=8C=96);=20CLAUDE.md=E9=83=A8=E7=BD=B2=E8=A7=84?= =?UTF-8?q?=E5=88=99=E5=90=8C=E6=AD=A5=20[nas]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .claude/CLAUDE.md | 7 ++++--- .gitea/workflows/vps-deploy.yml | 22 +++++++++++++++++----- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md index bad7f2e..653202e 100644 --- a/.claude/CLAUDE.md +++ b/.claude/CLAUDE.md @@ -151,9 +151,10 @@ test(pytest 数据层) → nas-deploy(推 NAS 后端+前端 dist+restart 容器) ``` nas-verify 全绿 = NAS test 已自动部署+验证通过。**VPS 不再自动推**(Gitea 无 environment approval gate;且要 NAS 验证通过才推 prod 的隔离)。 -**推 VPS prod(nas-verify 绿后,单独触发 vps-deploy.yml,两种方式)**: -- **人工**:Gitea → Actions → `vps-deploy.yml` → Run workflow,填 `sha`(nas-verify notice 输出的 commit) -- **agent**:调 dispatch API(basic auth,凭证走 Mac osxkeychain):`curl -u admin:*** -X POST http://192.168.2.154:3000/api/v1/repos/sanguo/sanguo_vnpy_v2/actions/workflows/vps-deploy.yml/dispatches -d '{"ref":"master","inputs":{"sha":""}}'` +**推 VPS prod(nas-verify 绿 + 用户确认,缺一不可;2026-08-14 起带口令闸门)**: +- **前置铁律**:agent dispatch 的前提 = nas-verify 绿 **+ 用户本人 NAS 验收通过** + 报「待推 VPS」清单(commit 号/内容)给用户,**用户在对话中原话说「推vps」**。不得代填/推断/沿用旧授权(2026-08-14 曾两次违规自行 dispatch,用户严肃指正)。 +- **人工**:Gitea → Actions → `vps-deploy.yml` → Run workflow,填 `sha`(nas-verify notice 输出的 commit)+ `confirm=推vps` +- **agent**(仅当用户原话说了「推vps」):调 dispatch API(basic auth,凭证走 Mac osxkeychain):`curl -u admin:*** -X POST http://192.168.2.154:3000/api/v1/repos/sanguo/sanguo_vnpy_v2/actions/workflows/vps-deploy.yml/dispatches -H 'Content-Type: application/json' -d '{"ref":"master","inputs":{"sha":"","confirm":"推vps"}}'`;口令不符 workflow 第一步直接 fail (⚠️ MCP 的 claude_dev token 对仓库无 write 权限,dispatch 会 403;agent 走 Mac git credential / basic auth) vps-deploy checkout 你传的 SHA(= NAS 验证过的 commit)→ `promote --target vps` → verify_unified_e2e。**严格版本一致**。 diff --git a/.gitea/workflows/vps-deploy.yml b/.gitea/workflows/vps-deploy.yml index 3fa8ba3..2deea0a 100644 --- a/.gitea/workflows/vps-deploy.yml +++ b/.gitea/workflows/vps-deploy.yml @@ -5,10 +5,10 @@ name: VPS Deploy # 严格版本一致: 接收 sha input, checkout 该 commit(= NAS 验证通过的那个), 部署到 VPS。 # 不会部署 nas-verify 未验证过的代码。 # -# 触发方式: -# 人工: Gitea → Actions → vps-deploy.yml → Run workflow → 填 sha(NAS 验证通过的 commit) -# agent: MCP dispatch_workflow workflow_id=vps-deploy.yml ref=master inputs={sha:} -# 或 curl POST /api/v1/repos/sanguo/sanguo_vnpy_v2/actions/workflows/vps-deploy.yml/dispatches +# 触发方式(2026-08-14 起带口令闸门,见 inputs.confirm): +# 人工: Gitea → Actions → vps-deploy.yml → Run workflow → 填 sha + confirm=推vps +# agent: 仅当用户在对话中原话说了「推vps」才可 dispatch,confirm 必须填 推vps; +# 口令不符第一步直接 fail。不得代填/推断/沿用旧授权。 on: workflow_dispatch: inputs: @@ -16,6 +16,10 @@ on: description: "NAS 验证通过的 commit SHA(完整 40 位, ci-cd 的 nas-verify 输出)" required: true type: string + confirm: + description: "部署确认口令: 只有用户在对话中说了「推vps」才可填(用户原话,agent 不得代填/推断)" + required: true + type: string jobs: vps: @@ -23,7 +27,15 @@ jobs: env: HOME: /Users/chufeng steps: - - name: checkout 指定 commit(= NAS 验证通过的版本) + - name: 口令闸门(用户没说「推vps」就不许部署) + run: | + if [ "${{ inputs.confirm }}" != "推vps" ]; then + echo "❌ 口令不符——部署未获用户确认,退出。" + exit 1 + fi + echo "✅ 口令确认,继续部署。" + + - name: checkout 指定 commit(= NAS 验证过的版本) env: TOKEN: ${{ github.token }} run: |