[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

GitHubRelease noteを自動化するためにはGitHub Actionsの中で1つである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を使って自動化してみてください。

私のブログが役に立ちましたか?下にコメントを残してください。それは私にとって大きな大きな力になります!

アプリ広報

今見てるブログを作成たDekuが開発したアプリを使ってみてください。
Dekuが開発したアプリはFlutterで開発されています。

興味がある方はアプリをダウンロードしてアプリを使ってくれると本当に助かります。

Posts