Wir behandeln den Workflow wie Code: Er liegt in
.github/workflows/ im selben Repository wie die Website,
wird im Pull Request mitgelesen und ist jederzeit auf einen Commit zurückführbar. Ändert sich der
Auslieferungsweg, ist das eine Änderung mit Autor, Datum und Grund — nicht eine Einstellung, die
irgendwo in einer Oberfläche verstellt wurde und an die sich später niemand erinnert.
Der Build läuft komplett auf dem Runner, nie auf einem Entwickler-Laptop. In fester Reihenfolge:
Tailwind kompiliert das CSS, die sharp-Pipeline erzeugt
die AVIF- und WebP-Varianten, Pagefind schreibt
den Suchindex neu, Sitemap und Markdown-Spiegel entstehen,
zuletzt bekommt jede CSS- und JS-Datei ihren Cache-Busting-Hash. Jeder dieser Schritte ist ein
benannter Step — bricht einer ab, bricht der Job ab, und ein kaputter Stand erreicht den Server
gar nicht erst.
Ausgeliefert wird per SSH mit einem Deploy-Key, der als Secret hinterlegt ist —
im Repository steht kein Passwort. Staging und Live sind getrennte Umgebungen mit eigenen Zugängen:
Ein Push auf den Arbeitsstand geht auf Staging, nach der Freigabe geht exakt derselbe Commit auf Live.
Für den Live-Schritt nutzen wir eine geschützte Environment, sodass er nicht versehentlich mitläuft.
Zwei Details, die viel Ärger sparen: Abhängigkeiten werden gecacht, damit ein Lauf im Minutenbereich
bleibt statt bei jedem Deploy alles neu zu installieren. Und fremde Actions werden auf eine feste
Version gepinnt — was heute läuft, läuft morgen genauso, auch wenn jemand anderes sein Repository
umbaut. Wie sich das in den Gesamtprozess einordnet, steht im Hub
Deployment & Betrieb.