[GitHub Actions] Changelog 파일 자동 업데이트하기

[GitHub Actions] Changelog 파일 자동 업데이트하기

2023-05-25 hit count image

GitHub Actions의 changelog-updater Action를 사용하여 Release note에 작성된 내용을 자동으로 CHANGELOG.md 파일로 복사하는 방법에 대해서 알아보도록 하겠습니다.

개요

GitHub에서 프로젝트를 관리하고 배포하는 경우, Release note 기능을 활용하게 됩니다.

GitHub Actions changelog-updater-action: GitHub release note

하지만, GitHub가 아닌 곳에서는 이 Release note를 활용할 수 없으므로, CHANGELOG.md 파일을 만들고 따로 관리하기도 합니다.

이번 블로그 포스트에서는 GitHub Actionschangelog-updater Action를 사용하여 GitHubRelease note에 작성된 내용을 자동으로 CHANGELOG.md 파일로 복사하는 방법에 대해서 알아보도록 하겠습니다.

블로그 시리즈

이 블로그는 시리즈로 제작되었습니다. 다음 링크를 통해 다른 블로그 포스트도 확인해 보시기 바랍니다.

changelog-updater Action

changelog-updater ActionGitHub의 마지막 Release noteCHANGELOG.md 파일로 복사하는 GitHub Actions입니다.

changelog-updater Action를 사용하기 위해 .github/workflows/update-changelog.yml 파일을 만들고 다음과 같이 수정합니다.

name: Update Changelog

on:
  release:
    types:
      - released

jobs:
  update:
    name: Update Changelog
    runs-on: ubuntu-latest
    permissions:
      contents: write

    steps:
      - name: Checkout code
        uses: actions/[email protected]
        with:
          ref: $

      - name: Update Changelog
        uses: stefanzweifel/[email protected]
        with:
          latest-version: $
          release-notes: $

      - name: Commit updated Changelog
        uses: stefanzweifel/[email protected]
        with:
          branch: $
          commit_message: 'docs: Update changelog'
          file_pattern: CHANGELOG.md

이와 같이 작성하면, Release note가 배포되면, 배포된 내용을 CHANGELOG.md 파일로 복사하게 됩니다. 물론, git로 관리하는 파일을 수정하는 것이므로, commit_message를 사용하여 commit을 하게 됩니다.

CHANGELOG.md 파일

changelog-update Action을 사용하여 CHANGELOG.md 파일을 업데이트하기 위해서는, CHANGELOG.md 파일이 존재해야 합니다. CHANGELOG.md 파일을 만들고 다음과 같이 수정합니다.

# Changelog

changelog-update Action을 사용하여 CHANGELOG.md 파일을 업데이트하기 위해서는, CHANGELOG.md 파일이 존재해야 하며, 하나 이상의 heading이 존재해야 합니다.

이번 블로그 포스트에서는 # Changelog을 사용하였습니다.

이제 Release notereleased되면, CHANGELOG.md 파일이 다음과 같이 업데이트 되는 것을 확인할 수 있습니다.

GitHub Actions changelog-updater-action: CHANGELOG.md

Release Drafter

GitHub에서 Release note를 자동화하기 위한 GitHub Actions중 하나인 Release Drafter를 사용할 수 있습니다. Release Drafter를 사용하는 방법에 대해서는 다음 링크를 참고하시기 바랍니다.

Release Drafter와 사용할 때에는 주의해서 사용해야 합니다. 자세한 내용은 아래 링크를 참고하시기 바랍니다.

저의 경우는 다음과 같이 Git Tag가 추가되었을 때, Release note 내용을 CHANGELOG.md 파일로 복사 한 후, Release note를 배포하도록 하였습니다.

name: Release

on:
  push:
    tags:
      - 'v[0-9]+.[0-9]+.[0-9]+'

