GitHub Actions - 이슈와 PR에 Label 자동 추가하기

gzip·2023년 5월 25일
2

GitHub 찍먹

목록 보기
2/4
post-thumbnail

이슈나 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을 직접 만들어서 마켓플레이스에 올려보고 싶었지만 시간이 없었다. 그래서 이번 기회에 간단히 만들어봤다.


Issue PR Labeler

기능은 간단하다. 각 라벨마다 정규식을 설정하고 적용할 이벤트 타입(이슈, 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 라벨은 아래 조건이 만족하면 자동으로 추가된다.

  • 이슈나 PR의 제목과 내용에 /\bfix\b|bug/ 정규식이 매칭될 경우

documentation 라벨은 아래 조건이 만족하면 자동으로 추가된다.

  • 이슈나 PR의 제목과 내용에 /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 에서 확인하실 수 있습니다.

1개의 댓글

comment-user-thumbnail
2024년 3월 14일

와 감사합니다!!
덕분에 액션 워크플로우 활용해서 분기마다 수동으로 처리해야했던 불편한 게 서비스 내에 하나 더 있었는데 해결할 수 있을 것 같아요!!!

답글 달기