Auto Merge
Menu
Test NowGet Notified

What's New

auto-merge-2026-10-05

Changed

  • Webhooks must be signed. Auto Merge accepts a GitLab webhook only with a valid signature. Set the same secret in GITLAB_WEBHOOK_SIGNING_TOKEN and as Signing token of the webhook in GitLab (GitLab 19.0 or newer). Without it, Auto Merge rejects every webhook and reacts through polling only.

Removed

  • The two checkboxes in the MR description. Keep Pipeline and Skip Auto-Merge are labels again and nothing else: set them in the sidebar or with a quick action in a comment. The Auto-Merge section names the quick action to copy, such as /label ~"Skip Auto-Merge" or /unlabel ~"Keep Pipeline". GitLab’s checklist count of an MR shows only your own items again.

Fixed

  • “MRs ahead” counts every MR in front of yours. An MR that is rebased or merged right now appears in the count and in the table, with what Auto Merge does with it.
  • MRs with a merge time wait outside the queue. They get no queue position and no estimate, and the MRs behind them move up.
  • The MR description links the current pipeline. After a pipeline is rerun on the same commit, the link points to the new run, not the old failed one.
  • The dashboard tells a failed pipeline from a running one. An MR whose last pipeline failed is shown as failed.
  • Unknown runner capacity shows as unknown. When GitLab refuses the runner list, the dashboard shows unknown, and Auto Merge cancels no job based on a guess.
  • Rebase-only and no-merge modes stop retrying a failed rebase. Auto Merge posts the rebase-failure note in these modes again, so it no longer force-pushes and fails every cycle.
  • Scheduled-pipeline badges work for every description. Descriptions with %, + or a trailing blank are found.
  • The run history keeps every action. Overlapping cycles no longer leave a run without its actions and log.

auto-merge-2026-09-29

Changed

  • Auto Merge works on your project’s default branch. It reads the branch name from the GitLab project, so a project on master merges into master. The main status badge carries that branch’s name, and an MR targeting any other branch still waits outside the queue as a stacked MR.
  • A GitLab outage on the default branch costs a cycle of cached data. When GitLab does not answer for the default branch, Auto Merge reads every open MR fresh that cycle instead of trusting its cache, and the log line names the branch.

Fixed

  • Only the merge candidate’s real blockers pause. Auto Merge pauses jobs of MRs it plans to merge this cycle and may cancel. A merged or closed MR, an MR Auto Merge could not read and an MR whose diff GitLab is still preparing keep their jobs running.

auto-merge-2026-09-28

Added

  • Declared dependencies. A line blocked-by: !123 (also depends-on: or waits-for:) in an MR description holds the MR until the named MRs are merged. The label Auto-Merge::Waiting for dependency and a note show what it waits for.
  • Stacked merge requests. An MR that targets another MR’s branch waits outside the queue. Once the lower MR merges, GitLab retargets it to main and Auto Merge takes over.
  • Merge order for MRs that share commits. When two open MRs share commits, the MR contained in the other one merges first. The waiting MR’s note names the MR it waits for; Merge First overrides the wait.
  • Repeatedly failing MRs leave the merge queue. An approved MR whose pipeline fails twice on the same code drops out of the queue and carries Auto-Merge::Repeated pipeline failure. A push that changes the code puts it back. The threshold is configurable (--repeated-failure-threshold, default 2).
  • Checkboxes in the MR description. Two checkboxes set or remove Keep Pipeline and Skip Auto-Merge with one click.
  • Priority from your own labels. Priority::High puts an MR into the Merge First class, Priority::Low into Merge Last. Both patterns are configurable.
  • The next merge gets the runners first. While the next MR to merge waits for its pipeline, Auto Merge pauses jobs of other MRs that block it and restarts them afterwards. Jobs of MRs with Keep Pipeline or Skip Auto-Merge keep running.
  • Pipelines start when CI slots free up. Unapproved and draft MRs without a pipeline get one as soon as runners are idle.
  • Status badge in the MR description. Every MR carries an SVG badge with pipeline, approval, conflict and queue state. --merge-request-badge-enabled=false switches it off.
  • Instant reaction to webhooks. A webhook updates the MR’s status label within seconds. A finished pipeline, a merge or an approval starts the next full run immediately.
  • Diagnostics bundle. Auto Merge records every cycle on disk. curl -fsSL https://auto-merge.dev/auto-merge-diagnostics.sh | bash on the Docker host packs it into one archive for a support request.
  • GitLab UI integration snippet. A pasteable JavaScript snippet shows the Auto Merge badge directly on GitLab’s MR pages.
  • Cleanup of merged MR labels. Auto Merge removes its labels from MRs merged by hand in the GitLab UI.

