CI 流水线

CI 在每次向 main 推送和每个 Pull Request 时运行。它使用智能作用域判断,当只有无关区域变更时会跳过开销大的任务。

任务概览

任务用途触发条件
docs-scope检测是否仅文档变更始终运行
changed-scope检测哪些区域发生了变更(node/macos/android/windows)非纯文档变更
checkTypeScript 类型检查、lint、格式化非文档变更且 node 相关
check-docsMarkdown lint + 死链检查文档变更
secrets检测泄露的密钥始终运行
build-artifacts构建 dist 产物,供 release-check 使用推送到 main 且 node 相关
release-check验证 npm pack 内容推送到 main 且构建完成后
checksPR 上运行 Node 测试 + 协议检查;推送时运行 Bun 兼容测试非文档变更且 node 相关
compat-node22最低支持的 Node 运行时兼容性测试推送到 main 且 node 相关
checks-windowsWindows 专项测试非文档变更且 windows 相关
macosSwift lint/构建/测试 + TS 测试PR 中包含 macos 变更
androidGradle 构建 + 测试非文档变更且 android 相关

快速失败顺序

任务按顺序编排,让低开销的检查先失败,避免白跑高开销任务:

  1. docs-scope + changed-scope + check + secrets(并行运行,低开销门控优先)
  2. PR:checks(Linux Node 测试分为 2 个分片)、checks-windowsmacosandroid
  3. 推送到 mainbuild-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-2025checks-windows
macos-latestmacosios

本地等效命令

pnpm check          # 类型检查 + lint + 格式化
pnpm test           # vitest 测试
pnpm check:docs     # 文档格式化 + lint + 死链检查
pnpm release:check  # 验证 npm pack