View as Markdown

Migrate from Bulldozer to Mergify

Move from Bulldozer automerge to Mergify's Merge Queue for safer, faster merges.


Bulldozer focuses on automerging pull requests based on labels, reviews, and status checks. Mergify’s Merge Queue covers that and more, with automatic PR updates, prioritization, batching, and parallel checks.

This page shows a practical path to move from Bulldozer to Mergify’s Merge Queue.

  1. Keep your labels and branch protections as-is
  2. Set up a Mergify merge queue with conditions matching your Bulldozer config
  3. Start with a low-impact setup and expand gradually

Common Bulldozer config → Mergify Merge Queue

Section titled Common Bulldozer config → Mergify Merge Queue

Example Bulldozer snippet:

merge:
trigger:
label: ["merge when ready"]
branch_patterns: ["feature/.*"]
method: squash
required_statuses:
- "ci/circleci: ete-tests"

Equivalent Mergify configuration:

.mergify.yml
merge_protections_settings:
auto_merge_conditions:
- label = merge when ready
- head ~= ^feature/
merge_protections:
- name: bulldozer-equivalent
if:
- base = main
- head ~= ^feature/
success_conditions:
- "check-success = ci/circleci: ete-tests"
queue_rules:
- name: default
merge_method: squash

Notes:

  • auto_merge_conditions is where Bulldozer’s trigger goes: a pull request that matches it is queued without anyone commenting @mergifyio queue. Set the field to true instead and every pull request is queued, including ones that match no merge protection rule. Those reach the queue gated by your branch protections and the queue’s own queue_conditions alone

  • Bulldozer’s required_statuses become check-success = <name> conditions (or check-skipped, check-neutral) under success_conditions, where they gate both entry to the queue and the merge

  • Required labels map to label = <name> conditions

  • Approvals map to review count or specific reviewers

  • The merge queue keeps PRs updated automatically, so no manual rebases are needed

Going Further with Merge Queue

Section titled Going Further with Merge Queue

Once you have basic automerge working, you can take advantage of features Bulldozer doesn’t offer:

  • Priorities: urgent PRs jump ahead in the queue

  • Batches: merge multiple PRs at once to reduce CI load

  • Parallel checks: test multiple queue entries simultaneously

  • Merge methods: squash/merge/rebase → supported via merge_method

  • Delete branch after merge → use GitHub’s “Automatically delete head branches” repository setting

  • Rebase/update before merge → automatic in merge queue

  • Require labels → label = in auto_merge_conditions to trigger the queue, or in success_conditions to require the label as a merge protection

  • Restrict by authors/paths → author =, files ~=, etc. in success_conditions or if

Was this page helpful?