workflows update
This commit is contained in:
65
run.sh
65
run.sh
@@ -61,6 +61,71 @@ validate_env() {
|
||||
|
||||
validate_env
|
||||
|
||||
# Database connectivity preflight
|
||||
check_database() {
|
||||
# Keep resolution order aligned with backend/src/core/database.py defaults.
|
||||
local DB_URL="${DATABASE_URL:-${POSTGRES_URL:-postgresql+psycopg2://postgres:postgres@localhost:5432/ss_tools}}"
|
||||
|
||||
# SQLite does not require external service.
|
||||
if [[ "$DB_URL" == sqlite* ]]; then
|
||||
echo "Database preflight: sqlite detected, skipping PostgreSQL connectivity check."
|
||||
return
|
||||
fi
|
||||
|
||||
local DB_HOST DB_PORT
|
||||
read -r DB_HOST DB_PORT < <(
|
||||
python3 - "$DB_URL" <<'PY'
|
||||
import sys
|
||||
from urllib.parse import urlparse
|
||||
|
||||
url = sys.argv[1]
|
||||
if "://" not in url:
|
||||
print("localhost 5432")
|
||||
raise SystemExit(0)
|
||||
|
||||
# Support SQLAlchemy schemes like postgresql+psycopg2://...
|
||||
scheme, rest = url.split("://", 1)
|
||||
parsed = urlparse(f"{scheme.split('+', 1)[0]}://{rest}")
|
||||
host = parsed.hostname or "localhost"
|
||||
port = parsed.port or 5432
|
||||
print(f"{host} {port}")
|
||||
PY
|
||||
)
|
||||
|
||||
local check_cmd
|
||||
check_cmd='import socket,sys; socket.create_connection((sys.argv[1], int(sys.argv[2])), timeout=1).close()'
|
||||
|
||||
if python3 -c "$check_cmd" "$DB_HOST" "$DB_PORT" >/dev/null 2>&1; then
|
||||
echo "Database preflight: reachable at ${DB_HOST}:${DB_PORT}."
|
||||
return
|
||||
fi
|
||||
|
||||
echo "Database preflight: cannot connect to ${DB_HOST}:${DB_PORT}."
|
||||
|
||||
# For local development defaults, attempt to auto-start bundled PostgreSQL.
|
||||
if [ "$DB_HOST" = "localhost" ] && [ "$DB_PORT" = "5432" ] && command -v docker >/dev/null 2>&1; then
|
||||
if [ -f "docker-compose.yml" ]; then
|
||||
echo "Attempting to start local PostgreSQL via docker compose (service: db)..."
|
||||
docker compose up -d db || true
|
||||
fi
|
||||
fi
|
||||
|
||||
for _ in {1..20}; do
|
||||
if python3 -c "$check_cmd" "$DB_HOST" "$DB_PORT" >/dev/null 2>&1; then
|
||||
echo "Database preflight: reachable at ${DB_HOST}:${DB_PORT}."
|
||||
return
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
|
||||
echo "Error: PostgreSQL is unavailable at ${DB_HOST}:${DB_PORT}."
|
||||
echo "Run: docker compose up -d db"
|
||||
echo "Or set DATABASE_URL/POSTGRES_URL to a reachable database."
|
||||
exit 1
|
||||
}
|
||||
|
||||
check_database
|
||||
|
||||
# Backend dependency management
|
||||
setup_backend() {
|
||||
if [ "$SKIP_INSTALL" = true ]; then
|
||||
|
||||
Reference in New Issue
Block a user