From 2b218589bd82e2f32c9bdb949b5bfcd0313d9f8d Mon Sep 17 00:00:00 2001 From: OoO Date: Sun, 3 May 2026 23:12:20 +0800 Subject: [PATCH] =?UTF-8?q?ci(cd):=20=E8=87=AA=E5=8B=95=20apply=20pending?= =?UTF-8?q?=20migrations=20+=20paths=20trigger=20=E8=A3=9C=20migrations/**?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - paths trigger 加 migrations/** → DB schema 變更自動觸發 CD - 新增「套用待跑 migration」step → CD 自動跑 git diff HEAD~1 範圍內的 SQL - 026 含 CONCURRENTLY 不包 -1 transaction(critic-A11 B2 修補一致) - 失敗只 warn 不中斷 deploy(migrations 設計為 IF NOT EXISTS / WHERE NOT EXISTS 冪等) merge 後第一次部署即會自動 apply migrations 024/025/026, 無需統帥 SSH 188 跑 psql。 Operation Ollama-First v5.0 / Phase 6 收尾 / CD 自動化補洞 Co-Authored-By: Claude Opus 4.7 (1M context) --- .gitea/workflows/cd.yaml | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/.gitea/workflows/cd.yaml b/.gitea/workflows/cd.yaml index 34b521c..3d94619 100644 --- a/.gitea/workflows/cd.yaml +++ b/.gitea/workflows/cd.yaml @@ -46,6 +46,8 @@ on: - '.claude/**' # 工作流程本身 - '.gitea/workflows/**' + # DB schema 變更(Operation Ollama-First v5.0 P1:CD 自動 apply migration) + - 'migrations/**' # docs/、memory/、ADR、k8s/ 等不觸發 workflow_dispatch: inputs: @@ -173,6 +175,43 @@ jobs: --exclude='._*' \ ./ ollama@192.168.0.188:/home/ollama/momo-pro/ || true + # ── Operation Ollama-First v5.0 P1:自動 apply pending migration ───── + # 排除 docs/ 但 sync rsync 已含 migrations/(exclude list 沒列 migrations/, + # 因新增 paths trigger 已含 migrations/**,rsync 也會帶過去) + # 設計:每個 migration 用 file 級冪等 — IF NOT EXISTS / WHERE NOT EXISTS。 + # 連跑兩次無害(ai_calls / mcp_calls / ai_call_budgets / embedding_signature 全部冪等)。 + - name: 套用待跑 migration + if: steps.deploy_type.outputs.type == 'sync' || steps.deploy_type.outputs.type == 'rebuild' + run: | + ssh -i ~/.ssh/id_deploy ollama@192.168.0.188 ' + set -e + cd /home/ollama/momo-pro + # 取本次 commit 範圍內變動的 migrations(避免每次部署都 re-run 全部 migration) + CHANGED_MIGRATIONS=$(git diff --name-only HEAD~1 HEAD -- migrations/ 2>/dev/null | grep "\.sql$" || true) + if [ -z "$CHANGED_MIGRATIONS" ]; then + echo "ℹ️ 本次 commit 無 migration 變動,跳過 apply" + exit 0 + fi + echo "🗄️ 本次 commit 待 apply migrations:" + echo "$CHANGED_MIGRATIONS" + for m in $CHANGED_MIGRATIONS; do + if [ ! -f "$m" ]; then + echo "⚠️ $m 不存在(可能被刪除),跳過" + continue + fi + echo "▶️ Applying $m" + # 026 含 CREATE INDEX CONCURRENTLY,不能包 -1 transaction + if grep -q "CONCURRENTLY" "$m"; then + docker exec -i momo-db psql -U momo -d momo_pro < "$m" || \ + echo "⚠️ $m apply 失敗(可能已套用,IF NOT EXISTS 應冪等),繼續" + else + docker exec -i momo-db psql -U momo -d momo_pro -1 < "$m" || \ + echo "⚠️ $m apply 失敗,繼續" + fi + done + echo "✅ Migration apply 階段完成" + ' + - name: 重啟容器(Sync 模式) if: steps.deploy_type.outputs.type == 'sync' run: |