
이슈나 PR 이벤트 발생 시 제목이나 내용을 정규식으로 매칭하여 라벨을 자동으로 추가해보자.
Git 커밋 메시지 컨벤션을 사용하거나
- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
- [ ] This change requires a documentation update
이런 식의 PR 템플릿을 사용하거나 혹은 이슈 템플릿을 사용하는 경우 정규식을 이용하여 라벨을 자동으로 추가하면 편리하다.
GitHub Marketplace에 가면 이미 비슷한 Action들이 존재한다. 예전부터 Action을 직접 만들어서 마켓플레이스에 올려보고 싶었지만 시간이 없었다. 그래서 이번 기회에 간단히 만들어봤다.

기능은 간단하다. 각 라벨마다 정규식을 설정하고 적용할 이벤트 타입(이슈, PR), 적용할 타겟(제목, 내용)을 설정하면 된다.
Issue PR Labeler를 보면 자세한 설명이 있다.
설정 파일은 .github 폴더 안에 만들면 된다. 기본 값으로 labeler-config.yml이라는 파일명을 찾아 적용한다.
filters:
- label: bug
regexs:
- /\bfix\b|bug/
events: [issues, pull_request]
targets: [title, comment]
- label: documentation
regexs:
- /docs/i
- /documentation/
events를 생략할 경우 이슈와 PR 둘 다 적용된다.targets을 생략할 경우 제목과 내용 둘 다 적용된다.bug 라벨은 아래 조건이 만족하면 자동으로 추가된다.
/\bfix\b|bug/ 정규식이 매칭될 경우documentation 라벨은 아래 조건이 만족하면 자동으로 추가된다.
/docs/i or /documentation/ 정규식이 매칭될 경우워크플로우 파일은 .github/workflows 폴더에 만들면 된다. 예를 들어 issue-pr-labeler.yml로 만들어보겠다.
name: Issue PR Labeler
on:
issues:
types:
- opened
- edited
pull_request: # or pull_request_target
types:
- opened
- reopened
jobs:
main:
runs-on: ubuntu-latest
permissions:
contents: read # 위에 작성한 설정 파일을 읽기 위해 필요
issues: write # 이슈에 라벨을 추가하기 위해 필요
pull-requests: write # PR에 라벨을 추가하기 위해 필요
steps:
- name: Run Issue PR Labeler
uses: hoho4190/issue-pr-labeler@v2
with:
token: ${{ secrets.GITHUB_TOKEN }}
disable-bot: true
config-file-name: labeler-config.yml
disable-bot은 옵션으로 봇이 생성한 이슈나 PR에 자동 라벨링을 금지할지 설정할 수 있다. 생략할 경우 기본 값은 true이다.config-file-name도 옵션으로 위에서 설정한 파일 이름을 지정해 준다. 생략할 경우 기본 값은 labeler-config.yml이다.포크된 리포지토리에서 업스트림 리포지토리로 PR을 생성할 경우에도 자동 라벨링을 동작하게 하려면 pull_request 대신 pull_request_target를 사용하면 된다.
on:
pull_request_target:
types:
- opened
- reopened


코드는 https://github.com/hoho4190/issue-pr-labeler 에서 확인하실 수 있습니다.
와 감사합니다!!
덕분에 액션 워크플로우 활용해서 분기마다 수동으로 처리해야했던 불편한 게 서비스 내에 하나 더 있었는데 해결할 수 있을 것 같아요!!!