Files
usda-vision/scripts/docker-compose-reset.sh
salirezav 8cb45cbe03 Refactor Supabase services in docker-compose.yml for better organization and testing
- Commented out all Supabase services to facilitate testing with Supabase CLI.
- Updated README to include Supabase directory in project structure.
- Adjusted documentation for migration paths in Supabase Docker Compose guide.
- Enhanced docker-compose-reset.sh to explicitly remove Supabase volumes and wait for migrations to complete.
2025-12-18 18:27:04 -05:00

135 lines
4.5 KiB
Bash
Executable File

#!/bin/bash
# Docker Compose Reset Script
# This script performs a complete reset of the Docker Compose environment:
# - Stops and removes containers, networks, and volumes
# - Explicitly removes Supabase volumes (supabase-db, supabase-storage)
# - Prunes unused Docker resources (containers, images, networks, volumes)
# - Rebuilds and starts all services in detached mode
# - Waits for Supabase migrations to complete
set -e # Exit on error
echo "=== Docker Compose Reset ==="
echo ""
# Get the project root directory (parent of scripts directory)
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
# Change to project root directory
cd "$PROJECT_ROOT"
echo "Working directory: $PROJECT_ROOT"
echo ""
echo "1. Stopping and removing containers, networks, and volumes..."
docker compose down -v
echo ""
echo "2. Removing Supabase volumes explicitly..."
# Find and remove Supabase volumes (they may be named with project prefix)
# Docker Compose typically names volumes as: <project>_<volume-name>
# Try to find volumes containing 'supabase-db' or 'supabase-storage'
SUPABASE_VOLUMES=$(docker volume ls --format "{{.Name}}" | grep -E "(supabase-db|supabase-storage)" || true)
if [ -n "$SUPABASE_VOLUMES" ]; then
echo "$SUPABASE_VOLUMES" | while read -r volume; do
echo " - Removing Supabase volume: $volume"
docker volume rm "$volume" 2>/dev/null || echo " (Volume may have been removed already or is in use)"
done
else
echo " - No Supabase volumes found (they may have been removed already)"
fi
echo ""
echo "3. Pruning unused Docker resources..."
echo " - Pruning unused containers..."
docker container prune -f
echo " - Pruning unused images..."
docker image prune -af
echo " - Pruning unused networks..."
docker network prune -f
echo " - Pruning unused volumes..."
docker volume prune -f
echo ""
echo "4. Rebuilding and starting all services in detached mode..."
docker compose up --build -d
echo ""
echo "5. Waiting for Supabase database to be ready..."
# Wait for database to be healthy
MAX_WAIT=60
WAIT_COUNT=0
while [ $WAIT_COUNT -lt $MAX_WAIT ]; do
if docker compose ps supabase-db | grep -q "healthy"; then
echo " ✓ Supabase database is healthy"
break
fi
echo " Waiting for database... ($WAIT_COUNT/$MAX_WAIT seconds)"
sleep 2
WAIT_COUNT=$((WAIT_COUNT + 2))
done
if [ $WAIT_COUNT -ge $MAX_WAIT ]; then
echo " ⚠ Warning: Database may not be fully ready"
fi
echo ""
echo "6. Waiting for Supabase migrations to complete..."
# Wait for migration container to complete (it has restart: "no", so it should exit when done)
MAX_WAIT=120
WAIT_COUNT=0
MIGRATE_CONTAINER="usda-vision-supabase-migrate"
while [ $WAIT_COUNT -lt $MAX_WAIT ]; do
# Check if container exists and its status
if docker ps -a --format "{{.Names}}\t{{.Status}}" | grep -q "^${MIGRATE_CONTAINER}"; then
CONTAINER_STATUS=$(docker ps -a --format "{{.Names}}\t{{.Status}}" | grep "^${MIGRATE_CONTAINER}" | awk '{print $2}')
if echo "$CONTAINER_STATUS" | grep -q "Exited"; then
EXIT_CODE=$(docker inspect "$MIGRATE_CONTAINER" --format='{{.State.ExitCode}}' 2>/dev/null || echo "1")
if [ "$EXIT_CODE" = "0" ]; then
echo " ✓ Supabase migrations completed successfully"
break
else
echo " ⚠ Warning: Migrations may have failed (exit code: $EXIT_CODE)"
echo " Check logs with: docker compose logs supabase-migrate"
break
fi
fi
fi
echo " Waiting for migrations... ($WAIT_COUNT/$MAX_WAIT seconds)"
sleep 2
WAIT_COUNT=$((WAIT_COUNT + 2))
done
if [ $WAIT_COUNT -ge $MAX_WAIT ]; then
echo " ⚠ Warning: Migration timeout - check logs with: docker compose logs supabase-migrate"
echo " Note: Migrations may still be running or the container may not have started yet"
fi
echo ""
echo "7. Checking service status..."
docker compose ps
echo ""
echo "=== Docker Compose Reset Complete ==="
echo ""
echo "All services have been reset and are running in detached mode."
echo ""
echo "Useful commands:"
echo " - View all logs: docker compose logs -f"
echo " - View Supabase logs: docker compose logs -f supabase-db supabase-rest supabase-auth"
echo " - View migration logs: docker compose logs supabase-migrate"
echo " - Check service status: docker compose ps"
echo " - Access Supabase Studio: http://localhost:54323"
echo ""