跳至主要内容

自定义依赖项更新

您可以自定义 Dependabot 如何维护您的依赖项。

谁可以使用此功能?

拥有**写入**访问权限的用户

关于自定义依赖项更新

启用版本更新后,您可以通过向dependabot.yml文件添加更多选项来自定义 Dependabot 如何维护您的依赖项。例如,您可以

  • 指定一周中的哪一天打开版本更新的拉取请求:schedule.day
  • 为每个包管理器设置审阅者、受让人和标签:reviewersassigneeslabels
  • 创建依赖项组(按包生态系统),以便 Dependabot 在单个拉取请求中更新依赖项组:groups
  • 为每个清单文件的更改定义版本控制策略:versioning-strategy
  • 将版本更新的打开拉取请求的最大数量从默认值 5 更改:open-pull-requests-limit
  • 打开版本更新的拉取请求以定位特定分支,而不是默认分支:target-branch

有关配置选项的更多信息,请参阅“dependabot.yml 文件的配置选项”。

更新存储库中的dependabot.yml文件后,Dependabot 将立即使用新配置运行检查。几分钟内,您将在**Dependabot**选项卡上看到更新的依赖项列表,如果存储库有许多依赖项,这可能需要更长时间。您还可能会看到用于版本更新的新拉取请求。有关更多信息,请参阅“列出已配置用于版本更新的依赖项”。

配置更改对安全更新的影响

如果您自定义dependabot.yml文件,您可能会注意到为安全更新提出的拉取请求的一些更改。这些拉取请求始终由依赖项的安全建议触发,而不是由 Dependabot 计划触发。但是,除非您为版本更新指定不同的目标分支,否则它们将继承dependabot.yml文件中的相关配置设置。

例如,请参阅下面的“设置自定义标签”。

注意

如果您使用分组安全更新,则分组拉取请求还将继承dependabot.yml文件中的非分组配置设置,并且使用applies-to: security-updates指定的任何组规则都将适用。有关更多信息,请参阅“关于 Dependabot 安全更新”。

修改计划

设置daily更新计划时,默认情况下,Dependabot 将在协调世界时 05:00 检查新版本。您可以使用schedule.time指定一天中的其他时间来检查更新(格式:hh:mm)。

下面的示例dependabot.yml文件扩展了 npm 配置,以指定 Dependabot 何时应检查依赖项的版本更新。

# `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 for updates at 2am UTC
    schedule:
      interval: "daily"
      time: "02:00"

设置审阅者和受让人

默认情况下,Dependabot 会提出没有任何审阅者或受让人的拉取请求。

您可以使用reviewersassignees 为包管理器提出的所有拉取请求指定审阅者和受让人。指定团队时,必须使用完整的团队名称,就像您在@提及团队一样(包括组织名称)。

下面的dependabot.yml示例文件更改了npm配置,以便使用npm版本和安全更新打开的所有拉取请求将有两个审阅者和一个受让人。

# `dependabot.yml` file with
# reviews and an assignee for all npm pull requests

version: 2
updates:
  # Keep npm dependencies up to date
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "weekly"
    # Raise all npm pull requests with reviewers
    reviewers:
      - "my-org/team-name"
      - "octocat"
    # Raise all npm pull requests with an assignee
    assignees:
      - "user-name"

设置自定义标签

默认情况下,Dependabot 使用dependencies标签发出所有拉取请求。如果定义了多个包管理器,Dependabot 会在每个拉取请求上添加一个额外的标签。这指示拉取请求将更新哪种语言或生态系统,例如:Gradle 更新的java和git子模块更新的submodules。Dependabot 会根据您的仓库需要自动创建这些默认标签。

您可以使用labels覆盖默认标签,并为包管理器提出的所有拉取请求指定替代标签。您不能在dependabot.yml文件中创建新的标签,因此替代标签必须已存在于仓库中。

下面的dependabot.yml示例文件更改了npm配置,以便使用npm版本和安全更新打开的所有拉取请求都将具有自定义标签。它还更改了Docker配置,以针对自定义分支检查版本更新,并针对该自定义分支使用自定义标签发出拉取请求。对Docker的更改不会影响安全更新拉取请求,因为安全更新始终针对默认分支进行。

注意

新的target-branch必须包含要更新的Dockerfile,否则此更改将导致禁用Docker的版本更新。

# `dependabot.yml` file with
# customized npm configuration

version: 2
updates:
  # Keep npm dependencies up to date
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "weekly"
    # Raise all npm pull requests with custom labels
    labels:
      - "npm dependencies"
      - "triage-board"

    # Keep Docker dependencies up to date
  - package-ecosystem: "docker"
    directory: "/"
    schedule:
      interval: "weekly"
    # Raise pull requests for Docker version updates
    # against the "develop" branch. The Docker configuration
    # no longer affects security update pull requests.
    target-branch: "develop"
    # Use custom labels on pull requests for Docker version updates
    labels:
      - "Docker dependencies"
      - "triage-board"

将Dependabot更新分组到一个拉取请求中

默认情况下,Dependabot 为每个需要更新到较新版本的依赖项发出单个拉取请求。您可以使用groups创建依赖项集(每个包管理器),以便Dependabot 打开单个拉取请求以同时更新多个依赖项。

您还可以根据更新如何影响特定生态系统并遵循语义版本控制 (SemVer) 来指定分组设置。这意味着您可以例如将所有补丁更新组合在一起。这种方法有助于Dependabot 创建尽可能少的拉取请求,同时还减少意外接受可能导致问题的更改的可能性。如果包遵循SemVer,则次要和补丁更新更有可能(但并非保证)向后兼容。

