timetracker/.tasks/done/TT-016-makefile.md
2026-08-03 21:51:48 +02:00

3.7 KiB

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

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

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

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