# Releases veröffentlichen ## Überblick Ein Release ist ein ZIP, dessen Wurzel der Anwendungsstamm des Projekts ist. Der Client rollt es über die bestehende Installation aus. Ablauf: bauen → hochladen → als aktuell setzen → Instanzen holen es ab. ## 1. Paket bauen `client-package/scripts/create-release-zip.sh` ist die Vorlage. Sie wird mit dem Client-Paket ausgeliefert, einmal pro Projekt angepasst (Produktname, Versionsdatei, Ausschlussliste), ins Projekt kopiert und dort aufgerufen: ```bash ./scripts/create-release-zip.sh v1.3.0 ``` Das Skript 1. schreibt die Version in die Versionsdatei, 2. prüft nach, dass das Schreiben tatsächlich funktioniert hat, 3. packt alle von Git verfolgten Dateien abzüglich der Ausschlussliste, 4. gibt Dateizahl, Größe und SHA-256 aus. Es warnt, wenn die Arbeitskopie ungesicherte Änderungen enthält: Weil die Dateiliste aus `git ls-files` stammt, landen nicht eingecheckte Änderungen sonst still nicht im Paket. Ausführlich – Aufbau des Pakets, Ausschlüsse, häufige Fehler: [../client-package/docs/06_UPDATE_PACKAGING.md](../client-package/docs/06_UPDATE_PACKAGING.md). ## 2. Hochladen **Releases** öffnen, Version im Format `vX.Y.Z` eintragen, ZIP auswählen, hochladen. Der Server - prüft die Endung und die ZIP-Signatur der Datei, - speichert sie als `-.zip`, - berechnet SHA-256 und Größe **selbst** und trägt sie ins Manifest ein, - setzt das Release als aktuell. Die angezeigte Prüfsumme sollte mit der des Build-Skripts übereinstimmen. Tut sie das nicht, wurde eine andere Datei hochgeladen. Schlägt der Upload ohne erkennbaren Grund fehl, ist meist das PHP-Upload-Limit kleiner als das Paket. Die geltenden Werte stehen auf der Releases-Seite und unter **Einstellungen → Diagnose**. ## 3. Aktuelles Release wählen Ein Upload setzt das neue Release automatisch als aktuell. Über **Als aktuell setzen** kann jederzeit ein anderes gewählt werden – das ist auch der Weg, um nach einem missglückten Release wieder auf die vorherige Fassung zu zeigen. Wichtig: Das ändert nur, was Instanzen künftig herunterladen. Bereits ausgerollte Instanzen bleiben, wo sie sind – der Client kennt keine Rücknahme. Eine Instanz auf die ältere Fassung zurückzubringen heißt, sie mit `update --force` erneut ausrollen zu lassen; Datenänderungen aus Migrationen macht das nicht rückgängig. ## 4. Ausrollen Auf der Instanz: ```bash php manage-client/bin/manage-client.php check # Exit 2 = Update verfügbar php manage-client/bin/manage-client.php backup # vorher sichern php manage-client/bin/manage-client.php update ``` Oder über die Oberfläche im Adminbereich des Projekts. Updates laufen nicht automatisch. Sie überschreiben Dateien im laufenden Betrieb und können Migrationen auslösen; das gehört unter Aufsicht. ## Release löschen **Löschen** entfernt den Manifest-Eintrag und die ZIP-Datei. War es das aktuelle Release, hat der Server danach keines – Instanzen melden dann `Es ist kein gültiges Release veröffentlicht`. Vorher ein anderes als aktuell setzen. ## Versionsnummern Format `vX.Y.Z`, sonst nichts. Client und Server lehnen alles andere ab. Eine bereits veröffentlichte Version erneut hochzuladen überschreibt das Paket – bei einem fehlerhaften Release ist eine neue Patch-Version die sauberere Wahl, weil Instanzen sonst je nach Zeitpunkt Unterschiedliches installiert haben. ## Weiter - [../client-package/docs/06_UPDATE_PACKAGING.md](../client-package/docs/06_UPDATE_PACKAGING.md) – Paketaufbau - [../client-package/docs/07_POST_UPDATE_HOOKS.md](../client-package/docs/07_POST_UPDATE_HOOKS.md) – Migrationen im Paket - [INSTANCE_MANAGEMENT](INSTANCE_MANAGEMENT.md) – Instanzen