diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e2f11889b8c..03f27452eaa 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -8,19 +8,7 @@ on: branches: - master - 6.[0-9]+ - paths: - - 'ci/**' - - 'cmake/**' - - 'src/**' - - '**/CMakeLists.txt' - - '.github/workflows/build.yml' pull_request: - paths: - - 'ci/**' - - 'cmake/**' - - 'src/**' - - 'CMakeLists.txt' - - '.github/workflows/build.yml' workflow_dispatch: defaults: @@ -33,8 +21,30 @@ concurrency: cancel-in-progress: ${{ github.ref != 'refs/heads/master' }} jobs: + changes: + name: Detect relevant changes + runs-on: ubuntu-latest + outputs: + relevant: ${{ steps.filter.outputs.relevant }} + steps: + # paths-filter needs a checkout for push events; on PRs it uses the API + - uses: actions/checkout@v6.0.2 + + - uses: dorny/paths-filter@v4.0.3 + id: filter + with: + filters: | + relevant: + - 'ci/**' + - 'cmake/**' + - 'src/**' + - '**/CMakeLists.txt' + - '.github/workflows/build.yml' + build: name: ${{ matrix.name }} + needs: changes + if: needs.changes.outputs.relevant == 'true' || github.event_name == 'workflow_dispatch' runs-on: ${{ matrix.os }} env: diff --git a/.github/workflows/code-validator.yml b/.github/workflows/code-validator.yml index 0834c3c865f..7a83560148d 100644 --- a/.github/workflows/code-validator.yml +++ b/.github/workflows/code-validator.yml @@ -14,24 +14,35 @@ on: branches: - master - '[0-9]+.[0-9]+' - paths: - - 'src/**' - - 'cmake/**' - - '**/*.sh' - - '.github/workflows/code-validator.yml' pull_request: - paths: - - 'src/**' - - 'cmake/**' - - '**/*.sh' - - '.github/workflows/code-validator.yml' workflow_dispatch: name: Code Validator jobs: + changes: + name: Detect relevant changes + runs-on: ubuntu-latest + outputs: + relevant: ${{ steps.filter.outputs.relevant }} + steps: + # paths-filter needs a checkout for push events; on PRs it uses the API + - uses: actions/checkout@v6.0.2 + + - uses: dorny/paths-filter@v4.0.3 + id: filter + with: + filters: | + relevant: + - 'src/**' + - 'cmake/**' + - '**/*.sh' + - '.github/workflows/code-validator.yml' + code-validator: name: Code Validator + needs: changes + if: needs.changes.outputs.relevant == 'true' || github.event_name == 'workflow_dispatch' runs-on: ubuntu-latest steps: - name: Check out repository diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 46e7768717b..0fe71e8f60f 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -10,19 +10,7 @@ on: branches: - master - 6.[0-9]+ - paths: - - 'ci/**' - - 'cmake/**' - - 'src/**' - - '**/CMakeLists.txt' - - '.github/workflows/docker.yml' pull_request: - paths: - - 'ci/**' - - 'cmake/**' - - 'src/**' - - '**/CMakeLists.txt' - - '.github/workflows/docker.yml' workflow_dispatch: defaults: @@ -38,8 +26,33 @@ concurrency: cancel-in-progress: ${{ github.ref != 'refs/heads/master' }} jobs: + changes: + name: Detect relevant changes + runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: read # required by dorny/paths-filter on pull_request events + outputs: + relevant: ${{ steps.filter.outputs.relevant }} + steps: + # paths-filter needs a checkout for push events; on PRs it uses the API + - uses: actions/checkout@v6.0.2 + + - uses: dorny/paths-filter@v4.0.3 + id: filter + with: + filters: | + relevant: + - 'ci/**' + - 'cmake/**' + - 'src/**' + - '**/CMakeLists.txt' + - '.github/workflows/docker.yml' + docker: name: ${{ matrix.image }} + needs: changes + if: needs.changes.outputs.relevant == 'true' || github.event_name == 'workflow_dispatch' runs-on: ubuntu-latest container: image: ${{ matrix.image }} diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 5a40f9edf51..2ece52ad40c 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -8,19 +8,7 @@ on: branches: - master - 6.[0-9]+ - paths: - - 'src/**' - - 'test/**' - - 'doc/examples/**' - - 'doc/scripts/**' - - '.github/workflows/tests.yml' pull_request: - paths: - - 'src/**' - - 'test/**' - - 'doc/examples/**' - - 'doc/scripts/**' - - '.github/workflows/tests.yml' workflow_dispatch: defaults: @@ -33,8 +21,30 @@ concurrency: cancel-in-progress: ${{ github.ref != 'refs/heads/master' }} jobs: + changes: + name: Detect relevant changes + runs-on: ubuntu-latest + outputs: + relevant: ${{ steps.filter.outputs.relevant }} + steps: + # paths-filter needs a checkout for push events; on PRs it uses the API + - uses: actions/checkout@v6.0.2 + + - uses: dorny/paths-filter@v4.0.3 + id: filter + with: + filters: | + relevant: + - 'src/**' + - 'test/**' + - 'doc/examples/**' + - 'doc/scripts/**' + - '.github/workflows/tests.yml' + test: name: ${{ matrix.name }} + needs: changes + if: needs.changes.outputs.relevant == 'true' || github.event_name == 'workflow_dispatch' runs-on: ${{ matrix.os }} env: