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 测试 + 协议检查;推送时运行 Bun 兼容测试 | 非文档变更且 node 相关 |
compat-node22 | 最低支持的 Node 运行时兼容性测试 | 推送到 main 且 node 相关 |
checks-windows | Windows 专项测试 | 非文档变更且 windows 相关 |
macos | Swift lint/构建/测试 + TS 测试 | PR 中包含 macos 变更 |
android | Gradle 构建 + 测试 | 非文档变更且 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