当 Dependabot 创建拉取请求以更新依赖项时,你可以使用 Actions 执行自动化任务。 如果你想执行以下操作,可能会发现这很有用:
确保使用正确的数据为你的工作流程创建 Dependabot 拉取请求(版本更新和安全更新),包括标签、名称和审阅者。
触发工作流以将 Dependabot 拉取请求(版本更新和安全更新)发送到你的评审过程或自动合并。
注意
站点管理员必须先为 你的 Enterprise Server 实例设置 Dependabot updates,然后你才能使用此功能。 有关详细信息,请参阅 为企业启用 Dependabot.
如果企业所有者在企业级别设置了策略,你可能无法启用或禁用 Dependabot updates。 有关详细信息,请参阅“强制实施企业的代码安全性和分析策略”。
Dependabot 会创建拉取请求以使你的依赖项保持最新状态。 当这些拉取请求创建时,你可以使用 Actions 来执行自动化任务。 例如,提取其他构件、添加标签、运行测试或修改拉取请求。
Dependabot 能够在其拉取请求和评论上触发 Actions 工作流程;但是,某些事件的处理方式不同。 有关详细信息,请参阅“对 Actions 上的 Dependabot 进行故障排除”。
以下是可以使用 Actions 自动化的拉取请求的几个常见场景。
大部分自动化都要求你了解拉取请求内容的信息:依赖项名称是什么,是否为生产依赖项,以及是主要、次要还是补丁更新。 可以使用操作来检索由 Dependabot 生成的拉取请求更新的依赖项的信息。
示例:
name: Dependabot fetch metadata on: pull_request permissions: pull-requests: write issues: write jobs: dependabot: runs-on: ubuntu-latest if: .event.pull_request.user.login == 'dependabot[bot]' && .repository == 'owner/my_repo' steps: - name: Dependabot metadata id: metadata uses: dependabot/fetch-metadata@d7267f607e9d3fb96fc2fbe83e0af444713e90b7 with: -token: "${{ secrets._TOKEN }}" # The following properties are now available: # - steps.metadata.outputs.dependency-names # - steps.metadata.outputs.dependency-type # - steps.metadata.outputs.update-type
name: Dependabot fetch metadata
on: pull_request
permissions:
pull-requests: write
issues: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: .event.pull_request.user.login == 'dependabot[bot]' && .repository == 'owner/my_repo'
steps:
- name: Dependabot metadata
id: metadata
uses: dependabot/fetch-metadata@d7267f607e9d3fb96fc2fbe83e0af444713e90b7
with:
-token: "${{ secrets._TOKEN }}"
# The following properties are now available:
# - steps.metadata.outputs.dependency-names
# - steps.metadata.outputs.dependency-type
# - steps.metadata.outputs.update-type
有关详细信息,请参阅 dependabot/fetch-metadata
存储库。
如果你有基于 标签的其他自动化或会审工作流,则可以配置操作以根据提供的元数据分配标签。
使用标签标记所有生产依赖项更新的示例:
name: Dependabot auto-label on: pull_request permissions: pull-requests: write issues: write jobs: dependabot: runs-on: ubuntu-latest if: .event.pull_request.user.login == 'dependabot[bot]' && .repository == 'owner/my_repo' steps: - name: Dependabot metadata id: metadata uses: dependabot/fetch-metadata@d7267f607e9d3fb96fc2fbe83e0af444713e90b7 with: -token: "${{ secrets._TOKEN }}" - name: Add a label for all production dependencies if: steps.metadata.outputs.dependency-type == 'direct:production' run: gh pr edit "$PR_URL" --add-label "production" env: PR_URL: ${{.event.pull_request.html_url}}
name: Dependabot auto-label
on: pull_request
permissions:
pull-requests: write
issues: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: .event.pull_request.user.login == 'dependabot[bot]' && .repository == 'owner/my_repo'
steps:
- name: Dependabot metadata
id: metadata
uses: dependabot/fetch-metadata@d7267f607e9d3fb96fc2fbe83e0af444713e90b7
with:
-token: "${{ secrets._TOKEN }}"
- name: Add a label for all production dependencies
if: steps.metadata.outputs.dependency-type == 'direct:production'
run: gh pr edit "$PR_URL" --add-label "production"
env:
PR_URL: ${{.event.pull_request.html_url}}
你可以在工作流中使用 CLI 来自动批准 Dependabot 拉取请求。
示例:
name: Dependabot auto-approve on: pull_request permissions: pull-requests: write jobs: dependabot: runs-on: ubuntu-latest if: .event.pull_request.user.login == 'dependabot[bot]' && .repository == 'owner/my_repo' steps: - name: Dependabot metadata id: metadata uses: dependabot/fetch-metadata@d7267f607e9d3fb96fc2fbe83e0af444713e90b7 with: -token: "${{ secrets._TOKEN }}" - name: Approve a PR run: gh pr review --approve "$PR_URL" env: PR_URL: ${{.event.pull_request.html_url}} GH_TOKEN: ${{secrets._TOKEN}}
name: Dependabot auto-approve
on: pull_request
permissions:
pull-requests: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: .event.pull_request.user.login == 'dependabot[bot]' && .repository == 'owner/my_repo'
steps:
- name: Dependabot metadata
id: metadata
uses: dependabot/fetch-metadata@d7267f607e9d3fb96fc2fbe83e0af444713e90b7
with:
-token: "${{ secrets._TOKEN }}"
- name: Approve a PR
run: gh pr review --approve "$PR_URL"
env:
PR_URL: ${{.event.pull_request.html_url}}
GH_TOKEN: ${{secrets._TOKEN}}
如果要允许维护者标记某些拉取请求以进行自动合并,可以使用 的自动合并功能。 这样,如果分支保护规则所需的任何测试和批准都成功满足,拉取请求就可合并。
有关详细信息,请参阅 自动合并拉取请求 和 管理分支保护规则。
可以改为使用 Actions 和 CLI。 以下示例会将所有补丁更新自动合并为 my-dependency
:
name: Dependabot auto-merge on: pull_request permissions: contents: write pull-requests: write jobs: dependabot: runs-on: ubuntu-latest if: .event.pull_request.user.login == 'dependabot[bot]' && .repository == 'owner/my_repo' steps: - name: Dependabot metadata id: metadata uses: dependabot/fetch-metadata@d7267f607e9d3fb96fc2fbe83e0af444713e90b7 with: -token: "${{ secrets._TOKEN }}" - name: Enable auto-merge for Dependabot PRs if: contains(steps.metadata.outputs.dependency-names, 'my-dependency') && steps.metadata.outputs.update-type == 'version-update:semver-' run: gh pr merge --auto --merge "$PR_URL" env: PR_URL: ${{.event.pull_request.html_url}} GH_TOKEN: ${{secrets._TOKEN}}
name: Dependabot auto-merge
on: pull_request
permissions:
contents: write
pull-requests: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: .event.pull_request.user.login == 'dependabot[bot]' && .repository == 'owner/my_repo'
steps:
- name: Dependabot metadata
id: metadata
uses: dependabot/fetch-metadata@d7267f607e9d3fb96fc2fbe83e0af444713e90b7
with:
-token: "${{ secrets._TOKEN }}"
- name: Enable auto-merge for Dependabot PRs
if: contains(steps.metadata.outputs.dependency-names, 'my-dependency') && steps.metadata.outputs.update-type == 'version-update:semver-'
run: gh pr merge --auto --merge "$PR_URL"
env:
PR_URL: ${{.event.pull_request.html_url}}
GH_TOKEN: ${{secrets._TOKEN}}
注意
如果使用状态检查来测试拉取请求,则应为 Dependabot 拉取请求的目标分支启用“合并前需要通过状态检查”。 此分支保护规则可确保除非所有必需的状态检查都通过,否则不合并拉取请求。 有关详细信息,请参阅“管理分支保护规则”。
如果您的工作流程运行失败,请检查以下情况:
- 只有当正确的角色触发工作流程时,才运行工作流程。
- 你正在检查
pull_request
的正确ref
值。 - 您的机密在 Dependabot 机密中可用,而不是作为 Actions 机密。
- 你有一个具有适当权限的
_TOKEN
。
有关编写和调试 Actions 的详细信息,请参阅 写入工作流。
有关帮助解决工作流问题的更多提示,请参阅“对 Actions 上的 Dependabot 进行故障排除”。