๐ฝ ๋ชจ๋ ธ๋ ํฌ๋?
์ฌ๋ฌ ๊ฐ์ ํ๋ก์ ํธ ๋๋ ํจํค์ง๋ฅผ ํ๋์ ์ ์ฅ์ ์์์ ๊ด๋ฆฌํ๋ ๋ฐฉ์์ ๋งํ๋ค.
๊ฐ๊ฐ์ ์๋น์ค๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฐ๋ก๋ฐ๋ก Git ์ ์ฅ์๋ฅผ ๋ง๋ค์ด์ ๊ด๋ฆฌํ๋ ๋ฐฉ์์ ๋ฉํฐ๋ ํฌ(multi-repo)๋ผ๊ณ ํ๊ณ , ๋ฐ๋๋ก ํ ์ ์ฅ์ ์์ ๋ชจ๋ ๊ด๋ จ ํ๋ก์ ํธ๋ฅผ ํจ๊ป ๋ฃ์ด๋๊ณ ๋ฒ์ , ๋น๋, ๋ฐฐํฌ๋ฅผ ํจ๊ป ๊ด๋ฆฌํ๋ ๊ตฌ์กฐ๊ฐ ๋ชจ๋ ธ๋ ํฌ(mono-repo)์ด๋ค.
๐ท๏ธ PR ์์ฑ ์ ์คํ ๋ผ๋ฒจ๋ง์ ์ ์ฉํ๋ ค๋ ์ด์
ํ๋์ ๋ชจ๋ ธ๋ ํฌ์๋ ์ฌ๋ฌ๊ฐ์ง ํจํค์ง/์๋น์ค๊ฐ ๊ณต์กดํ๊ธฐ ๋๋ฌธ์, PR ์์ฑ ์ ์ด๋ ํจํค์ง์ ์ํฅ์ ์ฃผ๋์ง ํ์ธํ๊ณ ์ถ์๋ค.
๋ฌผ๋ก PR ์์ฑ์๊ฐ ์ง์ ์์ ๋ฒ์์ ๋ฐ๋ผ ๋ผ๋ฒจ์ ์ถ๊ฐ ํด์ค ์ ์์ง๋ง, ๋ชจ๋ ธ๋ ํฌ์ ํฌ๊ธฐ๊ฐ ์ปค์ง์๋ก ๋ฒ๊ฑฐ๋กญ๊ณ ์ค์ํ ๊ฐ๋ฅ์ฑ์ด ์ปค์ง๋ค.
๐ค ์คํ ๋ผ๋ฒจ๋ง ์ ์ฉ ๋ฐฉ๋ฒ
https://github.com/actions/labeler/tree/v2.0.0
actions/labeler (v2.0.0)๋ Pull Request(PR)์์ ๋ณ๊ฒฝ๋ ํ์ผ ๊ฒฝ๋ก๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋์ผ๋ก ๋ผ๋ฒจ์ ์ถ๊ฐํด์ฃผ๋ GitHub Actions์ด๋ค.
ํ๋ก์ ํธ์ ๊ตฌ์กฐ๊ฐ ์๋์ ๊ฐ์ ๋
apps/
web/ # ์น ํ๋ก ํธ์๋
mobile/ # ๋ชจ๋ฐ์ผ ์ฑ
packages/
ui/ # ๊ณตํต UI ์ปดํฌ๋ํธ
utils/ # ๊ณตํต ์ ํธ๋ฆฌํฐ
.github/labeler.yml ํ์ผ ์์ฑ ํ ์๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ค.
#.github/labeler.yml
partner:
- apps/web/**
user:
- apps/mobile/**
.github/labeler.yml์ ๋ผ๋ฒจ ์ด๋ฆ๊ณผ ๊ทธ ๋ผ๋ฒจ์ ์ ์ฉํ ํ์ผ ๊ฒฝ๋ก ํจํด(minimatch glob) ๋ชฉ๋ก์ ์์ฑํ๋ฉด, PR ์์ฑ ์ GitHub Actions๊ฐ ํด๋น PR์์ ๋ณ๊ฒฝ๋ ํ์ผ ๋ชฉ๋ก์ ํ์ธํ๋ค.
#.github/workflows/pr-label.yaml
name: Auto Label PR by Path
on:
pull_request:
types: [opened, synchronize, reopened]
permissions:
contents: read
pull-requests: write
jobs:
label:
runs-on: ubuntu-latest
steps:
- name: Run labeler
uses: actions/labeler@v2
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
์ด Github Actions๋ PR์ด ์์ฑ/์์ /์ฌ์คํ๋ ๋๋ง๋ค ๋ผ๋ฒจ๋ง ์์ ์ ์ํํ๋ค.
- opened: ์๋ก์ด Pull Request๊ฐ ์์ฑ๋์์ ๋ ์คํ
- synchronize: ๊ธฐ์กด PR์ ์๋ก์ด ์ปค๋ฐ์ด ์ถ๊ฐ๋์์ ๋ ์คํ
- reopened: ๋ซํ PR์ ๋ค์ ์ด์์ ๋ ์คํ
permissions:
contents: read
pull-requests: write
์ด ๋ ์์ ๊ฐ์ ๊ถํ ์ถ๊ฐ๊ฐ ํ์ํ๋ค.
- contents: read → ๋ ํฌ์งํ ๋ฆฌ ํ์ผ์ ์ฝ์ ์ ์์
- pull-requests: write → PR์ ๋ผ๋ฒจ์ ๋ถ์ด๊ฑฐ๋ ์์ ํ ์ ์๋ ๊ถํ์ ๋ถ์ฌ
steps:
- name: Run labeler
uses: actions/labeler@v2
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
- steps: job ์์์ ์คํํ ๋ช ๋ น ๋จ๊ณ ๋ชฉ๋ก
- uses: actions/labeler@v2: GitHub Actions ๋ง์ผํ๋ ์ด์ค์์ ์ ๊ณตํ๋ labeler ์ก์ v2๋ฅผ ์ฌ์ฉ
- with: ์ก์ ์ ์ ๋ ฅ๊ฐ(arguments)์ ์ ๋ฌํ๋ ๋ถ๋ถ
- repo-token: ${{ secrets.GITHUB_TOKEN }} (GitHub๊ฐ ์๋์ผ๋ก ์ ๊ณตํ๋ ๋ ํฌ ์ ์ฉ ํ ํฐ์ ์ฌ์ฉ) → ์ด ํ ํฐ ๋๋ถ์ PR์ ๋ผ๋ฒจ์ ๋ถ์ผ ์ ์์ (๊ถํ: pull-requests: write)
PR ์ด๋ฒคํธ ๋ฐ์ ์ .github/labeler.yml์์ ์ค์ ํ ๊ฒฝ๋ก์ ๋ณ๊ฒฝ์ฌํญ์ด ์์ผ ๋ ์๋์ผ๋ก ๋ผ๋ฒจ์ ์์ฑํด์ค๋ค.

๋๊ธ