GitHub Actions: tagpr の plan / apply モードで「タグを打つ前にテストと承認」を挟む
tagpr v1.22.0 で実験的な mode: plan / mode: apply が入った。リリース PR をマージしてもすぐタグを打たず、マージされたコミットをテストし、保護された environment の承認を通ってからタグを打てる。
使う場面
tagpr(リリース PR を自動で作り、マージされたらタグを打つツール)を使っていて、「マージ後のコミットでもう一度テストしたい」「タグを打つ(=リリースが走る)前に人の承認を入れたい」とき。従来の既定(auto)は、マージを検出した時点でタグを打つ。
やり方
ジョブを 3 つに分ける。
- plan:
mode: planで tagpr を動かす。リリース PR の作成・更新はいつも通り行い、マージ済みのリリース PR を見つけたときだけ、タグを打たずにplan出力(JSON)を出す。JSON にはtag(予定のタグ)、commit_sha(マージされたコミット)、base_tag、pull_request_numberなどが入る。 - test-release:
planが空でないときだけ動かし、fromJSON(needs.plan.outputs.plan).commit_shaをチェックアウトしてテストする。 - apply: テストが成功したら、承認が必要な environment(例:
release)の中でmode: applyを動かし、planに plan ジョブの出力をそのまま渡す。tagpr はリポジトリの状態と照らし合わせて確認してからタグを打つ。
yaml
jobs:
plan:
runs-on: ubuntu-latest
outputs:
plan: ${{ steps.plan.outputs.plan }}
steps:
- uses: actions/checkout@v6
- id: plan
uses: Songmu/tagpr@v1
with:
mode: plan
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
test-release:
needs: plan
if: needs.plan.outputs.plan != ''
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
with:
ref: ${{ fromJSON(needs.plan.outputs.plan).commit_sha }}
- run: go test ./...
apply:
needs: [plan, test-release]
if: needs.plan.outputs.plan != '' && needs.test-release.result == 'success'
runs-on: ubuntu-latest
environment: release # ここで承認待ちになる
steps:
- uses: actions/checkout@v6
- uses: Songmu/tagpr@v1
with:
mode: apply
plan: ${{ needs.plan.outputs.plan }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}(上は流れが分かるように縮めたもの。公式ガイドの完全な例は GitHub App のトークンを使い、permissions も細かく指定している。)
注意点
- 実験的機能。 plan / apply モードと JSON の形式は今後変わる可能性があると README に明記されている。
- 承認待ちの間に main が進んでもよいが、対象のコミットはリリースブランチの祖先である必要がある。
- 公式ガイドの例は
concurrencyにcancel-in-progress: falseを指定し、承認待ちの実行を残したまま、後から来た main への push を 1 つの待ち行列にまとめている。 GITHUB_TOKENで打ったタグは別のワークフローを起動しない。タグをきっかけに別のリリースワークフローを動かすなら GitHub App のトークンを使う(README の説明)。公式例が apply ジョブの中でトークンを作っているのは、承認後に初めてトークンが発行されるようにするため。- tagpr をモノレポで使う設定は GitHub Actions: actions/labeler でディレクトリ別ラベルを付け、モノレポのリリースノートを絞る(tagpr) を参照。
出典
- @songmu · 2026-11-03
- tagpr v1.22.0 リリースノート: github.com
- 公式ガイド「Test and approve before tagging」: github.com