#!/bin/bash # vps-deploy 收尾三步: 常驻滚动重启 + 打 vps-deployed tag + [待推VPS] issue 维护。 # 为什么抽脚本(2026-08-22 基建工作包#2, issue#33): run681/715/724 三次实录——部署本体 # 成功但前序步骤(端口等待/API探活)失败时, 收尾三步被整段跳过, 只能人工拼三段补。 # 抽出后幂等可重入: # - workflow 正常走到尾: vps-deploy.yml 最后一步自动调用 # - 收尾被跳过时: Mac 本机手跑补, 不再人工拼命令: # GTOKEN= bash scripts/ci/vps_finalize.sh <本轮部署的sha> # 三步各自幂等: 常驻重启(盘中 09:15-15:30 自动跳过) / tag -f + push -f / issue 按真实 gap 开或关。 # ⚠️ gap 按 subject 算(与 enforce-label 同定义, git log --format='%h %s' 再 grep): # 不能用 --grep='\[vps\]'——它匹配整个 message, commit body 里引用的命令文本会误命中(曾误开 issue#7)。 set -euo pipefail VPS_DEPLOYED_TAG=vps-deployed SHA="${1:?用法: GTOKEN= bash scripts/ci/vps_finalize.sh <本轮部署的sha(40位)>}" export GITHUB_REPOSITORY="${GITHUB_REPOSITORY:-sanguo/sanguo_vnpy_v2}" FAIL=0 # ---- 1) 常驻进程滚动重启(幂等; 失败不阻断 tag/issue 记账——代码已就位, 末尾非零退出提醒人工) ---- if bash scripts/nas_sync/vps_restart_resident.sh; then echo "✅ 收尾 1/3: 常驻进程已滚动重启(或盘中自动跳过)" else echo "❌ 收尾 1/3: 常驻重启失败(部署本体已成功, 代码已就位)——重跑本脚本即可补" FAIL=1 fi # ---- 2) 打 tag(VPS 版本真相; tag -f + push -f 幂等)。origin 在 workflow checkout 里 # 已是带 token 的 remote, 手跑时是本仓库日常 remote, 两种上下文都直推 ---- git tag -f "$VPS_DEPLOYED_TAG" "$SHA" git push -f origin "refs/tags/$VPS_DEPLOYED_TAG" echo "✅ 收尾 2/3: $VPS_DEPLOYED_TAG → ${SHA:0:7}" # ---- 3) [待推VPS] issue 维护: 按 vps-deployed..origin/master 真实 gap 决定开/关 ---- # (2026-08-21 事故: 用户 dispatch 填了旧 sha, 收尾硬编码 VPS_LOG="" 无脑关 issue—— # gap 非空也关, 用户误以为推完。修 = 算真实 gap, 非空则 issue 保持 open 并列出剩余清单) if [ -z "${GTOKEN:-}" ]; then echo "⚠️ 收尾 3/3: GTOKEN 未设置, 跳过 issue 维持(workflow 自带; 手跑需 GTOKEN)——issue 保持现状偏保守" else git fetch origin master --depth 200 2>/dev/null || git fetch origin master export VPS_LOG="$(git log --format='%h %s' "$VPS_DEPLOYED_TAG..origin/master" | grep -E '\[vps\]' || true)" export VPS_DEPLOY_SHA="$SHA" python3 scripts/ci/vps_pending_check.py echo "✅ 收尾 3/3: issue 维护完成(按真实 gap 开/关)" fi exit $FAIL