Outline
When I create a Pull request
on GitHub
, I manually set the Reviewers
as follows.
In this blog post, I will introduce how to set Reviewers
automatically in Pull request
using GitHub Actions
.
GitHub Actions
To set the reviewers automatically in the Pull request
, create the .github/workflows/set_reviewers.yml
file and modify it as follows.
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"
This GitHub Actions
is designed to randomly set 2 people as Reviewers
by excluding the person who created the Pull request
from USER_1
, USER_2
, and USER_3
.
actor="$"
reviewers=("USER_1" "USER_2" "USER_3")
reviewers=($(printf "%s\n" "${reviewers[@]}" | grep -v "$actor" | shuf -n 2))
The reviewers of the Pull request
cannot be set to the person who created the Pull request
by default.
When using this GitHub Actions
, you can set reviewers randomly every time the Pull request
is created and reduce the time to select reviewers.
GitHub Actions for Dependabot
The previous GitHub Actions
does not work with the Pull request
that Dependabot
creates. To make it work, you need to modify the pull_request
part to pull_request_target
. Open the .github/workflows/set_reviewers.yml
file and modify it as follows.
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"
You can use any secrets
in the Pull request
that Dependabot
creates, and the Pull request
created by Dependabot
will run with read-only permissions, so an error occurs.
- 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
To fix this, you need to modify the pull_request
to pull_request_target
in the on
condition.
actions/github-script
If you use actions/github-script
provided by GitHub
, you can write more readable code.
To use actions/github-script
, you can modify it as follows.
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
});
}
Completed
Done! We’ve seen how to set reviewers automatically in Pull request
using GitHub Actions
. By using this GitHub Actions
, you can reduce the time to set reviewers and prevent focusing on specific users for review requests.
Was my blog helpful? Please leave a comment at the bottom. it will be a great help to me!
App promotion
Deku
.Deku
created the applications with Flutter.If you have interested, please try to download them for free.