
Repository의 Setting에 들어가서 Branches 탭을 선택, Add branch ruleset 버튼을 눌러준다.

방법은 두가지 있다.
.github/CODEOWNERS 파일을 만든다
* @collaborator1 @collaborator2 @collaborator3 이렇게 한 명씩 지정하거나, * @your-organization/your-team 이렇게 팀 한꺼번에 추가할 수도 있다. - 근데 이건 리포지토리가 아예 Organization 안에 생성되어야 한다!추가해서 저장했다면 CODEOWNERS를 커밋해서 이걸 원격 저장소의 default 브랜치에 push해서 세팅해둔다.
그 다음 Require a pull request before merging 안에 Require review from Code Owners 옵션을 활성화해준다.

Pull Request 등록할 때 자동으로 Reviewer가 추가되어있는 모습을 확인할 수 있다!
그러나 Asignee는 무조건 Actions로 등록해야하는 듯 하다.
그리고 Code Owner 권한을 다른 사람들에게는 안 주고 싶을 수도 있잖아.
그래서 제가 선택한 등록 방법은요...
어차피 Asignee 때문에 Actions를 등록해야 한다면 Reviewer도 Actions로 등록하자!

Repository에서 Actions 탭을 눌러보면 이렇게 뜨는데 여기서 set up a workflow yourself -> 라고 되어있는 파란 글씨 클릭
이미 Actions에 뭐 하나 등록해둔 사람은 이렇게 뜨는데, New workflow 버튼 눌러주면 아까 그 화면 뜬다.

yml 파일 편집창이 뜨게 되는데, 파일 이름은 원하는대로 적어두고 아래 코드에 리뷰어 아이디 목록 원하는대로 채워넣기!
설명하느라 주석 많이 달아놨는데 거슬리면 지우고 등록하기
name: Reviewer Assign # Workflow 이름
on: # Workflow를 트리거하는 이벤트 지정
pull_request: # pull_request 이벤트가 발생할 때 트리거!
types: [opened, ready_for_review] # opened: pull_request가 생성될 때, ready_for_review: pull_request가 리뷰 준비 상태로 변경될 때
permissions: # 권한 지정(안 해주니까 에러 나더라)
pull-requests: write
issues: write
jobs: # Workflow에서 실행할 작업을 정의
assign: # 작업의 이름
runs-on: ubuntu-latest # 작업이 실행될 환경: 최신 우분투 환경
steps: # 작업 내에서 실행할 단계들 정의
- name: Assign reviewers and assignee # step 이름
uses: actions/github-script@v6 # actions/github-script 액션을 사용하여 JavaScript 스크립트를 실행
with: # 액션에 전달할 입력값 정의
# 아래는 실행할 JavaScript 내용
script: |
const reviewers = ['홍길동', '이순신']; // 리뷰어 아이디 목록
// 비동기 함수로 감싸서 await 사용 가능하게 함
// github와 context 객체를 매개변수로 받는다
(async ({github, context}) => {
const prAuthor = context.actor; // PR 작성자 아이디
const assignees = [prAuthor]; // 담당자는 pr 올리는 본인 등록
// PR 작성자를 리뷰어 목록에서 제외
const filteredReviewers = reviewers.filter(reviewer => reviewer !== prAuthor);
// 풀 리퀘스트 번호
const pullRequestNumber = context.payload.pull_request.number;
// 리포지토리 소유자 아이디
const owner = context.repo.owner;
// 리포지토리 이름
const repo = context.repo.repo;
// 리뷰어 추가
if (filteredReviewers.length > 0) {
await github.rest.pulls.requestReviewers({
owner,
repo,
pull_number: pullRequestNumber,
reviewers: filteredReviewers
});
}
// 담당자 추가
await github.rest.issues.addAssignees({
owner,
repo,
issue_number: pullRequestNumber,
assignees
});
})({github, context});
GitHub API 호출은 비동기 작업이고,
Github Actions 스크립트는 비동기 작업이 완료되기 전에 다음 줄로 넘어갈 수 있기 때문에, 비동기 작업이 올바르게 완료되기를 보장하려면 await를 사용하는 것이 좋다고 하네요.