Dieser Post ist Teil der Serie Changelog, und das ist der 8. Artikel in der Serie. Einen Überblick über alle Artikel der Serie findest du hier.
Den direkten Vorgänger-Post findest du hier.
tl;dr
Zwei wesentliche Neuigkeiten beim Bauen meines Blogs:
- Schnellere Builds, und weniger Downloads in jedem Build
- Tägliche Builds, die geplante Posts möglich machen
Status Quo
Mein bisheriger Status ist garnicht ganz verkehrt, aber noch nicht ganz ideal. Ein Build von meinem Blog ist in etwa so passiert:
- Ich arbeite in einem Git Repo.
- Wenn ich einen Post schreibe und bestenfalls abschließe, erzeuge ich einen Commit und pushe den Status auf meine Forgejo Instanz.
- Dort läuft eine Action an, die den Bau ausführt:
- Zuerst wird die korrekte Hugo-Version heruntergeladen
- Zusätzlich wird auch rsync installiert, das brauche ich dann noch
- Baue die Website
- Mache einige Verifizierungen (hauptsächlich: Sind alle Links korrekt?)
- Schiebe die Website mit
rsyncan den richtigen Ort auf meinem Server in der Cloud, von wo aus der Blog abrufbar ist
Probleme in diesem Konzept
Mein Haupt-Problem an diesem Konzept war dass in jedem einzelnen Bulid-Schritt Hugo und rsync automatisch installiert werden mussten. Das wurde nicht bereits vom Basis-Image erledigt.
Aktualisierungen
Das hätte mir eigentlich auch schon früher einfallen können: Für einige andere Jobs habe ich ja eh schon eigene Images gebaut, die auf meinem Actions-Basis-Image (das ich in Kürze vorstellen möchte) basieren, aber gewisse Dinge hinzufügen. Also mache ich doch das gleiche für den Blog!
Schöner Seit-Effekt: Planen von Post-Veröffentlichungen
Da ich schon dabei war, das Forgejo Actions File im Repo anzupassen, habe ich auch direkt einen Schedule eingebaut: Mein Blog wird ab sofort täglich in der Früh neu gebaut. Dadurch erhalte ich einen relevanten Vorteil:
Hugo behandelt standardmäßig Posts in der Zukunft nicht, diese werden also garnicht gerendert (außer ich stelle das mit --buildFuture explizit um).
Bisher war das Resultat daraus, dass ich bei jedem Publishen eines Posts die Action manuell triggern musste.
Neuerdings erledigen Hugo und Forgejo Actions das für mich automatisch!
Seit-Effekt: Verbesserte Build-Zeit
Nicht dass das Bauen von meinem Blog lange gedauert hätte, jeder Build blieb unter einer Minute Laufzeit. Aber: Mit dem neuen Image komme ich bestenfalls auf etwa ein Zehntel der Zeit!
Problem: Versionierung
Tolle Lösungen können auch Probleme einbringen. In diesem Fall:
Bisher hatte ich die Datei hugo-version.txt in meinem Repo, und habe dadurch eine statische Hugo-Version zum Bauen genutzt. Mithilfe von Renovate blieb diese aktuell.
Jetzt lebt Hugo bereits im Build-Image. Dadurch fällt die Kontrolle der Version aus dem Blog-Repo heraus, und in ein anderes Repo hinein.
So weit so in Ordnung, aber hier kommt der nicht so tolle Part: In Forgejo Actions habe ich aktuell nur definiert runs-on: hugo. Im Konfigurationsfile von meinem Runner steht drinnen, auf welches Image hugo dann zeigt. Eine echte Versionierung ist hier nicht so recht vorgesehen.
Aktuell weiß ich noch nicht, wie ich dieses Problem lösen könnte.