GitHubの自動生成リリースノート
GitHubにはタグ間のマージ済みPRを元にリリースノートを自動生成する機能がある。リリース作成画面の「Generate release notes」ボタン、またはPOST /repos/{owner}/{repo}/releases/generate-notes APIから使える。.github/release.ymlを置くことで、カテゴリ分けや除外ルールをカスタマイズできる。
.github/release.ymlの構造
ルート要素はchangelog:で、その下にexclude(グローバル除外)とcategories(カテゴリ分類)を書く。
changelog:
exclude:
labels:
- ignore-for-release
authors:
- bot-user
categories:
- title: 破壊的変更
labels:
- breaking-change
- title: 新機能
labels:
- enhancement
- feature
exclude:
labels:
- experimental
- title: バグ修正
labels:
- bug
- title: その他
labels:
- '*'
changelog.exclude(グローバル除外)
| キー | 内容 |
|---|---|
labels |
このラベルが付いたPRはリリースノートに一切載せない |
authors |
このユーザー/BotによるPRはリリースノートから除外(例: dependabot, github-actionsなど) |
changelog.categories(カテゴリ分類)
配列で、上から順に評価される。PRは最初にマッチしたカテゴリに1つだけ分類される。
| キー | 必須 | 内容 |
|---|---|---|
title |
✅ | カテゴリの見出し文字列 |
labels |
✅ | マッチ対象のラベル配列。'*'は「他のどのカテゴリにもマッチしなかったPR」を拾うワイルドカード(キャッチオール) |
exclude.labels |
- | そのカテゴリからさらに除外したいラベル |
exclude.authors |
- | そのカテゴリから除外したいユーザー/Bot |
上の例の「新機能」カテゴリのように、カテゴリ単位でexclude.labelsを指定すると、enhancementやfeatureラベルが付いていてもexperimentalラベルも同時に付いているPRはそのカテゴリから外せる(他のカテゴリにマッチしなければ「その他」に落ちる)。
補足:
- カテゴリのlabelsが空配列[]だと、ラベルなしPRにマッチする挙動になる。
- '*'は必ずクォートすること。YAML上クォートなしだとエイリアス構文と衝突する。
- 集計対象はタグ間のマージコミット(PR)ベース。