meldestelle/docs/99_Journal/2026-04-03_DevOps_C1_C2_Desktop-Packaging_SemVer.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

5.6 KiB
Raw Blame History

🐧 DevOps — Sprint C: Desktop-Packaging & Semantic Versioning

Datum: 3. April 2026 Agent: 🐧 DevOps Engineer Sprint: C — Aufgaben C-1 und C-2 Status: Implementiert (Icons ausstehend)


📋 Zusammenfassung

Diese Session implementiert die Desktop-Packaging-Konfiguration (C-1) und führt Semantic Versioning mit Git-Tagging ein (C-2). Beide Aufgaben sind vollständig konfiguriert; der einzige verbleibende manuelle Schritt ist die Erstellung der App-Icons durch 🖌️ UI/UX.


C-1 — Desktop-Packaging konfiguriert

Was wurde gemacht

frontend/shells/meldestelle-desktop/build.gradle.kts vollständig überarbeitet:

  • nativeDistributions für alle drei Plattformen konfiguriert:
    • Linux .deb: packageDeb Task, PNG-Icon, debMaintainer, menuGroup, shortcut
    • Windows .msi: packageMsi Task, ICO-Icon, upgradeUuid (unveränderliche GUID!), shortcut, dirChooser
    • macOS .dmg: packageDmg Task, ICNS-Icon, bundleID, appCategory
  • Gemeinsame Metadaten: packageName, description, vendor, copyright, licenseFile
  • Eingebettetes JRE mit minimalem Footprint (modules(...))
  • JVM-Args für gepackte App: -Xms128m -Xmx512m -Dfile.encoding=UTF-8
  • Version wird automatisch aus version.properties gelesen (kein Hardcode)

frontend/shells/meldestelle-desktop/src/jvmMain/resources/ICONS_PLACEHOLDER.md angelegt:

  • Dokumentiert Icon-Anforderungen (PNG 512×512, ICO Multi-Size, ICNS 1024×1024)
  • ImageMagick-Schnell-Befehle für Konvertierung

Gradle-Befehle

# Linux .deb bauen
./gradlew :frontend:shells:meldestelle-desktop:packageDeb

# Windows .msi bauen (auf Windows-Runner)
./gradlew :frontend:shells:meldestelle-desktop:packageMsi

# macOS .dmg bauen (auf macOS-Runner)
./gradlew :frontend:shells:meldestelle-desktop:packageDmg

# Alle Plattformen (auf jeweiligem OS)
./gradlew :frontend:shells:meldestelle-desktop:packageReleaseDistributables

Offene Punkte

# Aufgabe Zuständig
1 icon.png (512×512 PNG) erstellen 🖌️ UI/UX
2 icon.ico (Multi-Size ICO) erstellen 🖌️ UI/UX
3 icon.icns (1024×1024 ICNS) erstellen 🖌️ UI/UX
4 Testinstallation .deb auf Ubuntu/Debian 🐧 DevOps
5 Testinstallation .msi auf Windows 10/11 🐧 DevOps

C-2 — Semantic Versioning eingeführt

Was wurde gemacht

version.properties (neu, Root-Projekt):

  • Single Source of Truth für alle Versionen
  • Format: VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH, VERSION_QUALIFIER
  • Aktuell: 1.0.0-SNAPSHOT

build.gradle.kts (Root):

  • Version wird aus version.properties gelesen statt hardcoded "1.0.0-SNAPSHOT"
  • Alle Subprojekte erben die Version automatisch via allprojects { version = semVer }

.gitea/workflows/release.yml (neu):

Trigger: version.properties geändert auf main/master  ODER  manuell (Dry-Run-Option)
  │
  ├── Job 1: tag-release
  │     ├── Version aus version.properties lesen
  │     ├── Prüfen ob Tag bereits existiert (Idempotenz)
  │     └── Git-Tag "vMAJOR.MINOR.PATCH" erstellen & pushen
  │
  ├── Job 2: package-linux  (ubuntu-latest)
  │     └── packageDeb → Artefakt hochladen
  │
  ├── Job 3: package-windows  (windows-latest)
  │     └── packageMsi → Artefakt hochladen
  │
  └── Job 4: release-summary
        └── Markdown-Report mit Status aller Jobs

CHANGELOG.md (neu):

  • Keep-a-Changelog-Format
  • SemVer-Erklärung im Header
  • [Unreleased] Sektion für laufende Änderungen
  • [1.0.0-SNAPSHOT] mit Sprint A+B Zusammenfassung

Release-Workflow (manuell)

# 1. Version erhöhen
vim version.properties   # z. B. VERSION_MINOR=1, VERSION_QUALIFIER=

# 2. CHANGELOG aktualisieren
vim CHANGELOG.md         # [Unreleased] → [1.1.0] mit Datum

# 3. Commit & Push → CI erstellt automatisch Tag v1.1.0
git add version.properties CHANGELOG.md
git commit -m "chore: release v1.1.0"
git push origin main
# → CI: Tag v1.1.0 wird gesetzt, .deb und .msi werden gebaut

🗂️ Geänderte Dateien

Datei Art Beschreibung
version.properties NEU Zentrale SemVer-Quelle
build.gradle.kts GEÄNDERT Version aus version.properties
frontend/shells/meldestelle-desktop/build.gradle.kts GEÄNDERT Vollständige Packaging-Konfiguration
frontend/shells/meldestelle-desktop/src/jvmMain/resources/ICONS_PLACEHOLDER.md NEU Icon-Anforderungen
.gitea/workflows/release.yml NEU Release-Workflow
CHANGELOG.md NEU Keep-a-Changelog
docs/04_Agents/Roadmaps/DevOps_Roadmap.md GEÄNDERT C-1/C-2 als erledigt markiert

🔗 Nächste Schritte

  1. 🖌️ UI/UX → Icons erstellen und in src/jvmMain/resources/ ablegen
  2. 🐧 DevOps → Testinstallation nach Icon-Erstellung
  3. 🐧 DevOps → C-3 Produktions-Deployment (nächste Session)