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

6.3 KiB
Raw Blame History

🐧 [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-*.yaml geprüft
    • Lokale Entwicklungsumgebung startet mit einem einzigen Befehl
    • Healthchecks für alle Services definiert

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)
  • 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.0 aktualisiert

Sprint C — Abgeschlossen

  • C-1 | Desktop-App Packaging konfiguriert

    • compose.desktop.nativeDistributions vollständig in build.gradle.kts konfiguriert
    • Linux: .deb-Paket — packageDeb Task, Icon PNG 512×512, debMaintainer, menuGroup
    • Windows: .msi-Installer — packageMsi Task, Icon ICO, upgradeUuid, menuGroup, shortcut
    • macOS: .dmg-Image — packageDmg Task, 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.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)
  • C-2 | Semantic Versioning eingeführt

    • Versionierungsschema definiert: MAJOR.MINOR.PATCH[-QUALIFIER]
    • Zentrale Versionsquelle: version.properties im Root-Projekt (Single Source of Truth)
    • Root build.gradle.kts: Version wird aus version.properties gelesen (kein Hardcode mehr)
    • Desktop build.gradle.kts: packageVersion aus version.properties (reines MAJOR.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.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)
    • 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