Stop clicking
“Merge”
A merge queue and merge train for self-hosted GitLab CE — without GitLab Premium. Auto-merge, auto-rebase, pipeline management, and smart status labels.
$ docker run -d \ -e GITLAB_SERVER_URL=https://gitlab.example.com \ -e GITLAB_PROJECT=your/project \ -e GITLAB_ACCESS_TOKEN=glpat-xxxx \ neckarit/gitlab-auto-merge --mode=DryRun
Start in DryRun mode. See what it would do. Enable when ready.
Your merge workflow is a bottleneck
Rebase & Wait
Every MR that falls behind main needs a manual rebase. Then you wait for CI again. Then someone else merges first. Repeat.
Wasted CI Resources
Obsolete pipelines keep running. Draft MRs trigger full CI. Runners are at capacity while stale jobs block the queue.
No Visibility
Which MR merges next? Who has conflicts? What’s blocking the queue? You check manually, across 20 open MRs.
Everything your merge workflow needs
Priority Support
Label an MR “Important” to jump the queue. Lower-priority pipelines may be cancelled to free capacity.
Web Dashboard
Built-in React UI to monitor MRs, pipelines, runners, and the full audit trail of every action.
Webhook Integration
Near-instant reactions to MR and pipeline events via webhooks, plus 15-second polling as fallback.
Six modes. Start safe.
Begin with DryRun to observe. Gradually enable features as you build confidence.
| Mode | Labels | Rebase | Cancel | Merge |
|---|---|---|---|---|
| DryRun | — | — | — | — |
| OnlyLabels | ✓ | — | — | — |
| RebaseOnly | ✓ | ✓ | — | — |
| NoMerge | ✓ | ✓ | ✓ | — |
| NoPipelineCancellation | ✓ | ✓ | — | ✓ |
| Run | ✓ | ✓ | ✓ | ✓ |
Merge queue comparison: How it stacks up
| Feature | Auto Merge | GitLab Premium | Marge-bot | Bors-NG |
|---|---|---|---|---|
| Auto merge | ✓ | ✓ | ✓ | ✓ |
| Auto rebase | ✓ | ✓ | ✓ | — |
| Pipeline cancellation | ✓ | — | — | — |
| Job retry | ✓ | — | — | — |
| Queue position labels | ✓ | — | — | — |
| Web dashboard | ✓ | N/A | — | — |
| Resource-aware scheduling | ✓ | — | — | — |
| GitLab CE support | ✓ | Premium | ✓ | Archived |
| Price (50 devs) | $49/mo | $17,400/yr | Free | — |
Three environment variables.
That’s it.
Deploy as a single Docker container. Point it at your GitLab project. Observe in DryRun mode. Enable when you’re ready.
services: auto-merge: image: neckarit/gitlab-auto-merge:latest command: --mode=DryRun ports: - "8711:8711" environment: GITLAB_SERVER_URL: https://gitlab.example.com GITLAB_PROJECT: your-group/your-project GITLAB_ACCESS_TOKEN: glpat-xxxxxxxxxxxxxxxxxxxx