コンテンツにスキップ

[GitHub Actions] paths-filter を使ってファイル、ディレクトリの変更を検知する

GitHub Actions でpaths-filterを使ってみた。 変更があったパスやファイルを検知して処理を発火させたいときに使える。 変更があったディレクトリで matrix の job を生成する例。

jobs:
  # JOB to run change detection
  changes:
    runs-on: ubuntu-latest
    # Required permissions
    permissions:
      pull-requests: read
    outputs:
      # Expose matched filters as job 'packages' output variable
      packages: ${{ steps.filter.outputs.changes }}
    steps:
      # For pull requests it's not necessary to checkout the code
      - uses: dorny/paths-filter@v2
        id: filter
        with:
          filters: |
            package1: src/package1
            package2: src/package2

  # JOB to build and test each of modified packages
  build:
    needs: changes
    strategy:
      matrix:
        # Parse JSON array containing names of all filters matching any of changed files
        # e.g. ['package1', 'package2'] if both package folders contains changes
        package: ${{ fromJSON(needs.changes.outputs.packages) }}
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - ...

filtersの部分は外部ファイルに書くことができる。

1
2
3
4
5
- uses: dorny/paths-filter@v2
      id: filter
      with:
        # Path to file where filters are defined
        filters: .github/filters.yaml