Skip to main content

关于 Dependabot 版本更新

您可以使用 Dependabot 来确保您使用的包更新到最新版本。

谁可以使用此功能?

Dependabot version updates 可免费用于 GitHub.com 上的所有存储库。

关于 Dependabot version updates

Dependabot 负责维护您的依赖项。 您可以使用它来确保仓库自动跟上它所依赖的包和应用程序的最新版本。

通过将 dependabot.yml 配置文件签入存储库,可启用 Dependabot version updates。 配置文件指定存储在仓库中的清单或其他包定义文件的位置。 Dependabot 使用此信息检查过时的包和应用程序。 Dependabot 通过查看依赖项的语义版本控制 (semver) 来确定是否存在新版本的依赖项,从而决定它是否应该更新到该版本。 对于某些软件包管理器,Dependabot version updates 也支持供应。 供应(或缓存)的依赖项是检入仓库中特定目录的依赖项,而不是在清单中引用的依赖项。 即使包服务器不可用,供应的依赖项在生成时也可用。 Dependabot version updates 可以配置为检查为新版本供应的依赖项,并在必要时更新它们。

当 Dependabot 发现过时的依赖项时,它将引发一个拉取请求,用于将清单更新到依赖项的最新版本。 对于供应和依赖项,Dependabot 提出拉取请求以直接将过时的依赖项替换为新版本。 检查测试是否通过,查看拉取请求摘要中包含的更改日志和发行说明,然后合并它。 有关详细信息,请参阅“配置 Dependabot 版本更新”。

如果启用“安全更新”,Dependabot 还将引发用于更新易受攻击的依赖项的拉取请求。 有关详细信息,请参阅“关于 Dependabot 安全更新”。

当 Dependabot 提出拉取请求时,这些拉取请求可以是安全更新或版本更新:

  • Dependabot security updates 是自动拉取请求,可帮助你更新已知漏洞的信赖项。
  • Dependabot version updates 是自动拉取请求,即使它们没有任何漏洞,也会保持更新依赖项。 要检查版本更新的状态,请依次导航到仓库的 Insights(见解)选项卡、Dependency Graph(依赖关系图)、Dependabot。

Dependabot 默认对自己的提交进行签名,即使提交签名不是存储库的要求。 有关已验证提交的详细信息,请参阅“关于提交签名验证”。

由 Dependabot 打开的拉取请求可能会触发运行操作的工作流。 有关详细信息,请参阅“通过 GitHub Actions 自动化 Dependabot”。

默认情况下,Dependabot updates 使用 GitHub 中内置的 Dependabot 应用程序运行。 可以改为选择在 GitHub Actions 上运行 Dependabot updates,以利用更好的性能以及提高 Dependabot updates 作业的可见性和控制。 有关详细信息,请参阅“关于 GitHub Actions 运行器上的 Dependabot”。

Dependabot 和所有相关功能受 GitHub 服务条款约束。

Dependabot 拉取请求的频率

在配置文件中指定检查每个生态系统的新版本的频率:每日、每周或每月。

首次启用版本更新时,您可能有很多过时的依赖项,其中一些可能为许多落后于最新版本的版本。 Dependabot 将在其启用后立即检查过时的依赖项。 根据您配置更新的清单文件的数量,您可能会在添加配置文件后几分钟内看到新的版本更新拉取请求。 Dependabot 也会在配置文件后续更改时运行更新。

为使拉取请求保持可管理和易于审查,Dependabot 最多提出五个拉取请求,以便开始将依赖项更新至最新版本。 如果您在下次预定的更新之前先合并了这些拉取请求,剩余的拉取请求将在下次更新时打开,最多不超过此限。 可以通过设置open-pull-requests-limit配置选项来更改打开的拉取请求的最大数量。

