关于 Dependabot 与 GitHub Actions
Dependabot 创建拉动请求以保持依赖项的最新状态,并且当创建这些拉取请求时,您可以使用 GitHub Actions 执行自动任务。 例如,获取其他构件、添加标签、运行测试或修改拉取请求。
响应事件
Dependabot 能够在其拉取请求和评论上触发 GitHub Actions 工作流程;但是,某些事件的处理方式不同。
对于 Dependabot (github.actor == 'dependabot[bot]'
) 使用 pull_request
、pull_request_review
、pull_request_review_comment
、push
、create
、deployment
和 deployment_status
事件发起的工作流,具有以下限制:
GITHUB_TOKEN
默认拥有只读权限。- 机密是从 Dependabot 机密填充的。 GitHub Actions 机密不可用。
对于 Dependabot (github.actor == 'dependabot[bot]'
) 使用 pull_request_target
事件发起的工作流,如果拉取请求的基本引用是由 Dependabot (github.actor == 'dependabot[bot]'
) 创建的,GITHUB_TOKEN
将是只读的,并且机密不可用。
有关详细信息,请参阅“确保 GitHub Actions 和工作流安全:阻止 pwn 请求”。
手动重新运行工作流程
您还可以手动重新运行失败的 Dependabot 工作流程,它将以读写令牌运行并访问密码。 在手动重新运行失败的工作流程之前,您应始终检查更新的依赖项,以确保更改不会引入任何恶意或意外行为。
常用 Dependabot 自动化
以下是可以使用 GitHub Actions 自动化的几个常见场景。
获取有关拉取请求的元数据
大量自动化需要了解拉取请求内容的信息:依赖项名称是什么,是否为生产依赖项,以及是否为主要、次要或补丁更新。
dependabot/fetch-metadata
操作为你提供了所有这些信息:
name: Dependabot fetch metadata
on: pull_request
permissions:
pull-requests: write
issues: write
repository-projects: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- name: Dependabot metadata
id: metadata
uses: dependabot/fetch-metadata@v1
with:
github-token: "${{ secrets.GITHUB_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
存储库。
标记拉取请求
如果您有基于 GitHub 标签的其他自动化或分类工作流程,则可以配置操作以根据提供的元数据分配标签。
例如,如果您想用标签标记所有生产依赖项更新:
name: Dependabot auto-label
on: pull_request
permissions:
pull-requests: write
issues: write
repository-projects: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- name: Dependabot metadata
id: metadata
uses: dependabot/fetch-metadata@v1
with:
github-token: "${{ secrets.GITHUB_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: ${{github.event.pull_request.html_url}}
批准拉取请求
如果您想要自动批准 Dependabot 拉取请求,您可以在工作流程中使用 GitHub CLI:
name: Dependabot auto-approve
on: pull_request
permissions:
pull-requests: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- name: Dependabot metadata
id: metadata
uses: dependabot/fetch-metadata@v1
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
- name: Approve a PR
run: gh pr review --approve "$PR_URL"
env:
PR_URL: ${{github.event.pull_request.html_url}}
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
在拉取请求上启用自动合并
如果要允许维护者标记某些拉取请求以进行自动合并,可以使用 GitHub 的自动合并功能。 这样,如果分支保护规则所需的任何测试和批准都成功满足,拉取请求就可合并。 有关详细信息,请参阅“自动合并拉取请求”和“管理分支保护规则”。
注意:如果使用状态检查来测试拉取请求,则应为 Dependabot 拉取请求的目标分支启用“合并前需要通过状态检查” 。 此分支保护规则可确保除非所有必需的状态检查都通过,否则不合并拉取请求。 有关详细信息,请参阅“管理分支保护规则”。
可以改为使用 GitHub Actions 和 GitHub CLI。 以下示例会将所有补丁更新自动合并为 my-dependency
:
name: Dependabot auto-merge
on: pull_request
permissions:
contents: write
pull-requests: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- name: Dependabot metadata
id: metadata
uses: dependabot/fetch-metadata@v1
with:
github-token: "${{ secrets.GITHUB_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-patch'}}
run: gh pr merge --auto --merge "$PR_URL"
env:
PR_URL: ${{github.event.pull_request.html_url}}
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
失败的工作流程运行故障排除
如果您的工作流程运行失败,请检查以下情况:
- 只有当正确的角色触发工作流程时,才运行工作流程。
- 你正在检查
pull_request
的正确ref
值。 - 您的机密在 Dependabot 机密中可用,而不是作为 GitHub Actions 机密。
- 你有一个具有适当权限的
GITHUB_TOKEN
。
有关编写和调试 GitHub Actions 的详细信息,请参阅“了解 GitHub Actions”。