Datavision / start.sh
DataVision CI/CD Bot
release: clean production build for HuggingFace Space
09801ca
Raw
History Blame Contribute Delete
2.89 kB
#!/bin/bash
# DataVision AI — Production Startup script for Hugging Face Spaces & Containers
echo "🚀 Starting DataVision AI Platform (Fresh Deployment)..."
cd /app/backend
# Initialize fresh database migrations and seed default roles/admin user if DATABASE_URL is present
if [ -n "$DATABASE_URL" ]; then
echo "📦 [1/2] Initializing fresh database schema..."
# Auto-healing check for legacy v1 schema or orphan tables
python -c "
import asyncio
from sqlalchemy import text
from database.db import engine
async def auto_clean_legacy_schema():
try:
async with engine.begin() as conn:
# Check if old v1 'profiles' table exists
res = await conn.execute(text(\"SELECT EXISTS (SELECT FROM information_schema.tables WHERE table_name = 'profiles')\"))
has_profiles = res.scalar()
if has_profiles:
print('⚠️ Legacy v1 database schema detected. Performing automated fresh schema reset...')
await conn.execute(text('DROP SCHEMA public CASCADE'))
await conn.execute(text('CREATE SCHEMA public'))
await conn.execute(text('GRANT ALL ON SCHEMA public TO public'))
except Exception as e:
print(f'DB verification notice: {e}')
asyncio.run(auto_clean_legacy_schema())
" 2>/dev/null || true
# Heal alembic version if tables exist but version was dropped
python -c "
import asyncio
from sqlalchemy import text
from database.db import engine
async def heal_alembic():
try:
async with engine.begin() as conn:
res = await conn.execute(text(\"SELECT EXISTS (SELECT FROM information_schema.tables WHERE table_name = 'audit_logs')\"))
if res.scalar():
res_ver = await conn.execute(text(\"SELECT EXISTS (SELECT FROM information_schema.tables WHERE table_name = 'alembic_version')\"))
if not res_ver.scalar():
print('Healing missing alembic_version...')
await conn.execute(text('CREATE TABLE alembic_version (version_num VARCHAR(32) NOT NULL, CONSTRAINT alembic_version_pkc PRIMARY KEY (version_num))'))
await conn.execute(text(\"INSERT INTO alembic_version (version_num) VALUES ('008079ed9ce8')\"))
except Exception as e:
print(f'Alembic heal error: {e}')
asyncio.run(heal_alembic())
" 2>/dev/null || true
# Run migrations to create any missing tables
alembic upgrade head || echo "⚠️ Migration warning: check DB logs"
echo "🌱 [2/2] Seeding fresh system roles, permissions, and super admin user..."
python -m app.database.seed || echo "⚠️ Seed warning: check DB logs"
else
echo "ℹ️ DATABASE_URL not set. Running with default configuration."
fi
echo "🟢 Starting FastAPI Uvicorn server via python main.py..."
export PORT=${PORT:-7860}
exec python main.py