Changelog と GitHub Releases
tagpr はリリースノートの生成を GitHub に委任します。独自のプルリクエスト分類ルールを実装するのではなく、Generate release notes API を使います。
これにより、Git の生の履歴をコピーするより有用な出発点が得られます。プルリクエストのタイトルはユーザーに見える変更を説明し、ラベルでグループ化でき、メンテナーはリリース前に結果をレビューできます。tagpr は生成された Markdown を Keep a Changelog 形式の changelog エントリに変換します。
生成フロー
tagpr はリリースプルリクエストを準備するとき、次の情報を GitHub に渡します。
- 提案された次のタグ。
- 存在する場合は前回のリリースタグ。
- 設定されたリリースブランチ。
- リリースノート設定のパス。
GitHub は 2 つのバージョン間にあるプルリクエストとコントリビューターの生成リリースノートを返します。tagpr はそのノートを changelog エントリに変換し、生成されたノートをリリースプルリクエストの本文に含めます。
リリースプルリクエストのマージ後、tagpr は最終タグ用にノートを再生成し、返されたタイトルと本文を GitHub Release の作成時に使います。リリース作成前にノートを生成することで、リリースプルリクエスト自身がリリース済みの変更として含まれることも防ぎます。
生成ノートをカスタマイズする
GitHub はデフォルトで .github/release.yml または .github/release.yaml を読み取ります。このファイルでは次を定義できます。
- changelog のカテゴリと、プルリクエストをそこへ分類するラベル。
- リリースノートから除外するラベルと作成者。
- 分類されない変更に使うラベル。
完全なスキーマは GitHub の自動生成リリースノートのドキュメント を参照してください。
どちらのデフォルトファイルも存在しない場合、tagpr は初回実行時に次の最小設定を作成します。
changelog:
exclude:
labels:
- tagprこの除外により、tagpr 自身のリリースプルリクエストが生成された変更一覧から除外されます。
別の設定パスを使う
monorepo の各プロジェクトに独自のリリースノートルールが必要な場合は、tagpr.releaseYAMLPath を設定します。
# tools/.tagpr
[tagpr]
tagPrefix = tools
changelogFile = tools/CHANGELOG.md
releaseYAMLPath = tools/.github/release.ymlパスは .tagpr ファイルからではなく、リポジトリルートからの相対パスです。設定したファイルがリリースブランチに存在しない場合は、tagpr.releaseYAMLPath を設定する前に作成してコミットしてください。デフォルトの .github/release.yml とは異なり、カスタム設定パスが存在しない場合、リリースプルリクエストから自動的に用意することはできません。
制御ファイルとリリース作成
生成されたノートはいくつかの場所で使われますが、次の設定で tagpr が書き込む成果物を制御します。
tagpr.changelog = falseは changelog ファイルの作成または更新を停止する。tagpr.changelogFileはデフォルトのCHANGELOG.mdから changelog のパスを変更する。tagpr.release = trueは公開済み GitHub Release を作成する。tagpr.release = draftは draft の GitHub Release を作成する。tagpr.release = falseは GitHub Release を作成せずにタグを作成する。
changelog ファイルの更新または GitHub Release の作成を無効にしても、リリースプルリクエストの本文では GitHub の生成ノートが使われます。
タグ付け後にリリースアセットをビルドする必要がある場合は、immutable release を有効にする前に Immutable Releases の活用と連携 を参照してください。tagpr に draft の準備を任せるタイミングと、別のワークフローにリリース作成を委任するタイミングを説明しています。