개요
GitHub
에서 Pull request
를 생성할 때, 다음과 같이 Assignees
에 수동으로 Pull request
를 생성한 사람을 설정하고 있었습니다.
Pull request
의 Assignees
는 결국 Pull request
를 생성한 사람이므로 Pull request
를 생성할 때마다 Assignees
에 Pull request
를 생성한 사람을 자동으로 설정하면 좋겠다고 생각했습니다.
이번 블로그 포스트에서는 GitHub Actions
를 사용하여 Pull request
의 Assignees
에 Pull request
를 생성한 사람을 자동으로 설정하는 방법에 대해서 알아보겠습니다.
GitHub Actions 생성
그럼 Pull request
의 Assignees
에 Pull request
를 생성한 사람을 자동으로 설정하는 GitHub Actions
를 만들어 봅시다. .github/workflows/set_assignees.yml
파일을 생성하고 다음과 같이 수정합니다.
name: Set assigness
on:
pull_request:
types:
- opened
jobs:
set-assignees:
name: Set assignees
runs-on: ubuntu-latest
timeout-minutes: 1
steps:
- name: Set assignees
run: |
OWNER="$"
REPOSITORY="$"
TOKEN="$"
PULL_REQUEST_NUMBER="$"
ASSIGNEES=$(curl -s \
"https://api.github.com/repos/$OWNER/$REPOSITORY/issues/$PULL_REQUEST_NUMBER" | \
jq --raw-output '.assignees // [] | .[].login')
if [ -z "$ASSIGNEES" ]; then
ASSIGNEE=$
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: token $TOKEN" \
-d "{ \"assignees\": \"${ASSIGNEE}\" }" \
https://api.github.com/repos/$REPOSITORY/issues/$PULL_REQUEST_NUMBER/assignees
fi
GitHub
가 제공해는 API
를 사용하여 Pull request
의 Assignees
에 Pull request
를 생성한 사람(github.actor
)을 설정하도록 만들었습니다.
- 공식 문서: List assignees
- 공식 문서: Add assignees to an issue
Dependabot용 GitHub Actions
저는 개인 프로젝트에서 Dependabot을 사용하고 있습니다. Dependabot
이 생성한 Pull request
에 프로젝트 Owner
를 Assignees
에 설정하고 싶었습니다.
이를 위해서 GitHub Actions
를 다음과 같이 수정하였습니다.
name: Set assigness
on:
pull_request:
types:
- opened
jobs:
set-assignees:
name: Set assignees
runs-on: ubuntu-latest
timeout-minutes: 1
steps:
- name: Set assignees
run: |
OWNER="$"
REPOSITORY="$"
TOKEN="$"
PULL_REQUEST_NUMBER="$"
ASSIGNEES=$(curl -s \
"https://api.github.com/repos/$OWNER/$REPOSITORY/issues/$PULL_REQUEST_NUMBER" | \
jq --raw-output '.assignees // [] | .[].login')
if [ -z "$ASSIGNEES" ]; then
ASSIGNEE=$
BRANCH_NAME=$
if [[ "${BRANCH_NAME}" == "dependabot/"* ]]; then
ASSIGNEE=$OWNER
fi
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: token $TOKEN" \
-d "{ \"assignees\": \"${ASSIGNEE}\" }" \
https://api.github.com/repos/$REPOSITORY/issues/$PULL_REQUEST_NUMBER/assignees
fi
추가한 내용은 다음과 같이 branch
이름이 dependabot/
으로 시작하는 경우, Assignees
에 github.repository_owner
를 설정하도록 만들었습니다.
BRANCH_NAME=$
if [[ "${BRANCH_NAME}" == "dependabot/"* ]]; then
ASSIGNEE=$OWNER
fi
하지만 이 GitHub Actions
는 Dependabot
의 Pull request
에서 정상 동작하지 않았습니다. 보안상에 이유로 Dependabot
의 Pull request
에서는 그 어떤 sercrets
도 사용할 수 없으며, Readonly
동작만 가능하기 때문에 에러가 발생하였습니다.
이를 수정하기 위해서는 on
에 pull_request
대신 pull_request_target
을 사용하도록 수정해야 합니다.
- 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
name: Set assigness
on:
pull_request_target:
types:
- opened
actions/github-script
GitHub
에서 제공하는 actions/github-script
를 사용하면 좀 더 읽기 쉬운 코드를 작성할 수 있습니다.
actions/github-script
를 사용하면 다음과 같이 수정할 수 있습니다.
name: Set assignees
on:
pull_request_target:
types:
- opened
jobs:
set-assignees:
name: Set assignees
runs-on: ubuntu-latest
timeout-minutes: 1
steps:
- uses: actions/checkout@v4
- name: Set assignees
uses: actions/github-script@v6
with:
github-token: $
script: |
const { owner, repo } = context.repo;
const prNumber = context.payload.pull_request.number;
const response = await github.rest.issues.get({
owner,
repo,
issue_number: prNumber,
})
const { assignees } = response.data;
if (assignees.length === 0) {
let assignee = context.actor;
const branchName = context.payload.pull_request.head.ref;
if (branchName.startsWith('dependabot/')) {
assignee = owner;
}
await github.rest.issues.addAssignees({
owner: owner,
repo: repo,
issue_number: prNumber,
assignees: [assignee]
});
}
완료
이것으로 Pull request
의 Assignees
에 Pull request
를 생성한 사람을 자동으로 설정하는 GitHub Actions
를 만들어보았습니다. Pull request
를 생성할 때마다 Assignees
에 Pull request
를 생성한 사람을 등록하고 있다면, 이 GitHub Actions
를 사용하여 자동화해 보시기 바랍니다.
제 블로그가 도움이 되셨나요? 하단의 댓글을 달아주시면 저에게 큰 힘이 됩니다!
앱 홍보
Deku
가 개발한 앱을 한번 사용해보세요.Deku
가 개발한 앱은 Flutter로 개발되었습니다.관심있으신 분들은 앱을 다운로드하여 사용해 주시면 정말 감사하겠습니다.