본문 바로가기
C.W.K.
Stream
Lesson 08 of 13 · published

릴리스 생성

~11 min · releases, tags, changelog

Level 0견습생
0 XP0/101 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

태그 기반 릴리스 파이프라인

표준 릴리스 흐름을 살펴보자. v1.4.2 같은 태그를 푸시하면 워크플로가 실행되고, 릴리스 아티팩트를 빌드한 뒤 GitHub Releases, npm, PyPI, ghcr에 게시하고 변경 이력도 함께 올린다.

구성요소

  1. 태그 — 로컬에서 git tag v1.4.2 && git push --tags를 실행하거나 GitHub UI에서 만든다.
  2. 릴리스 워크플로on: push: tags: ['v*.*.*'] 조건을 감지한다.
  3. 빌드 — 릴리스 아티팩트를 만들어낸다.
  4. 변경 이력 — release-please, changesets, conventional-changelog로 자동 생성하거나 직접 작성한다.
  5. GitHub Releasesoftprops/action-gh-release 액션이나 gh release create CLI로 생성한다.
  6. 배포 게시 — 같은 워크플로에서 npm, PyPI, ghcr.io 등으로 배포한다.

자동화 수준

상황에 맞춰 자동화 범위를 선택해 봐:

  • 수동 태그 — 직접 git tag를 입력한다. 가장 단순한 방식이다.
  • release-please(Google) — '릴리스' 커밋을 자동으로 PR로 올려주고, PR 병합 시 태그를 생성한다.
  • changesets(npm 중심) — 기여자가 changeset 파일을 작성하면 CI가 모아서 태그를 단다.
  • semantic-release — 컨벤셔널 커밋 기반으로 완전 자동화한다.

Code

태그 푸시의 릴리스 워크플로·yaml
name: release
on:
  push:
    tags: ['v*.*.*']
permissions:
  contents: write   # to create the GitHub Release
  id-token: write   # for trusted publishing to PyPI

jobs:
  release:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with: { fetch-depth: 0 }
      - uses: astral-sh/setup-uv@v3
      - run: uv build
      - name: Generate changelog
        id: changelog
        run: |
          # Crude: list commits since the previous tag
          previous=$(git tag --sort=-creatordate | sed -n 2p)
          {
            echo 'log<<EOF'
            git log --pretty='- %s (%h)' "$previous"..HEAD
            echo 'EOF'
          } >> $GITHUB_OUTPUT
      - uses: softprops/action-gh-release@v2
        with:
          files: dist/*
          body: '${{ steps.changelog.outputs.log }}'
      - name: Publish to PyPI (trusted)
        uses: pypa/gh-action-pypi-publish@release/v1

External links

Exercise

샌드박스 저장소에 릴리스 워크플로를 설정해 보자. 로컬에서 v0.1.0 태그를 푸시하면 워크플로가 태그 커밋 로그와 함께 GitHub Release를 생성하는 걸 확인해. 그다음 버전을 v0.1.1로 올리고, 변경 이력이 새 커밋만으로 좁혀지는지 검사해 봐.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.