コンテンツにスキップ
リリース準備コマンド

リリース準備コマンド

tagpr.commandtagpr.postVersionCommand は、リリースプルリクエスト内でプロジェクト固有のファイル変更を自動化します。メタデータの再生成、バージョン宣言の同期、依存関係ファイルの更新など、リリースタグを作成する前にレビューしてコミットすべき作業に使います。

これらのコマンドはリリースプルリクエストを準備するためのものです。リリースのタグ付け後には実行されず、パッケージの公開やアプリケーションのデプロイを目的としたものでもありません。そうした処理には Action の tag 出力を使ってください。

実行順序

tagpr がリリースプルリクエストを作成または更新するとき、関連する処理を次の順序で行います。

  1. 現在のバージョンと、提案する次のバージョンを決定する。
  2. tagpr.command を実行する。
  3. 設定されたすべてのバージョンファイルを更新する。
  4. tagpr.postVersionCommand を実行する。
  5. 必要に応じてリリースノート設定を作成する。
  6. 有効になっていれば changelog を生成して更新する。
  7. 生成された変更をリリースプルリクエストのブランチにコミットする。

リリースブランチが進んだ後に tagpr がリリースプルリクエストを更新すると、両方のフックが再度実行されます。そのため、コマンドは決定的で、繰り返し安全に実行できるようにしてください。

適切なフックを選ぶ

スクリプトを tagpr がバージョンファイルを変更する前に実行する場合は、tagpr.command を使います。

[tagpr]
    command = go generate ./...

提案されたバージョンを、更新済みのバージョンファイルから読み取る必要がある場合は、tagpr.postVersionCommand を使います。

[tagpr]
    postVersionCommand = ./scripts/update-release-metadata

両方のフックは環境変数を通じて提案されたバージョンを参照できます。そのため、バージョンファイルを読み取らなくても、バージョン更新前のコマンドで次のバージョンの内容を生成できます。

バージョン環境変数

tagpr はコマンド環境に次の変数を追加します。

変数説明
TAGPR_CURRENT_VERSION有効時に v を含む現在のバージョンv1.2.3
TAGPR_NEXT_VERSION有効時に v を含む提案された次のバージョンv1.3.0

monorepo では、これらの値に tagpr.tagPrefix は含まれません。たとえば完全なタグが tools/v1.3.0 のリリースでは、TAGPR_NEXT_VERSION=v1.3.0 が渡されます。

スクリプトの例:

#!/bin/sh
set -eu

printf '%s\n' "$TAGPR_NEXT_VERSION" > generated/release-version.txt
git add generated/release-version.txt

作業ディレクトリとパス

コマンドは tagpr の作業ディレクトリから実行されます。GitHub Action は GITHUB_WORKSPACE から tagpr を実行するため、選択した .tagpr ファイルがサブディレクトリにあっても、通常はリポジトリルートから実行されます。

tools/.tagpr にある monorepo 設定では、コマンドにプロジェクトのパスを含めます。

# tools/.tagpr
[tagpr]
    command = ./tools/scripts/prepare-release
    postVersionCommand = go run ./tools/cmd/update-metadata

リリースプルリクエストに含まれるファイル

追跡対象ファイルへの変更は検出され、リリースプルリクエストに含まれます。コマンドが追跡されていない新しいファイルを作成する場合は、tagpr が含められるようにコマンド内で git add を実行する必要があります。

生成物はリポジトリ内に置き、無関係なワーキングツリーの変更を作らないでください。コマンドは複数のファイルを変更または削除することがあります。

コマンドの出力と失敗

標準出力と標準エラーは tagpr のログに書き込まれます。

現在の実装では、コマンドのゼロ以外の終了ステータスは tagpr のエラーとして伝播されません。そのため、コマンドが失敗してもワークフローが続行することがあります。コマンド側で出力を検証し、メンテナーはマージ前に生成されたリリースプルリクエストと Action のログを確認してください。

タグ付け後のリリース

まだ存在しないタグに基づいてパッケージをアップロードするために、これらのフックを使わないでください。tagpr がタグを作成した後にリリースフローを実行するには、タグ付けとリリース で説明している Action の tag 出力を使います。