- 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>
5.6 KiB
5.6 KiB
🐧 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:
nativeDistributionsfür alle drei Plattformen konfiguriert:- Linux
.deb:packageDebTask, PNG-Icon,debMaintainer,menuGroup,shortcut - Windows
.msi:packageMsiTask, ICO-Icon,upgradeUuid(unveränderliche GUID!),shortcut,dirChooser - macOS
.dmg:packageDmgTask, ICNS-Icon,bundleID,appCategory
- Linux
- 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.propertiesgelesen (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.propertiesgelesen 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
- 🖌️ UI/UX → Icons erstellen und in
src/jvmMain/resources/ablegen - 🐧 DevOps → Testinstallation nach Icon-Erstellung
- 🐧 DevOps → C-3 Produktions-Deployment (nächste Session)