chore(snapshot): sync frontend workspace state
This commit is contained in:
112
apps/visualizer/__r
Executable file
112
apps/visualizer/__r
Executable file
@@ -0,0 +1,112 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
|
||||
SSH_TUNNEL_TARGET="${SSH_TUNNEL_TARGET:-mevnode_bot}"
|
||||
K8S_NAMESPACE="${K8S_NAMESPACE:-trade-staging}"
|
||||
|
||||
SSH_FRONTEND_LOCAL_PORT="${SSH_FRONTEND_LOCAL_PORT:-13081}"
|
||||
SSH_HASURA_LOCAL_PORT="${SSH_HASURA_LOCAL_PORT:-18080}"
|
||||
|
||||
SSH_FRONTEND_REMOTE_HOST="${SSH_FRONTEND_REMOTE_HOST:-127.0.0.1}"
|
||||
SSH_FRONTEND_REMOTE_PORT="${SSH_FRONTEND_REMOTE_PORT:-30081}"
|
||||
SSH_HASURA_REMOTE_PORT="${SSH_HASURA_REMOTE_PORT:-8080}"
|
||||
|
||||
VITE_DEV_PORT="${VITE_DEV_PORT:-5174}"
|
||||
|
||||
SSH_PID=""
|
||||
|
||||
require_cmd() {
|
||||
if ! command -v "$1" >/dev/null 2>&1; then
|
||||
echo "Missing required command: $1" >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
wait_for_listen() {
|
||||
local port="$1"
|
||||
local label="$2"
|
||||
local tries="${3:-80}"
|
||||
local delay="${4:-0.25}"
|
||||
local i
|
||||
|
||||
for ((i = 0; i < tries; i += 1)); do
|
||||
if ss -ltnH | awk '{print $4}' | grep -Eq "(^|[:])${port}$"; then
|
||||
return 0
|
||||
fi
|
||||
sleep "${delay}"
|
||||
done
|
||||
|
||||
echo "Timed out waiting for ${label} on port ${port}" >&2
|
||||
return 1
|
||||
}
|
||||
|
||||
get_cluster_ip() {
|
||||
local service="$1"
|
||||
ssh \
|
||||
-o BatchMode=yes \
|
||||
-o StrictHostKeyChecking=accept-new \
|
||||
-T "${SSH_TUNNEL_TARGET}" \
|
||||
"kubectl -n ${K8S_NAMESPACE} get svc ${service} -o jsonpath='{.spec.clusterIP}'"
|
||||
}
|
||||
|
||||
cleanup() {
|
||||
local code=$?
|
||||
trap - EXIT INT TERM
|
||||
|
||||
if [[ -n "${SSH_PID}" ]] && kill -0 "${SSH_PID}" 2>/dev/null; then
|
||||
kill "${SSH_PID}" 2>/dev/null || true
|
||||
wait "${SSH_PID}" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
exit "${code}"
|
||||
}
|
||||
|
||||
trap cleanup EXIT INT TERM
|
||||
|
||||
require_cmd ssh
|
||||
require_cmd npm
|
||||
require_cmd ss
|
||||
|
||||
HASURA_CLUSTER_IP="${HASURA_CLUSTER_IP:-$(get_cluster_ip hasura)}"
|
||||
|
||||
if [[ -z "${HASURA_CLUSTER_IP}" ]]; then
|
||||
echo "Could not resolve ClusterIP for hasura in namespace ${K8S_NAMESPACE}" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "SSH target: ${SSH_TUNNEL_TARGET}"
|
||||
echo "Namespace: ${K8S_NAMESPACE}"
|
||||
echo "hasura ClusterIP: ${HASURA_CLUSTER_IP}"
|
||||
|
||||
echo "Starting SSH tunnel..."
|
||||
ssh \
|
||||
-o StrictHostKeyChecking=accept-new \
|
||||
-o ExitOnForwardFailure=yes \
|
||||
-o ServerAliveInterval=30 \
|
||||
-o ServerAliveCountMax=3 \
|
||||
-N \
|
||||
-L "${SSH_FRONTEND_LOCAL_PORT}:${SSH_FRONTEND_REMOTE_HOST}:${SSH_FRONTEND_REMOTE_PORT}" \
|
||||
-L "${SSH_HASURA_LOCAL_PORT}:${HASURA_CLUSTER_IP}:${SSH_HASURA_REMOTE_PORT}" \
|
||||
"${SSH_TUNNEL_TARGET}" &
|
||||
SSH_PID=$!
|
||||
|
||||
wait_for_listen "${SSH_FRONTEND_LOCAL_PORT}" "frontend SSH tunnel"
|
||||
wait_for_listen "${SSH_HASURA_LOCAL_PORT}" "Hasura SSH tunnel"
|
||||
|
||||
echo "Starting Vite on :${VITE_DEV_PORT}..."
|
||||
cd "${SCRIPT_DIR}"
|
||||
|
||||
export VITE_DEV_PORT
|
||||
export VITE_HASURA_URL="${VITE_HASURA_URL:-/graphql}"
|
||||
export VITE_HASURA_WS_URL="${VITE_HASURA_WS_URL:-ws://127.0.0.1:${SSH_HASURA_LOCAL_PORT}/v1/graphql}"
|
||||
export FRONTEND_PROXY_TARGET="${FRONTEND_PROXY_TARGET:-http://127.0.0.1:${SSH_FRONTEND_LOCAL_PORT}}"
|
||||
export GRAPHQL_PROXY_TARGET="${GRAPHQL_PROXY_TARGET:-http://127.0.0.1:${SSH_HASURA_LOCAL_PORT}}"
|
||||
export GRAPHQL_PROXY_PATH="${GRAPHQL_PROXY_PATH:-/v1/graphql}"
|
||||
|
||||
echo "Frontend auth proxy: ${FRONTEND_PROXY_TARGET}"
|
||||
echo "GraphQL proxy: ${GRAPHQL_PROXY_TARGET}${GRAPHQL_PROXY_PATH}"
|
||||
echo "Open: http://localhost:${VITE_DEV_PORT}/"
|
||||
|
||||
exec npm run dev
|
||||
Reference in New Issue
Block a user