修 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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user