はじめに
はじめまして。 新規事業開発チームのエンジニア櫻田です。
私たちのチームではGitHub ActionsとGitHub apiを活用して色んな作業を自動化しているので少しずつ紹介していきたいと思います。
今回はプルリクエスト開設時にレビュワーを自動設定する方法を紹介します。
初回なので構文の解説も行なっていきます!
実現すること
- プルリクエスト開設時にレビュワーを自動設定する
- チームメンバーが変わってもコードを変更せずに対応する
急いでいる人向け 完成ファイル
name: PR Reviewer Auto Assignment
on:
pull_request:
types: [opened, reopened, ready_for_review]
jobs:
reviewer-assign:
if: |
# お好きな条件分を設定ください
github.event.pull_request.base.ref != 'main' && startsWith(github.head_ref, 'feature')
runs-on: ubuntu-latest
env:
API_BASE_URL: "https://api.github.com"
ACCEPT_HEADER: "Accept: application/vnd.github+json"
VERSION_HEADER: "X-GitHub-Api-Version: 2022-11-28"
AUTH_HEADER: "Authorization: Bearer ${{ secrets.PULL_REQUEST_API_TOKEN }}"
ORG: "organization" # githubの組織名を設定してください
TEAM: "team" # レビュワーに設定したいチーム名を設定してください
steps:
- name: Get Members List
id: get-members-list
run: |
response=$(curl -X GET \
-H "$ACCEPT_HEADER" \
-H "$VERSION_HEADER" \
-H "$AUTH_HEADER" \
$API_BASE_URL/orgs/$ORG/teams/$TEAM/members)
members=$(echo $response | jq '[.[].login | select(. != "${{ github.actor }}")]')
echo ::set-output name=members::$members
- name: Set Reviewers
id: set-reviewers
run: |
reviewers=$(curl -X GET \
-H "$ACCEPT_HEADER" \
-H "$VERSION_HEADER" \
-H "$AUTH_HEADER" \
$API_BASE_URL/repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/requested_reviewers)
reviewr_count=$(echo $reviewers | jq '.users | length')
if [ $reviewr_count -eq 0 ]; then
curl -X POST \
-H "$ACCEPT_HEADER" \
-H "$VERSION_HEADER" \
-H "$AUTH_HEADER" \
$API_BASE_URL/repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/requested_reviewers \
-d '{ "reviewers": ${{ steps.get-members-list.outputs.members }} }'
fi
ワークフローの設定
.github/workflows
配下にymlファイルを作成します。
まずはnameとonまで記載します。
name: PR Reviewer Auto Assignment
on:
pull_request:
types: [opened, reopened, ready_for_review]
name
ワークフローの名前
リポジトリの[アクション]タブに表示される。
省略するとファイルのパスになる
on
ワークフロー実行のトリガーとなるイベントを定義する。
設定できるイベント一覧
今回はプルリクエストを開設した時に実行したいのでpull_requestを設定しています。
types
のデフォルトは[ opened(PRオープン), synchronize(PRオープン後push), reopened(PR再オープン) ]
ですが今回はdraftで開設後readyにした場合も実行したい&PRオープン後pushでは実行したくない為明示的に指定しています。
続いてjobsを設定していきます。
jobs:
reviewer-assign:
if: |
github.event.pull_request.base.ref != 'main' && startsWith(github.head_ref, 'feature')
runs-on: ubuntu-latest
env:
API_BASE_URL: "https://api.github.com"
ACCEPT_HEADER: "Accept: application/vnd.github+json"
VERSION_HEADER: "X-GitHub-Api-Version: 2022-11-28"
AUTH_HEADER: "Authorization: Bearer ${{ secrets.PULL_REQUEST_API_TOKEN }}"
ORG: "organization" # githubの組織名を設定してください
TEAM: "team" # レビュワーに設定したいチーム名を設定してください
jobs
ワークフローで実行される一連の処理
必ず一つは設定する必要があり複数作成することもできる。
jobs.id
ジョブの一意の識別子
今回はreviewer-assign
とします。
jobs.id.name
ジョブに名前を分かりやすいつけることができる。
省略すると実行時にはidが表示されます。今回は省略しています。