Geduld und Klicks als Opfergaben auf dem Altar der CI
Man fügt also run: env hinzu, um zu sehen, was los ist. Man pusht und wartet erneut. Es ist eine 20-minütige Feedback-Schleife für eine einzeilige Änderung. Das macht man 14 Mal. So sieht also jetzt der Nachmittag aus. Eigentlich wollte man rausgehen, aber der Nachmittag gehört jetzt der CI. Und es wird klar: Er hat schon immer der CI gehört.
Es ist eine fast religiöse Erfahrung. Man bringt Klicks und Geduld als Opfergaben dar. Die Seite prüft die Anfrage. Manchmal gewährt sie einem das gesuchte Wissen. Manchmal verschlingt sie stattdessen den Browser-Tab als kleines Opfer. Man öffnet einen neuen Tab, versucht es erneut. Das ist das Ritual. Man hat es sich nicht ausgesucht, also weiter mit der Arbeit.
Die YAML-Falle
Jedes CI-System wird irgendwann zu einem Haufen YAML. Ich habe die fünf Phasen der Trauer darüber durchlaufen und bin wieder herausgekommen – geschwächt, aber funktionsfähig. Github Actions' YAML ist aber eine besondere Spezies.
Es ist YAML mit einer eigenen Ausdruckssprache, einem eigenen Kontext-Objekt-Modell, eigenen Regeln für die String-Interpolation und einer Reihe von Fallstricken, die einen langsam fertigmachen. Jeder Fallstrick hinterlässt Spuren, die nicht verblassen.
Wer hat zum Beispiel schonmal versucht, eine bedingte Umgebungsvariable bezogen auf den Branch zu setzen, in dem man sich befindet? Oder den ${{ }}-Ausdruckstanz getanzt, etwas falsch in Anführungszeichen gesetzt und dann vier Minuten darauf gewartet, dass ein Runner hochfährt, nur um festzustellen, dass die Zeichenfolge verschluckt wurde?
Haben wir wahrscheinlich alle schon mal. Jeder hat schon mal auf einen Diff gestarrt, der ein Zeichen in einem YAML-Ausdruck ändert, und gedacht: "Und dafür bin ich aufs College gegangen."
Die Syntax der Ausdrücke mutet wie eine Sprache an, die in der Dunkelheit unbeaufsichtigt gewachsen ist. Ursprünglich sollte sie praktische Erleichterungen bringen. Dann kamen nach und nach Funktionen dazu. Inzwischen existiert sie in einem Zwischenzustand – zu komplex, um noch als Konfiguration zu gelten, zu eingeschränkt, um eine richtige Sprache zu sein.
Man lernt ihre Grammatik nicht aus der Dokumentation, sondern aus Fehlern; jede Fehlermeldung ist ein Koan(öffnet im neuen Fenster), das in die Richtung von Verständnis weist, es aber nicht vermittelt.
"Aber der Marketplace!"
Dazu kommt noch der Github Actions Marketplace, das npm der CI. Er ist ein Basar community-gepflegter Aktionen unterschiedlicher Qualität, von denen die meisten Shell-Skripte mit einem Dockerfile sind – und einem Traum.
Jedes Mal, wenn man uses: some-stranger/cool-action@v2 eintippt, gewährt man einem Fremden Zugriff auf das eigene Repo, die eigenen Secrets und die Build-Umgebung. Klar kann man einen SHA-Hash nutzen, das macht aber niemand. Und selbst wenn, führt man immer noch undurchsichtigen Code aus, den man nicht selbst geschrieben und wahrscheinlich auch nicht gelesen hat. Und das in einem Kontext, in dem auf das eigene GITHUB_TOKEN und alles andere zugegriffen werden kann, was dort hineingepackt wurde. Mit jeder Aktion, die man hinzufügt, wird ein weiterer Satz Wohnungsschlüssel einem Fremden übergeben – und man selbst hofft einfach auf das Beste.
Der Marketplace hat die Atmosphäre eines Nachtmarkts in einer fremden Stadt, auf dem jeder Stand etwas anbietet, das angeblich ein Problem löst. Manche tun das tatsächlich, andere verfolgen andere Absichten. Von außen lässt sich nicht erkennen, was was ist. Man kann sie nur installieren und abwarten, was passiert. Das nennt man "Abhängigkeitsmanagement". Uns erscheint das mittlerweile normal. Davon wird es aber nicht sicher.
- Anzeige Hier geht es zum Handbuch für Softwareentwickler bei Amazon Wenn Sie auf diesen Link klicken und darüber einkaufen, erhält Golem eine kleine Provision. Dies ändert nichts am Preis der Artikel.