GitHub Actions: actions/labeler でディレクトリ別ラベルを付け、モノレポのリリースノートを絞る(tagpr)
変更されたパスに応じて、PR にラベルを自動で付ける。ラベルが付いていれば、GitHub のリリースノート自動生成(.github/release.yml)でモジュールごとに PR を絞り込める。モノレポで tagpr を使っているなら、サブモジュールごとの CHANGELOG を正しく作れる。
どんな時に使う?
- 1 つのリポジトリに複数のモジュールやパッケージがあり、それぞれ別にバージョンを付けてリリースしている
- 自動生成したリリースノートや CHANGELOG に、他のモジュールの PR まで混ざってしまう
やり方
.github/labeler.yml(キーがラベル名、値がマッチ条件)yamltools: - changed-files: - any-glob-to-any-file: 'tools/**' docs: - changed-files: - any-glob-to-any-file: ['docs/**', '**/*.md']ブランチ名でも判定できる(
head-branch: ['^feature']など)。any/allで OR と AND を組み合わせられ、!で除外もできる。- ワークフロー
yaml
on: [pull_request_target] jobs: labeler: permissions: { contents: read, pull-requests: write } runs-on: ubuntu-latest steps: - uses: actions/labeler@v6 # 実運用では SHA で固定 - モジュール側の
release.ymlで、そのラベルの PR だけを拾うyaml# tools/.github/release.yml changelog: categories: - title: Changes labels: [tools] - tagpr はモジュールごとに設定ファイルを分ける。パスはリポジトリのルートから書く。
ini
# tools/.tagpr [tagpr] tagPrefix = tools versionFile = tools/package.json changelogFile = tools/CHANGELOG.md releaseYAMLPath = tools/.github/release.ymlワークフローでは
Songmu/tagpr@v1にwith: { config: tools/.tagpr }を渡す。タグはtools/v1.2.3の形になる。
注意点
pull_request_targetはベースブランチの権限で動く。labeler はチェックアウトしたコードを実行しないので安全だが、同じワークフローに PR のコードを動かすステップを足してはいけない(GitHub Actions: pull_request_target で PR のコードを checkout してビルドしない)。- v6 は Node 24 で動く。セルフホストランナーは v2.327.1 以上が必要。
release.ymlを指定しない場合、tagpr は初回に.github/release.ymlを作る。
出典
- @songmu · 2026-10-16
- actions/labeler README: github.com/actions/labeler
- Songmu/tagpr README(Monorepos / releaseYAMLPath): github.com/Songmu/tagpr