From 4380fa641ceb78fc00d60dfbef8ea89a3c922d9d Mon Sep 17 00:00:00 2001 From: OoO Date: Tue, 5 May 2026 23:39:00 +0800 Subject: [PATCH] ci(observability): gate frontend deploys with QA suite --- .gitea/workflows/cd.yaml | 24 +++++++++++++++++++ docs/guides/deployment_sop.md | 7 ++++++ ...observability_ui_qa_guardrails_20260505.md | 1 + 3 files changed, 32 insertions(+) diff --git a/.gitea/workflows/cd.yaml b/.gitea/workflows/cd.yaml index a6422fe..6b62b55 100644 --- a/.gitea/workflows/cd.yaml +++ b/.gitea/workflows/cd.yaml @@ -87,6 +87,19 @@ jobs: echo "label=🔨 強制重建 Docker Image" >> $GITHUB_OUTPUT exit 0 fi + + - name: 偵測 AI 觀測台前端 QA 是否需要執行 + id: observability_qa + run: | + CHANGED=$(git diff --name-only HEAD~1 HEAD 2>/dev/null || echo "") + echo "$CHANGED" + if echo "$CHANGED" | grep -qE '^(templates/admin/.*|templates/ewoooc_base\.html|templates/components/_ewoooc_shell\.html|static/css/observability-system\.css|web/static/css/observability-system\.css|routes/admin_observability_routes\.py|scripts/(check_observability_|observability_contract|sync_observability_css)|docs/guides/observability_ui_governance\.md|docs/guides/deployment_sop\.md)'; then + echo "needed=true" >> $GITHUB_OUTPUT + echo "🎛️ AI 觀測台 QA: required" + else + echo "needed=false" >> $GITHUB_OUTPUT + echo "ℹ️ AI 觀測台 QA: skipped" + fi CHANGED=$(git diff --name-only HEAD~1 HEAD 2>/dev/null || echo "") if echo "$CHANGED" | grep -qE '^(Dockerfile|requirements\.txt|docker-compose\.yml)$'; then echo "type=rebuild" >> $GITHUB_OUTPUT @@ -144,6 +157,12 @@ jobs: run: | apt-get update -qq && apt-get install -y -qq rsync openssh-client + - name: AI 觀測台 Pre-deploy 靜態 QA + if: steps.observability_qa.outputs.needed == 'true' + run: | + bash ./scripts/quick_review.sh --sync-observability-css + bash ./scripts/quick_review.sh --observability-qa --skip-production + # ── 模式 A:僅同步 Python 檔案(最常見,~10s) ──────────────────────── - name: 同步 Python 檔案至 188 if: steps.deploy_type.outputs.type == 'sync' @@ -360,6 +379,11 @@ jobs: fi echo "✅ SPA Shadow OK — Flask 真接到請求(etag=$ETAG xpt=$XPT clen=$CLEN)" + - name: AI 觀測台 Post-deploy Production QA + if: success() && steps.observability_qa.outputs.needed == 'true' + run: | + bash ./scripts/quick_review.sh --observability-smoke --base-url https://mo.wooo.work --timeout 12 + # ── 觸發 Post-Deploy Code Review ───────────────────────────────────── - name: 觸發 AI Code Review if: success() diff --git a/docs/guides/deployment_sop.md b/docs/guides/deployment_sop.md index c5238ec..338c195 100644 --- a/docs/guides/deployment_sop.md +++ b/docs/guides/deployment_sop.md @@ -70,6 +70,13 @@ QA 套件會檢查: - `observability-system.css` 必須線上 HTTP 200,且包含核心 token/class。 - `static/css/observability-system.css` 與 `web/static/css/observability-system.css` 必須一致。 +CD 也會自動判斷觀測台相關變更: + +- Deploy 前跑 `./scripts/quick_review.sh --sync-observability-css`。 +- Deploy 前跑 `./scripts/quick_review.sh --observability-qa --skip-production`。 +- Deploy 後跑 `./scripts/quick_review.sh --observability-smoke --base-url https://mo.wooo.work --timeout 12`。 +- 若變更與觀測台無關,CD 會跳過這組額外 QA,避免拖慢一般後端部署。 + ## 🔍 維運指令 - **查看日誌**: `docker logs -f momo-pro-system --tail 100` - **進入資料庫**: `docker exec -it momo-db psql -U momo -d momo_analytics` diff --git a/docs/memory/observability_ui_qa_guardrails_20260505.md b/docs/memory/observability_ui_qa_guardrails_20260505.md index 6ebc467..06498e3 100644 --- a/docs/memory/observability_ui_qa_guardrails_20260505.md +++ b/docs/memory/observability_ui_qa_guardrails_20260505.md @@ -53,6 +53,7 @@ bash scripts/check_observability_suite.sh - Production smoke 必須看到 `觀測台 CSS: HTTP 200, markers=ok`。 - 觀測台頁面清單、URL、`active_page`、內容 marker 不要分散維護,先改 `scripts/observability_contract.py`。 - `quick_review.sh --observability-qa` 預設打 production `https://mo.wooo.work`;測 staging/localhost 時要明確帶 `--base-url`。 +- Gitea CD 會偵測觀測台 template/CSS/route/QA script/guide 變更:deploy 前跑 CSS sync + static QA,deploy 後跑 production smoke。 ## 已鎖住的回歸