关于 Dependabot
Dependabot 可帮助您掌握依赖关系生态系统。借助 Dependabot,您可以随时更新依赖项,解决供应链中任何潜在的安全问题。
Dependabot 包含三个不同的功能,可帮助您管理依赖项
- Dependabot 警报 - 通知您存储库中使用的依赖项中的漏洞。
- Dependabot 安全更新 - 自动提出拉取请求以更新您使用的已知存在安全漏洞的依赖项。
- Dependabot 版本更新 - 自动提出拉取请求以使您的依赖项保持最新状态。
有关 Dependabot 的更多信息,请参阅“Dependabot 快速入门指南”。
在本文档中,您可以查看支持的生态系统和存储库。
支持的生态系统和存储库
您可以为包含受支持的包管理器之一的依赖项清单或锁定文件的存储库配置更新。对于某些包管理器,您还可以为依赖项配置版本控制。有关更多信息,请参阅 vendor
。Dependabot 还支持私有注册表中的依赖项。有关更多信息,请参阅 registries
。
注意
- 在运行安全或版本更新时,某些生态系统必须能够从其源解析所有依赖项以验证更新是否成功。如果您的清单或锁定文件包含任何私有依赖项,Dependabot 必须能够访问托管这些依赖项的位置。组织所有者可以授予 Dependabot 访问同一组织内项目私有存储库中依赖项的权限。有关更多信息,请参阅“管理组织的安全和分析设置”。您可以在存储库的
dependabot.yml
配置文件中配置对私有注册表的访问。有关更多信息,请参阅“dependabot.yml 文件的配置选项”。 - Dependabot 并非对所有包管理器都支持私有 GitHub 依赖项。请参阅下表中的详细信息。
如果您的存储库已使用依赖项管理的集成,则需要在启用 Dependabot 之前禁用它。有关更多信息,请参阅“关于使用集成”。
包管理器 | YAML 值 | 支持的版本 | 版本更新 | 安全更新 | 私有存储库 | 私有注册表 | 版本控制 |
---|---|---|---|---|---|---|---|
Bundler | bundler | v2 | |||||
Cargo | cargo | v1 | |||||
Composer | composer | v1, v2 | |||||
开发容器 | devcontainers | 不适用 | |||||
Docker | docker | v1 | 不适用 | ||||
Hex | mix | v1 | |||||
elm-package | elm | v0.19 | |||||
git 子模块 | gitsubmodule | 不适用 | 不适用 | ||||
GitHub Actions | github-actions | 不适用 | 不适用 | ||||
Go 模块 | gomod | v1 | |||||
Gradle | gradle | 不适用 | |||||
Maven | maven | 不适用 | |||||
npm | npm | v6, v7, v8, v9 | |||||
NuGet | nuget | <=6.12.0 | |||||
pip | pip | v21.1.2 | |||||
pipenv | pip | <= 2021-05-29 | |||||
pip-compile | pip | 6.1.0 | |||||
pnpm | npm | v7, v8, v9 | |||||
poetry | pip | v1 | |||||
pub | pub | v2 | |||||
Swift | swift | v5 | (仅限 git) | ||||
Terraform | terraform | >= 0.13, <= 1.8.x | 不适用 | ||||
yarn | npm | v1, v2, v3 |
提示
对于像pipenv
和poetry
这样的包管理器,您需要使用pip
YAML 值。例如,如果您使用poetry
来管理您的 Python 依赖项,并希望 Dependabot 监视您的依赖项清单文件以获取新版本,请在您的dependabot.yml
文件中使用package-ecosystem: "pip"
。
有关 Dependabot 安全更新的生态系统支持的更多信息,另请参阅“依赖关系图支持的包生态系统”。
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 镜像的维护人员必须将其 Dockerfile 中添加org.opencontainers.image.source
标签,并包含源存储库的 URL。此外,维护人员必须使用与发布的 Docker 镜像相同的标签标记存储库。例如,请参阅dependabot-fixtures/docker-with-source
存储库。有关 Docker 标签的更多信息,请参阅 Docker 文档中的扩展镜像标签和BUILDX_GIT_LABELS。
Dependabot 可以更新 Kubernetes 清单文件中的 Docker 镜像标签。为包含引用 Docker 镜像标签的 Kubernetes 清单文件的每个目录的 Docker package-ecosystem
元素添加一个条目到您的 dependabot.yml
文件中。Kubernetes 清单文件可以是 Kubernetes 部署 YAML 文件或 Helm 图表。有关为 docker
配置 dependabot.yml
文件的信息,请参阅“package-ecosystem
”在“dependabot.yml 文件的配置选项”中。
Dependabot 支持公共和私有 Docker 注册表。有关受支持注册表的列表,请参阅“docker-registry
”在“dependabot.yml 文件的配置选项”中。
Dependabot 解析 Docker 镜像标签以进行语义版本控制(SemVer)。如果 Dependabot 检测到带有预发布版本的标签,则它只会建议更新到具有匹配预发布版本的最新版本,并且不会建议使用不同预发布标签的更新版本。有关更多信息,请参阅dependabot/dependabot-core
存储库中的dependabot-docker
README.md文件。
GitHub Actions
Dependabot 支持 GitHub Actions 的版本更新,但有一些注意事项。
- Dependabot 仅支持使用 GitHub 存储库语法更新 GitHub Actions,例如
actions/checkout@v4
。Dependabot 将忽略本地引用的操作或可重用工作流(例如,./.github/actions/foo.yml
)。 - 目前不支持 Docker Hub 和 GitHub Packages 容器注册表 URL。例如,不支持使用
docker://
语法引用 Docker 容器操作。 - Dependabot 支持 GitHub Actions 的公共和私有存储库。有关私有注册表配置选项,请参阅“
git
”在“dependabot.yml 文件的配置选项”中。
有关将 Dependabot 版本更新与 GitHub Actions 结合使用的更多信息,请参阅“使用 GitHub 的安全功能来保护您对 GitHub Actions 的使用”。
Gradle
Dependabot 不运行 Gradle,但支持以下文件的更新
build.gradle
、build.gradle.kts
(对于 Kotlin 项目)gradle/libs.versions.toml
(对于使用标准 Gradle 版本目录的项目)- 通过
apply
声明包含的文件,这些文件在文件名中具有dependencies
。请注意,apply
不支持apply to
、递归或高级语法(例如,Kotlin 的apply
与mapOf
、由属性定义的文件名)。
Dependabot 使用依赖项的pom.xml
文件中的信息在更新拉取请求中添加指向发布信息的链接。如果从pom.xml
文件中省略了信息,则无法将其包含在 Dependabot 拉取请求中,请参阅“优化 Java 包以进行 Dependabot 更新”。
对于 Dependabot 安全更新,Gradle 支持仅限于使用依赖项提交 API 手动上传依赖项图数据。有关依赖项提交 API 的更多信息,请参阅“使用依赖项提交 API”。
注意
- 当您使用依赖项提交 API 将 Gradle 依赖项上传到依赖项图时,将上传所有项目依赖项,即使是任何依赖项文件中未明确提及的传递依赖项。当在传递依赖项中检测到警报时,Dependabot 无法在存储库中找到易受攻击的依赖项,因此不会为此警报创建安全更新。
- 但是,当父依赖项在项目的清单文件中明确声明为直接依赖项时,Dependabot 版本更新将创建拉取请求。
Maven
Dependabot 不运行 Maven,但支持更新pom.xml
文件。
Dependabot 使用依赖项的pom.xml
文件中的信息在更新拉取请求中添加指向发布信息的链接。如果从pom.xml
文件中省略了信息,则无法将其包含在 Dependabot 拉取请求中,请参阅“优化 Java 包以进行 Dependabot 更新”。
NuGet CLI
Dependabot 不运行 NuGet CLI,但确实支持大多数功能,直到版本 6.8.0。
pip 和 pip-compile
除了支持更新requirements.txt
文件外,Dependabot 还支持更新pyproject.toml
文件,前提是它们遵循 PEP 621 标准。
pub
当 Dependabot 尝试更新到的版本被忽略时,即使有较早的版本可用,它也不会为 pub
执行更新。
如果您使用私有托管的 pub 存储库,则可以使用 Dependabot 使 Dart 依赖项保持最新。有关允许 Dependabot 访问私有 GitHub 依赖项的信息,请参阅“允许 Dependabot 访问私有依赖项”。
Swift
私有注册表支持仅适用于 git 注册表。不支持 Swift 注册表。不支持非声明性清单。有关非声明性清单的更多信息,请参阅 Swift Evolution 文档中的编辑非声明性清单。
Terraform
Terraform 支持包括
- 托管在 Terraform Registry 或可公开访问的 Git 存储库上的模块。
- Terraform 提供程序。
- 私有 Terraform Registry。您可以通过在
dependabot.yml
文件中指定 git 注册表来配置对私有 git 存储库的访问。有关更多信息,请参阅git
。
yarn
Dependabot 支持 v2 及更高版本的供应商依赖项。