name: CI/CD # 三机流水线:push master → Mac runner 单测 → NAS 冒烟(ssh) → [审批] → VPS 部署+冒烟(ssh) # Runner: 复用现有 online 的 mac-mini-arm64 (label: macos-arm64),不另起 NAS runner。 # Mac runner 作为编排节点,ssh 到 NAS/VPS 执行(~/.ssh/config 已配 sanguo-nas + 49.232.102.198)。 on: push: branches: [master] workflow_dispatch: {} # 允许 Gitea UI 手动触发(实测/重跑用) jobs: # ---------- P2: 验证 ---------- test: runs-on: macos-arm64 steps: - uses: actions/checkout@v4 - name: pytest (Mac venv310, fixture) run: | source ~/.openclaw/sanguo_projects/sanguo_vnpy_v2/venv310/bin/activate pytest tests/ -q # TODO 实测: actions/checkout 能否在 Mac 拉取(Mac 外网);venv310 依赖是否覆盖 checkout 代码的 import nas-smoke: needs: test runs-on: macos-arm64 steps: - name: NAS 冒烟 (ssh NAS 跑容器读 quant_trading.db) run: | ssh sanguo-nas 'cd /volume1/stock/sanguo_vnpy_v2 && \ /var/packages/Docker/target/usr/bin/docker run --rm \ -v /volume1/stock:/volume1/stock -v $(pwd):/app \ sanguo_vnpy_v2:with-sqlite python /app/scripts/smoke_e2e.py' # TODO 实测: Mac runner job 用户能否 ssh sanguo-nas(ssh key/known_hosts) # ---------- P3: VPS CD (带人工 gate) ---------- vps: needs: nas-smoke runs-on: macos-arm64 environment: prod # 人工审批 gate;删除此行 = 验证通过全自动推 VPS steps: - uses: actions/checkout@v4 - name: promote 代码到 NAS+VPS run: bash scripts/nas_sync/promote.sh - name: VPS 冒烟 (LocalUnifiedProvider 真数据) run: ssh 49.232.102.198 'cd C:\sanguo_vnpy_v2 && C:\Python310\python.exe -X utf8 scripts/data_platform/verify_unified_e2e.py' # TODO 实测: prod environment 审批在 Gitea UI(仓库 Settings → Environments → prod 加 reviewer)