默认情况下,Dependabot 会打开一个更新每个依赖项的新拉取请求。 启用安全更新后,一旦发现易受攻击的依赖项,就会打开新的拉取请求。 为一个或多个生态系统配置版本更新后,当有新版本的依赖项可用时,就会打开新的拉取请求,频率在 dependabot.yml
文件中定义。
如果你的项目有许多依赖项,你可能会发现有大量的 Dependabot 拉取请求需要审阅和合并,这很快就会变得难以管理。
你可以实施一些自定义选项来优化 Dependabot 更新拉取请求,以符合你的流程,例如:
- 使用
schedule
控制 Dependabot 检查依赖项更新版本的频率。 - 使用
groups
优先处理有意义的更新。
控制依赖项更新的频率和时间
Dependabot 按照配置文件中设置的频率(其中必需的字段 schedule.interval
必须设置为 daily
、weekly
或 monthly
)检查版本更新。
默认情况下,Dependabot 会分配一个随机时间来检查并提出依赖项更新的拉取请求,以均衡其工作负载。
但是,为了减少干扰,或者为了更好地组织时间和资源来审阅和处理版本更新,你可能会发现修改频率和时间很有用。 例如,你可能希望 Dependabot 运行每周(而不是每日)更新检查,以及在某个特定时间运行更新检查,以确保在团队会审会话之前提出拉取请求。
可以将 schedule
与选项组合一起使用,以修改 Dependabot 检查版本更新的频率和时间
下面的示例 dependabot.yml
文件更改了 npm 配置,指定 Dependabot 应在日本标准时间 (UTC +09:00) 每天 02:00 检查 npm 依赖项的版本更新。
# `dependabot.yml` file with # customized schedule for version updates version: 2 updates: # Keep npm dependencies up to date - package-ecosystem: "npm" directory: "/" # Check the npm registry every week on Tuesday at 02:00 Japan Standard Time (UTC +09:00) schedule: interval: "weekly" day: "tuesday" time: "02:00" timezone: "Asia/Tokyo"
# `dependabot.yml` file with
# customized schedule for version updates
version: 2
updates:
# Keep npm dependencies up to date
- package-ecosystem: "npm"
directory: "/"
# Check the npm registry every week on Tuesday at 02:00 Japan Standard Time (UTC +09:00)
schedule:
interval: "weekly"
day: "tuesday"
time: "02:00"
timezone: "Asia/Tokyo"
另请参阅计划。
优先处理有意义的更新
可以使用 groups
将多个依赖项的更新合并到单个拉取请求中。 这有助于将审阅时间集中在高风险更新上,并最大程度地减少审阅次要版本更新所花费的时间。 例如,可以将开发依赖项的次要更新或补丁更新合并到单个拉取请求中,并为影响代码库关键区域的安全更新或版本更新设置一个专用组。
必须为每个包生态系统配置组,然后可以使用标准组合为每个包生态系统创建多个组:
- 依赖项类型:
dependency-type
。 - 依赖项名称:
patterns
和exclude-patterns
- 语义化版本控制级别:
update-types
若要查看每个标准支持的所有值,请参阅 groups
。
下面的示例介绍了使用标准创建依赖项组的几种不同方法。
示例 1:三个版本更新组
在本示例中,dependabot.yml
文件:
- 创建名为
production-dependencies
、development-dependencies
和rubocop
的三个组。 - 使用
patterns
和dependency-type
将依赖项包含在组中。 - 使用
exclude-patterns
将一个(或多个)依赖项排除在组外。
version: 2
updates:
# Keep bundler dependencies up to date
- package-ecosystem: "bundler"
directory: "/"
schedule:
interval: "weekly"
groups:
production-dependencies:
dependency-type: "production"
development-dependencies:
dependency-type: "development"
exclude-patterns:
- "rubocop*"
rubocop:
patterns:
- "rubocop*"
因此:
- 版本更新按依赖项类型分组。
- 与模式
rubocop*
匹配的开发依赖项将排除在development-dependencies
组外。 - 相反,与
rubocop*
匹配的开发依赖项将包含在rubocop
组中。 由于排序,与rubocop*
匹配的生产依赖项将包含在production-dependencies
组中。
示例 2:包含排除依赖项的分组更新
在本示例中,dependabot.yml
文件:
- 创建名为
support-dependencies
的组,作为自定义 Bundler 配置的一部分。 - 使用与一个(或多个)依赖项的名称匹配的
patterns
将依赖项包含在组中。 - 使用与一个(或多个)依赖项的名称匹配的
exclude-patterns
将依赖项排除在组外。
version: 2
updates:
# Keep bundler dependencies up to date
- package-ecosystem: "bundler"
directory: "/"
schedule:
interval: "weekly"
# Create a group of dependencies to be updated together in one pull request
groups:
# Specify a name for the group, which will be used in pull request titles
# and branch names
support-dependencies:
# Define patterns to include dependencies in the group (based on
# dependency name)
patterns:
- "rubocop" # A single dependency name
- "rspec*" # A wildcard string that matches multiple dependency names
- "*" # A wildcard that matches all dependencies in the package
# ecosystem. Note: using "*" may open a large pull request
# Define patterns to exclude dependencies from the group (based on
# dependency name)
exclude-patterns:
- "gc_ruboconfig"
- "gocardless-*"
因此:
- 由于使用了通配符(“*”)模式,Bundler 的大部分依赖项都被合并到
support-dependencies
组中,除了 - 与
gc_ruboconfig
和gocardless-*
匹配的依赖项排除在组外,Dependabot 继续为这些依赖项提出单个拉取请求。 如果需要对这些依赖项的更新进行更仔细的审查,这将很有帮助。 - 对于
support-dependencies
,Dependabot 将仅为版本更新提出拉取请求。
示例 3:主要更新的单个拉取请求和次要/补丁更新的分组拉取请求
在本示例中,dependabot.yml
文件:
- 创建名为
angular
的组。 - 使用与依赖项的名称匹配的
patterns
将依赖项包含在组中。 - 使用
update-type
仅将minor
或patch
更新包含在组中。
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
groups:
# Specify a name for the group, which will be used in pull request titles
# and branch names
angular:
patterns:
- "@angular*"
update-types:
- "minor"
- "patch"
因此:
- Dependabot 将为具有次要或补丁更新的所有 Angular 依赖项创建分组拉取请求。
- 所有主要更新都将继续作为单个拉取请求提出。
示例 4:次要/补丁更新的分组拉取请求和主要更新的无拉取请求
在本示例中,dependabot.yml
文件:
- 创建名为
angular
和minor-and-patch
的两个组。 - 使用
update-type
仅包含这两个组的minor
或patch
更新。 - 使用
ignore
条件排除@angular*
包的major
版本更新。
version: 2
updates:
# Keep npm dependencies up to date
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
groups:
angular:
patterns:
- "@angular*"
update-types:
- "minor"
- "patch"
ignore:
- dependency-name: "@angular*"
update-types: ["version-update:semver-major"]
因此:
- Angular 依赖项的次要和补丁版本更新分组到单个拉取请求中。
- Angular 依赖项的次要和补丁安全更新也分组到单个拉取请求中。
- Dependabot 不会自动为 Angular 的主要更新打开拉取请求。