2026 Gemeinsame Remote-Macs für GitHub Actions:
Merge Queue vs Runner-Labels, damit Merge-Checks nicht verhungern

Zwei-Warteschlangen-Denken · Label-Routing · Concurrency · Merge-Spur beobachtbar

2026 GitHub Merge Queue und Remote-Mac-Self-hosted-Runner

Wenn Sie Self-hosted Runner auf mehreren gemieteten Remote-Macs betreiben, führt ein häufiges Missverständnis dazu, anzunehmen, die Merge Queue plane auch Maschinenkapazität: Die Merge Queue ordnet Änderungen und Sicherheitsgates in den Default-Branch, aber das Runner-Backlog bestimmen weiterhin Labels und Concurrency-Gruppen. Dieser Artikel trennt die beiden Warteschlangen mit einer Kontrollflächen-Matrix, empfiehlt Routing mit ci-pr / ci-merge / ci-release, erklärt Regeln für Concurrency und cancel-in-progress und wann p95-Wartezeiten eher Mac-Kapazität oder GitHub-Konfiguration verlangen; verlinkt werden gemeinsamer Build-Pool, Seat-Mutex und Mac-Mesh-Orchestrierung.

01

Zwei Warteschlangen und sechs Schmerzpunkte: warum Merge-Hunger bleibt, obwohl die Merge Queue aktiv ist

Die Merge Queue schützt die Integrität des Default-Branches: sie bündelt Checks vor der Integration; sie garantiert keine freien CPUs auf Ihren Remote-Mac-Runnern. Teilen PR- und Merge-Checks dieselben runs-on-Labels, kann GitHub Merges voranbringen, während Runner mit optionalen PR-Jobs voll sind.

  1. 01

    Zwei-Queue-Verwechslung: Actions \"Queued\" wird so gelesen, als würde die Merge Queue Merge-Jobs automatisch priorisieren.

  2. 02

    Label-Mix: Ein vages ci-Label stapelt Nightly, PR und Merge auf denselben Runnern.

  3. 03

    Falsche Abbrüche: cancel-in-progress: true auf Merge-Spuren wie bei PRs reißt Batches wiederholt ab.

  4. 04

    Concurrency-Kollisionen: Mehrere Repos oder Workflows teilen dieselbe concurrency-Zeichenkette und brechen sich gegenseitig ab.

  5. 05

    Fehlende Observability: Merge-Queue-Wartezeit und Runner-Auslastung werden nicht getrennt; Kapazitätsgespräche ohne Daten.

  6. 06

    Mesh-Lease-Mismatch: Merge-Spuren brauchen stabile Knotenbelegung, aber Lease-Schwellen fehlen.

Hinweis: Wenn Sie noch Laptop-vs.-Remote vergleichen statt CI-Kontrollflächen, lesen Sie zuerst lokales Leichteditieren vs. Remote-Build-Schwellen.

02

Kontrollfläche und Labels: wann eine ci-merge-Spur nötig ist

Die Matrix unten ist für Review-Meetings; beides zu tun ist nur dann sinnvoll, wenn die Runner-Kapazität ehrlich ist, nicht Label-Theater.

KontrollflächeGitHub Merge QueueRunner-Backlog (Maschinenqueue)
Zuständig fürReihenfolge in den Default-Branch, Merge-Batches, Semantik der Pflicht-ChecksWelcher Mac welchen Workflow-Job wann ausführt
Nicht zuständig fürWie viele Performance-Kerne auf Ihrem M4 frei sindOb ein PR logisch vordringen sollte
Typischer FehlerBatches laufen wegen Rechenmangel trotz korrekter Logik ausMerge-Jobs bleiben queued, die Queue ist kurz
Erster HebelPflicht-Checks und Batch-Annahmen straffenruns-on-Labels teilen, Runner ergänzen oder Plätze reservieren

Glättende Merges hängen an ehrlich reservierter Runner-Kapazität für Merge, nicht am Merge-Queue-Schalter allein.

Empfohlenes Label-Muster (Teamkürzel einsetzen)

  • PR-Rauschen: self-hosted + macOS + ci-pr + Toolchain-Pin (z. B. xcode-16-2).
  • Merge-Spur: Dieselben Pins plus ein ehrliches Kapazitäts-Suffix ci-merge, bedient von mindestens einem Remote-Mac-Runner.
  • Release: ci-release getrennt von Merge, damit große Release-Jobs den Trunk nicht aushungern.
03

Sechs-Schritte-Runbook: Merge-Spur in YAML gießen, nicht in Slack

