注: この機能を使用するには、サイト管理者が your GitHub Enterprise Server instanceの Dependabot updatesを設定する必要があります。 詳細については、「企業に対する Dependabot の有効化」を参照してく� さい。
Dependabot及びGitHub Actionsについて
Dependabotは、依存関係を最新に保つためのPull Requestを作成します。GitHub Actionsを使って、それらのPull Requestが作成されたときに自動化されたタスクを実行できます。 たとえば、追� の成果物のフェッチ、ラベルの追� 、テストの実行、あるいはPull Requestの変更ができます。
イベントへの応答
Dependabot は、pull request とコメントで GitHub Actions ワークフローをトリガーできます。た� し、特定のイベントは異なる方法で処理されます。
GITHUB_TOKEN
には、管理者が制限を削除していない限り、読み取り専用のアクセス許可があります。- 管理者が制限を削除していない限り、シークレットにアクセスできません。
詳細については、GitHub Actions およびワークフローのセキュリティ保護の維持: pwn 要求の阻止に関するページを参照してく� さい。
注: サイト管理者は、your GitHub Enterprise Server instance に対するこれらの制限をオーバーライドできます。 詳細については、「エンタープライズでの GitHub Actions のトラブルシューティング」を参照してく� さい。
制限が削除された� �合、Dependabot によってワークフローがトリガーされると、それは GitHub Actions シークレットにアクセスできるようになり、この permissions
条件を使用して、読み取り専用アクセスから GITHUB_TOKEN
の既定のスコープを増やすことができます。 [pull_request
イベントの処理] および [push
イベントの処理] セクションの特定のステップは、適用されなくなったため無視できます。
pull_request
イベントの処理
ご利用のワークフローでシークレットに、または書き込みアクセス許可がある GITHUB_TOKEN
にアクセスする必要がある� �合は、次の 2 つのオプションを使用できます: pull_request_target
を使用する。2 つの個別のワークフローを使用する。 このセクションでは、pull_request_target
の使用方法を、「push
イベントの処理」では以下の 2 つのワークフローを使用する方法について詳しく説明します。
失敗する可能性がある pull_request
ワークフローのシンプルな例を次に示します。
### This workflow now has no secrets and a read-only token
name: Dependabot Workflow
on:
pull_request
jobs:
dependabot:
runs-on: ubuntu-latest
# Always check the actor is Dependabot to prevent your workflow from failing on non-Dependabot PRs
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- uses: actions/checkout@v2
pull_request
を pull_request_target
(フォークからの pull request に使用される) に置き換えて、pull request の HEAD
を明示的にチェックアウトできます。
警告: pull_request
の代わりに pull_request_target
を使用すると、安全でない動作にさらされます。 「push
イベントの処理」で後述するように、2 つのワークフロー メソッドを使用することをお勧めします。
### This workflow has access to secrets and a read-write token
name: Dependabot Workflow
on:
pull_request_target
permissions:
# Downscope as necessary, since you now have a read-write token
jobs:
dependabot:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- uses: actions/checkout@v2
with:
# Check out the pull request HEAD
ref: ${{ github.event.pull_request.head.sha }}
github-token: ${{ secrets.GITHUB_TOKEN }}
必要以上の権限を持つトークンの漏洩を避けるために、GITHUB_TOKEN
に付与する権限のスコープを絞ることも強くおすすめします。 詳細については、「GITHUB_TOKEN
の権限」を参照してく� さい。
push
イベントの処理
push
イベントには、pull_request_target
に相当するものがないので、2 つのワークフローを使うことになります。1 つは信� �されないワークフローで、成果物のアップロードで終わります。そしてこれは、成果物をダウンロードして処理を続ける、2 番目の信� �されるワークフローをトリガーします。
最初のワークフローは、信� �されない作業をすべて行います。
### This workflow doesn't have access to secrets and has a read-only token
name: Dependabot Untrusted Workflow
on:
push
jobs:
check-dependabot:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- uses: ...
2番目のワークフローは、最初のワークフローが正常に終了した後に、信� �された処理を行います。
### This workflow has access to secrets and a read-write token
name: Dependabot Trusted Workflow
on:
workflow_run:
workflows: ["Dependabot Untrusted Workflow"]
types:
- completed
permissions:
# Downscope as necessary, since you now have a read-write token
jobs:
dependabot:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'success' }}
steps:
- uses: ...
手動でのワークフローの再実行
失敗したDependabotワークフローを手動で再実行することもできます。これは、読み書きできるトークンを持ち、シークレットにアクセスできる状態で実行されます。 失敗したワークフローを手動で再実行する前には、更新される依存関係を常にチェックし、その変更によって悪意ある、あるいは意図しない動作が入り込むことがないようにすべきです。
一般的なDependabotの自動化
以下は、GitHub Actionsを使って自動化できる一般的ないくつかのシナリオです。
注: サイト管理者が your GitHub Enterprise Server instance 上の Dependabot に対する制限をオーバーライドしている� �合は、次のワークフローの pull_request
ではなく pull_request_target
を使用できます。
Pull Reqeustに関するメタデータのフェッチ
大量の自動化には、依存関係の名前が何か、それは実働環境の依存関係か、メジャー、マイナー、パッチアップデートのいずれなのかといった、Pull Requestの内容に関する情� �を知ることが必要です。
dependabot/fetch-metadata
アクションによって、次の情� �のすべてが提供されます。
name: Dependabot fetch metadata
on: pull_request_target
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: dependabot-metadata
uses: dependabot/fetch-metadata@v1.1.1
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
# The following properties are now available:
# - steps.dependabot-metadata.outputs.dependency-names
# - steps.dependabot-metadata.outputs.dependency-type
# - steps.dependabot-metadata.outputs.update-type
詳細については、dependabot/fetch-metadata
リポジトリを参照してく� さい。
Pull Requestのラベル付け
GitHubラベルに基づく他の自動化やトリアージワークフローがあるなら、提供されたメタデータに基づいてラベルを割り当てるアクションを設定できます。
たとえば、すべての実働環境の依存関係の更新にラベルでフラグを設定したいなら:
name: Dependabot auto-label
on: pull_request_target
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: dependabot-metadata
uses: dependabot/fetch-metadata@v1.1.1
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
- name: Add a label for all production dependencies
if: ${{ steps.dependabot-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のPull Requestを承認したいなら、ワークフロー中でGitHub CLIを利用できます。
name: Dependabot auto-approve
on: pull_request_target
permissions:
pull-requests: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- name: Dependabot metadata
id: dependabot-metadata
uses: dependabot/fetch-metadata@v1.1.1
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}}
Pull Requestの自動マージを有効化する
メンテナーが自動マージの特定の pull request をマークできるようにする� �合は、GitHub の自動マージ機能を使用できます。 これにより、ブランチ保護ルールで必要なすべての必� �テストと承認が正常に満たされた� �合に、pull request がマージされます。 詳しくは、「pull request を自動的にマージする」とブランチ保護ルールの管理に関する説明を参照してく� さい。
メモ: pull request のテストにステータス チェックを使用する� �合、Dependabot pull request のためにターゲット ブランチで [マージ前にステータス チェックの合� �を必� �にする] をオンにする必要があります。 このブランチ保護ルールにより、必� �のステータス チェックに合� �しないと、pull request はマージされません。 詳細については、「ブランチ保護ルールを管理する」を参照してく� さい。
代わりに、GitHub Actions と GitHub CLI を使用できます。 すべてのパッチ更新プログラ� を my-dependency
に自動マージする例を次に示します。
name: Dependabot auto-merge
on: pull_request_target
permissions:
contents: write
pull-requests: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- name: Dependabot metadata
id: dependabot-metadata
uses: dependabot/fetch-metadata@v1.1.1
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
- name: Enable auto-merge for Dependabot PRs
if: ${{contains(steps.dependabot-metadata.outputs.dependency-names, 'my-dependency') && steps.dependabot-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 によってトリガーされる
pull_request
、pull_request_review
、pull_request_review_comment
、またはpush
イベント内からシークレットにアクセスしようとしているのではありません。 - Dependabot によってトリガーされた
write``pull_request``pull_request_review
、またはpull_request_review_comment
イベント内からアクションpush
を実行しようとはしていません。
GitHub Actions の作成とデバッグに関する情� �については、「GitHub Actions について学ぶ」を参照してく� さい。