概要
GitHubのリリースを自動生成するGitHub Actionsを紹介します。
GitHub リリースって使ってる?
OSSなど公に公開しているソフトウェアではGitHubリリースはもちろんよく使われますが、クローズドなリポジトリでは周りに聞いた感じではあまり活用されていないように感じます。
GitHubリリースをしっかり書いているとどのバージョンでどの機能がリリースされたのか、まとめられて見やすくなります。
GitHubリリースには Generate release notes
ボタンがあり、差分のPRを列挙してテンプレートを作成してくれます。
そのままで良ければサクっと作れますが、毎回整形しようとすると手間だし人の手で行うとやはり若干手間があります。
Gitシリーズ記事まとめ
利用ツール
リリースノートを生成するアクションが用意されています。
Release Drafter
実装
下記、2つのファイルを作成します。
-
.github/release-drafter.yaml
- Release Drafterの設定ファイル
-
.github/workflows/create-release-note.yaml
- Release Drafterのワークフロー
.github/release-drafter.yaml
.github/release-drafter.yaml
name-template: 'v$RESOLVED_VERSION'
tag-template: 'v$RESOLVED_VERSION'
categories:
- title: '🎉 リリース'
labels:
- 'release'
- title: '🚀 機能追加'
labels:
- 'feature'
- title: '🐛 バグ修正'
labels:
- 'bug'
- title: '📝 その他'
exclude-labels:
- 'ignore-for-release-note'
change-template: '- $TITLE @$AUTHOR (#$NUMBER)'
change-title-escapes: '\<*_&'
version-resolver:
major:
labels:
- 'major'
minor:
labels:
- 'minor'
default: patch
template: |
$CHANGES
footer: |
## 🌱 すべての変更点
https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...v$RESOLVED_VERSION
- name-template: リリースの名前(例: v1.2.3 など)
- tag-template: タグの名前(例: v1.2.3 など)
- リリース名とタグ名は同じでわかりやすいのでそのままでいいと思います
- categories: PRのラベル毎にグループ分けして一覧表示してくれます
- exclude-labels:
ignore-for-release-note
ラベルが付いているものはリリースノートから除外する- 除外したいPRがあると思わないが一応除外設定もできるよって
- change-template: プルリクタイトルの表示テンプレート
- change-title-escapes: プルリクのタイトル文字のエスケープ
- version-resolver: ラベルに応じてバージョニングする
-
major
ラベルが付いていた場合:v1.2.3
=>v2.0.0
-
minor
ラベルが付いていた場合:v1.2.3
=>v1.3.0
- ラベルがない場合:
v1.2.3
=>v1.2.4
-
- template:
categories
以外のプルリク一覧を表示する-
$CHANGES
: マージされたプルリクをマークダウン形式のリストで表示する
-
- footer: バージョン間の差分を見られるリンクを生成してる
ここにconfigのテストが置いてますが、書き方の例として使えるのでこちらを参考にすると良いです。
.github/workflows/create-release-note.yaml
.github/workflows/create-release-note.yaml
name: Create Release Note
on:
push:
branches: [main]
jobs:
release-draft:
permissions:
contents: write
pull-requests: read
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: release-drafter/release-drafter@v6
with:
config-name: release-drafter.yaml
commitish: main
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}