Zum Inhalt

Automatisierung des Release-Prozesses

📅 2024-10-29 - 🧔 Thomas

Seit ich im März angefangen habe wieder regelmäßiger an Retro Carnage zu arbeiten, habe ich einmal pro Monat ein Pre-Release veröffentlicht. Die jeweiligen Stände des Spiels habe ich dann zum Beispiel Freunden und Kollegen gezeigt, um Feedback zu einzelnen Features einzuholen.

Das Erstellen dieser Releases war bislang ein manueller Prozess, dessen Durchführung zwei Computer notwendig machte und insgesamt rund eine Stunde gedauert hat. Der Ablauf umfasste grob folgende Schritte:

  • Erstellen des Tags über die GitHub-Website
  • Download des Quelltextes und der Assets jeweils auf Windows und Linux
  • Kompilieren des Quelltextes und Erstellen einer Archiv-Datei
  • Upload der Archiv-Datei auf die Website und Aktualisieren der Links

Über GitHub Actions

Der Quelltext von Retro Carnage wird auf GitHub verwaltet. GitHub bietet mit GitHub Actions eine tolle Möglichkeit zur Automatisierung. GitHub Actions können durch verschiedene Ereignisse des Quelltext-Repositories angestoßen werden, etwa durch neue Pull-Requests oder Pushes in bestimmte Branches. Anfangs hatte ich solche Automatisierungen durch lokale Scripts erledigt, was für mich einfacher war und keine Einarbeitung erforderte. Nach und nach habe ich diese Scripts dann durch GitHub Actions ersetzt, weil mich gerade das Zusammenspiel der Actions mehr und mehr überzeugte.

Insgesamt waren die einzelnen Actions, die ich bislang verwendet habe, jedoch ziemlich einfach. Da ich mich aktuell beruflich mit DevSecOps beschäftige, dachte ich es wäre eine gute Gelegenheit mich eingehender mit den Möglichkeiten von GitHub Actions zu beschäftigen und das Gelernte direkt auf den Release-Prozess von Retro Carnage anzuwenden. Dazu habe ich den manuellen Release-Prozess automatisiert.

Umsetzung des Release-Prozesses

Den Release-Ablauf habe ich in einer Actions mit zwei Jobs definiert. Die beiden Jobs habe ich Runnern mit unterschiedlichen Betriebssystemen zugewiesen. Ein Job erstellt damit das Linux-Relase, ein anderer Job das Windows-Release. Für mich war überraschend, wie einfach dabei die Arbeit mit dem Windows-Runner (windows-latest) ist. Meine Erwartungshaltung war, dass die Einrichtung des Windows-Runners mit den notwendigen Build-Tools zeitaufwändig und kompliziert sein würde. Tatsächlich waren aber schon alle möglichen (und von Retro Carnage benötigten) Build-Tools auf dem Runner eingerichtet. Zum Beispiel war schon ein C++-Compiler vorinstalliert, mit dem die Erstellung der Go-Bindings für OpenGL direkt möglich war.

Die Jobs kompilieren den Quelltext, führen die ausführbare Programmdatei mit den Assets des Spiels zusammen und erstellen daraus eine Archiv-Datei. Die Archiv-Dateien werden dann per SFTP auf den Web-Server übertragen, von wo User sie downloaden können. Die Logik für den Upload ist in der Action definiert. Die notwendigen Credentials sind von der Action getrennt in GitHub hinterlegt und werden über Variablen eingebunden.

Den Upload habe ich unter Windows und Linux unterschiedlich gelöst. Die Linux-Version habe ich zuerst umgesetzt und dazu lftp genutzt. Für die Windows-Version habe ich die SFTP Upload Action vom GitHub-Marktplatz verwendet. Ein wenig Bauchschmerzen macht mir, dass die Actions auf dem Marktplatz nicht weiter geprüft werden. Man muss dem Autor der Erweiterung also schon ziemliches Vertrauen entgegenbringen - insbesondere, wenn man der Erweiterung Credentials übergibt. Vielleicht wäre ein Fork der Action eine gute Möglichkeit um Kontrolle über die Erweiterung zu behalten... Das muss ich mir in den nächsten Tagen mal näher anschauen.