mirror of
https://github.com/codeflash-ai/codeflash-internal.git
synced 2026-05-04 18:25:18 +00:00
138 lines
4.3 KiB
Bash
138 lines
4.3 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
set -e
|
||
|
|
|
||
|
|
echo "==================================="
|
||
|
|
echo "Initializing Codeflash Database"
|
||
|
|
echo "==================================="
|
||
|
|
|
||
|
|
# Wait for PostgreSQL to be ready
|
||
|
|
echo "Waiting for PostgreSQL to start..."
|
||
|
|
timeout=60
|
||
|
|
counter=0
|
||
|
|
until pg_isready -h localhost -p 5432 -U codeflash 2>/dev/null; do
|
||
|
|
counter=$((counter + 1))
|
||
|
|
if [ $counter -gt $timeout ]; then
|
||
|
|
echo "ERROR: PostgreSQL did not start within ${timeout} seconds"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
sleep 1
|
||
|
|
done
|
||
|
|
|
||
|
|
echo "PostgreSQL is ready!"
|
||
|
|
|
||
|
|
# Run Prisma migrations
|
||
|
|
echo ""
|
||
|
|
echo "Running Prisma migrations..."
|
||
|
|
cd /common
|
||
|
|
export DATABASE_URL="${DATABASE_URL:-postgresql://codeflash:codeflash@localhost:5432/codeflash}"
|
||
|
|
npx prisma migrate deploy
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "Checking for existing users..."
|
||
|
|
USER_COUNT=$(psql "$DATABASE_URL" -t -c "SELECT COUNT(*) FROM users;" 2>/dev/null || echo "0")
|
||
|
|
USER_COUNT=$(echo $USER_COUNT | tr -d ' ')
|
||
|
|
|
||
|
|
if [ "$USER_COUNT" = "0" ]; then
|
||
|
|
echo ""
|
||
|
|
echo "No users found. Creating default user and API key..."
|
||
|
|
|
||
|
|
# Hardcoded API key for on-premise deployment
|
||
|
|
# Unhashed key (what users will use): cf-LDKLmsqjcZeX6SvjFPTz66NWgTV25njdWNUxinokmJcfegwRWytqFoJBoCkAKQad
|
||
|
|
# This is the SHA-384 hash stored in the database:
|
||
|
|
API_KEY_UNHASHED="LDKLmsqjcZeX6SvjFPTz66NWgTV25njdWNUxinokmJcfegwRWytqFoJBoCkAKQad"
|
||
|
|
API_KEY_HASHED="uXkhQcmQVmZbOpMtPMUTfeLRZOD3-s6GzYV1IpLMtJeHX4I9P8Ej_Kx3RftkP9yw"
|
||
|
|
SUFFIX="KQad"
|
||
|
|
|
||
|
|
# Use environment variables or defaults for user information
|
||
|
|
DEFAULT_USER_ID="${DEFAULT_USER_ID:-github|10488227}"
|
||
|
|
DEFAULT_USERNAME="${DEFAULT_USERNAME:-Saga4}"
|
||
|
|
DEFAULT_EMAIL="${DEFAULT_EMAIL:-sarthak.agarwal.cse12@iitbhu.ac.in}"
|
||
|
|
DEFAULT_NAME="${DEFAULT_NAME:-$DEFAULT_USERNAME}"
|
||
|
|
|
||
|
|
echo "Creating user: $DEFAULT_USERNAME (ID: $DEFAULT_USER_ID)"
|
||
|
|
|
||
|
|
# Insert user
|
||
|
|
psql "$DATABASE_URL" <<-EOSQL
|
||
|
|
INSERT INTO users (user_id, github_username, email, name, onboarding_completed, created_at)
|
||
|
|
VALUES ('$DEFAULT_USER_ID', '$DEFAULT_USERNAME', '$DEFAULT_EMAIL', '$DEFAULT_NAME', true, NOW())
|
||
|
|
ON CONFLICT (user_id) DO NOTHING;
|
||
|
|
EOSQL
|
||
|
|
|
||
|
|
# Insert API key (HASHED version in database)
|
||
|
|
psql "$DATABASE_URL" <<-EOSQL
|
||
|
|
INSERT INTO cf_api_keys (key, suffix, name, user_id, tier, created_at)
|
||
|
|
VALUES ('$API_KEY_HASHED', '$SUFFIX', 'Default API Key', '$DEFAULT_USER_ID', 'free', NOW());
|
||
|
|
EOSQL
|
||
|
|
|
||
|
|
# Insert subscription with unlimited usage for on-premise deployments
|
||
|
|
echo "Creating unlimited subscription for on-premise deployment..."
|
||
|
|
psql "$DATABASE_URL" <<-EOSQL
|
||
|
|
INSERT INTO subscriptions (
|
||
|
|
id,
|
||
|
|
user_id,
|
||
|
|
stripe_customer_id,
|
||
|
|
stripe_subscription_id,
|
||
|
|
plan_type,
|
||
|
|
optimizations_used,
|
||
|
|
optimizations_limit,
|
||
|
|
subscription_status,
|
||
|
|
created_at,
|
||
|
|
updated_at
|
||
|
|
)
|
||
|
|
VALUES (
|
||
|
|
gen_random_uuid(),
|
||
|
|
'$DEFAULT_USER_ID',
|
||
|
|
NULL,
|
||
|
|
NULL,
|
||
|
|
'enterprise',
|
||
|
|
0,
|
||
|
|
999999999,
|
||
|
|
'active',
|
||
|
|
NOW(),
|
||
|
|
NOW()
|
||
|
|
)
|
||
|
|
ON CONFLICT (user_id) DO NOTHING;
|
||
|
|
EOSQL
|
||
|
|
|
||
|
|
# Format API key with cf- prefix for display (UNHASHED version for users)
|
||
|
|
DISPLAY_API_KEY="cf-${API_KEY_UNHASHED}"
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "======================================"
|
||
|
|
echo " CODEFLASH SETUP COMPLETE!"
|
||
|
|
echo "======================================"
|
||
|
|
echo ""
|
||
|
|
echo "User: $DEFAULT_USERNAME"
|
||
|
|
echo "Email: $DEFAULT_EMAIL"
|
||
|
|
echo ""
|
||
|
|
echo "Your API Key: $DISPLAY_API_KEY"
|
||
|
|
echo ""
|
||
|
|
echo "Save this API key! You'll need it to configure the Codeflash CLI."
|
||
|
|
echo ""
|
||
|
|
echo "To use the CLI, set these environment variables:"
|
||
|
|
echo " export CODEFLASH_API_KEY=$DISPLAY_API_KEY"
|
||
|
|
echo " export CODEFLASH_AIS_SERVER=local"
|
||
|
|
echo " export CODEFLASH_CFAPI_SERVER=local"
|
||
|
|
echo ""
|
||
|
|
echo "Or create a .env file in your project:"
|
||
|
|
echo " CODEFLASH_API_KEY=$DISPLAY_API_KEY"
|
||
|
|
echo " CODEFLASH_AIS_SERVER=local"
|
||
|
|
echo " CODEFLASH_CFAPI_SERVER=local"
|
||
|
|
echo ""
|
||
|
|
echo "======================================"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Save API key to file for easy retrieval
|
||
|
|
echo "$DISPLAY_API_KEY" > /app/API_KEY.txt
|
||
|
|
echo "API key also saved to: /app/API_KEY.txt"
|
||
|
|
echo "(Retrieve anytime with: docker exec <container> cat /app/API_KEY.txt)"
|
||
|
|
echo ""
|
||
|
|
else
|
||
|
|
echo "Found $USER_COUNT existing user(s). Skipping user creation."
|
||
|
|
echo ""
|
||
|
|
echo "To retrieve an existing API key, run:"
|
||
|
|
echo " docker exec <container-name> psql \$DATABASE_URL -c \"SELECT key FROM cf_api_keys LIMIT 1;\""
|
||
|
|
echo ""
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo "Database initialization complete!"
|