flux-core 0.5.2

Declarative task runner with dependency management, parallel execution, and watch mode
#!/bin/bash
# flux - v0.0.4 (Iterasyon 4 - D004 Fix)
# Dinamik task runner - Basitleştirilmiş YAML parsing

CONFIG_FILE="${FLUX_CONFIG:-./flux.yaml}"
TASK=$1

echo "🚀 Flux v0.0.4 - Task Runner"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"

# Config dosyası kontrolü
if [ ! -f "$CONFIG_FILE" ]; then
    echo "❌ Hata: Config dosyası bulunamadı: $CONFIG_FILE"
    exit 1
fi

# D004 Fix: Basitleştirilmiş task listesi - sadece ":" ile biten satırlar
list_tasks() {
    grep -E "^[a-zA-Z_][a-zA-Z0-9_-]*:$" "$CONFIG_FILE" | sed 's/://g' | sed 's/^/  • /'
}

# Help göster
if [ -z "$TASK" ] || [ "$TASK" = "help" ] || [ "$TASK" = "--help" ] || [ "$TASK" = "-h" ]; then
    echo "Kullanım: flux <task>"
    echo ""
    echo "Mevcut task'ler:"
    list_tasks
    exit 0
fi

# Task varlık kontrolü
if ! grep -qE "^${TASK}:$" "$CONFIG_FILE"; then
    echo "❌ Hata: Bilinmeyen task '$TASK'"
    echo ""
    echo "Mevcut task'ler:"
    list_tasks
    exit 1
fi

# D004 Fix: Daha robust YAML parsing
COMMAND=$(sed -n "/^${TASK}:$/,/^[a-zA-Z_]/p" "$CONFIG_FILE" | grep "command:" | head -1 | sed 's/.*command:[ ]*["]*\([^"]*\)["]*/\1/' | sed 's/^[ ]*//')
DESCRIPTION=$(sed -n "/^${TASK}:$/,/^[a-zA-Z_]/p" "$CONFIG_FILE" | grep "description:" | head -1 | sed 's/.*description:[ ]*["]*\([^"]*\)["]*/\1/' | sed 's/^[ ]*//')

echo "📝 Task: $TASK"
echo "📖 Açıklama: ${DESCRIPTION:-'(açıklama yok)'}"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "→ Running: $COMMAND"

if [ -z "$COMMAND" ]; then
    echo "❌ Hata: Task için command tanımlanmamış"
    exit 1
fi

eval "$COMMAND"
LAST_EXIT=$?

echo ""
if [ $LAST_EXIT -eq 0 ]; then
    echo "✅ Task başarıyla tamamlandı: $TASK"
else
    echo "❌ Task başarısız oldu: $TASK (exit code: $LAST_EXIT)"
    exit $LAST_EXIT
fi