- Added `nativeDistributions` for Linux (.deb), Windows (.msi), and macOS (.dmg) in `build.gradle.kts` with platform-specific settings, embedded JRE, and JVM-args. - Implemented centralized semantic versioning via `version.properties` as the single source of truth, applying it across all builds. - Introduced CI/CD release workflow (`.gitea/workflows/release.yml`) for auto-tagging, artifact builds, and release summaries. - Created `CHANGELOG.md` following Keep-a-Changelog format for tracking changes. - Documented icon requirements and packaging steps in `ICONS_PLACEHOLDER.md`. - Updated DevOps roadmap to reflect completed Sprint C-1 and C-2 tasks. Signed-off-by: Stefan Mogeritsch <stefan.mo.co@gmail.com>
6.3 KiB
6.3 KiB
🐧 [DevOps Engineer] — Zwischenstand & Roadmap
Stand: 3. April 2026 Rolle: Docker, CI/CD, Gradle, Security, Desktop-Packaging, Infrastruktur
✅ Erledigte Sprints
Sprint A — Abgeschlossen
- A-1 | Docker-Compose-Setup auf aktuellen Stand gebracht
- Alle Services in
docker-compose.yaml/dc-*.yamlgeprüft - Lokale Entwicklungsumgebung startet mit einem einzigen Befehl
- Healthchecks für alle Services definiert
- Alle Services in
Sprint B — Abgeschlossen
-
B-1 | CI/CD Pipeline für Compose Desktop Tests (headless)
- Gitea Actions Workflow:
.gitea/workflows/desktop-tests.yml - Headless-Umgebung:
xvfb-run(1920×1080×24) für Compose Desktop Tests - Gradle-Task:
:frontend:shells:meldestelle-desktop:jvmTest - Build-Artefakte gespeichert (JARs, Compose-Distributables)
- Gitea Actions Workflow:
-
B-2 | Gradle-Build-Optimierungen
- Build-Cache aktiv:
org.gradle.caching=true - Parallele Builds aktiv:
org.gradle.parallel=true - Headless-Flag:
-Djava.awt.headless=true - Gradle Wrapper auf
9.4.0aktualisiert
- Build-Cache aktiv:
Sprint C — Abgeschlossen
-
C-1 | Desktop-App Packaging konfiguriert
compose.desktop.nativeDistributionsvollständig inbuild.gradle.ktskonfiguriert- Linux:
.deb-Paket —packageDebTask, Icon PNG 512×512,debMaintainer,menuGroup - Windows:
.msi-Installer —packageMsiTask, Icon ICO,upgradeUuid,menuGroup,shortcut - macOS:
.dmg-Image —packageDmgTask, Icon ICNS,bundleID,appCategory - App-Metadaten:
packageName,description,vendor,copyright,licenseFile - Eingebettetes JRE:
modules(...)mit minimalem JRE-Footprint konfiguriert - JVM-Args für gepackte App:
-Xms128m,-Xmx512m,-Dfile.encoding=UTF-8 - Icon-Ressourcen-Verzeichnis angelegt +
ICONS_PLACEHOLDER.mdmit Anforderungen - ⚠️ Offen: Echte Icon-Dateien (
icon.png,icon.ico,icon.icns) erstellen/einfügen - ⚠️ Offen: Testinstallation auf Ziel-Betriebssystem durchführen (nach Icon-Erstellung)
-
C-2 | Semantic Versioning eingeführt
- Versionierungsschema definiert:
MAJOR.MINOR.PATCH[-QUALIFIER] - Zentrale Versionsquelle:
version.propertiesim Root-Projekt (Single Source of Truth) - Root
build.gradle.kts: Version wird ausversion.propertiesgelesen (kein Hardcode mehr) - Desktop
build.gradle.kts:packageVersionausversion.properties(reinesMAJOR.MINOR.PATCH) - Git-Tagging-Strategie definiert:
vMAJOR.MINOR.PATCH(z. B.v1.0.0) - Release-Workflow angelegt:
.gitea/workflows/release.yml- Trigger: Änderung an
version.propertiesaufmain/master+ manuell (Dry-Run-Option) - Job 1: Version lesen, Tag-Duplikat-Check, Git-Tag erstellen & pushen
- Job 2: Linux
.debbauen & als Artefakt hochladen - Job 3: Windows
.msibauen & als Artefakt hochladen - Job 4: Release-Summary (Markdown-Report)
- Trigger: Änderung an
CHANGELOG.mdangelegt (Keep-a-Changelog-Format, SemVer)
- Versionierungsschema definiert:
🔴 Sprint C — Restpunkte
- C-3 | Produktions-Deployment vorbereiten
- Reverse-Proxy-Konfiguration (Nginx / Traefik) für Backend prüfen
- HTTPS-Zertifikat-Management dokumentieren
- Backup-Strategie für Produktionsdatenbanken definieren
🟠 Sprint D — Priorität 2 (nächste Woche)
-
D-1 | Multi-Tenant Datenbankinfrastruktur absichern
- Sicherstellen: Pro-Tenant-Schema in Postgres korrekt isoliert
- Monitoring: Tenant-Schemas in Grafana-Dashboard sichtbar
- Backup: Pro-Tenant-Backup-Strategie definieren
-
D-2 | mDNS / LAN-Discovery Infrastruktur (nach ADR-0022)
- mDNS-Dienst (Avahi o. ä.) in Docker-Compose für lokale Entwicklung bereitstellen
- WebSocket-Endpunkt in Nginx/Traefik-Konfiguration durchreichen
⏸️ Pangolin / externer Zugriff — Nur für Remote-Support-Szenarien; kein MVP-Blocker
📌 Abhängigkeiten
| Warte auf | Von wem | Betrifft |
|---|---|---|
| ADR-0022 LAN-Sync | 🏗️ Architect B-1 | D-2 mDNS-Infra |
| QA: Test-Integration in CI | 🧐 QA C-4 | C-1 Packaging-Tests |
| Icon-Dateien (PNG/ICO/ICNS) | 🖌️ UI/UX | C-1 Release-Build |
💡 Empfehlungen (nach Priorität)
- Icons erstellen — Vor dem ersten echten Release-Build müssen
icon.png,icon.icoundicon.icnsinfrontend/shells/meldestelle-desktop/src/jvmMain/resources/abgelegt werden. SieheICONS_PLACEHOLDER.mdfür Anforderungen und ImageMagick-Schnell-Befehle. - Testinstallation — Nach Icon-Erstellung:
.debauf Ubuntu/Debian,.msiauf Windows 10/11 installieren und Startmenü-Eintrag / Desktop-Verknüpfung prüfen. - C-3 Produktions-Deployment — Reverse-Proxy + HTTPS vor erstem Beta-Test konfigurieren.
- D-1 Tenant-Backup — Wenn eine Veranstaltung = eine Datenbank, muss jeder Tenant einzeln gesichert werden können.
🗂️ Geänderte Dateien (diese Session)
| Datei | Änderung |
|---|---|
version.properties |
NEU — Zentrale SemVer-Quelle (1.0.0-SNAPSHOT) |
build.gradle.kts (root) |
Version aus version.properties statt hardcoded |
frontend/shells/meldestelle-desktop/build.gradle.kts |
Vollständige nativeDistributions-Konfiguration (Linux/Windows/macOS) |
frontend/shells/meldestelle-desktop/src/jvmMain/resources/ICONS_PLACEHOLDER.md |
NEU — Icon-Anforderungen dokumentiert |
.gitea/workflows/release.yml |
NEU — Release-Workflow (Tag + Packaging) |
CHANGELOG.md |
NEU — Keep-a-Changelog-Format |