ci(cd): 自動 apply pending migrations + paths trigger 補 migrations/**
All checks were successful
CD Pipeline / deploy (push) Successful in 3m23s

- 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) <noreply@anthropic.com>
This commit is contained in:
OoO
2026-05-03 23:12:20 +08:00
parent 3ea7004a6f
commit 2b218589bd

View File

@@ -46,6 +46,8 @@ on:
- '.claude/**'
# 工作流程本身
- '.gitea/workflows/**'
# DB schema 變更Operation Ollama-First v5.0 P1CD 自動 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: |