D-20260821-02|私有 E2E 單線與 Linux 參數契約¶
背景與驅動力¶
首次 private push 的四個 E2E job 各自宣告 830 tests。Workflow 使用
pnpm test:e2e -- --project=...;GitHub Ubuntu 將第二個 -- 原樣傳給 package script,
Playwright 因而不解析其後的 project、grep、retry 與檔案選項。三個一般 browser jobs 與一個
provisional smoke 都退化成五 project 全量執行,Firefox job 甚至先啟動未安裝的 Chromium。
即使參數修正,private hosted CI 每次重跑 Firefox 與行動 Chromium 全量 suite 仍會消耗 private Actions 分鐘;平台與五 project 證據已有手動 self-hosted、首次公開前 hosted-full,以及公開後 public-auto 承接。
考慮過的選項¶
- 保留 private 三 project 自動矩陣,只修 CLI:證據較密,但持續消耗 private 分鐘,否決。
- 要求 Docker Desktop 常駐並成為 pre-push gate:能提供 Linux parity,但維護機不保證啟動,否決。
- private 自動收斂為 Chromium,平台矩陣維持既有手動/完整 hosted 分層;以永久靜態契約防止 argv 回歸,需要時才手動啟動 Docker 做 Linux parity(採納)。
決定¶
private-auto的一般 E2E 只跑 GitHub-hosted Ubuntu Chromium。Firefox、WebKit 與行動 projects 由 Windows/macOS self-hosted 手動 workflow、hosted-full與public-auto承接;公開前候選的 完整證據要求不變。- 所有帶 Playwright options 的 package-script 命令直接使用
pnpm test:e2e --project=...;禁止pnpm test:e2e -- --project=...。Executable workflow validator 必須拒絕後者,且 fixture 不得把錯誤字串當成有效範例。 - Playwright 一般測試全域 timeout 為 120 秒;真正慢的 Editor、canonical、authoring 與效能案例
以 test-local timeout 明確覆寫。全域 retry 為 0,避免把回歸當成綠燈並放大額度;失敗證據使用
retain-on-failuretrace,不依賴 retry 才產生。 - Docker Desktop 是按需啟動的本機 Linux parity 工具,不是常駐服務,不接進 pre-push、required CI 或一般開發前置。首次推版、toolchain/shell 語意變更或 hosted-only 差異調查時可手動使用; Docker 不可替代 Windows、macOS 或 GitHub-hosted 最終證據。
- Canonical 自然完賽、效能、authoring GLB 與 determinism 維持 dedicated profile/
retries=0; release 一般跨瀏覽器覆蓋與 strict Chromium 資產 gate 的不同證據角色不因本決策合併。
後果與影響¶
Private 日常 E2E 從三套一般 browser suite 收斂為一套 Chromium,且錯誤參數不再能把 targeted job 靜默放大成五 project 全量。失敗第一次即紅並保留 trace;一般 hang 最長 120 秒,慢案例仍有 具名上限。維護者不需為日常開發保持 Docker 或 self-hosted runner 在線;公開前與公開後的完整 跨平台證據仍由既有分層提供。