Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Trigger a GitHub action on pull request approval and path

I want to build a GitHub Action that triggers on Pull Request (PR) Approval, but only when the PR contains modification to a particular path.

Currently, I have the following implementation:

on:
  pull_request_review:
    types: [submitted]
    paths: ['mypath/**']

jobs:
  build:
    runs-on: self-hosted
    steps:
      - uses: actions/checkout@v2
      - name: job name
        if: github.event.review.state == 'approved'

However, the build job triggers on Approval, and seems to ignore the path. The build runs on any Approval regardless of what files have been modified in the PR.

Is it possible to trigger a GitHub Action only when a PR modifies a particular path and it is approved?

like image 421
fuzzi Avatar asked Mar 12 '26 20:03

fuzzi


2 Answers

I know @fuzzi found an alternative using another solution with labels, but here is my contribution if someone wants to resolve the question issue keeping the original premisses:

Context

The ON trigger conditions work as OR and not as AND. Therefore, in the question sample, the workflow will trigger when a pull_request_review is submitted OR when one of the updated file(s) path is the one informed.

Workaround

It's not possible to check both conditions through the on workflow level field alone. Therefore, if you want to check both conditions, you would have to do it separately. A solution could be to check the submitted PR in the ON trigger first, then checking the folder path in a job step.

Example

Here is an example of what the solution suggested above looks like using the paths-changes-filter action:

on:
  pull_request_review:
    types: [submitted]

jobs:
  build:
    runs-on: self-hosted #or any other runner
    steps:
      - uses: actions/checkout@v2
      - uses: dorny/paths-filter@v2
        id: changes
        with:
          filters: |
             mypath:
              - 'mypath/**'
      # run only if some file in 'src' folder was changed
      - if: steps.changes.outputs.mypath == 'true' && github.event.review.state == 'approved'
        run: ...
like image 110
GuiFalourd Avatar answered Mar 17 '26 02:03

GuiFalourd


I found a solution to this using GitHub Labels instead, rather than file paths.

I implemented a GitHub Action for automatically adding a Label to the PR, based on the updated file paths. (https://github.com/actions/labeler)

I then modified my existing GH Action to check the Label value. My condition is now:

if: github.event.label.name == 'project' && github.event.review.state == 'approved'
like image 36
fuzzi Avatar answered Mar 17 '26 04:03

fuzzi