jobs:
  release:
    permissions:
      contents: write
      pull-requests: write
      id-token: write
    runs-on: ubuntu-latest
    steps:
      - name: Get semantic version
        id: semver
        run: echo "::set-output name=version::${GITHUB_REF#refs/tags/v}"

      - uses: actions/[email protected]
        with:
          ref: v$

      - uses: release-drafter/[email protected]
        id: target_release_notes
        with:
          tag: $
          name: $
          version: $
        env:
          GITHUB_TOKEN: $

      - name: Update Changelog
        uses: stefanzweifel/[email protected]
        with:
          latest-version: $
          release-notes: $

      - name: Commit updated Changelog
        uses: stefanzweifel/[email protected]
        with:
          commit_message: 'docs: Update changelog'
          file_pattern: CHANGELOG.md
          branch: main

      - uses: dart-lang/[email protected]
      - name: Install dependencies
        run: dart pub get

      - name: Update version
        run: dart run bull pub_version --version=$

      - name: Commit updated pubspec
        uses: stefanzweifel/[email protected]
        with:
          commit_message: 'chore: Update version for release'
          file_pattern: pubspec.yaml
          branch: main

      - name: Update Git tag
        run: |
          git tag $ -f
          git push origin $ -f

      - uses: release-drafter/[email protected]
        with:
          tag: $
          name: $
          version: $
          publish: true
        env:
          GITHUB_TOKEN: $

      - name: Publish
        run: dart pub publish --force

이 코드는 Flutter 패키지를 배포하는 GitHub Actions를 포함하고 있습니다. 따라서 이 부분이 불필요하신 분들은 다음 코드를 자신의 상황에 맞게 수정하여 사용하시면 됩니다.

name: Release

on:
  push:
    tags:
      - 'v[0-9]+.[0-9]+.[0-9]+'

jobs:
  release:
    permissions:
      contents: write
      pull-requests: write
      id-token: write
    runs-on: ubuntu-latest
    steps:
      - name: Get semantic version
        id: semver
        run: echo "::set-output name=version::${GITHUB_REF#refs/tags/v}"

      - uses: actions/[email protected]
        with:
          ref: v$

      - uses: release-drafter/[email protected]
        id: target_release_notes
        with:
          tag: $
          name: $
          version: $
        env:
          GITHUB_TOKEN: $

      - name: Update Changelog
        uses: stefanzweifel/[email protected]
        with:
          latest-version: $
          release-notes: $

      - name: Commit updated Changelog
        uses: stefanzweifel/[email protected]
        with:
          commit_message: 'docs: Update changelog'
          file_pattern: CHANGELOG.md
          branch: main

      ...

      - name: Commit updated pubspec
        uses: stefanzweifel/[email protected]
        with:
          commit_message: 'chore: Update version for release'
          file_pattern: pubspec.yaml
          branch: main

      - name: Update Git tag
        run: |
          git tag $ -f
          git push origin $ -f

      - uses: release-drafter/[email protected]
        with:
          tag: $
          name: $
          version: $
          publish: true
        env:
          GITHUB_TOKEN: $

      ...

만약 Flutter 패키지를 제작하고 배포하는 방법에 대해서는 다음 링크를 참고하시기 바랍니다.

완료

이것으로 GitHub Actionschangelog-updater Action을 사용하여 GitHubRelease note에 작성된 내용을 CHANGELOG.md 파일에 자동으로 복사하는 방법에 대해서 알아보았습니다. GitHubRelease note도 사용하고 CHANGELOG.md 파일도 사용한다면, changelog-updater Action를 통해 자동화를 시도해 보시기 바랍니다.

제 블로그가 도움이 되셨나요? 하단의 댓글을 달아주시면 저에게 큰 힘이 됩니다!

앱 홍보

책 홍보

스무디 한 잔 마시며 끝내는 React Native 책을 출판한지 벌써 2년이 다되었네요.
이번에도 좋은 기회가 있어서 스무디 한 잔 마시며 끝내는 리액트 + TDD 책을 출판하게 되었습니다.

아래 링크를 통해 제가 쓴 책을 구매하실 수 있습니다.
많은 분들에게 도움이 되면 좋겠네요.

스무디 한 잔 마시며 끝내는 React Native, 비제이퍼블릭
스무디 한 잔 마시며 끝내는 리액트 + TDD, 비제이퍼블릭
Posts