若要进一步减少可能看到的拉取请求数,可以使用 groups 配置选项将依赖项集组合在一起(每个包生态系统)。 然后,Dependabot 提出单个拉取请求,以将组中尽可能多的依赖项同时更新到最新版本。有关详细信息,请参阅“自定义依赖项更新”。

如果您启用了安全更新,有时会看到额外的安全更新拉取请求。 这些请求是由依赖于默认分支的 Dependabot 警报触发的。 Dependabot 自动提出拉取请求以更新有漏洞的依赖项。

有时,由于配置错误或版本不兼容,可能会看到 Dependabot 运行失败。 运行失败 15 次后,15 Dependabot version updates 会跳过后续的计划运行,直到你手动触发检查依赖项关系图的更新。 Dependabot security updates 仍照常运行。

支持的仓库和生态系统

您可以为包含其中一个受支持包管理器的依赖项清单或锁定文件的仓库配置版本更新。 对于某些软件包管理器,您也可以配置依赖项的供应。 有关详细信息,请参阅 vendor。 Dependabot 还支持私有注册表中的依赖项。 有关详细信息,请参阅 registries

注意:在运行安全性或版本更新时,有些生态系统必须能够解决来自其来源的所有依赖项,以验证版本更新是否成功。 如果清单或锁定文件包含任何私有依赖项,Dependabot 必须能够访问这些依赖项所在的位置。 组织所有者可以授予 Dependabot 访问包含同一个组织内项目依赖项的私有仓库. 有关详细信息,请参阅“管理组织的安全和分析设置”。 你可以在存储库的 dependabot.yml 配置文件中配置对专用注册表的访问。 有关详细信息,请参阅“dependabot.yml 文件的配置选项”。

Dependabot 不支持所有包管理器的私有 GitHub 依赖项。 详见下表。

下表对每个包管理器显示:

  • 要在 dependabot.yml 文件中使用的 YAML 值
  • 支持的包管理器版本
  • 是否支持私有 GitHub 仓库或注册表中的依赖项
  • 是否支持供应的依赖项
程序包管理器YAML 值支持的版本私有仓库专用注册表供应
Bundlerbundlerv1, v2
Cargocargov1
编辑器composerv1, v2
开发容器devcontainers不适用
Dockerdockerv1不适用
Hexmixv1
elm-packageelmv0.19
git submodulegitsubmodule不适用不适用
GitHub Actionsgithub-actions不适用不适用
Go 模块gomodv1
Gradlegradle不适用
Mavenmaven不适用
npmnpmv6、v7、v8、v9
NuGetnuget<=6.8.0
pippipv21.1.2
pipenvpip<= 2021-05-29
pip-compilepip6.1.0
pnpmnpmv7、v8
诗歌pipv1
酒馆pubv2
Swiftswiftv5(仅适用于 git)
Terraformterraform>= 0.13、<= 1.8.x不适用
yarnnpmV1、V2、V3

提示:对于包管理器(如 pipenvpoetry),需要使用 pip YAML 值。 例如,如果使用 poetry 来管理 Python 依赖项,并且希望让 Dependabot 监视新版本的依赖项清单文件,请在 dependabot.yml 文件中使用 package-ecosystem: "pip"

Cargo

专用注册表支持包括 Cargo 注册表,因此可以使用 Dependabot 保持 Rust 依赖项更新。 有关详细信息,请参阅 "针对 Dependabot 的专用注册表配置指南"。

开发容器

可以在 dependabot.yml 文件中将 devcontainers 用作 package-ecosystem,以更新 devcontainer.json 配置文件中的功能。 有关此支持的详细信息以及配置文件示例,请参阅开发容器文档中的 Dependabot 集成正式发布

开发容器用于包括 Codespaces 在内的多个工具和服务。 有关功能和支持的服务的详细信息,请分别参阅开发容器文档中的功能支持工具和服务

此更新程序可确保功能固定到关联 devcontainer.json 文件中的最新 major 版本。 如果开发容器具有锁定文件,则该文件也会被更新。 有关锁定文件规范的详细信息,请参阅 devcontainers/spec 存储库中的锁定文件