Die Schritte ergänzen den SSH-Leitfaden zum gemeinsamen Pool: dort klar, ob der Runner erreichbar ist; hier, wer welche CPU-Timeline besitzt.

  1. 01

    Pflicht-Checks inventarisieren: Erfassen Sie tabellarisch, was den Default-Branch blockiert, mit Dauer und was früher in PR kann.

  2. 02

    runs-on teilen: Merge-Workflows oder -Jobs erhalten ci-merge; ein physischer Mac darf viele Labels, aber Fenster reservieren oder dedizierte Knoten.

  3. 03

    Concurrency prüfen: PR nutzt cancel-in-progress: true; Merge/Release cancel-in-progress: false oder engere Gruppen.

  4. 04

    Concurrency-Gruppen benennen: Repo, Workflow und Umgebung anhängen, um Kollisionen zu vermeiden.

  5. 05

    Instrumentieren: Trennen Sie Merge-Queue-Wartezeit und Runner-Busy-Minuten auf dem Teamboard.

  6. 06

    Gate-Review: Zwei Mal pro Woche kurze Queue aber lange Merge-Queue? Zuerst Runner-Topologie, dann GitHub-Parallelität.

yaml
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }}
  cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
  merge-gate:
    runs-on: [self-hosted, macOS, ci-merge, xcode-16-2]
    timeout-minutes: 45
    steps:
      - run: echo "merge lane only"
04

Signale und Kriterien: zuerst Mac-Kapazität oder GitHub-Regler

Die Muster stammen aus typischen Postmortems; ersetzen Sie Schwellen durch Ihre Daten. Wichtig: beide Wartearten nicht auf derselben Achse.

SignalWahrscheinliche UrsacheErste Maßnahme
Lange Merge-Queue, idle RunnerPflicht-Checks oder Batch-Policy zu strengChecks-Grafik und Parallelitätsannahmen prüfen
Kurze Queue, Merge-Job lange queuedLabel-Routing oder zu wenige Runnerci-merge splitten, Knoten oder Plätze hinzufügen
Batches scheitern als InfraTimeouts, Disk, Keychain, NetzRunner-Logs mit Signing-Governance abgleichen
Schnelle PRs, langsame MergesPR und Merge teilen Labelsruns-on trennen, optionale PR-Jobs kürzen

Achtung: Schnellere Hardware ohne Label-Trennung verschiebt Hunger oft nur in Release-Nächte; langfristig braucht es getrennte Kapazitätsnamen.

05

Referenzmetriken und Guardrails (Engineering-Review)

Die Bandbreiten sind typische Anker für verteilte Teams; hängen Sie Ihre SQL- oder API-Felder ins interne Runbook.

  • Merge-Job-Wartezeit: P95 über 20 Minuten in zwei Release-Wochen bei Merge-Queue-Tiefe unter 3 → zuerst Label-Ehrlichkeit prüfen, nicht GitHub-Parallelität.
  • PR-Übergriff: Optionale Workflows auf ci-merge-Runnern mit über 85 % Busy-Minuten zur Geschäftszeit → Nightlys in den ci-pr-Pool.
  • Cancel-Stürme: Mehr als ein abgebrochener Merge-Check pro Woche → Audit auf gemeinsame concurrency-Politik mit PR.
TeamgrößeTrunk-Merge-TaktErster Schritt
KleinMehrfach täglichEin dedizierter ci-merge-Runner + strenge Pflicht-Checks
MittelKontinuierliche BatchesMulti-Region-Runner + expliziter Release-Pool
PlattformGeteilter Multi-Repo-PoolOrg-Label-Standards + Kostenboard Queue vs Runner

Ein Notebook als temporärer Runner bringt Sleep, Thermik und nicht auditierbare interaktive Logins; Colo-Macs bringen Beschaffung und Verkabelung. Beides trägt selten einen reviewbaren Merge-SLO-Vertrag.

Für Remote-Mac-Pools mit iOS CI/CD und langen AI-Agent-Jobs sind VpsMesh Mac Mini Cloud-Mieten meist die bessere Wahl: Runner-Fleet nach Region und SKU skalieren, Merge, Release und Alltagslärm auf benannten Knoten legen, Verfügbarkeit und Seat-Policy in Ops-Verträge statt Slack.

FAQ

FAQ

Nicht zwingend ein eigener Rechner, aber Labels und Concurrency müssen ehrlich getrennt sein; sonst verhungern Merge-Checks an PR-Rauschen. ci-merge sollte festen Plätzen oder dedizierten Knoten folgen. Skalierung: Preisseite und Bestellseite.

PR-Commits machen alte Checks obsolet; wiederholtes Abbrechen von Merge-Batches erhöht das Risiko gemergter Änderungen ohne geschlossene Automatisierung. Politik in YAML festhalten und Team-Runbooks aus dem Hilfezentrum verlinken.

Zuerst gemeinsamer Build-Pool für SSH und Runner-Registrierung, dann diesen Artikel für Merge-Spuren; Seat-Locks im Mutex-TTL-Artikel.