#!/bin/bash
set -e
echo "╔══════════════════════════════════════════╗"
echo "║ OpenCodeHub Starting... ║"
echo "╚══════════════════════════════════════════╝"
# Wait for database to be ready
if [ -n "$DATABASE_URL" ]; then
echo "⏳ Waiting for database..."
for i in $(seq 1 30); do
if bun -e "
const pg = require('pg');
const client = new pg.Client(process.env.DATABASE_URL);
client.connect().then(() => { client.end(); process.exit(0); }).catch(() => process.exit(1));
" 2>/dev/null; then
echo "✅ Database is ready"
break
fi
if [ "$i" -eq 30 ]; then
echo "⚠️ Database not reachable after 30s, proceeding anyway..."
fi
sleep 1
done
# Run database migrations
echo "🔄 Running database migrations..."
cd /app
bunx drizzle-kit push --force 2>/dev/null || echo "⚠️ Migration push skipped (may already be up to date)"
echo "✅ Migrations complete"
fi
# Initialize SSH host key if not exists
if [ -n "$SSH_HOST_KEY_PATH" ] && [ ! -f "$SSH_HOST_KEY_PATH" ]; then
echo "🔑 Generating SSH host key..."
ssh-keygen -t ed25519 -f "$SSH_HOST_KEY_PATH" -N "" -q
echo "✅ SSH host key generated"
fi
# Create required directories
mkdir -p "${REPOS_PATH:-/data/repos}" "${STORAGE_PATH:-/data/storage}" "${CACHE_PATH:-/data/cache}"
echo "🚀 Starting OpenCodeHub on port ${PORT:-4321}..."
exec bun ./dist/server/entry.mjs