PR Bump 是一个用于清理例行依赖升级 PR 的工作流程,主要面向由 Dependabot 等依赖机器人创建的、仅修改依赖元数据的 PR。它的核心目标是避免逐个合并升级 PR 带来的流水线反复和冲突,同时防止意外提交无关的本地更改或引入不安全的依赖。
用途
该技能适用于依赖机器人(如 Dependabot)提交的依赖升级 PR,常见场景是 Bundler/Ruby gem 更新 PR,且仅修改 Gemfile.lock。它明确不适用于修改应用代码、迁移、Docker 文件或非依赖配置的 PR;遇到这类情况应停止并转入常规 PR 审查。
主要能力
- 批量整合:将多个依赖升级 PR 视为一个工作单元,在本地使用包管理器一次性更新所有依赖到最新可解析版本,而不是逐个合并 PR 分支。
- 一次验证:对整合后的依赖集合运行一次本地 CI 等效检查(如测试、RuboCop、Brakeman、bundler-audit),而不是每个升级单独运行。
- 安全防护:在提交前检查 git 状态,只暂存预期文件;验证依赖来自默认公共仓库(rubygems.org、npm、pypi)且名称、版本、校验和符合预期;对 git/path 源、重命名包、可疑名称或新增安装钩子等情况停止并转交 pr-audit。
- 闭环处理:对于未整合的 PR(如主版本升级、构建失败、非元数据更改),必须在 PR 上评论说明原因并关闭,或创建跟踪 issue 并链接,不能静默留下红色构建的 PR。
- 部署支持:在用户要求部署时,于 CI 通过后执行部署命令,并处理可能混入构建上下文的本地未提交更改。
使用方式
工作流程分为五个步骤:
- 检查本地 git 状态和开放的 PR,确认每个 PR 都是仅依赖升级。
- 使用包管理器在本地整合所有升级(例如
bundle update <gem_one> <gem_two> ...),解析到最新兼容版本。 - 运行本地 CI 等效检查,修复暴露的问题。
- 仅提交预期文件,使用
Closes #N引用关闭 PR,推送到默认分支。 - 在用户要求时,CI 通过后执行部署。
具体命令示例包括:
gh pr list --state open --json number,title,headRefName,baseRefName,author,labels,mergeStateStatus,isDraft,updatedAt,url
bundle update <gem_one> <gem_two> ...
bundle check
git add Gemfile.lock
git commit -m "Bump <gem_one> and <gem_two>" -m "Closes #<pr1>. Closes #<pr2>."
git push origin <default-branch>
适用场景
- 清理大量仅更新 Gemfile.lock 的 Dependabot PR。
- 需要批量更新依赖并一次性验证的项目。
- 希望避免逐个合并依赖 PR 造成 CI 频繁运行和冲突的团队。
限制
- 仅适用于机器人创建的、仅修改依赖元数据的 PR;涉及应用代码、迁移、Docker 文件或非依赖配置的 PR 不适用。
- 需要项目具备可用的 CI 等效检查命令和包管理器。
- 不能自动处理主版本升级或需要修改依赖约束的情况;这些需要人工决定或转交其他流程。
- 部署步骤依赖于项目特定的部署命令,且需注意本地未提交更改可能影响构建。