SuperAPI AI 工具集

fix-dependabot

部署与运维

查看项目

更新于 10-15 13:02

技能介绍

用途

Dependabot 自动创建的依赖升级 PR 存在两个常见问题:它只修改一个 package.json,而不会运行 bun install,因此 bun.lock 文件会与依赖声明不一致;同时 monorepo 中其他包仍然引用旧版本。本技能用于修正这两个问题,使依赖升级在整个仓库内保持一致。

主要能力

  • 读取 Dependabot PR 信息,确定分支名、被升级的依赖以及新旧版本。
  • 检出该 PR 对应的分支。
  • 在 monorepo 的所有 package.json 中查找并更新同一依赖的旧版本,保留各包原有的版本前缀风格(^、~ 或精确版本)。
  • 从仓库根目录运行 bun install,重新生成 bun.lock。
  • 验证改动范围,仅允许 bun.lock 和预期的 package.json 文件被修改。
  • 提交并推送更改,然后切回之前的分支。

使用方式

技能按以下步骤执行:

  1. 获取 PR 信息——使用 gh pr view <number> --json headRefName,files,title,body 识别分支名、被升级的依赖以及新旧版本。

  2. 检出分支:

    git fetch origin <branch> git checkout <branch>

  3. 更新所有 monorepo 实例——搜索所有引用同一依赖旧版本的其他 package.json:

    rg '"<dependency>": "[~^]?<old-version>"' --glob '**/package.json'

    将每个匹配项更新为新版本,并保留各包已有的前缀风格(^、~ 或精确版本)。

  4. 从仓库根目录运行 bun install 以重新生成 bun.lock。

  5. 验证——运行 git status,确认只有 bun.lock 和预期的 package.json 文件被修改。如果出现其他意外文件变更,需先调查再继续。

  6. 提交并推送:

    git add -u git commit -m "Update <dependency> to <version> across all monorepo packages" git push

  7. 切回原分支——返回之前的分支(通常是 main):

    git checkout main

适用场景

适用于使用 bun 作为包管理器的 monorepo 项目,当 Dependabot 提交了依赖升级 PR,需要同步更新锁文件和仓库内其他包中同一依赖的版本时。

限制与注意事项

  • 对于主版本升级(例如 vite 5 → 6),应先评估升级是否合适或是否应忽略,并检查破坏性变更。
  • 如果 bun install 失败,可能是该依赖版本与其他包存在冲突。此时应关闭 PR 并评论说明原因。
  • Dependabot 提示“只要你不自行修改,Dependabot 会解决此 PR 的任何冲突”,但更新锁文件和同级包属于预期工作流,不会造成问题。