CI 流水線
CI 會在每次推送到 main 和每個 Pull Request 時執行。它透過智慧範圍偵測來跳過代價高昂的工作——當只有不相關的區域有變動時,就不跑那些任務。
工作總覽
| 工作 | 用途 | 執行時機 |
|---|---|---|
docs-scope | 偵測是否只有文件變動 | 一律執行 |
changed-scope | 偵測哪些區域有變動(node/macos/android/windows) | 非純文件變動 |
check | TypeScript 型別、lint、格式檢查 | 非文件變動,且 node 有改動 |
check-docs | Markdown lint + 連結檢查 | 文件有變動 |
secrets | 偵測洩漏的密鑰 | 一律執行 |
build-artifacts | 建置一次 dist,供 release-check 使用 | 推送到 main,且 node 有改動 |
release-check | 驗證 npm pack 內容 | 推送到 main 後,建置完成時 |
checks | PR 上跑 Node 測試 + protocol 檢查;推送時跑 Bun 相容測試 | 非文件變動,且 node 有改動 |
compat-node22 | 最低支援 Node 執行環境的相容性測試 | 推送到 main,且 node 有改動 |
checks-windows | Windows 專屬測試 | 非文件變動,且有 windows 相關改動 |
macos | Swift lint/build/test + TS 測試 | PR 有 macos 改動時 |
android | Gradle build + 測試 | 非文件變動,且 android 有改動 |
快速失敗順序
工作的排序原則是讓便宜的檢查先失敗,再跑昂貴的任務:
docs-scope+changed-scope+check+secrets(並行,便宜的閘道先跑)- PR:
checks(Linux Node 測試分為 2 個分片)、checks-windows、macos、android - 推送到
main:build-artifacts+release-check+ Bun 相容測試 +compat-node22
範圍判斷邏輯在 scripts/ci-changed-scope.mjs,並由 src/scripts/ci-changed-scope.test.ts 的單元測試覆蓋。
執行器
| 執行器 | 對應工作 |
|---|---|
blacksmith-16vcpu-ubuntu-2404 | 多數 Linux 工作,包含範圍偵測 |
blacksmith-32vcpu-windows-2025 | checks-windows |
macos-latest | macos、ios |
本機等效指令
pnpm check # 型別 + lint + 格式
pnpm test # vitest 測試
pnpm check:docs # 文件格式 + lint + 連結檢查
pnpm release:check # 驗證 npm pack