mirror of
https://github.com/apache/superset.git
synced 2026-04-07 10:31:50 +00:00
153 lines
4.7 KiB
Bash
Executable File
153 lines
4.7 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Licensed to the Apache Software Foundation (ASF) under one or more
|
|
# contributor license agreements. See the NOTICE file distributed with
|
|
# this work for additional information regarding copyright ownership.
|
|
# The ASF licenses this file to You under the Apache License, Version 2.0
|
|
# (the "License"); you may not use this file except in compliance with
|
|
# the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
#
|
|
|
|
set -e
|
|
|
|
# Wait for PostgreSQL to be ready
|
|
echo "Waiting for database to be ready..."
|
|
for i in {1..30}; do
|
|
if python3 -c "
|
|
import psycopg2
|
|
try:
|
|
conn = psycopg2.connect(host='db-light', user='superset', password='superset', database='superset_light')
|
|
conn.close()
|
|
print('Database is ready!')
|
|
except:
|
|
exit(1)
|
|
" 2>/dev/null; then
|
|
echo "Database connection established!"
|
|
break
|
|
fi
|
|
echo "Waiting for database... ($i/30)"
|
|
if [ $i -eq 30 ]; then
|
|
echo "Database connection timeout after 30 seconds"
|
|
exit 1
|
|
fi
|
|
sleep 1
|
|
done
|
|
|
|
# Handle database setup based on FORCE_RELOAD
|
|
if [ "${FORCE_RELOAD}" = "true" ]; then
|
|
echo "Force reload requested - resetting test database"
|
|
# Drop and recreate the test database using Python
|
|
python3 -c "
|
|
import psycopg2
|
|
from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT
|
|
|
|
# Connect to default database
|
|
conn = psycopg2.connect(host='db-light', user='superset', password='superset', database='superset_light')
|
|
conn.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT)
|
|
cur = conn.cursor()
|
|
|
|
# Drop and recreate test database
|
|
try:
|
|
cur.execute('DROP DATABASE IF EXISTS test')
|
|
except:
|
|
pass
|
|
|
|
cur.execute('CREATE DATABASE test')
|
|
conn.close()
|
|
|
|
# Connect to test database to create schemas
|
|
conn = psycopg2.connect(host='db-light', user='superset', password='superset', database='test')
|
|
conn.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT)
|
|
cur = conn.cursor()
|
|
|
|
cur.execute('CREATE SCHEMA sqllab_test_db')
|
|
cur.execute('CREATE SCHEMA admin_database')
|
|
|
|
cur.close()
|
|
conn.close()
|
|
print('Test database reset successfully')
|
|
"
|
|
# Use --no-reset-db since we already reset it
|
|
FLAGS="--no-reset-db"
|
|
else
|
|
echo "Using existing test database (set FORCE_RELOAD=true to reset)"
|
|
FLAGS="--no-reset-db"
|
|
|
|
# Ensure test database exists using Python
|
|
python3 -c "
|
|
import psycopg2
|
|
from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT
|
|
|
|
# Check if test database exists
|
|
try:
|
|
conn = psycopg2.connect(host='db-light', user='superset', password='superset', database='test')
|
|
conn.close()
|
|
print('Test database already exists')
|
|
except:
|
|
print('Creating test database...')
|
|
# Connect to default database to create test database
|
|
conn = psycopg2.connect(host='db-light', user='superset', password='superset', database='superset_light')
|
|
conn.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT)
|
|
cur = conn.cursor()
|
|
|
|
# Create test database
|
|
cur.execute('CREATE DATABASE test')
|
|
conn.close()
|
|
|
|
# Connect to test database to create schemas
|
|
conn = psycopg2.connect(host='db-light', user='superset', password='superset', database='test')
|
|
conn.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT)
|
|
cur = conn.cursor()
|
|
|
|
cur.execute('CREATE SCHEMA IF NOT EXISTS sqllab_test_db')
|
|
cur.execute('CREATE SCHEMA IF NOT EXISTS admin_database')
|
|
|
|
cur.close()
|
|
conn.close()
|
|
print('Test database created successfully')
|
|
"
|
|
fi
|
|
|
|
# Always run database migrations to ensure schema is up to date
|
|
echo "Running database migrations..."
|
|
cd /app
|
|
superset db upgrade
|
|
|
|
# Initialize test environment if needed
|
|
if [ "${FORCE_RELOAD}" = "true" ] || [ ! -f "/app/superset_home/.test_initialized" ]; then
|
|
echo "Initializing test environment..."
|
|
# Run initialization commands
|
|
superset init
|
|
echo "Loading test users..."
|
|
superset load-test-users
|
|
|
|
# Mark as initialized
|
|
touch /app/superset_home/.test_initialized
|
|
else
|
|
echo "Test environment already initialized (skipping init and load-test-users)"
|
|
echo "Tip: Use FORCE_RELOAD=true to reinitialize the test database"
|
|
fi
|
|
|
|
# Create missing scripts needed for tests
|
|
if [ ! -f "/app/scripts/tag_latest_release.sh" ]; then
|
|
echo "Creating missing tag_latest_release.sh script for tests..."
|
|
cp /app/docker/tag_latest_release.sh /app/scripts/tag_latest_release.sh 2>/dev/null || true
|
|
fi
|
|
|
|
# Install pip module for Shillelagh compatibility (aligns with CI environment)
|
|
echo "Installing pip module for Shillelagh compatibility..."
|
|
uv pip install pip
|
|
|
|
# If arguments provided, execute them
|
|
if [ $# -gt 0 ]; then
|
|
exec "$@"
|
|
fi
|