meldestelle/docs/04_Agents/Roadmaps/DevOps_Roadmap.md
Stefan Mogeritsch 7ff48ed3d7 feat(devops): configure desktop packaging and introduce semantic versioning
- 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>
2026-04-03 11:26:46 +02:00

118 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🐧 [DevOps Engineer] — Zwischenstand & Roadmap
> **Stand:** 3. April 2026
> **Rolle:** Docker, CI/CD, Gradle, Security, Desktop-Packaging, Infrastruktur
---
## ✅ Erledigte Sprints
### Sprint A — Abgeschlossen
- [x] **A-1** | Docker-Compose-Setup auf aktuellen Stand gebracht
- [x] Alle Services in `docker-compose.yaml` / `dc-*.yaml` geprüft
- [x] Lokale Entwicklungsumgebung startet mit einem einzigen Befehl
- [x] Healthchecks für alle Services definiert
### Sprint B — Abgeschlossen
- [x] **B-1** | CI/CD Pipeline für Compose Desktop Tests (headless)
- [x] Gitea Actions Workflow: `.gitea/workflows/desktop-tests.yml`
- [x] Headless-Umgebung: `xvfb-run` (1920×1080×24) für Compose Desktop Tests
- [x] Gradle-Task: `:frontend:shells:meldestelle-desktop:jvmTest`
- [x] Build-Artefakte gespeichert (JARs, Compose-Distributables)
- [x] **B-2** | Gradle-Build-Optimierungen
- [x] Build-Cache aktiv: `org.gradle.caching=true`
- [x] Parallele Builds aktiv: `org.gradle.parallel=true`
- [x] Headless-Flag: `-Djava.awt.headless=true`
- [x] Gradle Wrapper auf `9.4.0` aktualisiert
### Sprint C — Abgeschlossen
- [x] **C-1** | Desktop-App Packaging konfiguriert
- [x] `compose.desktop.nativeDistributions` vollständig in `build.gradle.kts` konfiguriert
- [x] Linux: `.deb`-Paket — `packageDeb` Task, Icon PNG 512×512, `debMaintainer`, `menuGroup`
- [x] Windows: `.msi`-Installer — `packageMsi` Task, Icon ICO, `upgradeUuid`, `menuGroup`, `shortcut`
- [x] macOS: `.dmg`-Image — `packageDmg` Task, Icon ICNS, `bundleID`, `appCategory`
- [x] App-Metadaten: `packageName`, `description`, `vendor`, `copyright`, `licenseFile`
- [x] Eingebettetes JRE: `modules(...)` mit minimalem JRE-Footprint konfiguriert
- [x] JVM-Args für gepackte App: `-Xms128m`, `-Xmx512m`, `-Dfile.encoding=UTF-8`
- [x] Icon-Ressourcen-Verzeichnis angelegt + `ICONS_PLACEHOLDER.md` mit Anforderungen
- [ ] ⚠️ **Offen:** Echte Icon-Dateien (`icon.png`, `icon.ico`, `icon.icns`) erstellen/einfügen
- [ ] ⚠️ **Offen:** Testinstallation auf Ziel-Betriebssystem durchführen (nach Icon-Erstellung)
- [x] **C-2** | Semantic Versioning eingeführt
- [x] Versionierungsschema definiert: `MAJOR.MINOR.PATCH[-QUALIFIER]`
- [x] Zentrale Versionsquelle: `version.properties` im Root-Projekt (Single Source of Truth)
- [x] Root `build.gradle.kts`: Version wird aus `version.properties` gelesen (kein Hardcode mehr)
- [x] Desktop `build.gradle.kts`: `packageVersion` aus `version.properties` (reines `MAJOR.MINOR.PATCH`)
- [x] Git-Tagging-Strategie definiert: `vMAJOR.MINOR.PATCH` (z. B. `v1.0.0`)
- [x] Release-Workflow angelegt: `.gitea/workflows/release.yml`
- Trigger: Änderung an `version.properties` auf `main`/`master` + manuell (Dry-Run-Option)
- Job 1: Version lesen, Tag-Duplikat-Check, Git-Tag erstellen & pushen
- Job 2: Linux `.deb` bauen & als Artefakt hochladen
- Job 3: Windows `.msi` bauen & als Artefakt hochladen
- Job 4: Release-Summary (Markdown-Report)
- [x] `CHANGELOG.md` angelegt (Keep-a-Changelog-Format, SemVer)
---
## 🔴 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)
1. **Icons erstellen** — Vor dem ersten echten Release-Build müssen `icon.png`, `icon.ico` und
`icon.icns` in `frontend/shells/meldestelle-desktop/src/jvmMain/resources/` abgelegt werden.
Siehe `ICONS_PLACEHOLDER.md` für Anforderungen und ImageMagick-Schnell-Befehle.
2. **Testinstallation** — Nach Icon-Erstellung: `.deb` auf Ubuntu/Debian, `.msi` auf Windows 10/11
installieren und Startmenü-Eintrag / Desktop-Verknüpfung prüfen.
3. **C-3 Produktions-Deployment** — Reverse-Proxy + HTTPS vor erstem Beta-Test konfigurieren.
4. **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 |