Automatically merge verified and tested GitHub Pull Requests

I wrote an app that does this. It responds to the review, labelled, and commit status/checks events, and merges when the merge button is green.

The fact that it merges when the merge button is green means that you can configure the requirements for a mergeable PR in the GitHub settings, there's no need to write separate configuration for the app.

Mergery is:

  • Free, including for private repositories.
  • Fast. It's event-driven, it doesn't run on a schedule.
  • Simple. No configuration required. Just label your PRs with automerge.

Official documentation: "Managing auto-merge for pull requests in your repository".


That is now (Dec. 2020, 4 years later) available:

Pull request auto-merge public beta

Pull request auto-merge is now rolling out as a public beta!

With auto-merge, pull requests can be automatically merged when all requirements for merging are met. No more waiting for long checks to finish just so you can press the merge button!

To use auto-merge, a repository maintainer or admin must first toggle on the repository setting to allow auto-merge (see steps).
Then any user with write permission can enable or disable auto-merge by navigating to the pull request page.

Keep in mind that auto-merge is only available for pull requests targeting a branch with required reviews or required status checks, and therefore is only available on public repositories and private repositories on Team and GitHub Enterprise Cloud plans.

Learn more about pull request auto-merge.


Update Feb. 2021:

Pull request auto-merge is now generally available

With auto-merge, pull requests can be set to merge automatically when all merge requirements are met.
No more waiting on slow CI jobs or tests to finish just so you can click the merge button!

To use auto-merge, first have an administrator allow auto-merge in the repository settings.

Then to enable auto-merge, navigate to the pull request on GitHub.com or GitHub Mobile and tap the button to enable.

PR auto-merge in action

Note that auto-merge can only be enabled by users with permission to merge and when there are unsatisfied merge requirements, like missing approvals or failing required status checks.

GraphQL APIs will be rolling out later this week. The pull request webhook event also now includes actions that indicate when auto-merge is enabled or disabled.

Learn more about pull request auto-merge


However, as The Godfather mentions in the comments:

The problem with this is that it doesn't do auto-update.

So as soon as your repo has "branches must be up-to-date" and some other PR got merged, this "auto-merge" doesn't work any more.

It should have been called the same way as Gitlab: "merge when pipeline succeeds", at least it's not as confusing... –


Update Aug. 2021:

Maintainers can now manage the availability of auto-merge in a repository

Maintainers can now manage the repository-level "Allow auto-merge" setting.
This setting, which is off by default, controls whether auto-merge is available on pull requests in the repository.
Previously, only admins could manage this setting.

Additionally, this setting can now by controlled using the "Create a repository" and "Update a repository" REST APIs.


There is a new PullRequestReviewEvent webhook that is triggered when a review is submitted in a non-pending state. The body of the webhook contains the ["review"]["state"] field, which will be approved when all reviewers have approved the changes (i.e. when you get the green "changes approved" tick in the UI).

Combine this with the StatusEvent for the head SHA of your pull request to get the status checks from CI and so on, then finally check the "merge-ability" of the pull by requesting the pull request from the API:

GET /repos/:owner/:repo/pulls/:number

Once you have all three things, you can merge the pull request with:

PUT /repos/:owner/:repo/pulls/:number/merge

and appropriate payload parameters. Note you'll need the Accept: application/vnd.github.polaris-preview+json for some of the payload parameters as they are in a preview period.