이슈나 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.0.0
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 에서 확인하실 수 있습니다.
와 감사합니다!!
덕분에 액션 워크플로우 활용해서 분기마다 수동으로 처리해야했던 불편한 게 서비스 내에 하나 더 있었는데 해결할 수 있을 것 같아요!!!