SuperAPI AI 工具集

ci-pipeline-and-gates

部署与运维

查看项目

更新于 10-18 18:04

技能介绍

用途

该技能为 Expo 应用构建 GitHub Actions CI。它的核心思路是:CI 在 GitHub 的机器上重复本地门禁,增加笔记本无法每晚运行的设备测试通道,并且只在人工决定时才启动商店构建。整个方案由三套工作流组成:ci.yml 在每个 pull request 和 push 上运行 npm run verify;devices.yml 每晚运行 Android 模拟器和 iOS 模拟器通道;release.yml 在受保护环境后手动触发 EAS 构建。所有 action 固定到提交 SHA,所有 runner 和工具固定到具体版本。

主要能力

  • 提供三套工作流模板(ci.yml、devices.yml、release.yml)以及 dependabot.yml 和 CI 契约文件。
  • 强制一系列必须成立的规则:CI 逐字节运行本地门禁(npm ci 后 npm run verify),不手写 lint/test/build 步骤;runner 与工具固定版本(ubuntu-24.04 / macos-26,Node 来自 .nvmrc,Gradle 或 Maestro 处用 JDK 17);每个 action 固定到完整 40 位提交 SHA 并带 # vX.Y.Z 注释,至少 7 天前发布,Dependabot 以 7 天冷却期提议更新;最小权限,不在特权上下文中运行不可信代码;密钥只存在于受保护环境的工作中;每个工作流有并发组,每个 job 有 timeout-minutes(最多 180);红色步骤保持红色,不允许 continue-on-error、|| true 等软化手段;缓存以固定其内容的文件为键,不缓存 node_modules;每个有脚本的设备通道按自己的计划在 CI 中运行;工作流不直接接触设备或许可证;每个门禁和设备 job 用 if: ${{ always() }} 上传报告;发布通道仅手动启动。
  • 提供两个检查脚本:check-workflows.mjs(16 条规则)和 check-ci-lanes.mjs(19 条规则),以及 actionlint 校验。
  • 提供参考文档:workflow-anatomy.md、security-hardening.md、device-lanes.md、release-lane.md、checks.md,以及红运行排查示例。

使用方式

  1. 先了解仓库现状:查看 .github/workflows、.github/dependabot.yml、.nvmrc、package.json 脚本,以及是否已采用 quality-gates。若没有 verify,先采用 quality-gates,因为 CI 只重复门禁,从不发明门禁。
  2. 复制模板到对应路径:ci.yml 和 dependabot.yml 始终复制;devices.yml 在应用有设备脚本时复制,删除应用没有的通道 job;release.yml 在应用通过 EAS 发布时复制;contracts/ci.json 和 ci.schema.json 始终复制。
  3. 固定与加固:阅读 security-hardening.md,将新 action 解析到至少 7 天前发布的提交 SHA,并添加 # vX.Y.Z 注释。
  4. 设备通道:修改 runner、Android 包、JDK 步骤或节奏前阅读 device-lanes.md。应用不会在 CI 中运行的通道,需开发者同意后写入 laneOptOuts 并附原因。
  5. 发布通道:阅读 release-lane.md,在报告中列出人工设置(EAS token、带审查者和分支规则的生产环境)。代理不创建 token、环境或分支规则。
  6. 门禁文件:确认 quality-gates.json 的 gatedPaths 包含 .github/workflows/** 和 .github/dependabot.yml。
  7. 运行检查:node ${CLAUDE_SKILL_DIR}/scripts/check-workflows.mjs . 和 node ${CLAUDE_SKILL_DIR}/scripts/check-ci-lanes.mjs .,修复每个 FAIL 行直到两者输出 RESULT: PASS,再从固定且校验和的二进制运行 actionlint。
  8. 推送前询问:工作流在 GitHub 机器上以仓库名义运行。CI 失败时按 red-run-triage.md 排查:相同命令、相同 Node、相同文件,然后看上传的报告;修复原因,绝不修复工作流的严格度。

适用场景

适用于使用 Expo 并希望建立严格 CI 门禁的 React Native 项目,尤其是需要每晚设备测试、手动 EAS 发布、SHA 固定和最小权限安全加固的团队。多包仓库时工作流保持在仓库根,npm ci 和 npm run verify 在根运行,设备脚本用 --workspace apps/<app> 运行。

限制

资料中明确:设备 job 未在 GitHub 上实际运行过;验证日期为 2026-10-14,针对 ubuntu-24.04 和 macos-26 runner 镜像 README、actionlint 1.7.12、Expo SDK 57、Node 26.4.0、Xcode 26.6 和 eas-cli 24.10.0。部分 SKIP 行在对应技能采用前是预期的。代理不创建 token、环境或分支规则。