# Versioning Strategy ## Semantic Versioning (SemVer) Dieses Projekt folgt [Semantic Versioning 2.0.0](https://semver.org/lang/de/) ### Format: MAJOR.MINOR.PATCH ``` 1.2.3 │ │ └─── PATCH: Bugfixes, keine Breaking Changes │ └───── MINOR: Neue Features, abwärtskompatibel └─────── MAJOR: Breaking Changes, nicht abwärtskompatibel ``` ### Version-Nummern #### MAJOR (X.0.0) Erhöhen wenn: - Breaking Changes an der API - Fundamental neue Architektur - Entfernung von Features - Nicht-kompatible Änderungen **Beispiele:** - `1.0.0` → `2.0.0`: Neue Auth-Struktur, alte Tokens funktionieren nicht mehr - `2.0.0` → `3.0.0`: Kompletter UI-Rewrite #### MINOR (0.X.0) Erhöhen wenn: - Neue Features hinzugefügt - Neue Screens/Module - Abwärtskompatible Funktionalität **Beispiele:** - `0.1.0` → `0.2.0`: Neues Notifications-Modul - `1.0.0` → `1.1.0`: Export-Funktion hinzugefügt - `1.1.0` → `1.2.0`: Dokumenten-Upload implementiert #### PATCH (0.0.X) Erhöhen wenn: - Bugfixes - Performance-Verbesserungen - UI-Anpassungen ohne neue Features - Dependency-Updates **Beispiele:** - `0.1.0` → `0.1.1`: Login-Fehler behoben - `1.0.0` → `1.0.1`: Crash beim Laden behoben - `1.0.1` → `1.0.2`: Performance optimiert ### Pre-Release Versionen #### Alpha (0.0.x-alpha.y) - Sehr frühe Entwicklungsphase - Instabil, viele Bugs erwartet - Nur für interne Tests ``` 0.0.1-alpha.1 0.0.1-alpha.2 ``` #### Beta (0.x.0-beta.y) - Feature-komplett - Testing-Phase - Kann noch Bugs haben ``` 0.1.0-beta.1 0.1.0-beta.2 1.0.0-beta.1 ``` #### Release Candidate (x.x.x-rc.y) - Bereit für Release - Nur kritische Bugfixes - Letzte Tests vor Production ``` 1.0.0-rc.1 1.0.0-rc.2 ``` ### Build Metadata Optional für zusätzliche Informationen: ``` 1.0.0+20231117 1.0.0+build.123 1.0.0-beta.1+exp.sha.5114f85 ``` ## Version Timeline für Fristy ### Phase 1: Initial Development (0.0.x) ``` 0.0.1 - Projekt-Setup, Architektur 0.0.2 - Auth Screens 0.0.3 - Contract CRUD 0.0.4 - Dashboard ``` ### Phase 2: MVP (0.x.0) ``` 0.1.0 - Alpha Release (interne Tests) 0.2.0 - Beta Release (geschlossene Beta-Tester) 0.3.0 - Release Candidate ``` ### Phase 3: Public Release (1.0.0) ``` 1.0.0 - Erster öffentlicher Release 1.1.0 - Dokumenten-Upload 1.2.0 - Erweiterte Statistiken 1.3.0 - Export-Funktion ``` ### Phase 4: Advanced Features (2.0.0) ``` 2.0.0 - Neues Backend, OCR-Feature 2.1.0 - Familie/Team-Sharing 2.2.0 - Kündigungs-Assistent ``` ## Version in Code ### package.json ```json { "version": "0.0.1" } ``` ### App-Anzeige ```typescript // src/shared/constants/index.ts export const APP_VERSION = '0.0.1'; export const BUILD_NUMBER = '1'; ``` ### Native Code **iOS (Info.plist):** ```xml CFBundleShortVersionString 0.0.1 CFBundleVersion 1 ``` **Android (build.gradle):** ```gradle versionName "0.0.1" versionCode 1 ``` ## Git Workflow ### Branch-Strategie ``` main (production) ├── develop (development) │ ├── feature/user-auth │ ├── feature/contract-crud │ └── feature/dashboard ├── release/v1.0.0 └── hotfix/critical-bug ``` ### Commit-Message Format ``` type(scope): subject [optional body] [optional footer] ``` **Types:** - `feat`: Neues Feature - `fix`: Bugfix - `docs`: Dokumentation - `style`: Formatierung, keine Code-Änderung - `refactor`: Code-Refactoring - `test`: Tests hinzufügen/ändern - `chore`: Build-Prozess, Dependencies **Beispiele:** ``` feat(auth): implement login screen fix(contracts): resolve date parsing issue docs(readme): update installation steps refactor(store): simplify contract selectors ``` ### Release-Prozess 1. **Feature entwickeln:** ```bash git checkout develop git checkout -b feature/mein-feature # ... entwickeln ... git commit -m "feat(module): beschreibung" git push origin feature/mein-feature ``` 2. **Release vorbereiten:** ```bash git checkout develop git checkout -b release/v0.1.0 # Version-Nummern aktualisieren # CHANGELOG.md aktualisieren git commit -m "chore(release): bump version to 0.1.0" ``` 3. **Release durchführen:** ```bash git checkout main git merge release/v0.1.0 git tag -a v0.1.0 -m "Release v0.1.0" git push origin main --tags ``` 4. **Hotfix (falls nötig):** ```bash git checkout main git checkout -b hotfix/critical-bug # ... fix ... git commit -m "fix(auth): critical security issue" git checkout main git merge hotfix/critical-bug git tag -a v0.1.1 -m "Hotfix v0.1.1" ``` ## Version-Updates ### Automatisch mit npm ```bash # PATCH: 0.0.1 → 0.0.2 npm version patch # MINOR: 0.0.1 → 0.1.0 npm version minor # MAJOR: 0.1.0 → 1.0.0 npm version major # Pre-Release npm version prerelease --preid=alpha npm version prerelease --preid=beta npm version prerelease --preid=rc ``` ### Manuell 1. `package.json` - version 2. `src/shared/constants/index.ts` - APP_VERSION 3. `ios/Fristy/Info.plist` - CFBundleShortVersionString 4. `android/app/build.gradle` - versionName 5. `CHANGELOG.md` - neue Version dokumentieren ## Best Practices ### ✅ DO - Version-Bump bei jedem Release - CHANGELOG.md aktuell halten - Semantic Versioning strikt befolgen - Tags für alle Releases - Build-Number bei jedem Build erhöhen ### ❌ DON'T - Version-Nummern überspringen - MAJOR-Bump für kleine Changes - Ohne Tag releasen - CHANGELOG vernachlässigen - Inkonsistente Versionen (iOS ≠ Android) ## Tools & Automation ### Empfohlene Tools **standard-version:** ```bash npm install --save-dev standard-version # In package.json "scripts": { "release": "standard-version", "release:minor": "standard-version --release-as minor", "release:major": "standard-version --release-as major" } ``` **commitlint:** ```bash npm install --save-dev @commitlint/cli @commitlint/config-conventional ``` **husky:** ```bash npm install --save-dev husky npx husky install ``` ## App Store / Play Store ### Build Numbers **iOS:** - Version: `1.0.0` (sichtbar für User) - Build: `1`, `2`, `3`, ... (stetig steigend) **Android:** - versionName: `1.0.0` (sichtbar) - versionCode: `1`, `2`, `3`, ... (Integer, stetig steigend) ### Release-Zyklus ``` Development → TestFlight/Internal Testing → Production ↓ ↓ ↓ 0.1.0-beta 0.1.0-rc.1 1.0.0 ``` ## Zusammenfassung - **Aktuell**: `0.0.1` (Initial Setup) - **Nächster Minor**: `0.1.0` (MVP mit allen Basis-Features) - **Nächster Major**: `1.0.0` (Public Release) - **Format**: `MAJOR.MINOR.PATCH` - **Workflow**: Git Flow mit develop/main - **Commits**: Conventional Commits - **Changelog**: Keep a Changelog Format