Files
Pulse/scripts/dev-hot.sh
2025-10-11 23:29:47 +00:00

78 lines
2.3 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
ROOT_DIR=$(cd "${SCRIPT_DIR}/.." && pwd)
load_env_file() {
local env_file=$1
if [[ -f ${env_file} ]]; then
printf "[dev-hot] Loading %s\n" "${env_file}"
set +u
set -a
# shellcheck disable=SC1090
source "${env_file}"
set +a
set -u
fi
}
load_env_file "${ROOT_DIR}/.env"
load_env_file "${ROOT_DIR}/.env.local"
load_env_file "${ROOT_DIR}/.env.dev"
FRONTEND_PORT=${FRONTEND_PORT:-${PORT:-7655}}
PORT=${PORT:-${FRONTEND_PORT}}
export FRONTEND_PORT PORT
PULSE_DEV_API_HOST=${PULSE_DEV_API_HOST:-127.0.0.1}
PULSE_DEV_API_PORT=${PULSE_DEV_API_PORT:-${FRONTEND_PORT}}
PULSE_DEV_API_URL=${PULSE_DEV_API_URL:-http://${PULSE_DEV_API_HOST}:${PULSE_DEV_API_PORT}}
export PULSE_DEV_API_HOST PULSE_DEV_API_PORT PULSE_DEV_API_URL
FRONTEND_DEV_HOST=${FRONTEND_DEV_HOST:-127.0.0.1}
FRONTEND_DEV_PORT=${FRONTEND_DEV_PORT:-5173}
FRONTEND_DEV_SERVER=${FRONTEND_DEV_SERVER:-http://${FRONTEND_DEV_HOST}:${FRONTEND_DEV_PORT}}
BACKEND_CMD=${BACKEND_CMD:-go run ./cmd/pulse}
VITE_ARGS=${VITE_ARGS:-}
printf "[dev-hot] Backend port: %s\n" "${FRONTEND_PORT}"
printf "[dev-hot] Backend API URL: %s\n" "${PULSE_DEV_API_URL}"
printf "[dev-hot] Frontend dev server target: %s\n" "${FRONTEND_DEV_SERVER}"
cleanup() {
local exit_code=${1:-$?}
trap - EXIT INT TERM
if [[ -n ${VITE_PID:-} ]] && kill -0 "$VITE_PID" >/dev/null 2>&1; then
kill "$VITE_PID" >/dev/null 2>&1 || true
fi
if [[ -n ${BACKEND_PID:-} ]] && kill -0 "$BACKEND_PID" >/dev/null 2>&1; then
kill "$BACKEND_PID" >/dev/null 2>&1 || true
fi
wait >/dev/null 2>&1 || true
exit "$exit_code"
}
trap cleanup EXIT INT TERM
export FRONTEND_DEV_HOST FRONTEND_DEV_PORT FRONTEND_DEV_SERVER
printf "[dev-hot] Starting Vite dev server at %s\n" "$FRONTEND_DEV_SERVER"
(
cd frontend-modern
npm run dev -- --host "$FRONTEND_DEV_HOST" --port "$FRONTEND_DEV_PORT" $VITE_ARGS
) &
VITE_PID=$!
# Give Vite a moment to boot up before starting the backend proxy.
sleep 2
printf "[dev-hot] Starting Pulse backend with FRONTEND_DEV_SERVER=%s\n" "$FRONTEND_DEV_SERVER"
${BACKEND_CMD} &
BACKEND_PID=$!
# Wait for either process to exit and propagate the status code.
wait -n "$VITE_PID" "$BACKEND_PID"
EXIT_STATUS=$?
cleanup "$EXIT_STATUS"