修 check-render 誤報:server 沒收乾淨導致連跑會抓到舊頁面

實撞:同一份 build 連跑三次,一次綠兩次紅,白追一輪
(先誤判「深色模式壞了」→ 實際渲染截圖一看深色是好的)。

真因:trap 用 `kill %1`(job spec),在子 shell/連續執行時抓不到
⇒ 上一次的 http.server 佔住 8799 ⇒ 下一次抓到舊頁面。
修:改記 PID 收;並在啟動前先 lsof 清掉殘留在該 port 的 server。

順帶修 mock.js:t193 三修起 main.js 啟動會依 localStorage 覆寫成預設淺色
⇒ 光改 <html data-theme> 會被 JS 蓋掉,要在 module 之前寫 localStorage
(key=arcrun_app_theme)。

驗:連跑三次全過(原本會紅);三支閘 check-cis/check-render/check-tray 全過。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-05 15:22:48 +08:00
parent 47580f4ba5
commit 369eef07d4
+20 -1
View File
@@ -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 設,不能只改 <html data-theme>。
// 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'<html[^>]*>','<html lang="zh-Hant" data-theme="dark">',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