Changed

  • New dashboard. The dashboard shows a health banner, the merge order with every MR’s gates, ETA and reason, a “Needs manual work” list, the diff size per MR, merges per hour and the time from approval to merge. It loads instantly.
  • Clear label names. Status labels read Auto-Merge::Has conflicts, Auto-Merge::Waiting for approval, Auto-Merge::Unresolved discussions, Auto-Merge::Pipeline failed, Auto-Merge::Last pipeline failed and Auto-Merge::Blocked by CI, each in its own color. Queue-position labels are gone; the dashboard and the badge show the merge order.
  • Renamed user labels. Merge First, Merge Last, Keep Pipeline and Skip Auto-Merge replace 🔀 Important, 🔀 Low Priority, 🔀 No Cancel and 🔀 Ignore. Breaking: Auto Merge deletes the old labels at startup; set the new label again on open MRs.
  • Renovate MRs merge last. Renovate sets Merge Last, so its MRs merge when no other MR waits.
  • Every cancelled pipeline names its reason. The MR description says why Auto Merge cancelled a pipeline. A reason that needs the author, such as conflicts, also posts a note.
  • Rejected merges show GitLab’s answer. The note contains GitLab’s status and error message.
  • Waiting is blue, blocked is red. The badge shows a pending approval or open discussions in blue.
  • The container restarts itself when stuck. Auto Merge exits with code 70 when its scheduler stops working. Run the container with --restart unless-stopped.
  • The container runs as a non-root user (uid/gid 65532). A mounted directory needs write access for this user.
  • Fewer GitLab requests. Auto Merge reuses unchanged MR data and sends at most 8 requests in parallel.
  • Branding refresh. Bot avatar and badge use the Auto Merge merge-arrow logo.
  • Health checks on the Auto Merge UI container. The auto-merge-ui image ships a built-in HTTP health check.
  • Empty MR pipelines are cancelled. Pipelines on MRs without commits are cancelled right away.

Removed

  • Job retries. Auto Merge retries no failed job. A red pipeline stays red until the author pushes or retries it.

Fixed

  • Status labels stay stable. Labels stay put while GitLab rechecks mergeability, while an MR waits for a slot, and on merged MRs. Last pipeline failed clears with new commits; the conflict label clears after a force-push.
  • Labels you set survive. Auto Merge changes only its own labels and keeps labels added at the same moment.
  • Running pipelines survive. Keep Pipeline and Skip Auto-Merge protect a running pipeline. Auto Merge cancels only merge request pipelines, and cancels nothing in DryRun and the other read-only modes.
  • Recovers from GitLab outages. A rejected access token or an unresponsive GitLab no longer stops Auto Merge; it retries and resumes.
  • MR descriptions stay unchanged when the status is. The badge URL changes only with the status, and a redeploy rewrites no note.
  • Dashboard agrees with badge and label. The dashboard shows the same reason as the badge; the merge order counts 1, 2, 3 without gaps or duplicates.
  • Main pipeline status. The dashboard link and status for main read only push pipelines, so a green scheduled pipeline no longer hides a red build.
  • Source branch is deleted on merge. Auto Merge sets the delete flag before accepting the merge.
  • Docker examples use the right port. The examples publish container port 10200.