Skip to main content

このバージョンの GitHub Enterprise はこの日付をもって終了となりました: 2023-01-18. 重大なセキュリティの問題に対してであっても、パッチリリースは作成されません。 パフォーマンスの向上、セキュリティの向上、新機能の向上を図るために、最新バージョンの GitHub Enterprise にアップグレードします。 アップグレードに関するヘルプについては、GitHub Enterprise サポートにお問い合わせく� さい

GitHub ActionsでのDependabotの自動化

GitHub Actionsを使って一般的なDependabot関連のタスクを自動化する例。

Who can use this feature

People with write permissions to a repository can configure GitHub Actions to respond to Dependabot-created pull requests.

**注:** Dependabot セキュリティとバージョンの更新プログラ� は現在プライベート ベータ版であり、変更される可能性があります。 Dependabot アップデートを有効にする手� �については、[アカウント管理チー� にお問い合せく� さい](https://enterprise.github.com/contact)。

注: この機能を使用するには、サイト管理者が 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_requestpull_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_requestpull_request_reviewpull_request_review_comment、または push イベント内からシークレットにアクセスしようとしているのではありません。
  • Dependabot によってトリガーされた write``pull_request``pull_request_review、または pull_request_review_comment イベント内からアクションpush を実行しようとはしていません。

GitHub Actions の作成とデバッグに関する情� �については、「GitHub Actions について学ぶ」を参照してく� さい。