# 🐧 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 ```bash # 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) ```bash # 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)