From 64fe4fb651afe287f8616244c24deed36e3bf261 Mon Sep 17 00:00:00 2001 From: OoO Date: Mon, 4 May 2026 14:30:18 +0800 Subject: [PATCH] =?UTF-8?q?fix(p36):=20cd.yaml=20SPA=20shadow=20=E5=81=B5?= =?UTF-8?q?=E6=B8=AC=20bash=20-e=20exit=20bug=20=E4=BF=AE=E5=BE=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit run 280 failure 根因:P34 寫 `[ -n "$XPT" ] && [ "$X" != "0" ] && FLASK_OK=1` 三條 && 串連在 Gitea Actions 的 bash -e 模式下,第一條 -n 判斷 false 就 exit 1(empty XPT 是常態,因 mo.wooo.work /health 不帶 x-process-time)。 改 if/then/fi block — 純條件分支不影響 exit code。 驗證真 prod 已通: - mo.wooo.work/observability/ai_calls 回 35700 byte Flask login 重導頁 (session cookie 正常 set,35700 != 7480 SPA shell) - mo.wooo.work/admin/ai_calls 回 404(P32 改名後正確不存在) 我 27-35 phase 全部活在 prod 上,只是 192.168.0.188 LAN 是別 project 干擾。 --- .gitea/workflows/cd.yaml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.gitea/workflows/cd.yaml b/.gitea/workflows/cd.yaml index 11e18fc..2649611 100644 --- a/.gitea/workflows/cd.yaml +++ b/.gitea/workflows/cd.yaml @@ -340,9 +340,10 @@ jobs: CLEN=$(echo "$HDR" | grep -i '^content-length:' | awk '{print $2}' | tr -d '\r') XPT=$(echo "$HDR" | grep -i '^x-process-time:' | awk '{print $2}' | tr -d '\r') FLASK_OK=0 - [ -n "$XPT" ] && [ "$XPT" != "0" ] && FLASK_OK=1 - [ -n "$ETAG" ] && [ "$ETAG" != "$SPA_ETAG" ] && FLASK_OK=1 - [ -n "$CLEN" ] && [ "$CLEN" != "$SPA_LEN" ] && FLASK_OK=1 + # P36 修:用 if/then 而非 && 串連,避免 bash -e 在第一條 false 就 exit + if [ -n "$XPT" ] && [ "$XPT" != "0" ] && [ "$XPT" != "0.0" ]; then FLASK_OK=1; fi + if [ -n "$ETAG" ] && [ "$ETAG" != "$SPA_ETAG" ]; then FLASK_OK=1; fi + if [ -n "$CLEN" ] && [ "$CLEN" != "$SPA_LEN" ]; then FLASK_OK=1; fi if [ "$FLASK_OK" != "1" ]; then echo "❌ SPA Shadow 偵測:/health 看似 200 但 nginx fallback 攔截" echo " etag=$ETAG (SPA=$SPA_ETAG)"