54 lines
1.5 KiB
Bash
Executable File
54 lines
1.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
API_DIR="$ROOT_DIR/api"
|
|
WEB_DIR="$ROOT_DIR/web"
|
|
LOG_DIR="$ROOT_DIR/.logs"
|
|
PID_DIR="$ROOT_DIR/.pids"
|
|
LAUNCHD_DIR="$ROOT_DIR/scripts/launchd"
|
|
LAUNCHD_DOMAIN="gui/$(id -u)"
|
|
API_LABEL="com.skg.tk-recreate.api.dev"
|
|
WEB_LABEL="com.skg.tk-recreate.web.dev"
|
|
|
|
mkdir -p "$LOG_DIR" "$PID_DIR"
|
|
|
|
port_is_listening() {
|
|
local port="$1"
|
|
lsof -tiTCP:"$port" -sTCP:LISTEN >/dev/null 2>&1
|
|
}
|
|
|
|
start_api() {
|
|
if port_is_listening 4291; then
|
|
echo "api already running on 4291"
|
|
return
|
|
fi
|
|
if [[ ! -x "$API_DIR/.venv/bin/uvicorn" ]]; then
|
|
echo "missing api/.venv/bin/uvicorn" >&2
|
|
exit 1
|
|
fi
|
|
launchctl bootout "$LAUNCHD_DOMAIN/$API_LABEL" >/dev/null 2>&1 || true
|
|
launchctl bootstrap "$LAUNCHD_DOMAIN" "$LAUNCHD_DIR/$API_LABEL.plist"
|
|
launchctl kickstart -k "$LAUNCHD_DOMAIN/$API_LABEL"
|
|
echo "api started on 4291 via launchd, log: $LOG_DIR/api.launchd.log"
|
|
}
|
|
|
|
start_web() {
|
|
if port_is_listening 4290; then
|
|
echo "web already running on 4290"
|
|
return
|
|
fi
|
|
if ! command -v npm >/dev/null 2>&1; then
|
|
echo "missing npm in PATH" >&2
|
|
exit 1
|
|
fi
|
|
launchctl bootout "$LAUNCHD_DOMAIN/$WEB_LABEL" >/dev/null 2>&1 || true
|
|
launchctl bootstrap "$LAUNCHD_DOMAIN" "$LAUNCHD_DIR/$WEB_LABEL.plist"
|
|
launchctl kickstart -k "$LAUNCHD_DOMAIN/$WEB_LABEL"
|
|
echo "web started on 4290 via launchd, log: $LOG_DIR/web.launchd.log"
|
|
}
|
|
|
|
start_api
|
|
start_web
|
|
echo "open http://localhost:4290"
|