4a79c0072c
Docker image / Build (linux/amd64) (push) Has been cancelled
Docker image / Build (linux/arm64) (push) Has been cancelled
Docker image / Merge release multi-arch manifest (push) Has been cancelled
Docker image / Merge debug multi-arch manifest (push) Has been cancelled
Docker image / Build public push gateway (linux/amd64) (push) Has been cancelled
Docker image / Build public push gateway (linux/arm64) (push) Has been cancelled
Docker image / Publish public push gateway image (push) Has been cancelled
Harbor Buzz Orchestra / Python tests and lint (push) Has been cancelled
CI / Detect Changed Paths (push) Has been cancelled
CI / Rust Lint (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Desktop Core (push) Has been cancelled
CI / Desktop Smoke E2E (1) (push) Has been cancelled
CI / Desktop Smoke E2E (2) (push) Has been cancelled
CI / Desktop Smoke E2E (3) (push) Has been cancelled
CI / Desktop Smoke E2E (4) (push) Has been cancelled
CI / Desktop (push) Has been cancelled
CI / Desktop E2E Relay (push) Has been cancelled
CI / Desktop E2E Integration (1/2) (push) Has been cancelled
CI / Desktop E2E Integration (2/2) (push) Has been cancelled
CI / Desktop E2E Integration (push) Has been cancelled
CI / Backend Integration (relay e2e) (push) Has been cancelled
CI / Relay E2E (push) Has been cancelled
CI / Web (push) Has been cancelled
CI / Mobile (push) Has been cancelled
CI / Security (push) Has been cancelled
CI / Dead Token Reference Guard (push) Has been cancelled
CI / Server Cross-Compile (aarch64-unknown-linux-musl) (push) Has been cancelled
CI / Server Cross-Compile (x86_64-unknown-linux-musl) (push) Has been cancelled
CI / Windows Rust (x86_64-pc-windows-msvc) (push) Has been cancelled
CI / Desktop Build (macOS) (push) Has been cancelled
helm chart / lint + unittest + render matrix (push) Has been cancelled
helm chart / install on kind (gated) (push) Has been cancelled
helm chart / publish chart to GHCR (push) Has been cancelled
Mesh Lifecycle / Relay-Driven Mesh Lifecycle Smoke (push) Has been cancelled
Sprig image / Build (linux/amd64) (push) Has been cancelled
Sprig image / Build (linux/arm64) (push) Has been cancelled
Sprig image / Merge multi-arch manifest (push) Has been cancelled
Sprig / Build (aarch64-unknown-linux-musl) (push) Has been cancelled
Sprig / Build (x86_64-unknown-linux-musl) (push) Has been cancelled
Sprig / Publish rolling release (push) Has been cancelled
Sprig / Publish tagged release (push) Has been cancelled
Signed-off-by: cls_???? <908705107@qq.com>
99 lines
3.0 KiB
Bash
Executable File
99 lines
3.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Seed local dev host -> community rows for row-zero host binding.
|
|
#
|
|
# The relay intentionally fails closed when the request Host header is not in
|
|
# `communities`. Local dev uses loopback hosts, so bootstrap must create those
|
|
# rows after migrations before desktop/Tauri HTTP bridge calls can succeed.
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
REPO_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
|
cd "${REPO_ROOT}"
|
|
|
|
if [[ -f ".env" ]]; then
|
|
set -o allexport
|
|
# shellcheck disable=SC1091
|
|
source .env
|
|
set +o allexport
|
|
fi
|
|
|
|
export PGHOST="${PGHOST:-localhost}"
|
|
export PGPORT="${PGPORT:-5432}"
|
|
export PGUSER="${PGUSER:-buzz}"
|
|
export PGPASSWORD="${PGPASSWORD:-buzz_dev}"
|
|
export PGDATABASE="${PGDATABASE:-buzz}"
|
|
export RELAY_URL="${RELAY_URL:-ws://localhost:3000}"
|
|
|
|
hosts_sql=$(python3 - <<'PY'
|
|
import os
|
|
from urllib.parse import urlparse
|
|
|
|
relay_url = os.environ.get("RELAY_URL", "ws://localhost:3000")
|
|
parsed = urlparse(relay_url)
|
|
|
|
host = (parsed.hostname or "").rstrip(".").lower()
|
|
port = parsed.port
|
|
scheme = parsed.scheme.lower()
|
|
|
|
def authority(host, port, scheme):
|
|
if not host:
|
|
return ""
|
|
display_host = f"[{host}]" if ":" in host and not host.startswith("[") else host
|
|
default_port = (scheme == "ws" and port == 80) or (scheme == "wss" and port == 443)
|
|
if port and not default_port:
|
|
return f"{display_host}:{port}"
|
|
return display_host
|
|
|
|
primary = authority(host, port, scheme)
|
|
hosts = []
|
|
if primary:
|
|
hosts.append(primary)
|
|
|
|
# Local desktop/dev tooling has historically used both localhost and 127.0.0.1,
|
|
# and some HTTP clients can omit the default/non-default port in Host handling.
|
|
# Under row-zero host binding these are distinct hosts, so seed loopback aliases
|
|
# for local dev to avoid a fail-closed 404 when one side uses an alternate
|
|
# authority. Non-loopback deployments seed only RELAY_URL's authority.
|
|
if host in {"localhost", "127.0.0.1"}:
|
|
hosts.extend(["localhost", "127.0.0.1"])
|
|
if port:
|
|
hosts.extend([f"localhost:{port}", f"127.0.0.1:{port}"])
|
|
|
|
seen = []
|
|
for h in hosts:
|
|
if h and h not in seen:
|
|
seen.append(h)
|
|
|
|
if not seen:
|
|
raise SystemExit("could not derive a host from RELAY_URL")
|
|
|
|
lines = []
|
|
for h in seen:
|
|
escaped = h.replace(chr(39), chr(39) * 2)
|
|
lines.append(f" ('{escaped}')")
|
|
print(",\n".join(lines))
|
|
PY
|
|
)
|
|
|
|
sql="
|
|
INSERT INTO communities (host)
|
|
SELECT host
|
|
FROM (VALUES
|
|
${hosts_sql}
|
|
) AS v(host)
|
|
ON CONFLICT (lower(host)) DO NOTHING;
|
|
"
|
|
|
|
if command -v psql >/dev/null 2>&1; then
|
|
PGPASSWORD="${PGPASSWORD}" psql -h "${PGHOST}" -p "${PGPORT}" -U "${PGUSER}" -d "${PGDATABASE}" -v ON_ERROR_STOP=1 -c "${sql}"
|
|
elif docker exec buzz-postgres psql --version >/dev/null 2>&1; then
|
|
docker exec -i -e PGPASSWORD="${PGPASSWORD}" buzz-postgres \
|
|
psql -U "${PGUSER}" -d "${PGDATABASE}" -v ON_ERROR_STOP=1 -c "${sql}"
|
|
else
|
|
echo "error: neither psql nor buzz-postgres docker psql is available" >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "Seeded local dev community host(s):"
|
|
echo "${hosts_sql}" | sed -E "s/^ +\('(.+)'\),?$/ - \1/"
|