[GitHub Actions] PR을 자동으로 라벨링시켜보자!

뚜비·2023년 10월 17일
8

CI/CD

목록 보기
1/1

actions/labeler를 참고하였습니다

서론

Github Actions을 만들어보게 된 배경은 다음과 같다.


현재 알고리즘 스터디 중인데 나름 규칙이 존재한다.
1. 각각 branch를 생성하고
2. 코테 문제를 폴더를 생성해서 commit 한 후
3. main branch에 PR을 날린다. 이떄, 어떤 언어로 작성했는지 labeling을 해줘야 함!


그런데 계속해서 labeling을 하는게 너무 귀찮은 나머지.. 이를 자동화해줄 수 있는 Github Aciton을 만들어보기로 했다.



본론

0. 기존의 action 활용하기


이미 PR에 labeling 해주는 action이 존재한다(위에 참고한 링크에 들어가면 레포에 들어갈 수 있음)!!
나는 이 action을 바탕으로 Github actions를 만들어 볼 것이다!!

🤔 actions가 뭔데!?!

  • 자주 반복되는 task(여기서는 leabeling)를 수행하는 custom application
  • workflow를 작성할 때 반복되는 코드 양를 줄여줄 수 있도록 하는 미리 정의된 명령어이다.

1. .github/workflows 폴더에 yaml 파일 생성


Actions 탭에 들어가서


해당 버튼을 누르면 자동으로 생성해준다!!


짜잔!! yaml 파일을 .github/workflows아래에 직접 생성해줄 뿐더러 workflow의 기본 틀을 작성해준다.


해당 버튼을 사용하지 않아도 REPO의 main branch에서 .github/workflows폴더에 yaml(혹은 yml) 파일을 생성해주고 작성해도 괜찮다!


2. .github/workflows 폴더의 yaml 파일 작성하기

yaml 파일을 다음과 같이 작성한다.

name: Labeler # workflow 이름
on:  # workflow를 trigger할 event
  pull_request: # main 브랜치에 pr이 open되거나 새로운 commit이 push되었을 때
    types: [opened, synchronize]
    branches: main

jobs:
  label: # jobs 이름 
    runs-on: ubuntu-latest # set runner 
    permissions: # 해당 workflow의 접근 권한 
      contents: read # 레포 내용은 읽기만 하고
      pull-requests: write # PR에 write할 수 있음!(github bot이 존재하니까!)

    steps:
    - name: Check Labels
      uses: actions/labeler@v4 # 우리가 사용한 action의 version 
      with:
        repo-token: "${{ secrets.GITHUB_TOKEN }}" # 자동 생성되는 token
  • 해당 yaml 파일은 labeling하는 workflows가 실행되기 위한 여러 설정들이 정의되어 있다.
  • workflows -> job -> step 에 대해 정의
    - pull_request라는 event가 발생했을 때 해당 workflow가 trigger
    - Ubuntu라는 runner에서 job이 실행
    - actions/labeler라는 action을 사용하여 Label을 체크하는 step 정의
    등등..

🤔 잠깐 worflows의 Component

  • event : workflows가 trigger 되기 위한 특정 activity
  • jobs : 같은 runner 위에서 실행되는 step들의 집합
  • action : 반복되는 task를 수행하는 custom application
  • runners : workflows를 실행시킬 서버

3. .github/labeler.yml 파일 생성 및 작성


반드시 이름을 labeler.yml 로 생성해야 함을 주의!! (공식문서에 나와있음)

python: # 파이썬이라는 라벨을 
- '**/*.py' # 전체 레포에서 .py에 변화가 생기면 추가 

cpp:
- '**/*.cpp'

java:
- '**/*.java'

kotlin:
- '**/*.kt'
  • 해당 파일은 label들을 정의한 list들이다.
  • key는 해당 레포에 추가하고 싶은 label의 이름 / value는 변경된 파일 경로


결론


현재 PR이 아직 merge되지 않은 상황에서 uijeong branch에 java 코드를 생성해보자.



commit을 날리면 기존 PR에 변경사항이 생기고 github action이 체크하게 되는데..!!


짜잔 기존의 cpp 코드에 java 코드가 추가 되었기 때문에 cpp와 java라는 Labeling이 추가되었다!!


github action으로 Labeling 자동화 구축 대성공!!

profile
SW Engineer 꿈나무 / 자의식이 있는 컴퓨터

2개의 댓글

comment-user-thumbnail
2023년 10월 18일

덕분에 새로운 거 알아갑니다!! :) 의정이 최고 👍

1개의 답글