개요
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
의 리뷰어에는 기본적으로 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
에서는 보안상에 이유로 그 어떤 sercrets
도 사용할 수 없으며, 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로 개발되었습니다.관심있으신 분들은 앱을 다운로드하여 사용해 주시면 정말 감사하겠습니다.