auto-sync: 2026-06-08 12:53:37
Deploy / ci (push) Waiting to run
Deploy / deploy (push) Blocked by required conditions
Deploy / notify-deploy-failure (push) Blocked by required conditions

This commit is contained in:
cfdaily
2026-06-08 12:53:37 +08:00
parent 8e7361dbba
commit 510ac758cf
+19 -6
View File
@@ -1,6 +1,6 @@
# 工具链 Skill 设计 + 自动部署 + 端到端验证
> **状态**: v1.0-draft
> **状态**: v1.1 — 仲达评审 M1/M2 修正 + S1-S4 采纳
> **作者**: 庞统(副军师)🐦
> **评审**: 司马懿(仲达)🗡️
> **日期**: 2026-06-08
@@ -337,13 +337,16 @@ deploy() {
echo "Target: ${TARGET_DIR}"
# 1. 同步文件(排除不需要部署的)
# ⚠️ --delete 会删除目标中源没有的文件,必须排除 data/(生产数据)
rsync -av --delete \
--exclude='.git' \
--exclude='__pycache__' \
--exclude='.venv' \
--exclude='data' \
--exclude='tests' \
--exclude='docs' \
--exclude='.gitea' \
--exclude='node_modules' \
"${SOURCE_DIR}/" "${TARGET_DIR}/"
# 2. 安装依赖
@@ -368,9 +371,13 @@ deploy() {
}
fi
# 5. 记录版本
# 5. 记录版本rollback 时可通过 DEPLOY_OVERRIDE_COMMIT 覆盖)
local commit_hash
commit_hash=$(cd "${SOURCE_DIR}" && git rev-parse --short HEAD 2>/dev/null || echo "unknown")
if [ -n "${DEPLOY_OVERRIDE_COMMIT:-}" ]; then
commit_hash="${DEPLOY_OVERRIDE_COMMIT}"
else
commit_hash=$(cd "${SOURCE_DIR}" && git rev-parse --short HEAD 2>/dev/null || echo "unknown")
fi
local timestamp
timestamp=$(date -u +%Y-%m-%dT%H:%M:%SZ)
echo "{\"timestamp\": \"${timestamp}\", \"commit\": \"${commit_hash}\", \"source\": \"${SOURCE_DIR}\"}" >> "${DEPLOY_HISTORY}"
@@ -387,11 +394,13 @@ rollback() {
exit 1
fi
# 读取倒数第二行
# 读取倒数第二行的 commit(不依赖 SOURCE_DIR 的 git 状态)
local prev_line
prev_line=$(tail -2 "${DEPLOY_HISTORY}" | head -1)
local prev_commit
local prev_source
prev_commit=$(echo "${prev_line}" | python3 -c "import sys,json; print(json.load(sys.stdin)['commit'])" 2>/dev/null)
prev_source=$(echo "${prev_line}" | python3 -c "import sys,json; print(json.load(sys.stdin).get('source',''))" 2>/dev/null)
if [ -z "${prev_commit}" ] || [ "${prev_commit}" = "unknown" ]; then
echo "Cannot determine previous version"
@@ -399,10 +408,14 @@ rollback() {
fi
echo "=== Rolling back to ${prev_commit} ==="
# checkout 到指定 commit,部署,然后回到 main
cd "${SOURCE_DIR}"
local current_branch
current_branch=$(git branch --show-current)
git checkout "${prev_commit}"
# 重新部署(不递归 rollback
deploy
# 部署时明确传 commit hash,不依赖 HEAD
DEPLOY_OVERRIDE_COMMIT="${prev_commit}" deploy
git checkout "${current_branch:-main}"
}
case $ACTION in