任何有效开发容器位置中的功能都将在单个拉取请求中更新。 有关开发容器规范的详细信息,请参阅开发容器文档中的规范

Docker

Dependabot 可以从 Docker 映像添加元数据,以拉取版本更新请求。 元数据包括发行说明、更改日志和提交历史记录。 存储库管理员可以使用元数据快速评估依赖项更新的稳定性风险。

为了使 Dependabot 提取 Docker 元数据,Docker 映像的维护员必须将 org.opencontainers.image.source 标签添加到其 Dockerfile,并包含源存储库的 URL。 此外,维护员必须使用与已发布的 Docker 映像相同的标记来标记存储库。 有关示例,请参阅 dependabot-fixtures/docker-with-source 存储库。 有关 Docker 标签的详细信息,请参阅 Docker 文档中的扩展映像标签BUILDX_GIT_LABELS

Dependabot 可更新 Kubernetes 清单中的 Docker 映像标记。 对于包含引用 Docker 映像标记的 Kubernetes 清单的每个目录,请向 dependabot.yml 文件的 Docker package-ecosystem 元素添加一个条目。 Kubernetes 清单可以是 Kubernetes 部署 YAML 文件或 Helm 图表。 有关为 docker 配置 dependabot.yml 文件的信息,请参阅“dependabot.yml 文件的配置选项”中的“package-ecosystem”。

Dependabot 支持公共和专用 Docker 注册表。 有关支持的注册表的列表,请参阅“dependabot.yml 文件的配置选项”中的“docker-registry”。

Dependabot 解析 Docker 映像标签以进行语义化版本控制 (SemVer)。 如果 Dependabot 检测到带有预发布标签的标签,那么它只会建议更新到具有匹配预发布标签的最新版本,而不会建议使用不同预发布标签的较新版本。 有关详细信息,请参阅 dependabot/dependabot-core 存储库中的dependabot-docker README.md 文件。

GitHub Actions

Dependabot 支持对 GitHub Actions 的版本更新,但有以下注意事项。

  • Dependabot 仅支持使用 GitHub 存储库语法(例如 actions/checkout@v4)更新 GitHub Actions。 Dependabot 将忽略本地引用的操作或可重用工作流(例如,./.github/actions/foo.yml)。
  • 目前不支持 Docker Hub 和 GitHub Packages Container registry URL。 例如,不支持使用 docker:// 语法引用 Docker 容器操作。
  • Dependabot 支持 GitHub Actions 的公共存储库和专用存储库。 有关专用注册表配置选项,请参阅“dependabot.yml 文件的配置选项”中的“git”。

有关通过 GitHub Actions 使用 Dependabot version updates 的详细信息,请参阅“使用 GitHub 的安全功能来保护 GitHub Actions 的使用”。

Gradle

Dependabot 不运行 Gradle,但支持对以下文件的更新:

  • build.gradlebuild.gradle.kts(适用于 Kotlin 项目)
  • gradle/libs.versions.toml(适用于使用标准 Gradle 版本目录的项目)
  • 通过 apply 声明包含的文件,文件名中包含 dependencies。 请注意,apply 不支持 apply to、递归或高级语法(例如,Kotlin 的 applymapOf,由属性定义的文件名)。

对于 Dependabot security updates,Gradle 的支持仅限于使用 依赖项提交 API 手动上传依赖项关系图数据。 有关 依赖项提交 API 的详细信息,请参阅“使用依赖项提交 API”。

注意:

  • 使用 依赖项提交 API 将 Gradle 依赖项上传到依赖项关系图时,将上传所有的项目依赖项,甚至是任何依赖项文件中未显式提及的可转移依赖项。 在可转移依赖项中检测到警报时,Dependabot 无法在存储库中找到易受攻击的依赖项,因此不会为该警报创建安全更新程序。
  • 但是,当父依赖项在项目清单文件中显式声明为直接依赖项时,Dependabot version updates 将创建拉取请求。

