106 lines
3.7 KiB
Markdown
106 lines
3.7 KiB
Markdown
# TT-016 — Makefile erstellen
|
|
|
|
**Type:** Story
|
|
**Priority:** High
|
|
**Labels:** makefile, tooling, build
|
|
**Depends on:** TT-014 (Go-Binary), TT-015 (Retention-Script)
|
|
**Blocks:** TT-017 (Integration-Test)
|
|
|
|
---
|
|
|
|
## Summary
|
|
Erstelle das zentrale `Makefile` mit allen Build-, Test- und Deploy-Targets
|
|
für das Timetrack Flutter-Projekt.
|
|
|
|
## Variablen
|
|
```makefile
|
|
FLUTTER := $(HOME)/flutter/3.41.7/bin/flutter
|
|
JAVA_HOME ?= $(HOME)/java/17.0.13+11
|
|
ANDROID_HOME ?= $(HOME)/Android/sdk
|
|
ADB := $(ANDROID_HOME)/platform-tools/adb
|
|
|
|
BUILD_VERSION ?= 0.1.0
|
|
BUILD_NUMBER ?= 1
|
|
PORT ?= 8888
|
|
|
|
APK_NAME := timetrack-$(BUILD_VERSION)+$(BUILD_NUMBER).apk
|
|
APK_DIR := build/apk
|
|
APK_LATEST := $(APK_DIR)/timetrack.apk
|
|
SERVE_BIN := scripts/serve/serve
|
|
```
|
|
|
|
## Targets
|
|
|
|
### Dev-Targets
|
|
| Target | Befehl | Beschreibung |
|
|
|--------|--------|-------------|
|
|
| `help` | — | Alle Targets mit Beschreibung ausgeben |
|
|
| `install` | `flutter pub get` | Dependencies installieren |
|
|
| `generate` | `flutter pub run build_runner build --delete-conflicting-outputs` | Code-Generierung |
|
|
| `test` | `flutter test` | Alle Tests ausführen |
|
|
| `test_coverage` | `flutter test --coverage` + genhtml | Tests mit Coverage-Report |
|
|
| `analyze` | `flutter analyze` | Statische Analyse |
|
|
| `format` | `dart format lib/ test/` | Code formatieren |
|
|
| `clean` | `flutter clean` + `rm -rf coverage/` | Build-Artefakte löschen |
|
|
|
|
### Build-Targets
|
|
| Target | Beschreibung |
|
|
|--------|-------------|
|
|
| `build_serve` | Go-Binary `scripts/serve/serve` kompilieren |
|
|
| `build_android` | APK (release) + SHA256 + Symlink + Retention |
|
|
| `build_aab` | App Bundle für Play Store |
|
|
| `build_linux` | Linux Desktop-App |
|
|
| `build_web` | Web-App (debug) |
|
|
| `build_all` | APK + Linux + Web nacheinander |
|
|
|
|
### Deploy-Targets
|
|
| Target | Beschreibung |
|
|
|--------|-------------|
|
|
| `install_android` | APK via ADB auf verbundenes Gerät installieren |
|
|
| `deploy_android` | `build_android` + `install_android` |
|
|
| `serve_apk` | Go-Server starten (kompiliert Binary falls nötig) |
|
|
|
|
### Info-Targets
|
|
| Target | Beschreibung |
|
|
|--------|-------------|
|
|
| `db_schema` | Drift-Schema-Version und Tabellennamen anzeigen |
|
|
|
|
## build_android — Detail-Logik
|
|
```makefile
|
|
build_android:
|
|
# 1. JAVA_HOME und ANDROID_HOME prüfen
|
|
# 2. flutter build apk --release --build-name --build-number
|
|
# 3. mkdir -p $(APK_DIR)
|
|
# 4. cp build/app/outputs/flutter-apk/app-release.apk $(APK_DIR)/$(APK_NAME)
|
|
# 5. sha256sum $(APK_DIR)/$(APK_NAME) | tee $(APK_DIR)/$(APK_NAME).sha256
|
|
# 6. ln -sf $(APK_NAME) $(APK_LATEST)
|
|
# 7. bash scripts/apk_retention.sh --dir $(APK_DIR)
|
|
# 8. Ausgabe: Pfad, Größe, SHA256, serve_apk-Hinweis
|
|
```
|
|
|
|
## serve_apk — Dependency auf Binary
|
|
```makefile
|
|
serve_apk: $(SERVE_BIN) # Auto-kompilieren falls binary fehlt
|
|
$(SERVE_BIN) --dir $(APK_DIR) --port $(PORT)
|
|
|
|
$(SERVE_BIN):
|
|
cd scripts/serve && go build -o serve .
|
|
```
|
|
|
|
## Acceptance Criteria
|
|
- [ ] `make help` listet alle Targets mit Beschreibung
|
|
- [ ] `make install` führt `flutter pub get` aus
|
|
- [ ] `make test` führt alle Flutter-Tests aus
|
|
- [ ] `make analyze` führt `flutter analyze` aus
|
|
- [ ] `make format` formatiert Dart-Code
|
|
- [ ] `make clean` löscht Build-Artefakte
|
|
- [ ] `make build_serve` kompiliert das Go-Binary
|
|
- [ ] `make serve_apk` kompiliert Binary automatisch falls fehlend
|
|
- [ ] `make build_linux` prüft `ld.lld` und bricht mit Hinweis ab falls fehlend
|
|
- [ ] `make build_web` läuft durch (debug-Build)
|
|
- [ ] `make build_all` führt APK + Linux + Web nacheinander aus
|
|
- [ ] `make db_schema` zeigt Schema-Version und Tabellen an
|
|
- [ ] `BUILD_VERSION=0.2.0 BUILD_NUMBER=5 make build_android` nutzt die übergebenen Werte
|
|
|
|
## Files to create
|
|
- `Makefile`
|