この記事は フラー Advent Calendar 2020 12日目の記事です。
11日目はFumio Takeuchiさんでプログラマ1年目のPR指摘事項を振り返ってみる でした。


前回から一年たってしまいました。古いBlog記事の移行もできてません、ごめんなさい(コピペだけで動くと思ったら動かなかった)
懺悔はここまで

弊社は開発にGitHubを利用し、ソースコードの修正はプルリクエスト(以降 PR)をレビューしてもらう文化があります。
今まではPRを作成し、reviewersを毎回指定していました。

1年半前まではレビュアーは自分含めて3人しかおらず、毎回同じ人がレビューをしていたので問題ありませんでしたが、喜ばしいことにサーバーサイドエンジニアの入社が続々と。。。
人数が増えたので固定していたレビューをランダムにすることにしました。

なぜ自分が自動レビュー依頼用のactionを作ろうと思ったかですが、単にactionを作ってみたかったからというのと、
ランダムは嬉しいんだけど、このプロジェクトには この人に必ずレビューして欲しい というような個人的な要望があったので作ってみました。

最初はTypeScriptで頑張ろうかと思ったのですが、仕事でgolangを使っているのでgolangで書くことにしました。
github actionsはDockerで動くので今回は以下のような構成で作成しました。

  • ソースレポジトリ側でプログラムを書いて、リリースを行う
  • actionレポジトリのDockerfileでリリースされたものを取り込みタグを打って公開する

ソースレポジトリ ManabuSeki/pr-auto-assign github.com

actionレポジトリ ManabuSeki/pr-auto-assign-action github.com

pr-auto-assign-actionの利用方法

1. configファイルの作成

pr-auto-assignを使う為のconfigファイルを作成する必要があります。
作成する場所は後述するworkflowで指定するのでどこに作成しても問題ありませんが、.github/auto_assign.yml あたりが無難でしょう。
以下のようなファイルを作成します。

.github/auto_assign.yml
# A list of reviewers to be added to pull requests (GitHub user name)

# Must Reviewer
must_reviewers:
  - A

reviewers:
  - B
  - C
  - D

# A number of reviewers added to the pull request
# Set 0 to add all the reviewers (default: 0)
number_of_reviewers: 2
上記の設定の場合

  • 必須レビュアーはA
  • ランダムにレビューするユーザーがB・C・Dのいずれか
  • レビュー人数は2人 のようになります
    A以外のユーザーがPRを作成した場合は必ずAがreviewersに入り、残り1名をreviewersの中からランダムに選びます。
    AがPRを作成した場合はreviewersからランダムにnumber_of_reviewers名分reviewersに追加できる仕様にしてます
    must_reviewersがnumber_of_reviewersを超えていたなど想定してない

2. workflowの作成

pr-auto-assignを利用する為のworkflowを追加します。

.github/workflows/pr-auto-assign.yml
name: pr-auto-assign
on:
  pull_request:
    types:
      - opened
      - ready_for_review

jobs:
  pr-auto-assign:
    name: pr-auto-assign
    runs-on: ubuntu-latest
    if: github.event.pull_request.draft == false
    steps:
      - name: execute
        uses: ManabuSeki/pr-auto-assign-action@v0.0.2
        with:
          github_token: ${{ secrets.github_token }}
          config_path: .github/auto_assign.yml

上記の設定例ではPRがDraftの状態だと実行されず、Ready for Reviewnoボタンを押した時またはPRをオープンにした時に実行されるようにしています。

さて、ここまで書いたのですが、現在このactionは(一部プロジェクトを除き)利用していません。
理由はGitHubにはそもそもコードオーナーというものがあり、そちらで設定した方が細かく指定できると作った後に教えていただきました。
その為、現在はコードオーナーの設定にteamsを追加しており、ランダムにレビューが飛ぶように設定されています。 ステータスをBusyにセットしておくとその人にはレビューが飛ばなかったりと便利です。(早く知りたかった)


明日はフラー Advent Calendar 2020 13日目 @furusax さんで「Goを人に教える立場になって気付いたこととか気をつけたことをまとめたい」です。