本文提供 dependabot.yml 文件中可用的配置选项的参考信息。使用这些选项可自定义 Dependabot 如何监视软件包生态系统、安排更新以及创建拉取请求。有关 dependabot.yml 文件及其工作原理的概述,请参阅 关于 dependabot.yml 文件。
所有标记有图标的选项也会影响 Dependabot 为安全更新创建拉取请求的方式,target-branch 除外。
必需键
| 键 | 位置 | 用途 |
|---|---|---|
version | 顶层 | Dependabot 配置语法的使用方式。始终为:2。 |
updates | 顶层 | 在此部分定义要更新的每个 package-ecosystem。 |
package-ecosystem | 位于 updates 下 | 定义要更新的包管理器。 |
directories 或 directory | 位于每个 package-ecosystem 条目下 | 定义要更新的清单文件或其他定义文件的位置。 |
schedule.interval | 位于每个 package-ecosystem 条目下 | 定义查找版本更新的频率:daily(每日)、weekly(每周)、monthly(每月)、quarterly(每季)、semiannually(每半年)、yearly(每年)或 cron。 |
您也可以在顶层加入 registries 键,以定义私有注册表的访问详情,参见 顶层 registries 键。
# Basic `dependabot.yml` file with
# minimum configuration for two package managers
version: 2
updates:
# Enable version updates for npm
- package-ecosystem: "npm"
# Look for `package.json` and `lock` files in the `root` directory
directory: "/"
# Check the npm registry for updates every day (weekdays)
schedule:
interval: "daily"
# Enable version updates for Docker
- package-ecosystem: "docker"
# Look for a `Dockerfile` in the `root` directory
directory: "/"
# Check for updates once a week
schedule:
interval: "weekly"
# Basic `dependabot.yml` file with
# minimum configuration for two package managers
version: 2
updates:
# Enable version updates for npm
- package-ecosystem: "npm"
# Look for `package.json` and `lock` files in the `root` directory
directory: "/"
# Check the npm registry for updates every day (weekdays)
schedule:
interval: "daily"
# Enable version updates for Docker
- package-ecosystem: "docker"
# Look for a `Dockerfile` in the `root` directory
directory: "/"
# Check for updates once a week
schedule:
interval: "weekly"
有关 dependabot.yml 文件的真实案例,请参阅 Dependabot 自身的配置文件。
allow
用于精确指定在某个包生态系统中要维护的依赖项。常与 ignore 选项一起使用。示例请参阅 控制 Dependabot 更新哪些依赖项。
Dependabot 默认行为
- 清单中明确列出的所有依赖项都会通过版本更新保持最新。
- 锁定文件中包含漏洞的所有依赖项都会通过安全更新进行升级。
当指定 allow 时,Dependabot 按以下流程执行
-
检查所有明确 允许 的依赖项。
-
然后过滤掉任何 被忽略 的依赖项或版本。
如果同一依赖同时匹配了
allow与ignore,则该依赖会被 忽略。
| 参数 | 用途 |
|---|---|
dependency-name | 允许对匹配名称的依赖进行更新,可选使用 * 匹配零个或多个字符。 |
dependency-type | 允许对特定类型的依赖进行更新。 |
update-types | 允许对一个或多个语义化版本级别进行更新。支持的取值有:version-update:semver-patch、version-update:semver-minor 与 version-update:semver-major。 |
dependency-name(allow)
对大多数包管理器而言,您应提供能匹配锁定文件或清单文件中依赖名称的值。少数系统有更复杂的要求。
| 包管理器 | 所需格式 | 示例 |
|---|---|---|
| Gradle 与 Maven | groupId:artifactId | org.kohsuke:github-api |
| Docker(用于镜像标签) | 仓库的完整名称 | 例如,针对镜像标签 <account ID>.dkr.ecr.us-west-2.amazonaws.com/base/foo/bar/ruby:3.1.0-focal-jemalloc,使用 base/foo/bar/ruby。 |
dependency-type(allow)
| 依赖类型 | 各包管理器支持的类型 | 允许更新 |
|---|---|---|
direct(直接) | 全部 | 所有在清单中明确声明的依赖。 |
indirect(间接) | bundler、pip、composer、cargo、gomod、uv | 直接依赖的子依赖(亦称传递依赖)。 |
all(全部) | 全部 | 所有明确声明的依赖。对于 bundler、pip、composer、cargo、gomod、uv,还包括直接依赖的子依赖。 |
production(生产) | bundler、composer、mix、maven、npm、pip、uv(并非所有管理器) | 仅限包管理器标记为生产依赖的项目。 |
development(开发) | bundler、composer、mix、maven、npm、pip、uv(并非所有管理器) | 仅限包管理器标记为开发依赖的项目。 |
update-types(allow)
update-types 只影响 版本 更新,不影响 安全 更新。
指定允许的语义化版本(SemVer)范围。
SemVer 是用于定义软件包版本的标准,形式为 x.y.z。Dependabot 将此类版本始终视为 major.minor.patch。update-types 的取值是一个或多个字符串列表。
- 使用
version-update:semver-patch允许补丁级别的发布。 - 使用
version-update:semver-minor允许小版本升级。 - 使用
version-update:semver-major允许大版本升级。
如果在 allow 规则中未指定 update-types,则对该规则允许所有更新类型。
您可以将 update-types 与 dependency-name 或 dependency-type 组合,以进一步细化允许的更新。组合示例请参阅 控制 Dependabot 更新哪些依赖项。
指派人
为某个包生态系统产生的所有拉取请求指定单独的受理人(assignee)。示例请参阅 自定义 Dependabot 拉取请求以符合您的流程。
Dependabot 默认行为
- 默认情况下,拉取请求不会包含任何受理人。
当定义了 assignees 时
- 所有版本更新的拉取请求都会使用所选受理人创建。
- 所有安全更新的拉取请求也会使用所选受理人创建,除非
target-branch将更新指向非默认分支。
受理人必须对仓库拥有写入权限。对组织拥有的仓库,拥有读取权限的组织成员也可作为受理人。
commit-message
定义提交信息的格式。由于拉取请求标题基于提交信息生成,此设置同样影响拉取请求标题。示例请参阅 自定义 Dependabot 拉取请求以符合您的流程。
Dependabot 默认行为
- 提交信息遵循与仓库中检测到的模式相似的格式。
当定义了 commit-message 时
- 所有提交信息均遵循定义的模式。
- 所有提交信息均遵循定义的模式,除非
target-branch将更新指向非默认分支。
| 参数 | 用途 |
|---|---|
prefix | 为所有提交信息和拉取请求标题定义前缀。 |
prefix-development | 在受支持的系统上,为更新开发依赖组的提交定义不同的前缀。 |
include | 在提交信息前缀后附加额外信息。 |
提示
当为分组更新创建拉取请求时,分支名称和拉取请求标题由组的 IDENTIFIER 决定,参见 groups。
prefix
- 适用于所有提交信息,除非同时定义了
prefix-development。 - 取值最长 50 个字符。
- 当取值以字母、数字、右括号或右方括号结尾时,Dependabot 会在前缀后插入冒号再添加主体提交信息。
- 在取值末尾添加空白字符可阻止插入冒号。
prefix-development
适用于:bundler、composer、mix、maven、npm、pip、uv。
- 仅用于更新开发依赖组的提交信息。
- 否则,该参数的行为与
prefix完全相同。
include
- 仅支持取值
scope - 定义后,任何前缀后面都会追加本次提交更新的依赖类型:
deps(常规)或deps-dev(开发)。
cooldown
定义一个 冷却期,用于延迟依赖更新的天数。cooldown 仅适用于 版本 更新,不适用于 安全 更新。
此功能让用户能够自定义 Dependabot 生成新版本更新的频率,从而更好地控制更新节奏。示例请参阅 为 Dependabot 版本更新优化拉取请求的创建。
Dependabot 默认行为
- 依据
schedule.interval中定义的计划检查更新。 - 立即将所有新版本视为可更新。
当定义了 cooldown 时
- Dependabot 会依据已定义的
schedule.interval设置检查更新。 - Dependabot 会检查是否存在冷却期设置。
- 如果某依赖的新版本发布位于其冷却期内,Dependabot 会跳过对该依赖的版本更新。
- 没有冷却期,或已超过冷却期的依赖,将依据配置的
versioning-strategy更新至最新版本。 - 当依赖的冷却期结束后,Dependabot 将恢复使用
dependabot.yml中定义的标准更新策略进行更新。
cooldown 的配置
您可以使用以下选项指定冷却期的时长。
| 参数 | 描述 |
|---|---|
default-days | 默认冷却期,适用于未定义特定规则的依赖(可选)。 |
semver-major-days | 针对 大版本更新 的冷却期(可选,仅适用于支持 SemVer 的包管理器)。 |
semver-minor-days | 针对 小版本更新 的冷却期(可选,仅适用于支持 SemVer 的包管理器)。 |
semver-patch-days | 针对 补丁版本更新 的冷却期(可选,仅适用于支持 SemVer 的包管理器)。 |
include | 列出需 应用冷却期 的依赖(最多 150 项),支持通配符(*)。 |
exclude | 列出 不受冷却期影响 的依赖(最多 150 项),支持通配符(*)。 |
下表列出了支持 SemVer 的包管理器。
| 包管理器 | 支持 SemVer |
|---|---|
| Bazel | |
| Bundler | |
| Bun | |
| Cargo | |
| Composer | |
| Devcontainers | |
| Docker | |
| Docker Compose | |
| Dotnet SDK | |
| Elm | |
| GitHub Actions | |
| Gitsubmodule | |
| Gomod(Go Modules) | |
| Gradle | |
| Helm | |
| Hex | |
| Julia | |
| Maven | |
| NPM 和 Yarn | |
| NuGet | |
| OpenTofu | |
| Pip | |
| Pub | |
| Swift | |
| Terraform | |
| UV |
注意
- 如果未定义
semver-major-days、semver-minor-days或semver-patch-days,则会使用default-days作为基准进行基于冷却期的更新。 exclude列表始终优先于include列表。如果同一依赖同时出现在两者中,则该依赖会被 排除在冷却期之外,并立即更新。
directories 或 directory
必需选项。用于为每个包管理器定义清单文件的位置(例如 package.json、Gemfile)。若缺少此信息,Dependabot 将无法为版本更新创建拉取请求。示例请参阅 为清单文件定义多个位置。
-
使用
directory定义单个清单目录。 -
使用
directories定义多个清单目录的列表。 -
对大多数包管理器而言,目录相对于仓库根目录进行定义。
-
对于 GitHub Actions,请使用值
/。Dependabot 将搜索/.github/workflows目录以及根目录下的action.yml/action.yaml文件。
如果需要在同一目标分支上为同一生态系统使用多个块定义更新,请确保所有值唯一且目录之间不重叠。
注意
directories 键支持全局匹配(globbing)和通配符 *,而 directory 键不支持这些功能。
enable-beta-ecosystems
当前未使用。
groups
定义规则,以在单个或多个集合中管理由同一包管理器维护的依赖,从而将更新合并为更少、更有针对性的拉取请求。示例请参阅 为 Dependabot 版本更新优化拉取请求的创建。
Dependabot 默认行为
- 为每个需要升级的依赖(包括版本更新和安全更新)打开单独的拉取请求。
当使用 groups 定义规则时
- 所有匹配同一规则的依赖更新会合并到单个拉取请求中。
- 如果某依赖匹配多个规则,则会被放入第一个匹配的组。
- 未匹配任何规则的过时依赖仍然会以单独的拉取请求进行更新。
| 参数 | 用途 |
|---|---|
IDENTIFIER | 为组定义标识符,用于分支名称和拉取请求标题。必须以字母开头和结尾,可包含字母、竖线 |、下划线 _ 或短横线 -。 |
applies-to | 指定组适用于哪种类型的更新。未定义时默认针对版本更新。支持的取值:version-updates 或 security-updates。 |
dependency-type | 将组限制为特定类型。支持的取值:development 或 production。 |
exclude-patterns | 定义一个或多个模式,以将依赖排除出该组。 |
group-by | 跨多个目录对更新进行分组。支持的取值:dependency-name。 |
patterns | 定义一个或多个模式,以包含名称匹配的依赖。 |
update-types | 将组限制为一个或多个语义化版本级别。支持的取值:minor、patch 与 major。 |
dependency-type(groups)
适用于:bundler、composer、mix、maven、npm、pip。
默认情况下,组会包含所有类型的依赖。
- 使用
development仅包含“开发依赖组”中的依赖。 - 使用
production仅包含“生产依赖组”中的依赖。
group-by(groups)
使用 groups.<group-name>.group-by 指定 Dependabot 在单体仓库中跨多个目录如何对更新进行分组。
- 类型:字符串
- 可接受的取值:
dependency-name - 适用范围:指定了多个目录的配置
设置为 dependency-name 时,Dependabot 将在所有指定目录中针对每个依赖创建单一拉取请求,而不是在每个目录中分别创建。
跨目录分组的限制
使用 group-by: dependency-name 时
- 所有目录必须使用相同的包生态系统(例如全部为
npm或全部为bundler) - 仅适用于 版本更新
- 如果目录对同一依赖的版本约束不兼容,Dependabot 将创建单独的拉取请求。
使用 group-by 的示例请参阅 为 Dependabot 版本更新优化拉取请求的创建。
patterns 与 exclude-patterns(groups)
两者均支持使用 * 作为通配符匹配依赖名称。如果依赖同时匹配模式和排除模式,则会被排除出该组。
update-types(groups)
默认情况下,组会包含所有语义化版本(SemVer)的更新。SemVer 是用于定义软件包版本的标准,形式为 x.y.z,Dependabot 始终将其视为 major.minor.patch。
- 使用
patch包含补丁级别的发布。 - 使用
minor包含小版本升级。 - 使用
major包含大版本升级。
示例请参阅 控制 Dependabot 更新哪些依赖项。
ignore
配合 allow 选项使用,以精确定义在某个包生态系统中要维护的依赖。Dependabot 首先检查所有已允许的依赖,然后过滤掉任何被忽略的依赖或版本。因此同时匹配 allow 与 ignore 的依赖会被 忽略。示例请参阅 控制 Dependabot 更新哪些依赖项。
Dependabot 默认行为
- 清单中明确列出的所有依赖项都会通过版本更新保持最新。
- 锁定文件中包含漏洞的所有依赖项都会通过安全更新进行升级。
当使用 ignore 时,Dependabot 按以下流程执行
-
检查所有明确 允许 的依赖项。
-
然后过滤掉任何 被忽略 的依赖项或版本。
如果同一依赖同时匹配了
allow与ignore,则该依赖会被 忽略。
| 参数 | 用途 |
|---|---|
dependency-name | 忽略名称匹配的依赖更新,可选使用 * 匹配零个或多个字符。 |
versions(版本) | 忽略特定版本或版本范围。 |
update-types | 忽略一个或多个语义化版本级别的更新。支持的取值:version-update:semver-patch、version-update:semver-minor 与 version-update:semver-major。 |
dependency-name(ignore)
对大多数包管理器而言,您应提供能匹配锁定文件或清单文件中依赖名称的值。少数系统有更复杂的要求。
| 包管理器 | 所需格式 | 示例 |
|---|---|---|
| Gradle 与 Maven | groupId:artifactId | org.kohsuke:github-api |
| Docker(用于镜像标签) | 仓库的完整名称 | 例如,针对镜像标签 <account ID>.dkr.ecr.us-west-2.amazonaws.com/base/foo/bar/ruby:3.1.0-focal-jemalloc,使用 base/foo/bar/ruby。 |
versions(ignore)
用于忽略特定版本或版本范围。如果要定义范围,请使用对应包管理器的标准语法。例如:
- npm:使用
^1.0.0 - Bundler:使用
~> 2.0 - Docker:使用 Bundler 版本语法
- NuGet:使用
7.* - Maven:使用
[1.4,)
示例请参阅 控制 Dependabot 更新哪些依赖项。
update-types(ignore)
指定要忽略的语义化版本(SemVer)级别。SemVer 是用于定义软件包版本的标准,形式为 x.y.z,Dependabot 始终将其视为 major.minor.patch。
- 使用
version-update:semver-patch包含补丁级别的发布。 - 使用
version-update:semver-minor包含小版本升级。 - 使用
version-update:semver-major包含大版本升级。
insecure-external-code-execution
适用于:bundler、mix、pip。
允许 Dependabot 在更新期间执行清单中的外部代码。示例请参阅 允许外部代码执行。
Dependabot 默认行为
- 当您为 Dependabot 授权访问一个或多个注册表时,外部代码执行会自动被禁用,以防止代码被受污染的包窃取凭据或访问已配置的注册表。
- 若无法执行代码,版本更新可能会失败。
当您允许 insecure-external-code-execution 时
- Dependabot 将在版本更新过程中执行清单中的代码。
- 该代码仅能访问与该
updates设置关联的注册表中的包管理器。它不能访问顶层registries配置中定义的任何注册表。 - 这可能使更新成功,但亦可能让受污染的包窃取凭据或访问已配置的注册表。
支持的取值:allow。
labels
为某个包管理器产生的所有拉取请求指定自定义标签。示例请参阅 自定义 Dependabot 拉取请求以符合您的流程。
Dependabot 默认行为
- 所有拉取请求默认带有
dependencies标签。 - 如果定义了多个包管理器,会在每个拉取请求额外添加对应生态系统或语言的标签,例如 Gradle 更新会添加
java,git 子模块更新会添加submodules。 - 如果仓库中存在语义化版本(SemVer)标签,它们会自动应用,以指示版本更新的类型(
major、minor、patch)。 - Dependabot 会根据仓库需要自动创建这些默认标签。
当定义了 labels 时
- 使用指定的标签替代默认标签。
- 仓库中已存在的 SemVer 标签仍会额外应用。
- 如果仓库中未定义某个标签,则该标签会被忽略。
- 您可以使用
labels: [ ]禁用所有标签(包括默认标签)。
此选项的设置同样会影响安全更新的拉取请求,除非使用 target-branch 在非默认分支上检查版本更新。
里程碑
为某个包管理器产生的所有拉取请求关联里程碑。示例请参阅 自定义 Dependabot 拉取请求以符合您的流程。
Dependabot 默认行为
- 不使用里程碑。
当定义了 milestone 时
- 该包管理器的所有拉取请求都会添加到指定的里程碑中。
支持的取值:里程碑的数值标识符。
提示
查看里程碑时,页面 URL 中 milestone 之后的最后一段即为标识符。例如:https://github.com/<org>/<repo>/milestone/3,参见 查看里程碑进度。
multi-ecosystem-groups
定义跨多个包生态系统的组,以便生成单个 Dependabot 拉取请求,更新所有受支持的包生态系统。这有助于减少收到的 Dependabot 拉取请求数量,并简化依赖更新工作流。
Dependabot 默认行为
- 为每个有依赖更新的包生态系统创建单独的拉取请求。
当使用 multi-ecosystem-groups 时
- 同一组内跨多个包生态系统的更新会合并为单个拉取请求。
- 组拥有各自的计划,可以继承或覆盖单个生态系统的设置。
multi-ecosystem-group
在 updates 配置中使用 multi-ecosystem-group 参数,将各个包生态系统分配到同一多生态系统组。
重要提示
多生态系统更新需要特定的配置模式并具有独特的参数合并行为。完整的设置说明、配置示例以及详细的参数参考,请参阅 为 Dependabot 配置多生态系统更新。
# Basic `dependabot.yml` file defining a multi-ecosystem-group
version: 2
multi-ecosystem-groups:
infrastructure:
schedule:
interval: "weekly"
updates:
- package-ecosystem: "docker"
directory: "/"
patterns: ["nginx", "redis"]
multi-ecosystem-group: "infrastructure"
- package-ecosystem: "terraform"
directory: "/"
patterns: ["aws"]
multi-ecosystem-group: "infrastructure"
# Basic `dependabot.yml` file defining a multi-ecosystem-group
version: 2
multi-ecosystem-groups:
infrastructure:
schedule:
interval: "weekly"
updates:
- package-ecosystem: "docker"
directory: "/"
patterns: ["nginx", "redis"]
multi-ecosystem-group: "infrastructure"
- package-ecosystem: "terraform"
directory: "/"
patterns: ["aws"]
multi-ecosystem-group: "infrastructure"
open-pull-requests-limit
更改任意时刻打开的版本更新拉取请求的最大数量上限。
Dependabot 默认行为
- 如果已有 5 个版本更新的拉取请求处于打开状态,则在这些请求被合并或关闭之前不会再创建新的拉取请求。
- 安全更新有一个固定的内部上限,为 10 个打开的拉取请求,且无法更改。
当定义了 open-pull-requests-limit 时
- Dependabot 将最多打开等于该整数值的拉取请求。设定较大值可实质上取消打开拉取请求的限制。
- 您可以将此选项设为 0,以临时禁用某个包管理器的版本更新,参见 禁用 Dependabot 版本更新。
package-ecosystem
必需选项。为每个希望 Dependabot 监视新版本的包管理器定义一个 package-ecosystem 元素。仓库还必须包含对应包管理器的依赖清单或锁定文件,参见 示例 dependabot.yml 文件。
| 包管理器 | YAML 值 | 支持的版本 |
|---|---|---|
| Bazel | bazel | v7, v8, v9 |
| Bun | bun | >=v1.2.5 |
| Bundler | bundler | v2 |
| Cargo | cargo | v1 |
| Composer | composer | v2 |
| Conda | conda | 不适用 |
| Dev containers | devcontainers | 不适用 |
| Docker | docker | v1 |
| Docker Compose | docker-compose | v2, v3 |
| .NET SDK | dotnet-sdk | >=.NET Core 3.1 |
| Helm Charts | helm | v3 |
| Hex | mix | v1 |
| Julia | julia | >=v1.10 |
| elm-package | elm | v0.19 |
| git submodule | gitsubmodule | 不适用 |
| GitHub Actions | github-actions | 不适用 |
| Go 模块 | gomod | v1 |
| Gradle | gradle | 不适用 |
| Maven | maven | 不适用 |
| Nix flakes | nix | 不适用 |
| npm | npm | v7, v8, v9, v10 |
| NuGet | nuget | <=6.12.0 |
| OpenTofu | opentofu | 不适用 |
| pip | pip | v24.2 |
| pip-compile | pip | 7.4.1 |
| pipenv | pip | <= 2024.4.1 |
| pnpm | npm | v7, v8 v9, v10(仅限版本更新) |
| poetry | pip | v2 |
| pre-commit | pre-commit | 不适用 |
| pub | pub | v2 |
| Rust toolchain | rust-toolchain | 不适用 |
| Swift | swift | v5 |
| Terraform | terraform | >= 0.13, <= 1.10.x |
| uv | uv | v0 |
| vcpkg | vcpkg | 不适用 |
| yarn | npm | v1, v2, v3, v4 |
pull-request-branch-name.separator
指定在生成分支名称时使用的分隔符。示例请参阅 自定义 Dependabot 拉取请求以符合您的流程。
Dependabot 默认行为
- 生成形如
dependabot/PACKAGE_MANAGER/DEPENDENCY的分支名称。
当定义了 pull-request-branch-name.separator 时
- 使用指定字符替代默认的
/。
支持的取值:"-"、_、/
提示
必须对连字符进行转义,以免被解析为 YAML 空列表的起始符号。
rebase-strategy
禁用 Dependabot 自动变基(rebase)已打开的拉取请求。
默认情况下,Dependabot 在检测到版本或安全更新的拉取请求有任何更改时,会对其执行变基。检测更改的时机包括:
- 您的调度运行以检查版本更新。
- 您重新打开已关闭的 Dependabot 拉取请求。
- 您在 Dependabot 配置文件中更改了
target-branch的值,参见target-branch。 - Dependabot 拉取请求在目标分支最近一次推送后产生冲突。
当 rebase-strategy 设置为 disabled 时,Dependabot 将停止对拉取请求执行变基。
注意
在您禁用变基之前已打开的拉取请求将在其打开后 30 天内继续执行变基。此规则适用于所有与目标分支冲突的拉取请求以及所有版本更新的拉取请求。
registries
配置对私有包注册表的访问,以便 Dependabot 能更新更广泛的依赖。参阅 为 Dependabot 配置私有注册表访问 与 私有注册表配置指南。
在 dependabot.yml 文件中有两处可以使用 registries 键:
- 顶层,用于定义要使用的私有注册表及其访问信息,参见 为 Dependabot 配置私有注册表访问。
- 在
updates块内部,用于指定每个包管理器应使用哪些私有注册表。
Dependabot 默认仅对存放在公开可访问注册表中的依赖提出拉取请求。
当 dependabot.yml 文件的顶层包含 registries 段,定义了一或多个私有注册表的访问方式时,您可以为每个 package-ecosystem 配置使用一个或多个这些私有注册表。
当为某个包管理器定义了 registries 时
- 该包管理器指定的每个私有注册表都会被检查是否有版本或安全更新。
- Dependabot 使用顶层
registries段中定义的访问信息。
支持的取值:REGISTRY_NAME 或 "*"
schedule
必需选项。使用 interval 参数定义 Dependabot 检查新版本的频率。对于每日和每周间隔,您还可以自定义 Dependabot 检查更新的具体时间。示例请参阅 为 Dependabot 版本更新优化拉取请求的创建。
| 参数 | 用途 |
|---|---|
interval | 必需。定义 Dependabot 的运行频率。 |
day | 为 每周 间隔指定运行的星期几。 |
time | 指定运行时间。 |
cronjob | 如果间隔类型为 cron,则定义 cron 表达式。 |
timezone | 指定 time 值的时区。 |
interval
支持的取值:daily、weekly、monthly、quarterly、semiannually、yearly,或 cron。
每个包管理器 必须 定义一个调度间隔。
- 使用
daily在每个工作日(星期一至星期五)运行。 - 使用
weekly每周运行一次,默认在星期一。 - 使用
monthly在每月的第一天运行。 - 使用
quarterly在每个季度的第一天运行(一月、四月、七月和十月)。 - 使用
semiannually每六个月运行一次,即在一月和七月的第一天。 - 使用
yearly在一月的第一天运行。 - 使用
cron进行基于 cron 表达式的调度。参见cronjob。
注意
支持的取值 quarterly、semiannually 和 yearly 仅在 GitHub Enterprise Server 3.19 及以上版本可用。
默认情况下,Dependabot 会随机分配时间以应用配置文件中的所有更新。您可以使用 time 和 timezone 参数为所有间隔设置特定的运行时间。如果使用 cron 间隔,则可以使用 cronjob 表达式定义更新时间。
day
支持的取值:monday、tuesday、wednesday、thursday、friday、saturday 或 sunday。
可选地,在特定的星期几为某个包管理器进行 weekly 更新。
time
格式:hh:mm
可选地,在一天中的特定时间为某个包管理器运行所有更新。默认情况下,时间解释为 UTC。
cronjob
支持的取值:符合 cron 语法的有效 cron 表达式或自然语言表达式。
Cron 语法有五个由空格分隔的字段,每个字段代表一个时间单位。
┌───────────── minute (0 - 59)
│ ┌───────────── hour (0 - 23)
│ │ ┌───────────── day of the month (1 - 31)
│ │ │ ┌───────────── month (1 - 12 or JAN-DEC)
│ │ │ │ ┌───────────── day of the week (0 - 6 or SUN-SAT)
│ │ │ │ │
* * * * *
示例:0 9 * * *、every day at 5pm
0 9 * * * 等价于 “every day at 9am”。every day at 5pm 等价于 0 17 * * *。
注意
- 时区必须在
timezone参数中指定,而不是在cronjob中。 - 使用
cron间隔必须使用cronjob类型的调度。
# Basic `dependabot.yml` file for cronjob
version: 2
updates:
# Enable version updates for npm
- package-ecosystem: "npm"
# Look for `package.json` and `lock` files in the `root` directory
directory: "/"
# Check the npm registry for updates based on `cronjob` value
schedule:
interval: "cron"
cronjob: "0 9 * * *"
# Basic `dependabot.yml` file for cronjob
version: 2
updates:
# Enable version updates for npm
- package-ecosystem: "npm"
# Look for `package.json` and `lock` files in the `root` directory
directory: "/"
# Check the npm registry for updates based on `cronjob` value
schedule:
interval: "cron"
cronjob: "0 9 * * *"
timezone
为 time 值指定时区。默认时区是 UTC。
时区标识符必须与 iana 维护的数据库中的时区相匹配,参见 List of tz database time zones。
target-branch
定义一个特定的分支用于检查版本更新并将版本更新的拉取请求指向该分支。示例请参见 Customizing Dependabot pull requests to fit your processes。
Dependabot 默认行为
- Dependabot 使用仓库的默认分支,参见 About the default branch。
当定义了 target-branch 时
- 仅检查目标分支上的清单文件以获取版本更新。
- 所有版本更新的拉取请求均以指定的分支为目标打开。
- 为此
package-ecosystem定义的选项不再适用于安全更新,因为安全更新始终使用仓库的默认分支。
exclude-paths
用于指定 Dependabot 在扫描清单和依赖项时应忽略的目录和文件路径。当您想要阻止对某些位置(如测试资源、外部代码或特定文件)中的依赖项进行更新时,此选项非常有用。
Dependabot 默认行为
- 指定的
directory中的所有目录和文件默认会包含在更新扫描中,除非被此选项排除。
当定义了 exclude-paths 时
- 在针对给定的
package-ecosystem条目进行更新扫描时,所有匹配指定路径的文件和目录都会被忽略。
| 参数 | 用途 |
|---|---|
exclude-paths | 用于忽略的文件或目录的 glob 模式列表。 |
支持 glob 模式,例如 ** 表示递归匹配,* 表示单段通配符。模式相对于更新配置中指定的 directory。每个生态系统可以拥有自己的 exclude-paths 设置。
示例
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "daily"
exclude-paths:
- "src/test/assets"
- "vendor/**"
- "src/*.js"
- "src/test/helper.js"
# Sample patterns that can be used-
# Pattern: docs/*.json
# Matches: docs/foo.json, docs/bar.json
# Pattern: *.lock
# Matches: Gemfile.lock, package.lock, foo.lock (in any directory)
# Pattern: test/**
# Matches: test/foo.rb, test/bar/baz.rb, test/any/depth/file.txt
# Pattern: config/settings.yml
# Matches: config/settings.yml
# Pattern: **/*.md
# Matches: README.md, docs/guide.md, any/depth/file.md
# Pattern: src/*
# Matches: src/main.rb, src/app.js
# Does NOT match: src/utils/helper.rb
# Pattern: hidden/.*
# Matches: hidden/.env, hidden/.secret
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "daily"
exclude-paths:
- "src/test/assets"
- "vendor/**"
- "src/*.js"
- "src/test/helper.js"
# Sample patterns that can be used-
# Pattern: docs/*.json
# Matches: docs/foo.json, docs/bar.json
# Pattern: *.lock
# Matches: Gemfile.lock, package.lock, foo.lock (in any directory)
# Pattern: test/**
# Matches: test/foo.rb, test/bar/baz.rb, test/any/depth/file.txt
# Pattern: config/settings.yml
# Matches: config/settings.yml
# Pattern: **/*.md
# Matches: README.md, docs/guide.md, any/depth/file.md
# Pattern: src/*
# Matches: src/main.rb, src/app.js
# Does NOT match: src/utils/helper.rb
# Pattern: hidden/.*
# Matches: hidden/.env, hidden/.secret
在此示例中,Dependabot 在扫描更新时将忽略 src/test/assets 目录、vendor/ 下的所有文件、src/ 直接下的所有 JavaScript 文件以及特定文件 src/test/helper.js。
vendor
仅被 bundler 和 gomod 支持。
告诉 Dependabot 维护您已经 vendored(即已缓存)的依赖以及清单文件中定义的依赖。当您将代码存放在仓库中时,依赖被称为 “vendored” 或 “cached”。参见 bundle cache documentation 和 go mod vendor documentation。
示例请参见 Controlling which dependencies are updated by Dependabot。
Dependabot 默认行为
- 仅维护在 Bundler 的清单和锁定文件中记录的依赖。
- 发起安全和版本更新的拉取请求,以更新清单和锁定文件中记录的版本号。
- 对于 Go 模块,任何 vendored 依赖都会自动被识别并维护,就像已启用
vendor一样。
当 vendor 启用时
- Dependabot 还会维护存放在仓库的
_vendor/cache_目录中的 Bundler 依赖。 - 拉取请求有时会包含对存放在仓库中的依赖的更新。
支持的取值:true 或 false
versioning-strategy
支持的生态系统:bundler、cargo、composer、mix、npm、pip、pub 和 uv。
定义 Dependabot 应如何编辑清单文件。示例请参见 Controlling which dependencies are updated by Dependabot。
Dependabot 默认行为
- 尝试区分应用程序依赖和库依赖。
- 对于应用程序,始终提升最低版本要求以匹配新版本。这是
increase策略。 - 对于库,尽可能放宽允许的版本要求,以同时包含新旧版本。这是
widen策略。
当定义了 versioning-strategy 时,Dependabot 将使用指定的策略。
| 值 | 行为 |
|---|---|
auto | 默认行为。 |
increase | 始终提升最低版本要求以匹配新版本。如果已经存在范围,通常只会提升下限。 |
increase-if-necessary | 如果版本要求已经允许新的发布,则保持不变(Dependabot 仍会更新解析后的版本)。否则放宽要求。 |
lockfile-only | 仅创建用于更新锁文件的拉取请求。忽略任何需要更改包清单的新版。 |
widen | 尽可能放宽允许的版本要求,以同时包含新旧版本。通常只会提升上限。 |
例如,如果当前版本为 1.0.0,当前约束为 ^1.0.0,不同的策略将产生以下更新:
新版本 1.2.0
increase:新约束^1.2.0increase-if-necessary:新约束^1.0.0widen:新约束^1.0.0
新版本 2.0.0
increase:新约束^2.0.0increase-if-necessary:新约束^2.0.0widen:新约束>=1.0.0 <3.0.0
注意
如果您使用的包管理器尚未支持配置 versioning-strategy 参数,或不支持您需要的取值,该策略的代码是开源的,若您希望特定生态系统支持新策略,欢迎在 https://github.com/dependabot/dependabot-core/ 提交拉取请求。
版本标签
- 表示软件发布生命周期中的阶段,如 alpha、beta 和 stable 版本。
- 帮助发布者更有效地分发其软件包。
- 指示版本的稳定性,并向用户传达该版本在功能和稳定性方面的预期。
Dependabot 能识别不同生态系统中用于预发布、正式版和自定义标签的多种版本标签。
dependabot.yml 文件并不控制您可以使用的版本标签,但您可以在配置选项(例如 ignore)中定义要忽略更新的支持的版本标签。
支持的版本标签
| 包管理器 | YAML 值 | 支持的标签 | 示例 |
|---|---|---|---|
| Maven | maven | alpha, a, beta, b, milestone, m, rc, cr, sp, ga, final, release, snapshot | spring-security-web@5.6.0-SNAPSHOT, spring-core@5.2.0.RELEASE |
| npm | npm | alpha, beta, canary, dev, experimental, latest, legacy, next, nightly, rc, release, stable | lodash@beta, react@latest, express@next |
| pnpm | npm | alpha, beta, canary, dev, experimental, latest, legacy, next, nightly, rc, release, stable | lodash@1.2.0-alpha, react@alpha, vue@next |
| yarn | npm | alpha, beta, canary, dev, experimental, latest, legacy, next, nightly, rc, release, stable | lodash@1.2.0-alpha, axios@latest, moment@nightly |
版本标签术语表
alpha: 早期版本,可能不稳定且功能不完整。beta: 相比 alpha 更稳定,但仍可能存在 bug。canary: 定期更新的用于测试的预发布版本。dev: 表示开发版本。experimental: 含有实验性功能的版本。latest: 最新的稳定发布。legacy: 较旧或已废弃的版本。next: 即将发布的版本。nightly: 每晚构建的版本;通常包含最新的更改。rc: 候选发布版,接近正式发布。release: 官方发布版本。stable: 最可靠、可投入生产的版本。
顶层 registries 键
指定 Dependabot 用于访问私有包注册表的认证细节,包括 GitLab 或 Bitbucket 托管的注册表。
registries 键的值是一个关联数组,每个元素由标识特定注册表的键和指定访问该注册表所需设置的关联数组值组成。以下 dependabot.yml 文件在 registries 部分配置了一个标识为 dockerhub 的注册表,并在 updates 部分引用它。
# Minimal settings to update dependencies stored in one private registry
version: 2
registries:
dockerhub: # Define access for a private registry
type: docker-registry
url: registry.hub.docker.com
username: octocat
password: ${{secrets.DOCKERHUB_PASSWORD}}
updates:
- package-ecosystem: "docker"
directory: "/docker-registry/dockerhub"
registries:
- dockerhub # Allow version updates for dependencies in this registry
schedule:
interval: "monthly"
# Minimal settings to update dependencies stored in one private registry
version: 2
registries:
dockerhub: # Define access for a private registry
type: docker-registry
url: registry.hub.docker.com
username: octocat
password: ${{secrets.DOCKERHUB_PASSWORD}}
updates:
- package-ecosystem: "docker"
directory: "/docker-registry/dockerhub"
registries:
- dockerhub # Allow version updates for dependencies in this registry
schedule:
interval: "monthly"
您可以使用以下选项来指定访问设置。注册表设置必须包含 type 和 url,通常还需要 username 与 password 组合或 token。
| 参数 | 用途 |
|---|---|
REGISTRY_NAME | 必需: 为该注册表定义一个标识符。 |
type | 必需: 标识注册表的类型。 |
| Authentication details | 必需: 提供认证细节的参数因不同类型的注册表而异。 |
url | 必需: 用于访问此注册表中依赖的 URL。协议可选。如果未指定,则默认使用 https://。Dependabot 会根据需要添加或忽略结尾的斜杠。 |
replaces-base | 如果布尔值为 true,Dependabot 将使用指定的 url 而不是该生态系统的基础 URL 来解析依赖。 |
有关可用选项的深入信息以及配置私有注册表时的建议和意见,请参见 Guidance for the configuration of private registries for Dependabot。
type 和认证细节
提供访问私有注册表的认证细节的参数会根据注册表 type 而有所不同。
注册表 type | 必需的认证参数 |
|---|---|
cargo-registry | token |
composer-repository | username 和 password或使用带有 tenant-id 和 client-id 的 OIDC |
docker-registry | username 和 password或使用带有 tenant-id 和 client-id 的 OIDC |
git | username 和 password或使用带有 tenant-id 和 client-id 的 OIDC |
hex-organization | organization 和 key |
hex-repository | repo 和 auth-key,可选地还包括相应的 public-key-fingerprint |
maven-repository | username 和 password或使用带有 tenant-id 和 client-id 的 OIDC |
npm-registry | username 和 passwordor token或使用带有 tenant-id 和 client-id 的 OIDC |
nuget-feed | username 和 passwordor token或使用带有 tenant-id 和 client-id 的 OIDC |
pub-registry | token |
python-index | username 和 passwordor token或使用带有 tenant-id 和 client-id 的 OIDC |
rubygems-server | username 和 passwordor token或使用带有 tenant-id 和 client-id 的 OIDC |
terraform-registry | token |
用于认证的所有敏感数据应安全存储并从该安全位置引用,参见 Configuring access to private registries for Dependabot。
提示
如果账户是 GitHub 账户,您可以使用 GitHub 个人访问令牌代替密码。
欲了解更多关于 Dependabot 的 OIDC 支持信息,请参见 OpenID Connect 和 Configuring access to private registries for Dependabot。
url 和 replaces-base
url 参数定义访问注册表的地址。当可选的 replaces-base 参数被启用(true)时,Dependabot 将使用 url 的值而不是该生态系统的基础 URL 来解析依赖。