๐Ÿ“ GitHub Actions๋กœ CHANGELOG ์ž๋™ ์ƒ์„ฑํ•˜๋Š” ์™„๋ฒฝ ๊ฐ€์ด๋“œ

โ€ข

GitHub Actions๋กœ CHANGELOG ์ž๋™ ์ƒ์„ฑํ•˜๋Š” ์™„๋ฒฝ ๊ฐ€์ด๋“œ

์ปค๋ฐ‹ ๋‚ด์—ญ์„ ์ผ์ผ์ด ํ™•์ธํ•˜๊ณ , ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ •๋ฆฌํ•˜๊ณ , ๋ฒ„์ „๋ณ„๋กœ ๋ถ„๋ฅ˜ํ•˜๋Š” ์ž‘์—…์€ ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ ค์š”.

์ด ๊ธ€์—์„œ๋Š” GitHub Actions๋ฅผ ์‚ฌ์šฉํ•ด์„œ CHANGELOG ์ƒ์„ฑ์„ ์™„์ „ํžˆ ์ž๋™ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค. Conventional Commits ๊ทœ์น™๊ณผ ์ž๋™ํ™” ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋ฆด๋ฆฌ์ฆˆ๋งˆ๋‹ค ๊น”๋”ํ•œ CHANGELOG๊ฐ€ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ ธ์š”.

์ด ๊ธ€์€ GitHub Actions๋ฅผ ํ•œ ๋ฒˆ์ด๋ผ๋„ ์‚ฌ์šฉํ•ด๋ณธ ๊ฐœ๋ฐœ์ž๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

์™œ CHANGELOG๋ฅผ ์ž๋™ํ™”ํ•ด์•ผ ํ• ๊นŒ์š”?

์ˆ˜๋™์œผ๋กœ CHANGELOG๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒจ์š”.

์‹œ๊ฐ„ ๋‚ญ๋น„์™€ ์‹ค์ˆ˜

๋ฆด๋ฆฌ์ฆˆ๋งˆ๋‹ค ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ํ™•์ธํ•˜๊ณ  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ •๋ฆฌํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์ด ๊ฑธ๋ ค์š”. ์ค‘์š”ํ•œ ์ปค๋ฐ‹์„ ๋†“์น˜๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ ์ •๋ณด๋ฅผ ๊ธฐ๋กํ•  ์ˆ˜๋„ ์žˆ์ฃ .

์ผ๊ด€์„ฑ ๋ถ€์กฑ

์ž‘์„ฑ์ž๋งˆ๋‹ค ํ˜•์‹์ด ๋‹ฌ๋ผ์ง€๊ณ , ์ค‘์š”๋„ ํŒ๋‹จ์ด ๋‹ฌ๋ผ์ ธ์š”. ํŒ€์›๋“ค์ด CHANGELOG๋ฅผ ์‹ ๋ขฐํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ž๋™ํ™”์˜ ์ด์ 

GitHub Actions๋กœ ์ž๋™ํ™”ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์ ์ด ์žˆ์–ด์š”.

  • ๋ฆด๋ฆฌ์ฆˆ๋งˆ๋‹ค ์ผ๊ด€๋œ ํ˜•์‹์˜ CHANGELOG ์ƒ์„ฑ
  • ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž๋™ ๋ถ„๋ฅ˜ (์ƒˆ ๊ธฐ๋Šฅ, ๋ฒ„๊ทธ ์ˆ˜์ •, ๋ฌธ์„œ ๋“ฑ)
  • ๋ฒ„์ „ ํƒœ๊ทธ์™€ ํ•จ๊ป˜ ์ž๋™์œผ๋กœ GitHub Release ์ƒ์„ฑ
  • ๊ฐœ๋ฐœ์ž๋Š” ์ฝ”๋“œ์—๋งŒ ์ง‘์ค‘ํ•˜๊ณ  CHANGELOG๋Š” ์ž๋™์œผ๋กœ ๊ด€๋ฆฌ

Conventional Commits ๊ทœ์น™ ๋น ๋ฅด๊ฒŒ ์ดํ•ดํ•˜๊ธฐ

CHANGELOG ์ž๋™ํ™”์˜ ํ•ต์‹ฌ์€ Conventional Commits ๊ทœ์น™์ด์—์š”. ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ผ์ •ํ•œ ํ˜•์‹์œผ๋กœ ์ž‘์„ฑํ•˜๋ฉด ์ž๋™ํ™” ๋„๊ตฌ๊ฐ€ ์ด๋ฅผ ํŒŒ์‹ฑํ•ด์„œ CHANGELOG๋ฅผ ์ƒ์„ฑํ•ด์š”.

