pull_request action does not run on merge

Same here. The webhook I’m looking for (without the irrelevant info):

headers:
X-GitHub-Event: pull_request

payload:
{
  "action": "closed",
  "pull_request": {
    "merged": true
  }
}

My workflow:

name: CI

on: [pull_request]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - name: Pull request merged
      if: github.action == 'closed' && github.pull_request.merged == 'true'
      run: echo merged

And it simply does not get triggered at all, even if I would remove the if condition.

Use case: purge the pull request deployment.

Getting this fixed would be super useful for the workflow we have in mind (label a PR, auto merge it).

5 Likes

Hi @joeduffy! I am on the product team for GitHub Actions.

You’re seeing this behavior because the default activity triggers for pull request are opened, synchronize, reopened. In order to fine grain control which PR events you want to trigger your workflow, definitely check out Triggering workflows for PR events and scroll down to the full event list.

For example if you want to trigger your workflow on PR close, you will need to use the following YAML

on:
  pull_request:
    types: [closed]
23 Likes

I’ve been eagerly waiting for this feature to be implemented the last 3 weeks or so, thanks a lot! Now we can finally switch to the new action model! Thanks a lot! 👍

@amq just complementing, the other answers… your “if” condition needs “event” object, it could be:

name: CI

on:
pull_request:
types: [closed]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - name: Pull request merged
      if: github. **event**.pull_request.merged == true
      run: echo merged
3 Likes

Thanks for fixing this, I’ve tried it and works as expected

Would it make sense to have a PR event of merged?

10 Likes

Hi,

I am using

on:
  pull_request:
    types: [closed]

for my workflow trigger, without any conditionals, but it is still not triggering when a PR merges. The PR is being merged by a different GitHub Action that merges it using GitHub API with

uses: actions/github-script@0.2.0

Could that be a reason it wouldn’t trigger?  If I manually merge a PR, it triggers as expected.

I’ve also tried

on: push

where the merge does a push, but same results. A manual merge triggers the workflow based on push, but the merge via API and the github actions bot does not trigger the workflow in question…

2 Likes

I have the exact same problem as @rcasperson-jc:

Manually merging a pull request triggers my Action, but using the Github API in an other Action to merge a pull request does not trigger my Action.

The only difference I can see is that the merge in the latter case is done by the user github-action (bot).

Is it by design / a limitation / a bug of Github Actions?

Okay I figured out why my Action wouldn’t start.

As stated in the doc: “An action in a workflow run can’t trigger a new workflow run” (Events that trigger workflows).

I had a script in a step that did some changes to my repo with the ${{secrets.GITHUB_TOKEN}} parameter. I expected those changes to trigger another workflow but  they didn’t.

By using a personal Github token instead I was able to make it work because now the user responsible for repo changes is not github-actions who obviously cannot trigger workflow, but me.

Hope it’ll save some time to people

Any Success to fire the event for merge only ?

I can’t get pull_request to fire for anything. I’ve tried

on: pull_request

on: [pull_request]

and

on:
  pull_request:
    types: [opened, edited, read_for_review]

and none of those fire when I open a new pull request or edit an existing one.

How about on PR merge? 

2 Likes

This is weird, because I think it would be the most important to have. On PR closed the workflow would be triggered also also in case we reject the PR which is not ideal.

So not sure if this is helpful but for the use case where you

a) Would like some tests to run when you (or one of your team) opens a PR
b) Would like to deploy the npm package when you merge the PR I have found the following works well.

In your .github/workflows directory have 2 files ci.yaml and cd.yaml

#ci.yaml (for running test on PR open, edit, reopen and synchronise)

on:
  pull_request:
    types: [opened, reopened, edited, synchronize]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: Use Node.js 12.x
        uses: actions/setup-node@v1
        with:
          registry-url: https://npm.pkg.github.com/
          node-version: 12.x
          scope: "@{your-scope}"
      - name: npm install, build, and test
        run: |
          npm install
          npm run build --if-present
          npm test

#cd.yaml

on:
  push:
    branches:
      - master

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: Use Node.js 12.x
        uses: actions/setup-node@v1
        with:
          registry-url: https://npm.pkg.github.com/
          node-version: 12.x
          scope: "@{your-scope}"
      - name: npm install and build
        run: |
          npm install
          npm run build --if-present
      - name: publish
        env:
          NODE_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}}
        run: |
          npm run deploy

Has the added benefit of deploying the package if an admin bypasses the PR process for an urgent hotfix type scenario.

Hope this helps

I have the following workflow, but the closed pr not trigerring the workflow.

name: Cleanup Review App Resources

on:
  pull_request:
    types: [closed]

jobs:
  delete-review-app:
    runs-on: ubuntu-latest
    name: Delete Heroku Review App
    steps:
      - env:
          HEROKU_API_KEY: ${{ secrets.HEROKU_API_KEY }}
        run: |
          HEROKU_APP_NAME=`./scripts/appname.sh ${GITHUB_REF##*/}`
          heroku apps:destroy $HEROKU_APP_NAME --confirm=$HEROKU_APP_NAME

this will trigger when pull request is closed without being merged

So how can we run an action if someone clicks on the merge button in a pull request in order to perform some checks? Under certain circumstance in need the action to fail and deny the merge of the pull requests. Is this possible?

Really? In my case, it triggers _only_ when the PR is merged and not when it is closed without merging…

Hi @thejoebourneidentity - in one of my repos this does not trigger when the PR is closed without being merged - is this expected?