Publish: APK-Deploy ohne Server-Neustart (Version-Notify-Endpoint) #100
Labels
No labels
block-planning
bug
documentation
duplicate
enhancement
feature
good first issue
help wanted
infrastructure
invalid
planning
priority:high
priority:low
question
refactoring
status:backlog
status:done
status:in-progress
status:todo
tech-decision
test
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: bollwerkadmin/bollwerk#100
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Ziel
Den App-Deployment-Prozess entkoppeln: Das APK wird weiterhin per SCP auf den Server kopiert, aber der Server muss nicht neu gestartet werden. Stattdessen wird der Server über einen leichtgewichtigen API-Endpunkt benachrichtigt, der die Versionsinformation persistent speichert.
Problem
Der aktuelle Publish-Workflow (Skill:
publish) erfordert in Schritt 4:sed-Bearbeitung derdocker-compose.ymlDas ist zu schwer für ein reines Versionsupdate. Ein neues APK sollte keinen Container-Neustart erfordern.
Gewünschtes Verhalten
Neuer Publish-Workflow
scp app-debug.apk root@<vps>:/opt/krisenvorrat/data/app-latest.apksed docker-compose.yml+ Container-Neustartcurl POST /api/admin/versionServer-Seite
POST /api/admin/version(gesichert durch Admin-Token)versionCodeundversionNamepersistent indata/version.jsonGET /api/versionliest aus dieser Datei (Fallback auf Env-Vars, falls Datei fehlt)BOLLWERK_APP_VERSION_CODE/BOLLWERK_APP_VERSION_NAMEkönnen mittelfristig entfallenPublish-Skill
curl-Call ersetzt (kein SSH-Zugriff mehr nötig).env-Datei / Skript-VariableAbgrenzung
GET /api/version-Endpunkt bleibt kompatibel (App-seitig keine Änderung nötig)Implementierungsplan
Phase 1 – Server: VersionStore + Endpunkte
VersionStore– Neue Klasse, diedata/version.jsonliest und schreibt (versionCode: Int,versionName: String)GET /api/version– liest ausVersionStore(mit Fallback auf Env-Vars, falls Datei nicht vorhanden)POST /api/admin/version– schreibt inVersionStore, gesichert durchAuthorization: Bearer <BOLLWERK_ADMIN_TOKEN>HeaderPhase 2 – Publish-Skill aktualisieren
.github/skills/publish/SKILL.md– Schritt 4 durchcurl-Call dokumentieren:curl-Call implementieren, Token aus Umgebungsvariable lesenPhase 3 – VPS Cleanup (optional, separates Ticket)
BOLLWERK_APP_VERSION_CODE/BOLLWERK_APP_VERSION_NAMEausdocker-compose.ymlentfernen→ Bitte Plan bestätigen, dann startet die Implementierung.
Abgeschlossen (2026-05-18)
Durchgeführte Aufgaben
server/src/.../store/VersionStore.ktdiedata/version.jsonliest/schreibtAuthorization: Bearer <BOLLWERK_ADMIN_TOKEN>Verifikation
Nächste Schritte (VPS-Deployment)
BOLLWERK_ADMIN_TOKENin docker-compose.yml auf dem VPS setzenBOLLWERK_APP_VERSION_CODE/NAMEkönnen mittelfristig entfernt werden