์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ํ˜•์‹

๊ธฐ๋ณธ ํ˜•์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•„์š”.

<ํƒ€์ž…>(<๋ฒ”์œ„>): <์ œ๋ชฉ>

<๋ณธ๋ฌธ>

<ํ‘ธํ„ฐ>

ํƒ€์ž…์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์˜ ์ข…๋ฅ˜๋ฅผ ๋‚˜ํƒ€๋‚ด์š”.

  • feat - ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€
  • fix - ๋ฒ„๊ทธ ์ˆ˜์ •
  • docs - ๋ฌธ์„œ ๋ณ€๊ฒฝ
  • style - ์ฝ”๋“œ ํฌ๋งทํŒ…, ์„ธ๋ฏธ์ฝœ๋ก  ๋ˆ„๋ฝ ๋“ฑ (๊ธฐ๋Šฅ ๋ณ€๊ฒฝ ์—†์Œ)
  • refactor - ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง
  • test - ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ ๋˜๋Š” ์ˆ˜์ •
  • chore - ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค, ๋„๊ตฌ ์„ค์ • ๋ณ€๊ฒฝ

๋ฒ”์œ„๋Š” ์„ ํƒ ์‚ฌํ•ญ์ด๋ฉฐ, ๋ณ€๊ฒฝ๋œ ๋ชจ๋“ˆ์ด๋‚˜ ํŒŒ์ผ์„ ๋‚˜ํƒ€๋‚ด์š”.

์ œ๋ชฉ์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•ด์š”.

์‹ค์ œ ์‚ฌ์šฉ ์˜ˆ์‹œ

๋‹ค์Œ์€ ์‹ค์ œ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์˜ˆ์‹œ์˜ˆ์š”.

feat(auth): ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฉ”์ผ๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Closes #123
fix(api): ์‚ฌ์šฉ์ž ์กฐํšŒ API ๋ฒ„๊ทธ ์ˆ˜์ •

null ์ฒดํฌ ๋ˆ„๋ฝ์œผ๋กœ ์ธํ•œ 500 ์—๋Ÿฌ๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
docs: README์— ์„ค์น˜ ๊ฐ€์ด๋“œ ์ถ”๊ฐ€

Breaking Change ํ‘œ์‹œํ•˜๊ธฐ

ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ๊นจ๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ํ‘ธํ„ฐ์— BREAKING CHANGE:๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ํƒ€์ž… ๋’ค์— !๋ฅผ ๋ถ™์—ฌ์š”.

feat!: API ์‘๋‹ต ํ˜•์‹ ๋ณ€๊ฒฝ

BREAKING CHANGE: API ์‘๋‹ต์ด { data } ํ˜•์‹์œผ๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

GitHub Actions ์›Œํฌํ”Œ๋กœ์šฐ ์ž‘์„ฑํ•˜๊ธฐ

์ด์ œ CHANGELOG๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” GitHub Actions ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋งŒ๋“ค์–ด๋ณผ๊ฒŒ์š”.

์›Œํฌํ”Œ๋กœ์šฐ ํŒŒ์ผ ์ƒ์„ฑ

ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— .github/workflows/ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ  release.yml ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์„ธ์š”.

mkdir -p .github/workflows
touch .github/workflows/release.yml

ํŠธ๋ฆฌ๊ฑฐ ์„ค์ •

์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ ์‹คํ–‰๋  ์‹œ์ ์„ ์ •์˜ํ•ด์š”. ์ผ๋ฐ˜์ ์œผ๋กœ main ๋ธŒ๋žœ์น˜์— ํ‘ธ์‹œ๋  ๋•Œ ๋˜๋Š” ์ˆ˜๋™์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์„ค์ •ํ•ด์š”.

# .github/workflows/release.yml
name: Release

on:
  push:
    branches:
      - main
  workflow_dispatch: # ์ˆ˜๋™ ์‹คํ–‰ ํ—ˆ์šฉ

CHANGELOG ์ž๋™ ์ƒ์„ฑ ๊ตฌํ˜„

CHANGELOG๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€์˜ˆ์š”. standard-version๊ณผ release-please ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์–ด์š”.

๋ฐฉ๋ฒ• 1 - standard-version ์‚ฌ์šฉ

