テック技報最新号へ →
コード

GitHub Actions: actions/labeler でディレクトリ別ラベルを付け、モノレポのリリースノートを絞る(tagpr)

変更されたパスに応じて、PR にラベルを自動で付ける。ラベルが付いていれば、GitHub のリリースノート自動生成(.github/release.yml)でモジュールごとに PR を絞り込める。モノレポで tagpr を使っているなら、サブモジュールごとの CHANGELOG を正しく作れる。

@songmu · 投稿 2026-10-16
#github-actions#monorepo#release#changelog

どんな時に使う?

  • 1 つのリポジトリに複数のモジュールやパッケージがあり、それぞれ別にバージョンを付けてリリースしている
  • 自動生成したリリースノートや CHANGELOG に、他のモジュールの PR まで混ざってしまう

やり方

  1. .github/labeler.yml(キーがラベル名、値がマッチ条件)
    yaml
    tools:
    - 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 を組み合わせられ、! で除外もできる。

  2. ワークフロー
    yaml
    on: [pull_request_target]
    jobs:
      labeler:
        permissions: { contents: read, pull-requests: write }
        runs-on: ubuntu-latest
        steps:
        - uses: actions/labeler@v6   # 実運用では SHA で固定
  3. モジュール側の release.yml で、そのラベルの PR だけを拾う
    yaml
    # tools/.github/release.yml
    changelog:
      categories:
      - title: Changes
        labels: [tools]
  4. 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 を作る。

出典

X の元の投稿を開く