Ratgeber

Eine macOS-Rechnung bei GitHub Actions senken, Schritt für Schritt

Die meisten macOS-Rechnungen bei GitHub Actions sind aufgebläht durch Minuten, die dem Team nichts bringen. Caches werden neu gebaut. Matrizen laufen, deren Ergebnisse niemand liest. Jobs laufen zu Ende für Commits, die längst ersetzt sind. Diese Checkliste ordnet die Änderungen danach, wie viel sie bei wie wenig Aufwand sparen. Wo es hilft, steht das YAML dabei.

1. Brechen Sie veraltete Läufe ab

Wenn jemand zweimal in einer Minute pusht, ist der erste Lauf verschwendet. Ein Block pro Workflow verhindert das:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

2. Verschieben Sie alles, was kein Build ist, weg von macOS

Linting, Formatprüfungen, Release Notes und Slack-Benachrichtigungen laufen alle auf einem Linux-Runner, zu einem Zehntel des Preises. Dasselbe gilt für Unit-Tests gemeinsamer Swift-Pakete, die UIKit nicht berühren. Teilen Sie den Workflow in einen Linux-Job und einen macOS-Job, der davon abhängt. So kostet ein Lint-Fehler nie eine macOS-Minute.

3. Cachen Sie die Pfade, die wirklich Zeit kosten

Auf gehosteten Runnern startet jeder Job leer. Stellen Sie die teuren Verzeichnisse mit einem Schlüssel wieder her, der an Ihre Lockfiles gebunden ist:

- uses: actions/cache@v4
  with:
    path: |
      ~/Library/Developer/Xcode/DerivedData
      ~/Library/Caches/org.swift.swiftpm
      ~/.cocoapods
      Pods
    key: ${{ runner.os }}-${{ hashFiles('**/Package.resolved', '**/Podfile.lock') }}

DerivedData bringt am meisten und ist am empfindlichsten. Verhalten sich inkrementelle Builds seltsam, nehmen Sie es aus dem Cache und behalten die Paket-Caches.

4. Lassen Sie die volle Matrix nur auf main laufen

Ein Pull Request braucht selten fünf Simulatoren. Bauen Sie bei Pull Requests eine Konfiguration. Die volle Gerätematrix läuft bei Merges auf main oder nächtlich nach Zeitplan.

5. Filtern Sie nach Pfad

Eine Änderung an der README sollte keinen iOS-Build auslösen. Nutzen Sie paths-ignore im Workflow-Trigger für Doku, Skripte und alles außerhalb des App-Targets.

6. Setzen Sie Timeouts

Ein hängender Simulator kann die vollen sechs Stunden des Standards kosten. Setzen Sie timeout-minutes bei jedem macOS-Job auf etwas mehr als Ihre normale Build-Zeit.

7. Installieren Sie Tools nicht ständig neu

Wer CocoaPods, fastlane oder eine bestimmte Xcode-Version bei jedem Job installiert, verbrennt Minuten, bevor der Build beginnt. Nutzen Sie, was das gehostete Image schon mitbringt, oder cachen Sie die Installation.

8. Kürzen Sie die Aufbewahrung von Artefakten

Archive und Test-Bundles, die 90 Tage liegen bleiben, erzeugen schleichend steigende Speicherkosten. Sieben Tage reichen für alles, was nicht in den Store geht.

9. Ab der Gewinnschwelle nicht mehr pro Minute zahlen

Alles oben verkleinert die Rechnung. Liegen Sie dauerhaft über etwa 2,242 macOS-Minuten im Monat, schlägt keine Optimierung einen Festpreis. Ein dedizierter M6 für $139 im Monat bietet unbegrenzte Minuten mit warmen Caches. Die Punkte 3 und 7 spielen dann gar keine Rolle mehr. Der Kostenrechner zeigt, wo Ihr Team steht.

Häufige Fragen

Was spart bei einer macOS-Rechnung von GitHub Actions am meisten?

+

Für die meisten Teams: überholte Läufe per concurrency-Gruppe abbrechen und Arbeit ohne Build auf Linux verschieben. Zusammen streichen diese zwei kleinen YAML-Änderungen oft ein Drittel der berechneten macOS-Minuten.

Lohnt es sich, DerivedData in GitHub Actions zu cachen?

+

Oft, aber es ist der empfindliche Teil. Paket-Caches (SwiftPM, CocoaPods) sind sicher und sparen bei jedem Job Minuten. DerivedData spart mehr, kann aber seltsame Fehler bei inkrementellen Builds verursachen. Wählen Sie den Schlüssel eng und seien Sie bereit, es wegzulassen.

Sollte meine Gerätematrix bei jedem Pull Request laufen?

+

Meist nicht. Eine Konfiguration bei Pull Requests und die volle Matrix auf main oder nächtlich finden dieselben Regressionen, mit einem Bruchteil der Minuten.

Wann spielt all das keine Rolle?

+

Über etwa 2,242 macOS-Minuten im Monat ist ein dedizierter Mac zum Festpreis von $139 günstiger als die Abrechnung nach Minuten. Das gilt, egal wie gut die Minuten-Variante optimiert ist. Warme Caches beseitigen den größten Teil der Verschwendung ganz von selbst.

Passende Ratgeber