standard-version์€ Conventional Commits ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฒ„์ „์„ ์˜ฌ๋ฆฌ๊ณ  CHANGELOG๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋„๊ตฌ์˜ˆ์š”.

์žฅ์ 

  • ๊ฐ„๋‹จํ•œ ์„ค์ •
  • npm ํ”„๋กœ์ ํŠธ์— ์ตœ์ ํ™”
  • ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ๊ฐ€๋Šฅ

์ „์ฒด ์›Œํฌํ”Œ๋กœ์šฐ

# .github/workflows/release.yml
name: Release

on:
  workflow_dispatch: # ์ˆ˜๋™ ์‹คํ–‰

jobs:
  release:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout ์ฝ”๋“œ
        uses: actions/checkout@v4
        with:
          fetch-depth: 0 # ์ „์ฒด ํžˆ์Šคํ† ๋ฆฌ ๊ฐ€์ ธ์˜ค๊ธฐ
          token: ${{ secrets.GITHUB_TOKEN }}

      - name: Node.js ์„ค์ •
        uses: actions/setup-node@v4
        with:
          node-version: "20"

      - name: ์˜์กด์„ฑ ์„ค์น˜
        run: npm install

      - name: Git ์„ค์ •
        run: |
          git config user.name "github-actions[bot]"
          git config user.email "github-actions[bot]@users.noreply.github.com"

      - name: standard-version ์‹คํ–‰
        run: npx standard-version

      - name: ๋ณ€๊ฒฝ์‚ฌํ•ญ ํ‘ธ์‹œ
        run: |
          git push --follow-tags origin main
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: GitHub Release ์ƒ์„ฑ
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: ${{ github.ref }}
          release_name: Release ${{ github.ref }}
          body_path: CHANGELOG.md

standard-version์„ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์ด ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰๋ผ์š”.

  1. ์ด์ „ ๋ฒ„์ „ ์ดํ›„์˜ ๋ชจ๋“  ์ปค๋ฐ‹ ๋ถ„์„
  2. Conventional Commits ๊ทœ์น™์— ๋”ฐ๋ผ ๋ฒ„์ „ ๊ฒฐ์ • (major, minor, patch)
  3. CHANGELOG.md ์—…๋ฐ์ดํŠธ
  4. package.json ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ
  5. Git ํƒœ๊ทธ ์ƒ์„ฑ

๋ฐฉ๋ฒ• 2 - release-please ์‚ฌ์šฉ

release-please๋Š” Google์—์„œ ๋งŒ๋“  ์ž๋™ํ™” ๋„๊ตฌ๋กœ, Pull Request ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฆด๋ฆฌ์ฆˆ๋ฅผ ๊ด€๋ฆฌํ•ด์š”.

์žฅ์ 

  • PR๋กœ ๋ฆด๋ฆฌ์ฆˆ ๊ฒ€ํ†  ๊ฐ€๋Šฅ
  • ์—ฌ๋Ÿฌ ์–ธ์–ด ์ง€์› (Node.js, Python, Go ๋“ฑ)
  • ์ž๋™์œผ๋กœ GitHub Release ์ƒ์„ฑ

์ „์ฒด ์›Œํฌํ”Œ๋กœ์šฐ

# .github/workflows/release-please.yml
name: Release Please

on:
  push:
    branches:
      - main

permissions:
  contents: write
  pull-requests: write

jobs:
  release-please:
    runs-on: ubuntu-latest

    steps:
      - uses: google-github-actions/release-please-action@v4
        with:
          release-type: node # ํ”„๋กœ์ ํŠธ ํƒ€์ž… (node, python, go ๋“ฑ)
          package-name: my-package # ํŒจํ‚ค์ง€ ์ด๋ฆ„

release-please๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋™์ž‘ํ•ด์š”.

  1. main ๋ธŒ๋žœ์น˜์— ํ‘ธ์‹œ๋  ๋•Œ๋งˆ๋‹ค ์‹คํ–‰
  2. Conventional Commits ๋ถ„์„
  3. Release PR ์ƒ์„ฑ (CHANGELOG ๋ฏธ๋ฆฌ๋ณด๊ธฐ ํฌํ•จ)
  4. Release PR์ด ๋จธ์ง€๋˜๋ฉด ์ž๋™์œผ๋กœ ํƒœ๊ทธ ์ƒ์„ฑ ๋ฐ GitHub Release ์ƒ์„ฑ

