From 510ac758cf355c30f71ea2345545a0e8d4eba8f5 Mon Sep 17 00:00:00 2001 From: cfdaily Date: Mon, 8 Jun 2026 12:53:37 +0800 Subject: [PATCH] auto-sync: 2026-06-08 12:53:37 --- docs/design/14-toolchain-skill-and-deploy.md | 25 +++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/docs/design/14-toolchain-skill-and-deploy.md b/docs/design/14-toolchain-skill-and-deploy.md index 938bf3e..b514c5a 100644 --- a/docs/design/14-toolchain-skill-and-deploy.md +++ b/docs/design/14-toolchain-skill-and-deploy.md @@ -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