#!/bin/bash # Git Pre-Commit Hook: Melo App Qualitäts-Gate # Läuft automatisch vor jedem git commit export FLUTTER="/home/dustin/development/flutter/bin/flutter" export DART="/home/dustin/development/flutter/bin/dart" export PATH="$HOME/development/flutter/bin:$PATH" echo "🔍 Melo App Qualitäts-Gate gestartet..." # Git reicht GIT_DIR/GIT_INDEX_FILE/GIT_WORK_TREE an Hooks weiter. Flutter # ermittelt seine Version per git im SDK-Verzeichnis — erbt es dabei GIT_DIR, # liest es stattdessen DIESES Repo und erfindet daraus eine SDK-Version. # Betrifft BEIDE Arbeitsbäume, nur unterschiedlich sichtbar: # verlinkter Worktree -> harter Abbruch ("SDK version is 0.0.0-unknown"), # korrekte Commits werden abgelehnt # Haupt-Checkout -> still: Flutter baut sein Werkzeug bei JEDEM Commit # neu (ein bis zwei Minuten pro Commit) # Gemessen: ohne GIT_DIR meldet Flutter 3.44.8/stable, mit GIT_DIR dagegen # 3.48.0-0.2.pre und als Revision einen Commit AUS DIESEM REPO. # Nebeneffekt: Flutter gibt dabei die Remote-URL aus — steht dort ein Token # in der URL, landet es in der Hook-Ausgabe. Das unset schließt auch das. ROOT="$(git rev-parse --show-toplevel)" || exit 1 unset GIT_DIR GIT_INDEX_FILE GIT_WORK_TREE GIT_PREFIX GIT_COMMON_DIR cd "$ROOT" || exit 1 # 1. Dart Analyse echo -n " Prüfe: flutter analyze ... " ANALYZE_OUTPUT=$($FLUTTER analyze 2>&1) if echo "$ANALYZE_OUTPUT" | grep -q "No issues found"; then echo "✅" else echo "❌ FEHLER!" echo "$ANALYZE_OUTPUT" | tail -20 exit 1 fi # 2. Tests echo -n " Prüfe: flutter test ... " TEST_OUTPUT=$($FLUTTER test 2>&1) if echo "$TEST_OUTPUT" | grep -q "All tests passed"; then echo "✅" elif echo "$TEST_OUTPUT" | grep -q "No tests found"; then echo "⚠️ Keine Tests vorhanden (überspringe)" else echo "❌ Tests fehlgeschlagen!" echo "$TEST_OUTPUT" | tail -20 exit 1 fi echo "✅ Alle Prüfungen bestanden! Commit wird freigegeben."