概要
GitHubでPull requestを生成すると、次のようにReviewersに手動でレビュアーを設定していました。

今回のブログポストではGitHub Actionsを使ってPull requestのReiewersにレビュアーを自動で設定する方法について説明します。
GitHub Actions
Pull requestのReviewersにレビュアーを自動で設定するためには、.github/workflows/set_reviewers.ymlファイルを生成して次のように修正します。
name: Set reviewers
on:
pull_request:
jobs:
set-reviewers:
name: Set reviewers
runs-on: ubuntu-latest
timeout-minutes: 1
steps:
- name: Set reviewers
run: |
actor="$"
reviewers=("USER_1" "USER_2" "USER_3")
reviewers=($(printf "%s\n" "${reviewers[@]}" | grep -v "$actor" | shuf -n 2))
reviewers=$(printf '%s\n' "${reviewers[@]}" | jq -R . | jq -s .)
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: token $" \
-d "{ \"reviewers\": $reviewers }" \
"https://api.github.com/repos/$/pulls/$/requested_reviewers"
このGitHub ActionsはUSER_1、USER_2、USER_3の中からPull requestを生成した人を除外してランダムに 2 人をReviewersに設定するように作りました。
actor="$"
reviewers=("USER_1" "USER_2" "USER_3")
reviewers=($(printf "%s\n" "${reviewers[@]}" | grep -v "$actor" | shuf -n 2))
Pull requestのReviewersには基本的にPull requestを生成した人は設定できません。
このGitHub Actionsを使うとPull requestを生成するたびにランダムにレビュアーを設定してレビュアーを選ぶ時間を短縮することができます。
Dependabot 用 GitHub Actions
先ほど作成したGitHub ActionsはDependabotが作ったPull requestでは動かないです。このGitHub ActionsをDependabotでも動作するようにするためにはpull_request部分をpull_request_targetに修正する必要があります。.github/workflows/set_reviewers.ymlファイルを開いて次のように修正します。
name: Set reviewers
on:
pull_request_target:
jobs:
set-reviewers:
name: Set reviewers
runs-on: ubuntu-latest
timeout-minutes: 1
steps:
- name: Set reviewers
run: |
actor="$"
reviewers=("USER_1" "USER_2" "USER_3")
reviewers=($(printf "%s\n" "${reviewers[@]}" | grep -v "$actor" | shuf -n 2))
reviewers=$(printf '%s\n' "${reviewers[@]}" | jq -R . | jq -s .)
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: token $" \
-d "{ \"reviewers\": $reviewers }" \
"https://api.github.com/repos/$/pulls/$/requested_reviewers"
Dependabotが作ったPull requestではセキュリティ上の理由でどのようなsecretsも使うことができず、Readonly動作のみが可能なためエラーが発生します。
- GitHub Actions: Workflows triggered by Dependabot PRs will run with read-only permissions
- Keeping your GitHub Actions and workflows secure Part 1: Preventing pwn requests
これを修正するためにはonの部分をpull_requestからpull_request_targetに修正する必要があります。
actions/github-script
GitHubが提供しているactions/github-scriptを使うともっと読みやすいコードを書くことができます。
actions/github-scriptを使うと次のように修正することができます。
name: Set reviewers
on:
pull_request_target:
jobs:
set-reviewers:
name: Set reviewers
runs-on: ubuntu-latest
timeout-minutes: 1
steps:
- name: Set reviewers
uses: actions/github-script@v5
with:
github-token: $
script: |
const reviewers = ["USER_1", "USER_2", "USER_3"];
const actor = context.payload.pull_request.user.login;
const { owner, repo } = context.repo;
const prNumber = context.payload.pull_request.number;
const { data: assignedReviewers } = await github.rest.pulls.listRequestedReviewers({
owner,
repo,
pull_number: prNumber,
});
if (assignedReviewers.length === 0) {
const filteredReviewers = reviewers.filter(reviewer => reviewer !== actor);
const selectedReviewers = filteredReviewers.sort(() => Math.random() - 0.5).slice(0, 2);
const prNumber = context.payload.pull_request.number;
await github.rest.pulls.requestReviewers({
owner,
repo,
pull_number: prNumber,
reviewers: selectedReviewers
});
}
完了
これでPull requestのReviewersを自動で設定するGitHub Actionsを作成することができました。このGitHub Actionsを使うとPull requestにReviewersを設定する時間を減らすことができるし、特定のユーザーにレビューリクエストが集中させることを防ぐことができます。
私のブログが役に立ちましたか?下にコメントを残してください。それは私にとって大きな大きな力になります!
アプリ広報
Dekuが開発したアプリを使ってみてください。Dekuが開発したアプリはFlutterで開発されています。興味がある方はアプリをダウンロードしてアプリを使ってくれると本当に助かります。






