私が参画しているプロジェクトでは、いつもコードレビューを依頼するときは特定のメンバーに依頼をしている。プルリクエストを作成し、そのタイミングでreviwerを手動で選択していた。同じような人は多いのではないのだろうか。これを自動化する。たった数秒の手間の削減だが、GitHub Actionsを使用してできることはたくさんあるらしい。
コードレビュー依頼の自動化を実現するためのコード
使用したいactionとしては以下になる。
https://github.com/marketplace/actions/auto-request-review
そして、実際のコードはこんな感じ。
name: Auto Request Review
on:
pull_request:
branches:
- main
types: [opened, reopened]
permissions:
id-token: write
contents: read
pull-requests: write
jobs:
auto-request-review:
name: Auto Request Review
runs-on: ubuntu-latest
steps:
- name: Request review based on files changes and/or groups the author belongs to
uses: necojackarc/auto-request-review@v0.13.0
with:
token: ${{ secrets.GITHUB_TOKEN }}
config: .github/reviewers.yml # Config file location override
# Look for config locally during run instead of in repo.
# For instance, if you'd like to use a config file stored in external storage,
# you can fetch it before you run this action, then let this action pick it up with `use_local: true`.
# This defaults to false if not specified.
# See https://github.com/necojackarc/auto-request-review/issues/76 for more details.
use_local: false
トリガーとしては、プルリクエストがopenしたときもしくはreopneされたときにした。そして、mainブランチをtarget_branchとしたプルリクエストであることも条件とした。branchesで指定しているブランチ名は、プルリクエスト自体のブランチ名ではなく、マージをしたいブランチ(target_branch)になるので注意。
on:
pull_request:
branches:
- main
types: [opened, reopened]
レビュワーに関する設定ファイル
auto_request_review.ymlのjobsでconfig: .github/reviewers.yml
としているので.github/reviwers.ymlを用意する。このファイルでは、実際に自動で設定されるレビュワーや各種オプションを記載することができる。
reviewers:
# Reviewers per author.
# Keys are reviewees, each of which has an array of reviewers.
defaults:
- gorira-san
files:
# Keys are glob expressions.
# You can assign groups defined above as well as GitHub usernames.
'**':
- gorira-san
options:
ignore_draft: true
ignored_keywords:
- DO NOT REVIEW
デフォルトのレビュワーはgorira-sanにした。これはgithubのユーザー名を指定する。
reviewers:
# Reviewers per author.
# Keys are reviewees, each of which has an array of reviewers.
defaults:
- gorira-san
ファイルに応じたレビュワーの指定もできるっぽいが、リポジトリ全体で同じレビュワーに依頼が必要なため以下のようにした。
files:
# Keys are glob expressions.
# You can assign groups defined above as well as GitHub usernames.
'**':
- gorira-san
そして、optionsとして諸々を指定。draft状態のプルリクエストの場合は、このworkflowは動作しないこと、プルリクエストのタイトルに「DO NOT REVIEW」という文字が含まれているる場合も同様に動作しないことなどを記載しといた。おそらく「WIP」など結構使われているのでここに含めるのもいいと思う。