51 lines
1.2 KiB
Bash
51 lines
1.2 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ENV_FILE="${ENV_FILE:-./.env}"
|
|
if [[ -f "$ENV_FILE" ]]; then
|
|
set -a
|
|
# shellcheck source=/dev/null
|
|
. "$ENV_FILE"
|
|
set +a
|
|
fi
|
|
|
|
if [[ -z "${DATABASE_URL:-}" ]]; then
|
|
echo "DATABASE_URL is required."
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -z "${EXPECTED_PROD_DB_HOST:-}" || -z "${EXPECTED_PROD_DB_NAME:-}" ]]; then
|
|
echo "EXPECTED_PROD_DB_HOST and EXPECTED_PROD_DB_NAME are required."
|
|
exit 1
|
|
fi
|
|
|
|
extract_host() {
|
|
local url="$1"
|
|
sed -E 's#^[a-zA-Z][a-zA-Z0-9+.-]*://[^@/]+@([^/:?]+).*$#\1#' <<< "$url"
|
|
}
|
|
|
|
extract_db() {
|
|
local url="$1"
|
|
sed -E 's#^[a-zA-Z][a-zA-Z0-9+.-]*://[^/]+/([^?]+).*$#\1#' <<< "$url"
|
|
}
|
|
|
|
ACTUAL_HOST="$(extract_host "$DATABASE_URL")"
|
|
ACTUAL_DB="$(extract_db "$DATABASE_URL")"
|
|
|
|
if [[ "$ACTUAL_HOST" == "$DATABASE_URL" || "$ACTUAL_DB" == "$DATABASE_URL" ]]; then
|
|
echo "Unable to parse DATABASE_URL."
|
|
exit 1
|
|
fi
|
|
|
|
if [[ "$ACTUAL_HOST" != "$EXPECTED_PROD_DB_HOST" ]]; then
|
|
echo "DATABASE_URL host mismatch. expected=$EXPECTED_PROD_DB_HOST actual=$ACTUAL_HOST"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ "$ACTUAL_DB" != "$EXPECTED_PROD_DB_NAME" ]]; then
|
|
echo "DATABASE_URL db mismatch. expected=$EXPECTED_PROD_DB_NAME actual=$ACTUAL_DB"
|
|
exit 1
|
|
fi
|
|
|
|
echo "DATABASE_URL target check passed (host=$ACTUAL_HOST db=$ACTUAL_DB)."
|