# 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`