tagpr
Songmu/tagpr は、GitHub Actions上で動くリリース自動化ツール。「マージするだけでリリースが完了する」ワークフローを実現する。作者はSongmu氏(日本人のGo開発者)。
仕組み
- リリース対象ブランチ(通常main)へのpushを検知し、前回リリース以降の差分を検査する
- 差分があれば、次バージョン用の「リリース候補PR」を自動作成する(CHANGELOGやバージョンファイルの更新を含む)
- mainブランチが更新されるたびに、このリリース候補PRも自動で追従・更新される
- このPRをレビューしてマージすると、マージコミットに自動でタグを打ち、GitHub Releaseを生成する
セットアップ
.github/workflows/tagpr.ymlに以下のようなワークフローを置くだけ。
name: tagpr
on:
push:
branches: ["main"]
jobs:
tagpr:
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
issues: read
steps:
- uses: actions/checkout@v6
- uses: Songmu/tagpr@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
リポジトリ設定で「Allow GitHub Actions to create and approve pull requests」を有効にしておく必要がある。
設定は.tagpr(gitconfig形式)で管理し、初回実行時に自動生成される。主なオプション:
tagpr.releaseBranch— リリース対象ブランチtagpr.versionFile— バージョンを記録するファイル(カンマ区切りで複数指定可)tagpr.vPrefix— タグにv接頭辞を付けるかtagpr.changelog— CHANGELOGの自動生成有無tagpr.majorLabels/tagpr.minorLabels— バージョン判定に使うラベル
バージョニング
デフォルトはSemVer。リリースPRに付いたラベルで次バージョンを決定する。
tagpr:major/tagpr/majorラベル → メジャーバージョン上昇tagpr:minor/tagpr/minorラベル → マイナーバージョン上昇- ラベルなし → パッチバージョン上昇
個々のマージ済みPRにmajor/minorラベルが付いていれば、それがリリース候補PR側にも自動で継承される。Dependabotが付けたラベルは常に無視されるため、依存関係更新PRのマージで意図しないバージョン上昇が起きるのを防いでいる。
オプションでCalendar Versioning(tagpr.calendarVersioning)に切り替えることもできる。この場合ラベルは無視され、YYYY.MM0D.MICRO形式(例: v2026.1203.0)のバージョンが使われる。
release-pleaseとの違い
Google製のrelease-pleaseがConventional Commits規約に基づいてバージョンを自動判定するのに対し、tagprはPRラベルベースでバージョンを制御する。tagprはリリース内容が常にPRという形で可視化され、レビュー・承認を経てからリリースされる点が特徴。