From 369eef07d40467a9d7222c788f254d42904831ba Mon Sep 17 00:00:00 2001 From: richblack Date: Wed, 5 Aug 2026 15:22:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=20check-render=20=E8=AA=A4=E5=A0=B1?= =?UTF-8?q?=EF=BC=9Aserver=20=E6=B2=92=E6=94=B6=E4=B9=BE=E6=B7=A8=E5=B0=8E?= =?UTF-8?q?=E8=87=B4=E9=80=A3=E8=B7=91=E6=9C=83=E6=8A=93=E5=88=B0=E8=88=8A?= =?UTF-8?q?=E9=A0=81=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 實撞:同一份 build 連跑三次,一次綠兩次紅,白追一輪 (先誤判「深色模式壞了」→ 實際渲染截圖一看深色是好的)。 真因:trap 用 `kill %1`(job spec),在子 shell/連續執行時抓不到 ⇒ 上一次的 http.server 佔住 8799 ⇒ 下一次抓到舊頁面。 修:改記 PID 收;並在啟動前先 lsof 清掉殘留在該 port 的 server。 順帶修 mock.js:t193 三修起 main.js 啟動會依 localStorage 覆寫成預設淺色 ⇒ 光改 會被 JS 蓋掉,要在 module 之前寫 localStorage (key=arcrun_app_theme)。 驗:連跑三次全過(原本會紅);三支閘 check-cis/check-render/check-tray 全過。 Co-Authored-By: Claude Opus 5 (1M context) --- cmd/arcrun-app/check-render.sh | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/cmd/arcrun-app/check-render.sh b/cmd/arcrun-app/check-render.sh index c0ded27..df006e4 100755 --- a/cmd/arcrun-app/check-render.sh +++ b/cmd/arcrun-app/check-render.sh @@ -14,9 +14,27 @@ CHROME="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" [ -x "$CHROME" ] || { echo "❌ 找不到 Chrome,跳過渲染檢查"; exit 0; } [ -d frontend/dist ] || { echo "❌ 沒有 frontend/dist——先 wails build"; exit 1; } -W=$(mktemp -d); trap 'rm -rf "$W"; kill %1 2>/dev/null' EXIT +W=$(mktemp -d) +# 🔴 2026-08-05:原本 trap 用 `kill %1`(job spec),在子 shell/連續執行時抓不到 +# ⇒ 上一次的 http.server 沒收掉、佔住 8799 ⇒ 下一次跑抓到**舊頁面**、誤報紅燈 +# (實撞:同一份 build 連跑三次,一次綠兩次紅,白追一輪)。改記 PID 收。 +SRV_PID="" +cleanup() { rm -rf "$W"; [ -n "$SRV_PID" ] && kill "$SRV_PID" 2>/dev/null; } +trap cleanup EXIT +# 保險:先清掉任何殘留在該 port 上的 server(可能是上次沒收乾淨的) +lsof -ti tcp:8799 2>/dev/null | xargs -r kill 2>/dev/null; sleep 0.3 cp -R frontend/dist/* "$W/" cat > "$W/mock.js" <<'JS' +// 🔴 2026-08-05:主題要用 localStorage 設,不能只改 。 +// t193 三修(leo)起 main.js 啟動時會依 localStorage 覆寫成**預設淺色** +// ⇒ 光改 HTML 屬性會被 JS 蓋掉,量到全白 → 誤報「深色模式沒生效」。 +// mock.js 在 module 之前載入,正好趕在 applyTheme() 之前寫入。 +try { localStorage.setItem('arcrun_app_theme','dark'); } catch (e) {} +// 保險:headless 下 localStorage 可能被限制 ⇒ 在 module 跑完後再強制設一次屬性。 +// (main.js 的 applyTheme 只在啟動時跑一次,之後不會再蓋回去。) +addEventListener('DOMContentLoaded', () => { + setTimeout(() => document.documentElement.setAttribute('data-theme','dark'), 0); +}); window.go={main:{App:{GetState:async()=>({version:'v0',statusBig:'看守中',statusSub:'', syncing:false,engine:'workers-ai',geminiKey:'',extractedOK:0,accounts:[]}), SyncNow:async()=>{},PickFolder:async()=>'',AddFolder:async()=>{},RemoveFolder:async()=>{}, @@ -31,6 +49,7 @@ s=re.sub(r']*>','',s,count=1) open(p,'w',encoding='utf-8').write(s) PY (cd "$W" && python3 -m http.server 8799 >/dev/null 2>&1) & +SRV_PID=$! sleep 2 "$CHROME" --headless --disable-gpu --screenshot="$W/s.png" --window-size=1120,780 \ --hide-scrollbars --virtual-time-budget=3000 "http://localhost:8799/index.html" >/dev/null 2>&1