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>
This commit is contained in:
@@ -0,0 +1,144 @@
|
||||
# 🐧 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)
|
||||
Reference in New Issue
Block a user