monacousa-portal/docker/migrate/entrypoint.sh

59 lines
1.8 KiB
Bash
Raw Normal View History

#!/bin/bash
set -e
echo "=== Monaco USA Portal - Migration Runner ==="
# Wait for database to be ready
echo "Waiting for database..."
retries=30
while [ $retries -gt 0 ]; do
if pg_isready -h "$PGHOST" -U "$PGUSER" > /dev/null 2>&1; then
echo "Database is ready."
break
fi
retries=$((retries - 1))
sleep 2
done
if [ $retries -eq 0 ]; then
echo "ERROR: Database did not become ready in time"
exit 1
fi
# Wait for storage-api to create its tables (it starts after db)
echo "Waiting for storage-api to create tables..."
storage_retries=30
while [ $storage_retries -gt 0 ]; do
has_table=$(psql -h "$PGHOST" -U "$PGUSER" -d "$PGDATABASE" -tAc \
"SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'storage' AND table_name = 'objects'" 2>/dev/null || echo "0")
if [ "$has_table" = "1" ]; then
echo "Storage tables found."
break
fi
storage_retries=$((storage_retries - 1))
sleep 2
done
if [ $storage_retries -eq 0 ]; then
echo "WARNING: storage.objects table not found after 60s - storage policies will be skipped in post-deploy"
fi
# Detect fresh vs existing database
has_members=$(psql -h "$PGHOST" -U "$PGUSER" -d "$PGDATABASE" -tAc \
"SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'public' AND table_name = 'members'" 2>/dev/null || echo "0")
if [ "$has_members" = "0" ]; then
echo "=== Fresh database detected - running init.sql ==="
psql -h "$PGHOST" -U "$PGUSER" -d "$PGDATABASE" -f /sql/init.sql
echo "=== init.sql completed ==="
else
echo "=== Existing database detected - skipping init.sql ==="
fi
# Always run post-deploy (idempotent)
echo "=== Running post-deploy.sql ==="
psql -h "$PGHOST" -U "$PGUSER" -d "$PGDATABASE" -f /sql/post-deploy.sql
echo "=== post-deploy.sql completed ==="
echo "=== Migration runner finished successfully ==="