Note
この記事では、GitHub Actionsを使ってDependabot 関連のタスクを自動化する方法についてを説明します。 GitHub Actions を使って Dependabot updates を実行する方法の詳細については、代わりに「GitHub Actions ランナーの Dependabot について」を参照してください。
GitHub Actions を使うと、依存関係を更新する pull request が Dependabot によって作成されたときに自動タスクを実行することができます。 これは次のような場合に便利です。
-
Dependabot pull request (バージョン更新プログラムとセキュリティ更新プログラム) が、ラベル、名前、レビュー担当者など、作業プロセスに適したデータを使って作成されていることを確認する。
-
Dependabot pull request (バージョン更新プログラムとセキュリティ更新プログラム) をレビュー プロセスに送信するか、自動的にマージするワークフローをトリガーする。
Dependabot及びGitHub Actionsについて
依存関係を最新の状態に保つために、Dependabot によって pull request が作成されます。 GitHub Actions を使うと、これらの pull request の作成時に自動タスクを実行できます。 たとえば、追加の成果物をフェッチする、ラベルを追加する、テストを実行する、pull request を変更するなどです。
Dependabot は、pull request とコメントで GitHub Actions ワークフローをトリガーできます。ただし、特定のイベントは異なる方法で処理されます。詳細については、「GitHub Actions での Dependabot のトラブルシューティング」を参照してください。
ここでは、GitHub Actions を使って自動化できる pull request の一般的なシナリオをいくつか示します。
Pull request に関するメタデータをフェッチする
ほとんどの自動化では、pull request の内容に関する情報 (依存関係の名前、運用依存関係かどうか、更新プログラムがメジャー、マイナー、パッチのいずれであるか) を把握する必要があります。 アクションを使うと、Dependabot で生成された pull request によって更新された依存関係に関する情報を取得できます。
例:
name: Dependabot fetch metadata on: pull_request permissions: pull-requests: write issues: write repository-projects: write jobs: dependabot: runs-on: ubuntu-latest if: github.event.pull_request.user.login == 'dependabot[bot]' && github.repository == 'owner/my_repo' steps: - name: Dependabot metadata id: metadata uses: dependabot/fetch-metadata@4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d 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
name: Dependabot fetch metadata
on: pull_request
permissions:
pull-requests: write
issues: write
repository-projects: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: github.event.pull_request.user.login == 'dependabot[bot]' && github.repository == 'owner/my_repo'
steps:
- name: Dependabot metadata
id: metadata
uses: dependabot/fetch-metadata@4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d
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
リポジトリを参照してください。
Pull request にラベルを付ける
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.event.pull_request.user.login == 'dependabot[bot]' && github.repository == 'owner/my_repo' steps: - name: Dependabot metadata id: metadata uses: dependabot/fetch-metadata@4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d 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}}
name: Dependabot auto-label
on: pull_request
permissions:
pull-requests: write
issues: write
repository-projects: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: github.event.pull_request.user.login == 'dependabot[bot]' && github.repository == 'owner/my_repo'
steps:
- name: Dependabot metadata
id: metadata
uses: dependabot/fetch-metadata@4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d
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}}
Pull request を自動的に承認する
ワークフローで GitHub CLI を使うと、Dependabot pull request を自動的に承認できます。
例:
name: Dependabot auto-approve on: pull_request permissions: pull-requests: write jobs: dependabot: runs-on: ubuntu-latest if: github.event.pull_request.user.login == 'dependabot[bot]' && github.repository == 'owner/my_repo' steps: - name: Dependabot metadata id: metadata uses: dependabot/fetch-metadata@4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d 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}} GH_TOKEN: ${{secrets.GITHUB_TOKEN}}
name: Dependabot auto-approve
on: pull_request
permissions:
pull-requests: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: github.event.pull_request.user.login == 'dependabot[bot]' && github.repository == 'owner/my_repo'
steps:
- name: Dependabot metadata
id: metadata
uses: dependabot/fetch-metadata@4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d
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}}
GH_TOKEN: ${{secrets.GITHUB_TOKEN}}
Pull request 上で自動マージを有効にする
メンテナが特定の pull request に自動マージのマークできるようにする場合は、GitHub の自動マージ機能を使用できます。 これにより、ブランチ保護ルールで必要なすべての必須テストと承認が正常に満たされた場合に、pull request がマージされます。
詳細については、「プルリクエストを自動的にマージする」および「ブランチ保護ルールを管理する」を参照してください。
代わりに、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.event.pull_request.user.login == 'dependabot[bot]' && github.repository == 'owner/my_repo' steps: - name: Dependabot metadata id: metadata uses: dependabot/fetch-metadata@4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d 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}} GH_TOKEN: ${{secrets.GITHUB_TOKEN}}
name: Dependabot auto-merge
on: pull_request
permissions:
contents: write
pull-requests: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: github.event.pull_request.user.login == 'dependabot[bot]' && github.repository == 'owner/my_repo'
steps:
- name: Dependabot metadata
id: metadata
uses: dependabot/fetch-metadata@4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d
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}}
GH_TOKEN: ${{secrets.GITHUB_TOKEN}}
Note
pull request のテストにステータス チェックを使用する場合、Dependabot pull request のターゲット ブランチで [Require status checks to pass before merging] を有効にする必要があります。 このブランチ保護ルールにより、必須のステータス チェックにすべて合格しない場合、pull request はマージされません。 詳しくは、「ブランチ保護ルールを管理する」をご覧ください。
失敗したワークフロー実行を調査する
ワークフローの実行が失敗した場合は、以下をチェックしてください。
- 適切なアクターがトリガーした場合にのみワークフローを実行しているか。
pull_request
に対する正しいref
をチェックアウトしています。- シークレットは、GitHub Actions シークレットとしてではなく、Dependabot シークレットで使用できます。
- 適切なアクセス許可を持つ
GITHUB_TOKEN
があります。
GitHub Actions の作成とデバッグに関する情報については、「ワークフローの書き込み」を参照してください。
ワークフローに関する issue を解決するためのその他のヒントについては、「GitHub Actions での Dependabot のトラブルシューティング」を参照してください。