3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Tips: CODEOWNERSを使わず、Dependabotが作成したPRにのみ自動で特定の人をレビュワーアサインする

3
Posted at

この記事は何

GitHubのDependabotが作成したPRに対してのみ、自動でレビュワーをアサインしたい場面はよくあるかと思います。
ただ、これを実現する方法を調べていくとどうしてもCODEOWNERSにたどり着くのですが、CODEOWNERSはDependabot以外のPRにもレビュワーを自動でアサインしてしまうため、使いどころに悩むケースもあります。

今回はCODEOWNERSを使わずに、DependabotのPRにのみレビュワーを自動アサインする方法を紹介します。

Dependabotとは

Dependabotは、GitHubが提供している依存関係の自動アップデートツールです。
依存しているライブラリにセキュリティ上の問題が見つかった時や、新しいバージョンがリリースされた時に、自動でアップデート用のPRを作成してくれます。

リポジトリに.github/dependabot.ymlを置いておくだけで動作するので、導入のハードルも低くとても便利です。

DependabotのPRに自動でレビュワーをアサインしたい

Dependabotが作成したPRは、内容としては「ライブラリのバージョンを上げるだけ」のものが多いですが、それでも誰かにレビューしてもらってマージしたいというケースは多いと思います。
できればこのレビュワーのアサインも自動化したいところです。

しかし、現在のDependabotには、PRに自動でレビュワーをアサインする機能がありません。

過去にはdependabot.ymlreviewersというフィールドが存在していましたが、現在は非推奨となっており、新規に設定しても動作しません。

そのため、別の方法で自動アサインを実現する必要があります。

CODEOWNERSの欠点

GitHubでレビュワーの自動アサインを行う一般的な方法として、CODEOWNERSファイルを使う方法があります。

CODEOWNERSを使えば確かにDependabotのPRにもレビュワーが自動でアサインされるのですが、ここに一つ問題があります。
それは、CODEOWNERSは対象のパスに変更を加えた全てのPRに対してレビュワーをアサインしてしまう、という点です。

例えば、

  • 通常のPRはチームメンバー全員に自動アサインしたいが、Dependabotのライブラリアップデートのレビューだけは特定のメンバーに任せたい
  • そもそも普段のPRには自動アサインの仕組みを入れたくない

といったケースだと、CODEOWNERSはそのままだと使いづらいです。

解決策: GitHub Actionsでdependenciesラベルが付いたPRにのみアサインする

ここで利用できるのが、Dependabotが作成するPRに自動的に付与されるdependenciesラベルです。

このラベルがついたPRに対してのみレビュワーをアサインするGitHub Actionsを作れば、結果的にDependabotが作成したPRにのみレビュワーをアサインできるようになります。

実際のワークフローのYAMLは以下のようになります。

.github/workflows/assign-reviewer-for-dependabot.yml
name: Assign Reviewer for Dependabot PRs

on:
  pull_request:
    types: [labeled]

jobs:
  assign-reviewer:
    if: github.event.label.name == 'dependencies'
    runs-on: ubuntu-latest
    steps:
      - name: Assign reviewer
        uses: actions/github-script@v8
        with:
          script: |
            await github.rest.pulls.requestReviewers({
              owner: context.repo.owner,
              repo: context.repo.repo,
              pull_number: context.payload.pull_request.number,
              reviewers: ['username1', 'username2']
            });

ポイントは以下の通りです。

  • pull_requestイベントのlabeledタイプをトリガーにすることで、ラベルが付与された瞬間にワークフローが起動するようにしている
  • if: github.event.label.name == 'dependencies'で、付与されたラベルがdependenciesの時のみjobを実行するようにしている
  • actions/github-scriptを使い、requestReviewers APIでレビュワーをアサインしている
  • reviewersにアサインしたいユーザー名を配列で指定する(チームを指定したい場合はteam_reviewersを利用する)

これでDependabotがPRを作成しdependenciesラベルが付いたタイミングで、自動的に指定したメンバーがレビュワーにアサインされるようになります。

team_reviewersを使うとTeamを指定してアサインすることもできます。

await github.rest.pulls.requestReviewers({
  owner: context.repo.owner,
  repo: context.repo.repo,
  pull_number: context.payload.pull_request.number,
  team_reviewers: ['my-team']
});
3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?