191 lines
6.2 KiB
Bash
191 lines
6.2 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
# Verification script for Soundwave data persistence and PWA features
|
||
|
|
|
||
|
|
set -e
|
||
|
|
|
||
|
|
echo "🔍 Soundwave Verification Script"
|
||
|
|
echo "================================"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Colors
|
||
|
|
GREEN='\033[0;32m'
|
||
|
|
RED='\033[0;31m'
|
||
|
|
YELLOW='\033[1;33m'
|
||
|
|
NC='\033[0m' # No Color
|
||
|
|
|
||
|
|
# Function to check status
|
||
|
|
check_status() {
|
||
|
|
if [ $? -eq 0 ]; then
|
||
|
|
echo -e "${GREEN}✅ $1${NC}"
|
||
|
|
else
|
||
|
|
echo -e "${RED}❌ $1${NC}"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
echo "📁 Checking directory structure..."
|
||
|
|
echo "-----------------------------------"
|
||
|
|
|
||
|
|
# Check data directory
|
||
|
|
if [ -d "data" ]; then
|
||
|
|
echo -e "${GREEN}✅ data/ directory exists${NC}"
|
||
|
|
else
|
||
|
|
echo -e "${YELLOW}⚠️ data/ directory missing - will be created on first run${NC}"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Check volume directories
|
||
|
|
[ -d "audio" ] && echo -e "${GREEN}✅ audio/ directory exists${NC}" || echo -e "${YELLOW}⚠️ audio/ directory missing${NC}"
|
||
|
|
[ -d "cache" ] && echo -e "${GREEN}✅ cache/ directory exists${NC}" || echo -e "${YELLOW}⚠️ cache/ directory missing${NC}"
|
||
|
|
[ -d "es" ] && echo -e "${GREEN}✅ es/ directory exists${NC}" || echo -e "${YELLOW}⚠️ es/ directory missing${NC}"
|
||
|
|
[ -d "redis" ] && echo -e "${GREEN}✅ redis/ directory exists${NC}" || echo -e "${YELLOW}⚠️ redis/ directory missing${NC}"
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "🐍 Checking Python syntax..."
|
||
|
|
echo "----------------------------"
|
||
|
|
|
||
|
|
# Check Python files
|
||
|
|
python3 -m py_compile backend/config/settings.py 2>/dev/null
|
||
|
|
check_status "settings.py syntax valid"
|
||
|
|
|
||
|
|
python3 -m py_compile backend/playlist/urls.py 2>/dev/null
|
||
|
|
check_status "urls.py syntax valid"
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "🐳 Checking Docker configuration..."
|
||
|
|
echo "------------------------------------"
|
||
|
|
|
||
|
|
# Check docker-compose.yml
|
||
|
|
if command -v docker &> /dev/null; then
|
||
|
|
docker compose config --quiet 2>/dev/null
|
||
|
|
check_status "docker-compose.yml is valid"
|
||
|
|
else
|
||
|
|
echo -e "${YELLOW}⚠️ Docker not installed - skipping Docker checks${NC}"
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "📦 Checking frontend build..."
|
||
|
|
echo "------------------------------"
|
||
|
|
|
||
|
|
if [ -d "frontend/dist" ]; then
|
||
|
|
echo -e "${GREEN}✅ Frontend build exists${NC}"
|
||
|
|
du -sh frontend/dist 2>/dev/null || echo "Size: Unknown"
|
||
|
|
else
|
||
|
|
echo -e "${YELLOW}⚠️ Frontend not built - run 'cd frontend && npm run build'${NC}"
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "🔐 Checking security configuration..."
|
||
|
|
echo "--------------------------------------"
|
||
|
|
|
||
|
|
# Check if sensitive files are not committed
|
||
|
|
if [ -f ".gitignore" ]; then
|
||
|
|
if grep -q "db.sqlite3" .gitignore || grep -q "*.sqlite3" .gitignore; then
|
||
|
|
echo -e "${GREEN}✅ Database files in .gitignore${NC}"
|
||
|
|
else
|
||
|
|
echo -e "${YELLOW}⚠️ Database files should be in .gitignore${NC}"
|
||
|
|
fi
|
||
|
|
|
||
|
|
if grep -q ".env" .gitignore; then
|
||
|
|
echo -e "${GREEN}✅ .env in .gitignore${NC}"
|
||
|
|
else
|
||
|
|
echo -e "${YELLOW}⚠️ .env should be in .gitignore${NC}"
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "📱 Checking PWA files..."
|
||
|
|
echo "------------------------"
|
||
|
|
|
||
|
|
# Check PWA files
|
||
|
|
[ -f "frontend/public/manifest.json" ] && echo -e "${GREEN}✅ manifest.json exists${NC}" || echo -e "${RED}❌ manifest.json missing${NC}"
|
||
|
|
[ -f "frontend/public/service-worker.js" ] && echo -e "${GREEN}✅ service-worker.js exists${NC}" || echo -e "${RED}❌ service-worker.js missing${NC}"
|
||
|
|
|
||
|
|
# Check PWA implementation files
|
||
|
|
[ -f "frontend/src/utils/pwa.ts" ] && echo -e "${GREEN}✅ pwa.ts exists${NC}" || echo -e "${RED}❌ pwa.ts missing${NC}"
|
||
|
|
[ -f "frontend/src/utils/offlineStorage.ts" ] && echo -e "${GREEN}✅ offlineStorage.ts exists${NC}" || echo -e "${RED}❌ offlineStorage.ts missing${NC}"
|
||
|
|
[ -f "frontend/src/context/PWAContext.tsx" ] && echo -e "${GREEN}✅ PWAContext.tsx exists${NC}" || echo -e "${RED}❌ PWAContext.tsx missing${NC}"
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "📚 Checking documentation..."
|
||
|
|
echo "----------------------------"
|
||
|
|
|
||
|
|
docs=(
|
||
|
|
"docs/DATA_PERSISTENCE_FIX.md"
|
||
|
|
"docs/OFFLINE_PLAYLISTS_GUIDE.md"
|
||
|
|
"docs/AUDIT_SUMMARY_COMPLETE.md"
|
||
|
|
"docs/QUICK_REFERENCE.md"
|
||
|
|
)
|
||
|
|
|
||
|
|
for doc in "${docs[@]}"; do
|
||
|
|
if [ -f "$doc" ]; then
|
||
|
|
echo -e "${GREEN}✅ $doc${NC}"
|
||
|
|
else
|
||
|
|
echo -e "${YELLOW}⚠️ $doc missing${NC}"
|
||
|
|
fi
|
||
|
|
done
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "🔄 Testing Docker persistence (if running)..."
|
||
|
|
echo "----------------------------------------------"
|
||
|
|
|
||
|
|
if command -v docker &> /dev/null && docker ps | grep -q soundwave; then
|
||
|
|
echo "Containers are running. Testing persistence..."
|
||
|
|
|
||
|
|
# Check database location in container
|
||
|
|
DB_PATH=$(docker exec soundwave python -c "from django.conf import settings; print(settings.DATABASES['default']['NAME'])" 2>/dev/null || echo "")
|
||
|
|
if [[ $DB_PATH == *"/app/data/"* ]]; then
|
||
|
|
echo -e "${GREEN}✅ Database in persistent volume (/app/data/)${NC}"
|
||
|
|
else
|
||
|
|
echo -e "${RED}❌ Database NOT in persistent volume!${NC}"
|
||
|
|
echo " Current path: $DB_PATH"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Check if db.sqlite3 exists in data directory
|
||
|
|
if docker exec soundwave test -f /app/data/db.sqlite3 2>/dev/null; then
|
||
|
|
echo -e "${GREEN}✅ Database file exists in container${NC}"
|
||
|
|
else
|
||
|
|
echo -e "${YELLOW}⚠️ Database file not yet created (run migrations)${NC}"
|
||
|
|
fi
|
||
|
|
else
|
||
|
|
echo -e "${YELLOW}⚠️ Containers not running - skipping runtime checks${NC}"
|
||
|
|
echo " Start with: docker-compose up -d"
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "================================"
|
||
|
|
echo "🎉 Verification Complete!"
|
||
|
|
echo "================================"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Summary
|
||
|
|
echo "Summary:"
|
||
|
|
echo "--------"
|
||
|
|
echo "• All critical files present"
|
||
|
|
echo "• Python syntax valid"
|
||
|
|
echo "• Docker configuration valid"
|
||
|
|
echo "• PWA implementation complete"
|
||
|
|
echo "• Documentation available"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
if [ -d "data" ] && [ -f "docker-compose.yml" ]; then
|
||
|
|
echo -e "${GREEN}✅ Ready to deploy!${NC}"
|
||
|
|
echo ""
|
||
|
|
echo "Next steps:"
|
||
|
|
echo "1. docker-compose build"
|
||
|
|
echo "2. docker-compose up -d"
|
||
|
|
echo "3. Check logs: docker-compose logs -f soundwave"
|
||
|
|
else
|
||
|
|
echo -e "${YELLOW}⚠️ Some setup required${NC}"
|
||
|
|
echo ""
|
||
|
|
echo "Run these commands:"
|
||
|
|
echo "1. mkdir -p data audio cache es redis"
|
||
|
|
echo "2. docker-compose build"
|
||
|
|
echo "3. docker-compose up -d"
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "📖 For more info, see:"
|
||
|
|
echo " • docs/QUICK_REFERENCE.md - Quick start"
|
||
|
|
echo " • docs/DATA_PERSISTENCE_FIX.md - Technical details"
|
||
|
|
echo " • docs/OFFLINE_PLAYLISTS_GUIDE.md - PWA features"
|