注意

SemVer 是定义软件包版本的公认标准,格式为x.y.z。Dependabot 假设此格式的版本始终为major.minor.patch

Dependabot 按它们在dependabot.yml文件中的出现顺序创建组。如果依赖项更新可能属于多个组,则它只会被分配给它匹配的第一个组。

您可以使用dependabot.yml文件创建单独的规则来分组Dependabot版本更新和Dependabot安全更新。

注意

如果Dependabot版本更新的分组拉取请求包含易受攻击的包,Dependabot安全更新仍将尝试创建一个单独的拉取请求以将易受攻击的包更新到安全版本。为安全更新创建单独的拉取请求可确保您可以查看包漏洞。

您必须为每个包生态系统配置组。

groups的示例配置

示例1

dependabot.yml文件配置使用patternsdependency-type选项将特定依赖项包含在组中,并使用exclude-patterns从组中排除依赖项(或多个依赖项)。由于缺少applies-to键,因此分组规则默认为仅应用于版本更新。

# `dependabot.yml` file using the `dependency-type` option to group updates
# in conjunction with `patterns` and `exclude-patterns`.
# Grouping rules default to applying to version updates only, since
# the `applies-to` key is absent.

groups:
  production-dependencies:
    dependency-type: "production"
  development-dependencies:
    dependency-type: "development"
    exclude-patterns:
    - "rubocop*"
  rubocop:
    patterns:
    - "rubocop*"

示例2

一个具有自定义Bundler配置的dependabot.yml文件,该文件已被修改以创建一个依赖项组。该配置指定与依赖项名称(或多个依赖项)匹配的patterns(字符字符串),以便将依赖项包含在组中。由于使用了applies-to: version-updates,因此分组规则仅应用于版本更新。

# `dependabot.yml` file with customized Bundler configuration
# In this example, the name of the group is `dev-dependencies`, and
# only the `patterns` and `exclude-patterns` options are used.
# Grouping rules apply to version updates only.

version: 2
updates:
  # Keep bundler dependencies up to date
  - package-ecosystem: "bundler"
    directories:
      - "/frontend"
      - "/backend"
      - "/admin"
    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
       dev-dependencies:
          # Define patterns to include dependencies in the group (based on
          # dependency name)
          applies-to: version-updates # Applies the group rule to version updates
          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-*"

示例3

dependabot.yml文件配置为,任何与模式@angular*匹配且最高可解析版本为minorpatch的包都将组合在一起。对于任何不匹配模式或不更新到minorpatch版本的包,Dependabot 将创建一个单独的拉取请求。由于使用了applies-to: version-updates,因此分组规则仅应用于版本更新。

# `dependabot.yml` file using the `update-types` option to group updates.
# Any packages matching the pattern @angular* where the highest resolvable
# version is minor or patch will be grouped together.
# Grouping rules apply to version updates only.

version: 2
updates:
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "weekly"
    groups:
      angular:
        applies-to: version-updates
        patterns:
        - "@angular*"
        update-types:
        - "minor"
        - "patch"

示例4

dependabot.yml文件使用ignore条件来排除对@angular*包的major版本的更新。指定了两个分组规则,一个用于版本更新,一个用于安全更新。

# `dependabot.yml` file using the `update-types` option to group updates
# in conjunction with an `ignore` condition. If you do not want updates
# to `major` versions of `@angular*` packages, you can specify an `ignore` condition.
# Grouping rules for both version updates and security updates are specified.

groups:
  angular:
    applies-to: version-updates
    patterns:
    - "@angular*"
    update-types:
    - "minor"
    - "patch"
  minor-and-patch:
    applies-to: security-updates
    patterns:
    - "@angular*"
    update-types:
    - "patch"
    - "minor"
ignore:
  - dependency-name: "@angular*"
    update-types: ["version-update:semver-major"]

有关在dependabot.yml文件中配置依赖项组的更多信息,请参阅“dependabot.yml 文件的配置选项”。

忽略Dependabot更新的特定依赖项

如果您尚未准备好采用项目中依赖项的更改,您可以将Dependabot配置为在为版本更新和安全更新打开拉取请求时忽略这些依赖项。您可以使用以下方法之一。

  • dependabot.yml文件中为依赖项配置ignore选项。您可以使用此选项忽略特定依赖项、版本和更新类型的更新。有关更多信息,请参阅“dependabot.yml 文件的配置选项”。
  • 在Dependabot版本更新和安全更新的拉取请求上使用@dependabot ignore注释命令。您可以使用注释命令来忽略特定依赖项和版本的更新。有关更多信息,请参阅“管理依赖项更新的拉取请求”。

如果您想取消忽略依赖项或忽略条件,您可以从dependabot.yml文件中删除忽略条件或重新打开拉取请求。

对于分组更新的拉取请求,您还可以使用@dependabot unignore注释命令。通过评论Dependabot拉取请求,@dependabot unignore注释命令使您可以执行以下操作:

  • 取消忽略特定忽略条件
  • 取消忽略特定依赖项
  • 取消忽略Dependabot拉取请求中所有依赖项的所有忽略条件

有关更多信息,请参阅“管理依赖项更新的拉取请求”。

更多示例

有关更多示例,请参阅“dependabot.yml 文件的配置选项”。