メモ
この記事では、Dependabotを使用してGitHub Actions関連タスクを自動化する方法について説明します。 Dependabot updatesを使用したGitHub Actionsの実行の詳細については、代わりに GitHub Actionsランナーのディペンダボット を参照してください。
GitHub Actionsを使用して、依存関係を更新するプル要求Dependabot作成するときに、自動化されたタスクを実行できます。 これは次のような場合に便利です。
-
Dependabotプル要求 (バージョン更新プログラムとセキュリティ更新プログラム) が、作業プロセスに適したデータ (ラベルや名前を含む) で作成されていることを確認します。
-
ワークフローをトリガーして、 Dependabot プル要求 (バージョン更新プログラムとセキュリティ更新プログラム) をレビュー プロセスに送信するか、自動的にマージします。
Dependabot と GitHub Actions について
重要
リポジトリに対して Dependabot が有効になっている場合は、常に GitHub Actionsで実行され、 リポジトリまたは組織レベルでアクション ポリシーチェックと無効化の両方がバイパスされます。 これにより、Dependabot が有効になっているときは、常にセキュリティとバージョンの更新ワークフローが常に実行されるようになります。
Dependabot は、依存関係を最新の状態に保つために pull request を作成します。 GitHub Actionsを使用して、これらのプル要求が作成されたときに自動化されたタスクを実行できます。 たとえば、追加の成果物のフェッチ、ラベルの追加、テストの実行、あるいは pull request (プル リクエスト) の変更ができます。
Dependabot は、pull request とコメントで GitHub Actions ���ークフローをトリガーできます。ただし、特定のイベントは異なる方法で処理されます。 詳細については、 AUTOTITLE を参照してください。
GitHub Actionsを使用して自動化できるプル要求の一般的なシナリオをいくつか次に示します。
pull reqeust (プル リクエスト) に関するメタデータのフェッチ
大半の自動化では、依存関係の名前が何か、それは実働環境の依存関係か、メジャー、マイナー、パッチアップデートのいずれなのかといった、pull request (プル リクエスト) の内容に関する情報を知ることが必要です。 アクションを使用して、 Dependabotによって生成されたプル要求によって更新される依存関係に関する情報を取得できます。
Example:
# このワークフローはGitHubによって認定されていないアクションを使用します。
# それらはサードパーティによって提供され、
# 別個の利用規約、プライバシーポリシー、
# ドキュメントを参照してください。
name: Dependabot fetch metadata
on: pull_request
permissions:
pull-requests: write
issues: 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@d7267f607e9d3fb96fc2fbe83e0af444713e90b7
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
# このワークフローはGitHubによって認定されていないアクションを使用します。
# それらはサードパーティによって提供され、
# 別個の利用規約、プライバシーポリシー、
# ドキュメントを参照してください。
name: Dependabot fetch metadata
on: pull_request
permissions:
pull-requests: write
issues: 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@d7267f607e9d3fb96fc2fbe83e0af444713e90b7
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ラベルに基づいて他の自動化またはトリアージ ワークフローがある場合は、指定されたメタデータに基づいてラベルを割り当てるアクションを構成できます。
すべての運用依存関係の更新にラベルを付ける例:
# このワークフローはGitHubによって認定されていないアクションを使用します。
# それらはサードパーティによって提供され、
# 別個の利用規約、プライバシーポリシー、
# ドキュメントを参照してください。
name: Dependabot auto-label
on: pull_request
permissions:
pull-requests: write
issues: 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@d7267f607e9d3fb96fc2fbe83e0af444713e90b7
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}}
# このワークフローはGitHubによって認定されていないアクションを使用します。
# それらはサードパーティによって提供され、
# 別個の利用規約、プライバシーポリシー、
# ドキュメントを参照してください。
name: Dependabot auto-label
on: pull_request
permissions:
pull-requests: write
issues: 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@d7267f607e9d3fb96fc2fbe83e0af444713e90b7
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 (プル リクエスト) を自動的に承認
ワークフローのDependabotを使用して、GitHub CLIプル要求を自動的に承認できます。
Example:
# このワークフローはGitHubによって認定されていないアクションを使用します。
# それらはサードパーティによって提供され、
# 別個の利用規約、プライバシーポリシー、
# ドキュメントを参照してください。
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@d7267f607e9d3fb96fc2fbe83e0af444713e90b7
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}}
# このワークフローはGitHubによって認定されていないアクションを使用します。
# それらはサードパーティによって提供され、
# 別個の利用規約、プライバシーポリシー、
# ドキュメントを参照してください。
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@d7267f607e9d3fb96fc2fbe83e0af444713e90b7
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 (プル リクエスト) の自動マージを有効化
メンテナーがオートマージの特定のプル要求をマークできるようにする場合は、 GitHubのオートマージュ機能を使用できます。 これにより、ブランチ保護ルールで必要なすべての必須テストと承認が正常に満たされた場合に、pull request がマージされます。
詳細については、「プルリクエストを自動的にマージする」および「ブランチ保護ルールを管理する」を参照してください。
代わりに、 GitHub Actions と GitHub CLIを使用できます。 すべてのパッチ更新プログラムを my-dependency に自動マージする例を次に示します:
# このワークフローはGitHubによって認定されていないアクションを使用します。
# それらはサードパーティによって提供され、
# 別個の利用規約、プライバシーポリシー、
# ドキュメントを参照してください。
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@d7267f607e9d3fb96fc2fbe83e0af444713e90b7
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}}
# このワークフローはGitHubによって認定されていないアクションを使用します。
# それらはサードパーティによって提供され、
# 別個の利用規約、プライバシーポリシー、
# ドキュメントを参照してください。
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@d7267f607e9d3fb96fc2fbe83e0af444713e90b7
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}}
メモ
ステータスチェックを使用してプルリクエストをテストする場合は、**** プルリクエストのターゲット ブランチで、Dependabot を有効にする必要があります。 このブランチ保護ルールを使用すると、必須のステータス チェックすべてに合格しない限り、確実に pull request (プル リクエスト) がマージされなくなります。 詳細については、「ブランチ保護ルールを管理する」を参照してください。
ターゲット ブランチでマージ キューが使用されている場合、組み込みの GITHUB_TOKEN はキューにプル要求を追加できません。 この場合は、マージするアクセス許可を持つpersonal access tokenまたはGitHub App トークンを使用してワークフローを認証し、GITHUB_TOKENステップのgh pr mergeの代わりに使用する必要があります。
Dependabot と GitHub Actions のポリシー
通常、ワークフローをリポジトリで実行できるかどうかは、 GitHub Actionsポリシー チェック と、 GitHub Actions が組織レベルまたはリポジトリ レベルで 有効 になっているかどうかによって異なります。 これらのコントロールは、ワークフローの実行を制限できます。特に、外部アクションがブロックされたり、 GitHub Actions が完全に無効になっている場合です。
ただし、リポジトリに対して Dependabot が有効になっている場合、そのワークフローは常に GitHub Actionsで実行され、 アクション ポリシーのチェックと無効化の両方がバイパスされます。
- Dependabot ワークフローは、アクションの無効化やエンタープライズ ポリシーの制限によってブロックされません。
- 外部アクションが許可されていない場合であっても、これらのワークフロー内で参照されているアクションも、また実行を許可されます。
詳細については、「GitHub Actionsランナーのディペンダボット」を参照してください。
失敗したワークフロー実行の調査
ワークフローの実行が失敗した場合は、以下をチェックしてください。
- 適切なアクターがトリガーした場合にのみワークフローを実行しているか。
refに対する正しいpull_requestをチェックアウトしています。- シークレットは、Dependabotシークレットで利用でき、GitHub Actionsシークレットとして利用できるわけではありません。
- 適切なアクセス許可を持つ
GITHUB_TOKENがあります。
GitHub Actionsの記述とデバッグの詳細については、ワークフローの書き込み を参照してください。
ワークフロー���関する問題を解決するための他のヒントについては、「GitHub Actions での Dependabot のトラブルシューティング」を参照してください。