taskflow / start.sh
Sughan-0077's picture
Fix permissions and robust multi-service startup for HF Spaces
91c0e7f
#!/bin/bash
set -e
echo "========================================"
echo " Taskflow — HF Spaces Startup"
echo "========================================"
# Pre-cleanup to ensure fresh start if restarted
rm -rf /tmp/pg_setup.log /run/postgresql/*.pid /run/nginx.pid 2>/dev/null || true
# ── 1. Initialise PostgreSQL data directory ────────────────────────
if [ ! -f /var/lib/postgresql/data/PG_VERSION ]; then
echo "▶ Initialising PostgreSQL data directory..."
/usr/lib/postgresql/14/bin/initdb -D /var/lib/postgresql/data --auth=trust --username=hfuser
echo " Done."
fi
# ── 2. Start PostgreSQL temporarily to set up DB + user ────────────
echo "▶ Starting PostgreSQL for setup..."
/usr/lib/postgresql/14/bin/pg_ctl -D /var/lib/postgresql/data -l /tmp/pg_setup.log start -w
# Wait for postgres to be ready
for i in {1..20}; do
if pg_isready -h 127.0.0.1 -U hfuser >/dev/null 2>&1; then
echo " PostgreSQL is ready."
break
fi
echo " Waiting for PostgreSQL... ($i)"
sleep 1
done
# ── 3. Create database and user if they don't exist ────────────────
echo "▶ Setting up database..."
psql -h 127.0.0.1 -U hfuser -d postgres -tc "SELECT 1 FROM pg_roles WHERE rolname='taskflow_user'" | grep -q 1 || psql -h 127.0.0.1 -U hfuser -d postgres -c "CREATE USER taskflow_user WITH PASSWORD 'taskflow_hf_secret';"
psql -h 127.0.0.1 -U hfuser -d postgres -tc "SELECT 1 FROM pg_database WHERE datname='taskflow'" | grep -q 1 || psql -h 127.0.0.1 -U hfuser -d postgres -c "CREATE DATABASE taskflow OWNER taskflow_user;"
psql -h 127.0.0.1 -U hfuser -d postgres -c "GRANT ALL PRIVILEGES ON DATABASE taskflow TO taskflow_user;"
echo " Database ready."
# ── 4. Run migrations ──────────────────────────────────────────────
echo "▶ Running migrations..."
cd /app/backend
node src/utils/migrate.js
echo " Migrations complete."
# ── 5. Seed demo data (only if users table is empty) ───────────────
USER_COUNT=$(psql -h 127.0.0.1 -U hfuser -d taskflow -tAc "SELECT COUNT(*) FROM users 2>/dev/null || echo 0" 2>/dev/null || echo "0")
if [ "$USER_COUNT" = "0" ] || [ -z "$USER_COUNT" ]; then
echo "▶ Seeding demo data..."
node src/utils/seed.js || echo " Seed skipped (already exists)."
else
echo " Demo data already present. Skipping seed."
fi
# ── 6. Stop the temporary postgres (supervisord will restart it) ───
echo "▶ Handing off PostgreSQL to supervisord..."
/usr/lib/postgresql/14/bin/pg_ctl -D /var/lib/postgresql/data stop -m fast || true
# ── 7. Hand off to supervisord ────────────────────────────────────
echo "▶ Starting all services via supervisord..."
echo "========================================"
exec /usr/bin/supervisord -c /etc/supervisor/conf.d/taskflow.conf