CI 能力
| 能力 | 你能得到什麼 |
|---|---|
| 品質閘門 | 在合併前強制執行 lint、build 與測試檢查 |
| 對瀏覽器目標的信心 | 一致地建置與驗證多個瀏覽器目標 |
| 可重現的環境 | 在本機與 CI 執行間鎖定工具鏈版本 |
| 可除錯的失敗 | 發佈測試報告與產物以便調查 |
核心流水線階段
- 安裝相依套件
- 執行 lint/檢查指令
- 建置瀏覽器目標
- 執行自動化測試(在適用時包含 Playwright)
- 上傳產物/報告
最簡 GitHub Actions 範例
建置矩陣範例
在 CI 中使用 Playwright
- 在 CI job 中安裝瀏覽器(
playwright install或等效指令)。 - CI 上的 retries 設得比本機略高。
- 為失敗的執行發佈 Playwright 報告/產物。
- 啟動 Playwright 前,把
dist/extension-js/<browser>/ready.json當成就緒合約。 - 在 CI 自動化腳本中避免解析人類可讀的記錄。
- 優先使用內建的等待指令:
extension dev --wait --browser=<browser>(watch/dev)或extension start --wait --browser=<browser>(production/start)。 - 給腳本或 CI 自動化使用時,優先採用
--wait-format=json。
範例:就緒閘門
不需 UI 的事件處理測試
你不一定需要 Playwright。對於事件處理器——工具列 action、鍵盤指令——Extension.js 可以直接對開發階段 session 觸發,再用副作用進行斷言。它是確定性且 headless 的,非常適合做為可靠的閘門。extension open command --name <cmd>)。回傳的 payload 與唯一注意事項(重播不會帶有使用者操作手勢,所以 activeTab 不會授予)請見 觸發 actions 與指令。
Docker 與容器 CI
當 CI 跑在 Docker 或開發容器內時,請加上--host 0.0.0.0,讓外部程序可以連到開發伺服器。如果預設連接埠被其他程序占用,使用 --port 0 讓系統自動指派。
常見陷阱
- CI 腳本與本機腳本久而久之開始分歧
- 只建置一個瀏覽器目標,卻要上架到多個引擎
- 失敗的 E2E job 沒有上傳產物
- 在不同 workflow 中混用未鎖定的 Node/套件管理器版本
.github/workflows/e2e.yml
最佳實務
- 讓 CI 指令貼近本機腳本,減少差異。
- 對 lint/設定錯誤盡早失敗,避免昂貴的瀏覽器 job。
- 盡可能快取相依套件與瀏覽器二進位檔。
- 鎖定 CI 中的 Node 與套件管理器版本以便重現。
下一步
- 加入或精修 Playwright E2E 測試。
- 檢視 指令參考 以對齊腳本。

