node-ci 用于为 Node 项目编写 GitHub Actions CI,目标是让 CI 从仓库推导、失败关闭、并在构造上保持供应链干净。
用途:修复常见 CI 反模式,包括硬编码的 Node 版本与 package.json#engines 漂移或已 EOL、聚合检查在任务被跳过时仍通过、在 corepack 不再随新版 Node 提供的运行器上使用 corepack enable、以及工作流使用未固定版本的 action 和默认过宽权限。
主要能力:从 engines 与受维护 Node 版本线的交集推导矩阵,可选下一条 Current 线作为允许失败;按锁文件选择包管理器,setup-node 缓存对应正确锁文件,pnpm 使用其 setup action(不依赖 corepack);结构为 lint/typecheck/test 任务加一个失败关闭的聚合器作为唯一必需检查,使用 if: always() 与显式结果判断,对 failure、cancelled、skipped 都失败;支持 merge queue 时声明 merge_group;顶层权限设为 contents: read,按任务提权,第三方 action 按 SHA 固定并带版本注释,官方 actions/* 按主版本标签加 Dependabot,配置 concurrency 与 cancel-in-progress,全面设置 timeout-minutes。速度优化先读取运行耗时,再做锁文件缓存、矩阵裁剪、套件拆分,不静默删除门禁。
使用方式:编写后运行 python3 "${CLAUDE_SKILL_DIR}/scripts/check_workflows.py" 做静态审计,然后推送并确认聚合器在故意失败的支线上变红以验证失败关闭。
限制与注意:不用于发布/发布工作流(应使用 node-release);lint 规则与测试配置由 node-lint/node-testing/node-typescript 负责,本技能只接线;依赖策略由 node-supply-chain 负责,但本技能产出的工作流遵守其固定与权限规则。必需检查名匹配的是上报的 job name 而非文件名,重命名会静默孤立分支规则;被路径过滤跳过的矩阵支线仍会满足朴素的聚合器;main 推送上的 cancel-in-progress 可能取消部署相邻运行,需谨慎限定 concurrency 组;LTS 表与 setup action 主版本需按版本门控并在编写时重新核验。文件中 references/ci-playbook.md 提供引擎推导矩阵、缓存/pnpm 设置、失败关闭聚合 YAML、merge_group、monorepo 过滤与远程缓存;scripts/check_workflows.py 做静态审计,违规时以非零退出。