178 lines
5.2 KiB
Bash
Executable File
178 lines
5.2 KiB
Bash
Executable File
#!/bin/bash
|
|
# Environment validation for Trax project
|
|
|
|
set -e
|
|
|
|
# Color codes
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
RED='\033[0;31m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
echo -e "${BLUE}🔍 Trax Environment Check${NC}"
|
|
echo "================================"
|
|
|
|
ISSUES=0
|
|
|
|
# Check Python version
|
|
echo -e "\n${YELLOW}Python:${NC}"
|
|
if command -v python3.11 &> /dev/null; then
|
|
PYTHON_CMD="python3.11"
|
|
version=$($PYTHON_CMD --version | cut -d' ' -f2)
|
|
echo -e " ${GREEN}✅ Python $version${NC}"
|
|
elif command -v python3 &> /dev/null; then
|
|
PYTHON_CMD="python3"
|
|
version=$($PYTHON_CMD --version | cut -d' ' -f2)
|
|
major=$(echo $version | cut -d'.' -f1)
|
|
minor=$(echo $version | cut -d'.' -f2)
|
|
if [ "$major" -eq 3 ] && [ "$minor" -ge 11 ]; then
|
|
echo -e " ${GREEN}✅ Python $version${NC}"
|
|
else
|
|
echo -e " ${RED}❌ Python 3.11+ required (found $version)${NC}"
|
|
((ISSUES++))
|
|
fi
|
|
else
|
|
echo -e " ${RED}❌ Python not found${NC}"
|
|
((ISSUES++))
|
|
fi
|
|
|
|
# Check uv
|
|
echo -e "\n${YELLOW}Package Manager:${NC}"
|
|
if command -v uv &> /dev/null; then
|
|
version=$(uv --version | cut -d' ' -f2)
|
|
echo -e " ${GREEN}✅ uv $version${NC}"
|
|
else
|
|
echo -e " ${RED}❌ uv not installed${NC}"
|
|
echo -e " ${YELLOW}💡 Install with: curl -LsSf https://astral.sh/uv/install.sh | sh${NC}"
|
|
((ISSUES++))
|
|
fi
|
|
|
|
# Check virtual environment
|
|
echo -e "\n${YELLOW}Virtual Environment:${NC}"
|
|
if [ -d ".venv" ]; then
|
|
echo -e " ${GREEN}✅ .venv exists${NC}"
|
|
if [ -f ".venv/bin/activate" ]; then
|
|
echo -e " ${GREEN}✅ Activation script found${NC}"
|
|
else
|
|
echo -e " ${RED}❌ Activation script missing${NC}"
|
|
((ISSUES++))
|
|
fi
|
|
else
|
|
echo -e " ${YELLOW}⚠️ Virtual environment not created${NC}"
|
|
echo -e " ${YELLOW}💡 Run: uv venv${NC}"
|
|
fi
|
|
|
|
# Check API keys
|
|
echo -e "\n${YELLOW}API Keys:${NC}"
|
|
cd "$(dirname "$0")/.."
|
|
source .venv/bin/activate 2>/dev/null || true
|
|
|
|
python3 << 'EOF'
|
|
import sys
|
|
sys.path.insert(0, 'src')
|
|
try:
|
|
from config import config
|
|
|
|
# Essential keys
|
|
essential = {
|
|
'DEEPSEEK_API_KEY': config.DEEPSEEK_API_KEY,
|
|
'ANTHROPIC_API_KEY': config.ANTHROPIC_API_KEY,
|
|
}
|
|
|
|
# Optional keys
|
|
optional = {
|
|
'OPENAI_API_KEY': config.OPENAI_API_KEY,
|
|
'PERPLEXITY_API_KEY': config.PERPLEXITY_API_KEY,
|
|
'DIRECTUS_TOKEN': config.DIRECTUS_TOKEN,
|
|
}
|
|
|
|
print(" Essential:")
|
|
for key, value in essential.items():
|
|
if value:
|
|
print(f" ✅ {key}: {'*' * 10}")
|
|
else:
|
|
print(f" ❌ {key}: Not set")
|
|
|
|
print(" Optional:")
|
|
for key, value in optional.items():
|
|
if value:
|
|
print(f" ✅ {key}: {'*' * 10}")
|
|
else:
|
|
print(f" ⚠️ {key}: Not set")
|
|
|
|
# Show available services
|
|
services = config.get_available_ai_services()
|
|
if services:
|
|
print(f"\n Available AI Services: {', '.join(services)}")
|
|
|
|
except Exception as e:
|
|
print(f" ❌ Error checking API keys: {e}")
|
|
sys.exit(1)
|
|
EOF
|
|
|
|
# Check PostgreSQL
|
|
echo -e "\n${YELLOW}PostgreSQL:${NC}"
|
|
if command -v psql &> /dev/null; then
|
|
version=$(psql --version | head -1)
|
|
echo -e " ${GREEN}✅ $version${NC}"
|
|
|
|
# Try to connect to default database
|
|
if psql -U postgres -d postgres -c "SELECT 1;" &> /dev/null; then
|
|
echo -e " ${GREEN}✅ Can connect to PostgreSQL${NC}"
|
|
else
|
|
echo -e " ${YELLOW}⚠️ Cannot connect to PostgreSQL${NC}"
|
|
echo -e " ${YELLOW}💡 Check your PostgreSQL service is running${NC}"
|
|
fi
|
|
else
|
|
echo -e " ${RED}❌ PostgreSQL not installed${NC}"
|
|
echo -e " ${YELLOW}💡 Install with: brew install postgresql@15${NC}"
|
|
((ISSUES++))
|
|
fi
|
|
|
|
# Check FFmpeg
|
|
echo -e "\n${YELLOW}FFmpeg:${NC}"
|
|
if command -v ffmpeg &> /dev/null; then
|
|
version=$(ffmpeg -version | head -1)
|
|
echo -e " ${GREEN}✅ $version${NC}"
|
|
else
|
|
echo -e " ${RED}❌ FFmpeg not installed${NC}"
|
|
echo -e " ${YELLOW}💡 Install with: brew install ffmpeg${NC}"
|
|
((ISSUES++))
|
|
fi
|
|
|
|
# Check Task Master
|
|
echo -e "\n${YELLOW}Task Master:${NC}"
|
|
if [ -d ".taskmaster" ]; then
|
|
echo -e " ${GREEN}✅ .taskmaster directory exists${NC}"
|
|
if [ -f ".taskmaster/tasks/tasks.json" ]; then
|
|
task_count=$(python3 -c "import json; print(len(json.load(open('.taskmaster/tasks/tasks.json'))['tasks']))" 2>/dev/null || echo "0")
|
|
echo -e " ${GREEN}✅ tasks.json found ($task_count tasks)${NC}"
|
|
else
|
|
echo -e " ${YELLOW}⚠️ tasks.json not found${NC}"
|
|
fi
|
|
else
|
|
echo -e " ${YELLOW}⚠️ Task Master not initialized${NC}"
|
|
echo -e " ${YELLOW}💡 Run: task-master init${NC}"
|
|
fi
|
|
|
|
# Check project structure
|
|
echo -e "\n${YELLOW}Project Structure:${NC}"
|
|
required_dirs=("src" "tests" "docs" "scripts" "data")
|
|
for dir in "${required_dirs[@]}"; do
|
|
if [ -d "$dir" ]; then
|
|
echo -e " ${GREEN}✅ $dir/${NC}"
|
|
else
|
|
echo -e " ${YELLOW}⚠️ $dir/ missing${NC}"
|
|
fi
|
|
done
|
|
|
|
# Summary
|
|
echo -e "\n${BLUE}Summary:${NC}"
|
|
echo "================================"
|
|
if [ $ISSUES -eq 0 ]; then
|
|
echo -e "${GREEN}✅ Environment is ready!${NC}"
|
|
else
|
|
echo -e "${RED}❌ Found $ISSUES critical issues${NC}"
|
|
echo -e "${YELLOW}Run setup_dev.sh to fix most issues${NC}"
|
|
fi |