10 Punkte von GN⁺ 2026-01-15 | Noch keine Kommentare. | Auf WhatsApp teilen
  • Geteilte Frustration eines Entwicklers über die langsame Feedback-Schleife und den komplizierten Debugging-Prozess von GitHub Actions
  • Im Projekt tmplr wurden über build.rs mit CUE Dokumente erzeugt, doch mit dem Fehlschlagen des CI-Builds begannen die Probleme
  • Von vier Plattformen schlug nur der Build für Linux ARM fehl; Ursache ist das Verhalten von GitHub Actions, bei Cross-Builds x86_64-Binärdateien auf arm64-Runnern zu verbergen
  • Die ineffiziente Feedback-Schleife mit 2–3 Minuten pro Test einer einzelnen Änderung wiederholte sich ständig
  • Als Lösung wurde build.rs entfernt und auf ein GNU Makefile umgestellt, um die CI-Logik direkt zu steuern

Hintergrund des Problems

  • tmplr ist ein Datei-/Projekt-Scaffolding-Tool, das von Menschen lesbare und schreibbare Template-Dateien verwendet
  • In build.rs wurde CUE genutzt, um README.md, CHANGELOG.md sowie Versions-/Hilfedateien zu erzeugen und so Konsistenz sicherzustellen
  • Die eigentliche Arbeit war in etwa 1,5 Stunden erledigt, und ein dazugehöriger Artikel war ebenfalls bereits geschrieben
  • Lokal funktionierte alles problemlos, doch in der CI-Umgebung von GitHub Actions schlug der Build fehl, weil die CUE-Binärdatei nicht installiert war

Ursache des Build-Fehlers

  • Von vier Plattformen (Linux ARM, macOS ARM, Linux x86_64, macOS x86_64) trat nur auf Linux ARM der Fehler „command not found“ auf
  • Ursache: Matrix-Cross-Builds sind stark isoliert, daher wurde CUE nur auf dem x86_64-Linux-Host und dem macOS-ARM-Host installiert
    • macOS kann x86_64-Binärdateien problemlos ausführen
    • Linux x86_64 kann x86_64-Binärdateien ebenfalls problemlos ausführen
    • GitHub Actions jedoch verbirgt auf arm64-Runnern x86_64-Binärdateien, sodass sie nicht ausgeführt werden können

Ineffiziente Feedback-Schleife

  • Zur Problemlösung wurde immer wieder derselbe Ablauf wiederholt:
    1. Nach möglichen Lösungswegen suchen
    2. ci.yml ändern
    3. Committen und pushen (jj squash --ignore-immutable && jj git push)
    4. Den Tab „Actions“ öffnen
    5. Den neuesten Lauf öffnen
    6. Den Linux-ARM-Lauf öffnen
    7. Einige Sekunden warten
    8. Frustriert sein
    9. Wiederholen
  • Pro einzelner Änderung vergingen 2–3 Minuten
  • Im Idealfall würde GitHub entweder einen voll ausgestatteten lokalen Runner bereitstellen oder eine Möglichkeit bieten, nach dem Push den Fortschritt schnell zu überprüfen
    • Etwa eine Funktion wie ein „scratch commit“: eine Möglichkeit, verschiedene Läufe zu testen, ohne die Git-Historie und den Verlauf der Actions-Ausführungen zu verschmutzen
  • Eine solche Funktion gibt es derzeit jedoch nicht

Lösung

  • Nach 30 Minuten in dieser Schleife wurde abgebrochen
  • Es wurde ein bekannter Rat aus dem Internet übernommen: „Lass GitHub Actions nicht die Logik verwalten, sondern steuere die Skripte selbst und lasse Actions diese Skripte nur aufrufen
  • build.rs wurde gelöscht (bedauerlich, aber ein notwendiges Opfer)
  • Alle Generierungsaufgaben wurden in ein GNU Makefile verlagert
  • Die erzeugten Dateien wurden ins Repository committed, und die Änderungen an der CI wurden zurückgenommen
  • Das Problem war damit gelöst

Fazit

  • GitHub Actions ist ein Grund dafür, dass man auf manche guten Dinge verzichten muss
  • Beim Debuggen von Runnern oder beim Optimieren des Build-Prozesses geht viel Zeit verloren
  • Gleichzeitig gibt es Vorteile wie macOS-Builds, die sich auf anderem Weg nur schwer bekommen lassen
  • Natürlich ist auch kein anderes System bekannt, das sich einfacher einrichten lässt als GitHub Actions
    > We are all doomed to GitHub Actions. …but at least I dodged the bullet early.

Noch keine Kommentare.

Noch keine Kommentare.