D-20260821-01|私有/公開 CI 與 Runner 分層¶
背景與驅動力¶
主 repository 在首次公開前仍是 private。若每個 PR 都使用 GitHub-hosted Windows/macOS,會 消耗 private Actions 分鐘;若把維護者的 Windows/Mac self-hosted runner 放進自動矩陣,機器 離線時又會讓日常 CI 長時間排隊。repository 公開後則應恢復標準 hosted 跨平台證據,且公開 當下不能再靠另一個 CI 設定 commit 才切換模式。
Windows 與 Mac 維護機都不保證常駐;Mac 通常只在下班後可用。公開 PR 的不可信程式碼也不得 因平台驗證而進入維護者機器。
考慮過的選項¶
- 私有期仍讓每個 PR 跑完整 hosted 矩陣:證據完整,但持續消耗 private 分鐘,否決。
- 讓 self-hosted runner 監聽 push/PR:離線會排隊,公開後亦會執行不可信 PR,否決。
- 使用 PAT/GitHub App 查詢 runner 是否 online:repository runner API 需要 Administration read 權限,只為改善手動誤觸提示而增加高權限 secret,否決。
- 由實際 repository visibility 與事件決定自動 hosted 矩陣,平台實機另採 trusted default-branch 手動 workflow(採納)。
決定¶
private-auto只接受以master為 base 的 PR 與masterpush,並只使用 GitHub-hosted Ubuntu。feature branch 尚未開 PR 前的 push 不觸發 hosted CI;PR open/synchronize 與合併後 的masterpush 各驗一次。hosted-full是 repository 仍 private 時的手動 default-branch gate,使用標準 GitHub-hosted Ubuntu/Windows/macOS 完整矩陣,供首次公開前建立候選 commit 證據。public-auto由 repository 的public事件及公開後的masterPR/push 觸發,使用與hosted-full相同的完整 hosted 矩陣。模式直接讀取 GitHub event payload 的實際 visibility, 不使用需人工翻轉的 repository variable。.github/workflows/platform-self-hosted.yml只有workflow_dispatch。每次只選windows或macos,只接受 default branch,且 checkout 手動啟動當下的github.sha;不提供任意 SHA/ref 輸入。Windows 執行 unit/coverage/property/determinism 與桌面三引擎 E2E;macOS 執行相同 regression gates 與五個 Playwright projects。- self-hosted workflow 不成為 branch protection required check,也不接收 push、PR、schedule、
public或其他 workflow 事件。runner 離線只讓誤觸的手動 run 等待,不阻塞任何自動 CI。 - 每個 target 使用獨立 concurrency group 並設定
cancel-in-progress: true;同平台重複手動執行 會取消仍 queued/in-progress 的舊 run,已完成 run 不受影響。 - 自動 workflow 對所有模式輸出固定名稱
CI / required。不明事件/visibility fail closed; private mode 要求平台 jobs 為 skipped,full mode 則要求所有選定平台 jobs 成功。
後果與影響¶
私有日常 PR 與合併只消耗 Linux hosted 分鐘,且 Windows/Mac 離線不會卡住開發。維護者可在
任意時間啟動其中一台 runner,對最新 master 重複手動驗證後關閉;公開前再對同一候選 commit
完成兩台實機與 hosted-full。repository 轉 public 後,既有 workflow 透過 public 事件直接跑
完整 hosted 矩陣,不需要再推 CI 設定。
代價是誤在 runner 離線時 dispatch 的手動 run 會等待;本案接受此局部行為,避免保存高權限
runner 管理 token。D-20260814-22 的每事件 runner matrix 由本決策修訂,但其 shipped canonical
代表性 smoke、nightly/release 自然完賽與效能、external authoring evidence 分層完全不變。