5.9 KiB
5.9 KiB
| name | description |
|---|---|
| publish | APK publizieren: Version bumpen, APK bauen, auf VPS hochladen, Server-Version aktualisieren, QR-Code/Download-Seite verifizieren. Verwende diesen Skill immer wenn eine neue App-Version veröffentlicht werden soll – auch wenn der User nur 'publish', 'release', 'veröffentlichen', 'neue Version', 'APK hochladen', 'APK deployen', 'Update bereitstellen' oder 'QR-Code aktualisieren' sagt. Trigger-Phrasen: 'publish', 'release', 'veröffentlichen', 'APK hochladen', 'neue Version', 'Update ausrollen', 'QR-Code'. |
Skill: Publish (APK auf VPS veröffentlichen)
Dieser Skill deckt den vollständigen Workflow ab, um eine neue App-Version auf dem VPS bereitzustellen, sodass:
- Die Homepage (QR-Code + Download-Link) die aktuelle APK anbietet
- Die Update-Prüfung in der App die neue Version erkennt und zum Download anbietet
Architektur-Überblick
App (lokal) VPS (bollwerk.online)
───────────── ─────────────────────
app/build.gradle.kts /opt/bollwerk/
versionCode / versionName ├── docker-compose.yml (BOLLWERK_APP_VERSION_CODE/NAME)
├── data/app-latest.apk (statisch ausgeliefert)
./gradlew assembleDebug └── Server-Container (Ktor)
→ app-debug.apk ├── GET / → Homepage mit QR-Code
├── GET /api/version → JSON {versionCode, versionName, apkUrl}
scp → /opt/bollwerk/data/ └── GET /static/* → Dateien aus data/
Wie die Update-Prüfung funktioniert
- App ruft
GET {serverUrl}/api/versionauf → erhältVersionInfo(versionCode, versionName, apkUrl) CheckForUpdateUseCasevergleichtversionInfo.versionCode > BuildConfig.VERSION_CODE- Falls neuer → zeigt Download-Button, lädt APK herunter, installiert via
ApkInstaller
Wie die Homepage funktioniert
GET /liefert HTML mit QR-Code (via qrcodejs) + Download-Link auf/static/app-latest.apk- Version wird aus
BOLLWERK_APP_VERSION_CODE/BOLLWERK_APP_VERSION_NAMEEnv-Vars gelesen
Publish-Workflow (Schritte)
Schritt 1 – Version bumpen
In app/build.gradle.kts:
versionCodeum 1 erhöhenversionNamepassend anpassen (z.B. "1.2" → "1.3")
Schritt 2 – Build & Test
.\gradlew.bat assembleDebug test
Die APK liegt danach unter: app/build/outputs/apk/debug/app-debug.apk
Schritt 3 – APK auf VPS hochladen
scp app/build/outputs/apk/debug/app-debug.apk root@195.246.231.210:/opt/bollwerk/data/app-latest.apk
Voraussetzung: SSH-Agent muss laufen und Key geladen sein (siehe vps-deploy Skill).
Schritt 4 – Server-Version aktualisieren
Die Version wird über Environment-Variablen in der docker-compose.yml auf dem VPS gesetzt:
# Neue Werte per sed in docker-compose.yml eintragen
ssh root@195.246.231.210 "cd /opt/bollwerk && sed -i 's/BOLLWERK_APP_VERSION_CODE=.*/BOLLWERK_APP_VERSION_CODE=<neuer_code>/' docker-compose.yml && sed -i 's/BOLLWERK_APP_VERSION_NAME=.*/BOLLWERK_APP_VERSION_NAME=<neuer_name>/' docker-compose.yml"
Falls die Env-Vars noch nicht in der docker-compose.yml stehen, müssen sie einmalig hinzugefügt werden:
ssh root@195.246.231.210 "cd /opt/bollwerk && sed -i '/BOLLWERK_JWT_SECRET/a\ - BOLLWERK_APP_VERSION_CODE=<code>\n - BOLLWERK_APP_VERSION_NAME=<name>' docker-compose.yml"
Schritt 5 – Server neustarten
ssh root@195.246.231.210 "cd /opt/bollwerk && docker compose up -d"
Schritt 6 – Verifizieren
# Version-API prüfen
Invoke-WebRequest -Uri "https://bollwerk.online/api/version" -UseBasicParsing | Select-Object -ExpandProperty Content
# Homepage prüfen (QR-Code-Seite)
Invoke-WebRequest -Uri "https://bollwerk.online/" -UseBasicParsing | Select-Object StatusCode, StatusDescription
Erwartete Ausgabe von /api/version:
{"versionCode":<neuer_code>,"versionName":"<neuer_name>","apkUrl":"https://bollwerk.online/static/app-latest.apk"}
Automatisiertes Skript
Das Skript publish-apk.ps1 in diesem Skill-Ordner automatisiert Schritte 3–6:
& ".github/skills/publish/publish-apk.ps1" -VersionCode 4 -VersionName "1.3"
Parameter:
| Parameter | Pflicht | Beschreibung |
|---|---|---|
-VersionCode |
ja | Neuer versionCode (Integer) |
-VersionName |
ja | Neuer versionName (String, z.B. "1.3") |
-ApkPath |
nein | Pfad zur APK (Default: debug-APK) |
-SkipVerify |
nein | Verifizierung überspringen |
Wichtige Dateien
| Datei | Beschreibung |
|---|---|
app/build.gradle.kts (L18-19) |
versionCode / versionName |
server/src/main/resources/application.conf (L18-21) |
Server-Version-Defaults + Env-Var-Override |
server/src/main/kotlin/.../routes/VersionRoutes.kt |
Homepage + /api/version Endpoint |
server/src/main/kotlin/.../plugins/Routing.kt |
staticFiles("/static", File("data")) |
app/src/main/java/.../usecase/CheckForUpdateUseCase.kt |
Update-Prüfung in der App |
app/src/main/java/.../ui/update/UpdateViewModel.kt |
Update-UI + Download-Logik |
Bekannte Lücken / TODOs
- Kein Release-Build: Aktuell wird
assembleDebugverwendet. Für Produktion → Signing-Config +assembleReleaseeinrichten. - Kein HTTPS: Server läuft auf HTTP. QR-Code zeigt
http://-URL. Für Play Store / Sicherheit → Caddy als Reverse Proxy. - Manuelle Version-Env-Vars: Beim ersten Publish müssen die Env-Vars in die VPS docker-compose eingefügt werden. Das Skript erledigt das automatisch.