์–ด๋–ค ๋ฐฉ๋ฒ•์„ ์„ ํƒํ• ๊นŒ?

standard-version์€ ๊ฐ„๋‹จํ•œ ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉํ•˜๊ณ , release-please๋Š” ๋ฆด๋ฆฌ์ฆˆ ์ „ ๊ฒ€ํ† ๊ฐ€ ํ•„์š”ํ•œ ํŒ€ ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉํ•ด์š”.

  • ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ, ๋น ๋ฅธ ๋ฆด๋ฆฌ์ฆˆ โ†’ standard-version
  • ํŒ€ ํ”„๋กœ์ ํŠธ, ๋ฆด๋ฆฌ์ฆˆ ๊ฒ€ํ†  ํ•„์š” โ†’ release-please

๊ณ ๊ธ‰ ์„ค์ •

CHANGELOG ํ…œํ”Œ๋ฆฟ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•

standard-version์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ .versionrc.json ํŒŒ์ผ๋กœ CHANGELOG ํ…œํ”Œ๋ฆฟ์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•  ์ˆ˜ ์žˆ์–ด์š”.

// .versionrc.json
{
  "types": [
    { "type": "feat", "section": "โœจ Features" },
    { "type": "fix", "section": "๐Ÿ› Bug Fixes" },
    { "type": "docs", "section": "๐Ÿ“ Documentation" },
    { "type": "style", "section": "๐Ÿ’„ Styles" },
    { "type": "refactor", "section": "โ™ป๏ธ Code Refactoring" },
    { "type": "perf", "section": "โšก๏ธ Performance Improvements" },
    { "type": "test", "section": "โœ… Tests" },
    { "type": "chore", "section": "๐Ÿ”ง Chores" }
  ],
  "commitUrlFormat": "{{host}}/{{owner}}/{{repository}}/commit/{{hash}}",
  "compareUrlFormat": "{{host}}/{{owner}}/{{repository}}/compare/{{previousTag}}...{{currentTag}}"
}

์ด ์„ค์ •์„ ์‚ฌ์šฉํ•˜๋ฉด CHANGELOG์— ์ด๋ชจ์ง€์™€ ํ•œ๊ธ€ ์„น์…˜ ์ œ๋ชฉ์ด ์ถ”๊ฐ€๋ผ์š”.

PR์— CHANGELOG ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ถ”๊ฐ€

release-please๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Release PR์— ์ž๋™์œผ๋กœ CHANGELOG ๋ฏธ๋ฆฌ๋ณด๊ธฐ๊ฐ€ ์ถ”๊ฐ€๋ผ์š”. ๋ณ„๋„ ์„ค์ •์ด ํ•„์š” ์—†์–ด์š”.

standard-version์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ถ”๊ฐ€ ์•ก์…˜์„ ์‚ฌ์šฉํ•ด์„œ PR์— ์ฝ”๋ฉ˜ํŠธ๋กœ CHANGELOG๋ฅผ ๋‹ฌ ์ˆ˜ ์žˆ์–ด์š”.

# .github/workflows/preview-changelog.yml
name: Preview CHANGELOG

on:
  pull_request:
    branches:
      - main

jobs:
  preview:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Generate preview
        run: |
          npx standard-version --dry-run > changelog-preview.txt

      - name: Comment PR
        uses: actions/github-script@v7
        with:
          script: |
            const fs = require('fs');
            const preview = fs.readFileSync('changelog-preview.txt', 'utf8');
            github.rest.issues.createComment({
              issue_number: context.issue.number,
              owner: context.repo.owner,
              repo: context.repo.repo,
              body: `## CHANGELOG Preview\n\n\`\`\`\n${preview}\n\`\`\``
            });

ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

์ปค๋ฐ‹ ์ปจ๋ฒค์…˜ ๋ฏธ์ค€์ˆ˜ ๋ฌธ์ œ

ํŒ€์›๋“ค์ด Conventional Commits ๊ทœ์น™์„ ๋”ฐ๋ฅด์ง€ ์•Š์œผ๋ฉด CHANGELOG๊ฐ€ ์ œ๋Œ€๋กœ ์ƒ์„ฑ๋˜์ง€ ์•Š์•„์š”.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

Husky์™€ commitlint๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฒ€์ฆํ•˜์„ธ์š”.