Maven

Dependabot 不运行 Maven,但支持对 pom.xml 文件的更新。

NuGet CLI

Dependabot 不运行 NuGet CLI,但支持版本 6.8.0 以前的大多数功能。

pip 和 pip-compile

除支持更新 requirements.txt 文件外,Dependabot 还支持更新 pyproject.toml 文件(如果它们遵循 PEP 621 标准)。

pnpm

Dependabot version updates 和 Dependabot security updates 支持 pnpm。

仅 Dependabot version updates 支持

酒馆

Dependabot 在尝试更新到的版本被忽略时不会为 pub 执行更新,即使有可用的早期版本也是如此。

如果使用专用托管的 pub 存储库,则可以通过 Dependabot 使 Dart 依赖项保持最新。 有关允许 Dependabot 访问专用 GitHub 依赖项的信息,请参阅“允许 Dependabot 访问专用依赖项”。

Swift

专用注册表支持仅适用于 git 注册表。 不支持 Swift 注册表。 不支持非声明性清单。 有关非声明性清单的详细信息,请参阅 Swift Evolution 文档中的编辑非声明性清单

Terraform

Terraform 支持包括:

  • Terraform 注册表或可公开访问的 Git 存储库上托管的模块。
  • Terraform 提供程序。
  • 专用 Terraform 注册表。 可以在 dependabot.yml 文件中指定一个 git 注册表,以配置对专用 git 存储库的访问权限。 有关详细信息,请参阅 git

yarn

Dependabot 支持 v2 及更高版本的 vendored 依赖项。

如果您的仓库已使用集成进行依赖项管理,则在启用 Dependabot 前需要禁用此集成。 有关详细信息,请参阅“关于使用集成”。

关于 Dependabot updates 的自动停用

当存储库的维护者停止与 Dependabot 拉取请求交互时,Dependabot 会暂时暂停其更新并发出通知。 这种自动选择退出行为可减少干扰,因为 Dependabot 不会对版本更新和安全更新创建拉取请求,也不会对非活动存储库的 Dependabot 拉取请求进行变基。

Dependabot 更新的自动停用仅适用于符合以下条件的存储库:Dependabot 已打开拉取请求但拉取请求保持不变。 如果 Dependabot 尚未打开任何拉取请求,Dependabot 将永远不会暂停。

活动存储库是指用户(非 Dependabot)在过去 90 天内执行了以下任一操作的存储库:

  • 在存储库上合并或关闭 Dependabot 拉取请求。
  • 对存储库的 dependabot.yml 文件进行更改。
  • 手动触发安全更新或版本更新。
  • 为存储库启用 Dependabot security updates。
  • 对拉取请求使用 @dependabot 命令。

非活动存储库是指以下存储库:至少有一个 Dependabot 拉取请求打开时间超过 90 天,在整个期间处于启用状态,并且用户未执行上面列出的任何操作。

当 Dependabot 暂停时,GitHub 将向以下位置添加横幅通知:

  • 所有打开的 Dependabot 拉取请求。
  • 存储库“设置”选项卡的 UI(在“代码安全性和分析”下,然后选择 Dependabot)。
  • Dependabot alerts 的列表(如果 Dependabot security updates 受影响)。

维护人员再次与 Dependabot 拉取请求交互后,Dependabot 将自行取消暂停:

  • Dependabot alerts 的安全更新将会自动恢复。
  • 版本更新将按照 dependabot.yml 文件中指定的计划自动恢复。

Dependabot 也会在 30 天后停止对版本和安全更新的拉取请求进行变基,从而减少非活动 Dependabot 拉取请求的通知。

关于 Dependabot 版本更新通知

您可以按 GitHub 筛选通知,以显示由 Dependabot创建的拉取请求的通知。 有关详细信息,请参阅“从收件箱管理通知”。