Appearance
CI 流水线
CI 在每次推送到 main 分支以及每个 Pull Request 时运行。它使用智能作用域检测,当只有不相关区域发生变更时跳过昂贵的作业。
作业总览
| 作业 | 用途 | 运行时机 |
|---|---|---|
preflight | 文档作用域、变更作用域、密钥扫描、工作流审计、生产依赖审计 | 始终运行;node 审计仅在非文档变更时运行 |
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 测试 + 协议检查;push 时 Bun 兼容性检查 | 非文档、node 变更时运行 |
compat-node22 | 最低支持的 Node 运行时兼容性验证 | 推送到 main、node 变更时运行 |
checks-windows | Windows 专项测试 | 非文档、与 windows 相关的变更时运行 |
macos | Swift lint/build/test + 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 中的单元测试覆盖。 同一共享作用域模块还通过更窄的 changed-smoke 门控驱动独立的 install-smoke 工作流,因此 Docker/安装冒烟测试只在安装、打包和容器相关变更时运行。
运行器
| 运行器 | 作业 |
|---|---|
blacksmith-16vcpu-ubuntu-2404 | 大多数 Linux 作业,包括作用域检测 |
blacksmith-32vcpu-windows-2025 | checks-windows |
macos-latest | macos、ios |
本地等效命令
在"养龙虾"的本地开发环境中,可用以下命令模拟 CI 检查:
bash
pnpm check # 类型 + lint + 格式化
pnpm test # vitest 测试
pnpm check:docs # 文档格式 + lint + 死链
pnpm release:check # 验证 npm pack