npm install --save-dev @commitlint/cli @commitlint/config-conventional husky
// commitlint.config.js
module.exports = {
  extends: ["@commitlint/config-conventional"],
};
# Husky ์„ค์ •
npx husky init
echo "npx --no -- commitlint --edit \$1" > .husky/commit-msg

์ด์ œ ๊ทœ์น™์— ๋งž์ง€ ์•Š๋Š” ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋Š” ์ž๋™์œผ๋กœ ๊ฑฐ๋ถ€๋ผ์š”.

๊ถŒํ•œ ์˜ค๋ฅ˜ (GITHUB_TOKEN)

์›Œํฌํ”Œ๋กœ์šฐ์—์„œ Git ํ‘ธ์‹œ๋‚˜ Release ์ƒ์„ฑ ์‹œ ๊ถŒํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด์š”.

Error: Resource not accessible by integration

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

์›Œํฌํ”Œ๋กœ์šฐ ํŒŒ์ผ์— permissions๋ฅผ ๋ช…์‹œํ•˜์„ธ์š”.

permissions:
  contents: write
  pull-requests: write

๋˜๋Š” GitHub ์ €์žฅ์†Œ Settings > Actions > General > Workflow permissions์—์„œ "Read and write permissions"๋ฅผ ํ™œ์„ฑํ™”ํ•˜์„ธ์š”.

์ฃผ์˜

GITHUB_TOKEN์€ ์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ ์‹คํ–‰๋  ๋•Œ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋ผ์š”. ๋ณ„๋„๋กœ ์‹œํฌ๋ฆฟ์„ ์ถ”๊ฐ€ํ•  ํ•„์š”๊ฐ€ ์—†์–ด์š”.

๋งˆ๋ฌด๋ฆฌ

GitHub Actions๋กœ CHANGELOG๋ฅผ ์ž๋™ํ™”ํ•˜๋ฉด ๋ฆด๋ฆฌ์ฆˆ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ›จ์”ฌ ํšจ์œจ์ ์œผ๋กœ ๋ณ€ํ•ด์š”. ํ•ต์‹ฌ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์•„์š”.

  • Conventional Commits ๊ทœ์น™ ์ค€์ˆ˜: feat, fix, docs ๋“ฑ์˜ ํƒ€์ž…์œผ๋กœ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์ž‘์„ฑ
  • ์ž๋™ํ™” ๋„๊ตฌ ์„ ํƒ: ๊ฐ„๋‹จํ•œ ํ”„๋กœ์ ํŠธ๋Š” standard-version, ํŒ€ ํ”„๋กœ์ ํŠธ๋Š” release-please ์ถ”์ฒœ
  • GitHub Actions ์›Œํฌํ”Œ๋กœ์šฐ: main ๋ธŒ๋žœ์น˜ ํ‘ธ์‹œ ๋˜๋Š” ์ˆ˜๋™ ํŠธ๋ฆฌ๊ฑฐ๋กœ CHANGELOG ์ž๋™ ์ƒ์„ฑ
  • ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ๊ฒ€์ฆ: commitlint๋กœ ๊ทœ์น™์„ ๊ฐ•์ œํ•˜์—ฌ ์ผ๊ด€์„ฑ ์œ ์ง€

์‹ค๋ฌด ์ ์šฉ ํŒ

  1. ์ฒ˜์Œ์—๋Š” release-please๋กœ ์‹œ์ž‘ํ•ด์„œ PR๋กœ ๋ฆด๋ฆฌ์ฆˆ๋ฅผ ๊ฒ€ํ† ํ•˜์„ธ์š”
  2. ํŒ€์›๋“ค์—๊ฒŒ Conventional Commits ๊ฐ€์ด๋“œ๋ฅผ ๊ณต์œ ํ•˜์„ธ์š”
  3. .versionrc.json์œผ๋กœ CHANGELOG ํ˜•์‹์„ ํŒ€ ์Šคํƒ€์ผ์— ๋งž๊ฒŒ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•˜์„ธ์š”
  4. ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ์— ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ฐ€์ด๋“œ๋‚˜ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ถ”๊ฐ€๋กœ ์ž‘์„ฑํ•˜์„ธ์š”

์ด์ œ ์ˆ˜๋™์œผ๋กœ CHANGELOG๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์ˆ˜๊ณ ๋ฅผ ๋œ๊ณ  ์ฝ”๋“œ ์ž‘์„ฑ์— ์ง‘์ค‘ํ•˜์„ธ์š”!

์™ธ๋ถ€ ๋งํฌ