ci(vps-gate): vps-deploy加口令闸门(用户拍板): dispatch必填confirm=推vps,不符第一步fail; 前置=nas-verify绿+用户NAS验收+报待推清单+用户原话说「推vps」,不得代填/推断/沿用旧授权(2026-08-14两次违规教训固化); CLAUDE.md部署规则同步 [nas]
CI/CD / test (push) Successful in 12s
CI/CD / nas-deploy (push) Successful in 30s
CI/CD / nas-verify (push) Successful in 11s

This commit is contained in:
2026-08-14 19:52:03 +08:00
parent c9bc654d3a
commit c16c78aaf8
2 changed files with 21 additions and 8 deletions
+4 -3
View File
@@ -151,9 +151,10 @@ test(pytest 数据层) → nas-deploy(推 NAS 后端+前端 dist+restart 容器)
```
nas-verify 全绿 = NAS test 已自动部署+验证通过。**VPS 不再自动推**Gitea 无 environment approval gate;且要 NAS 验证通过才推 prod 的隔离)。
**推 VPS prodnas-verify 绿后,单独触发 vps-deploy.yml,两种方式**
- **人工**Gitea → Actions → `vps-deploy.yml` → Run workflow,填 `sha`nas-verify notice 输出的 commit
- **agent**:调 dispatch APIbasic 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":"<full-sha>"}}'`
**推 VPS prodnas-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 APIbasic 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":"<full-sha>","confirm":"推vps"}}'`;口令不符 workflow 第一步直接 fail
(⚠️ MCP 的 claude_dev token 对仓库无 write 权限,dispatch 会 403agent 走 Mac git credential / basic auth
vps-deploy checkout 你传的 SHA= NAS 验证过的 commit)→ `promote --target vps` → verify_unified_e2e。**严格版本一致**。
+17 -5
View File
@@ -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:<full-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: |