关于 Dependabot
Dependabot 可帮助你随时掌握依赖项生态系统。 使用 Dependabot,可以保持依赖项为最新状态,从而解决供应链中的任何潜在安全问题。
Dependabot 由三种不同的功能组成,可帮助你管理依赖项:
- Dependabot alerts - 就存储库中使用的依赖项中的漏洞问题通知你。
- Dependabot security updates - 自动引发拉取请求,以更新你使用的具有已知安全漏洞的依赖项。
- Dependabot version updates - 自动引发拉取请求以使依赖项保持最新。
有关 Dependabot 的详细信息,请参阅“Dependabot 快速入门指南”。
本文会介绍支持生态系统和存储库有哪些。
支持的生态系统和存储库
可以为包含其中一个受支持包管理器的依赖项清单或锁定文件的存储库配置版本更新。 对于某些软件包管理器,您也可以配置依赖项的供应。 有关详细信息,请参阅 vendor
。
Dependabot 还支持私有注册表中的依赖项。 有关详细信息,请参阅 registries
。
Note
为确保 GitHub Enterprise Server 支持最新受支持的生态系统版本的 Dependabot updates,企业所有者必须下载最新版本的 Dependabot 操作。 有关操作的详细信息,以及如何下载最新版本的说明,请参阅“使用官方捆绑操作的最新版本”。
Note
- 在运行安全性或版本更新时,有些生态系统必须能够解决来自其来源的所有依赖项,以验证版本更新是否成功。 如果清单或锁定文件包含任何私有依赖项,Dependabot 必须能够访问这些依赖项所在的位置。 组织所有者可以授予 Dependabot 访问包含同一个组织内项目依赖项的私有仓库. 有关详细信息,请参阅“管理组织的安全和分析设置”。 你可以在存储库的
dependabot.yml
配置文件中配置对专用注册表的访问。 有关详细信息,请参阅“dependabot.yml 文件的配置选项”。 - Dependabot 不支持所有包管理器的私有 GitHub 依赖项。 详见下表。
如果您的仓库已使用集成进行依赖项管理,则在启用 Dependabot 前需要禁用此集成。
程序包管理器 | YAML 值 | 支持的版本 | 版本更新 | 安全更新 | 私有仓库 | 专用注册表 | 供应 |
---|---|---|---|---|---|---|---|
Bundler | bundler | v1, v2 | |||||
Cargo | cargo | v1 | |||||
编辑器 | composer | v1, v2 | |||||
开发容器 | devcontainers | 不适用 | |||||
Docker | docker | v1 | 不适用 | ||||
Hex | mix | v1 | |||||
elm-package | elm | v0.19 | |||||
git submodule | gitsubmodule | 不适用 | 不适用 | ||||
GitHub Actions | github-actions | 不适用 | 不适用 | ||||
Go 模块 | gomod | v1 | |||||
Gradle | gradle | 不适用 | |||||
Maven | maven | 不适用 | |||||
npm | npm | v6、v7、v8、v9 | |||||
NuGet | nuget | <= 6.8.0 | |||||
pip | pip | v21.1.2 | |||||
pipenv | pip | <= 2021-05-29 | |||||
pip-compile | pip | 6.1.0 | |||||
pnpm | npm | v7、v8、v9 | (仅限 v7 和 v8) | ||||
poetry | pip | v1 | |||||
酒馆 | 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 security updates 生态系统支持的详细信息,请参阅“依赖项关系图支持的包生态系统”。
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.gradle
、build.gradle.kts
(适用于 Kotlin 项目)gradle/libs.versions.toml
(适用于使用标准 Gradle 版本目录的项目)- 通过
apply
声明包含的文件,文件名中包含dependencies
。 请注意,apply
不支持apply to
、递归或高级语法(例如,Kotlin 的apply
和mapOf
,由属性定义的文件名)。
Dependabot 使用依赖项的 pom.xml
文件中的信息添加指向更新拉取请求中发布信息的链接。 如果 pom.xml
文件中省略了该信息,则它不能包含在 Dependabot 拉取请求中,请参阅“针对 Dependabot 更新优化 Java 包”。
对于 Dependabot security updates,Gradle 的支持仅限于使用 依赖项提交 API 手动上传依赖项关系图数据。 有关 依赖项提交 API 的详细信息,请参阅“使用依赖项提交 API”。
注意:
- 使用 依赖项提交 API 将 Gradle 依赖项上传到依赖项关系图时,将上传所有的项目依赖项,甚至是任何依赖项文件中未显式提及的可转移依赖项。 在可转移依赖项中检测到警报时,Dependabot 无法在存储库中找到易受攻击的依赖项,因此不会为该警报创建安全更新程序。
- 但是,当父依赖项在项目清单文件中显式声明为直接依赖项时,Dependabot version updates 将创建拉取请求。
Maven
Dependabot 不运行 Maven,但支持对 pom.xml
文件的更新。
Dependabot 使用依赖项的 pom.xml
文件中的信息添加指向更新拉取请求中发布信息的链接。 如果 pom.xml
文件中省略了该信息,则它不能包含在 Dependabot 拉取请求中,请参阅“针对 Dependabot 更新优化 Java 包”。
NuGet CLI
Dependabot 不运行 NuGet CLI,但支持版本 6.8.0 以前的大多数功能。
pip 和 pip-compile
除支持更新 requirements.txt
文件外,Dependabot 还支持更新 pyproject.toml
文件(如果它们遵循 PEP 621 标准)。
pnpm
Dependabot version updates(在 v7、v8 和 v9 上)和 Dependabot security updates(仅在 v7 和 v8 上)支持 pnpm。
酒馆
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 依赖项。