はじめに
何かしらのプロダクトをリリースする際に
- リリースノート
- リリースタグ
を作成するのが一般的です
GitHub Actionsを使って
- 変更箇所
- 作業者
また、プロジェクトのバージョンが記載されたリリースタグを下記のように自動生成できます
今回はリリース用ワークフローの設定からreleaseブランチをmainブランチへマージ後にリリースノートが作成されるところまで解説します
GitHub Actionsの設定
以下のようなリポジトリ構成で設定ファイルを作成します
tree
.
└── .github
├── release-drafter.yml
└── workflows
└── release-drafter.yml
リリースノートのテンプレート作成
下記のように該当するラベルとブランチ名(autolabeler)に応じてカテゴリ化します
.github/release-drafter.yml
name-template: 'v$RESOLVED_VERSION 🌈'
tag-template: 'v$RESOLVED_VERSION'
categories:
- title: '🚀 Features'
labels:
- 'enhancement'
- title: '🐛 Bug Fixes'
labels:
- 'bug'
- 'emergency'
- title: '🔧 Refactoring'
label: 'refactor'
- title: '📖 Documentation'
label: 'documentation'
- title: '✅ Tests'
label: 'test'
change-template: '- $TITLE @$AUTHOR (#$NUMBER)'
change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks.
version-resolver:
major:
labels:
- 'major'
minor:
labels:
- 'minor'
patch:
labels:
- 'patch'
default: patch
template: |
## Changes
$CHANGES
autolabeler:
- label: enhancement
branch:
- '/^feat(ure)?[/-].+/'
- label: bug
branch:
- '/^fix[/-].+/'
- label: emergency
branch:
- '/^hotfix[/-].+/'
- label: test
branch:
- '/^test[/-].+/'
- label: refactor
branch:
- '/^refactor[/-].+/'
- label: documentation
branch:
- '/^doc[/-].+/'
リリースノート作成用ワークフロー
下記のように作成します
今回はmainブランチにリリースブランチがマージされたときに実行するよう設定します
.github/workflows/release-drafter.yml
name: Create Release Note
on:
pull_request:
# PRが閉じたタイミングで実行
types:
- closed
# mainブランチのみを対象とする
branches:
- main
permissions:
contents: read
jobs:
release:
permissions:
# write permission is required to create a github release
contents: write
# リリースノートを書くためwrite用のpermissionを付与
pull-requests: write
if: github.event.pull_request.merged == true && startsWith(github.head_ref, 'release')
runs-on: ubuntu-latest
steps:
- name: Create Release Tag And Note
env:
# このトークンは自動生成されるのでsecretsを登録する必要ない
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# PRのタイトルと内容をRelease内容に追加する
RELEASE_TAG: ${{ github.event.pull_request.title }}
uses: release-drafter/release-drafter@v5
with:
tag: ${{ env.RELEASE_TAG }}
name: Release ${{ env.RELEASE_TAG }}
version: ${{ env.RELEASE_TAG }}
publish: true
mainブランチへマージ
releaseブランチをmainへマージします
今回のリリースは1.0.0とします
マージ後
mainブランチへmerge後、下記のようにリリース用のリンクが作成されます
下記のようにリリースノートが作成されました
このように
- PRの作成者
- ラベルに応じたカテゴリーの割り振り
が記載されているリリースノートとリリースタグが作成されていることを確認できれば成功です
参考