Files
study-bible-project/setup.sh
T

89 lines
2.9 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
PREFERRED_PORT=5173
MAX_PORT=5200
# Find an available port starting from PREFERRED_PORT
find_port() {
local port=$PREFERRED_PORT
while [ $port -le $MAX_PORT ]; do
if ! lsof -i TCP:"$port" -sTCP:LISTEN -t >/dev/null 2>&1 && \
! ss -tlnH "sport = :$port" 2>/dev/null | grep -q .; then
echo "$port"
return
fi
port=$((port + 1))
done
echo ""
}
echo "=== Bible Study App Setup ==="
echo ""
# ── Node check ───────────────────────────────────────────────────────────────
if ! command -v node >/dev/null 2>&1; then
echo "ERROR: Node.js is not installed. Install it from https://nodejs.org/ (v18+)."
exit 1
fi
NODE_VERSION=$(node -v | sed 's/v//' | cut -d. -f1)
if [ "$NODE_VERSION" -lt 18 ]; then
echo "ERROR: Node.js v18 or higher is required (found $(node -v))."
exit 1
fi
echo "Node.js $(node -v) found."
# ── npm check ────────────────────────────────────────────────────────────────
if ! command -v npm >/dev/null 2>&1; then
echo "ERROR: npm is not installed."
exit 1
fi
echo "npm $(npm -v) found."
# ── Install dependencies ──────────────────────────────────────────────────────
echo ""
echo "Installing dependencies..."
npm install
# ── Find a free port ─────────────────────────────────────────────────────────
echo ""
PORT=$(find_port)
if [ -z "$PORT" ]; then
echo "ERROR: No free port found between $PREFERRED_PORT and $MAX_PORT."
exit 1
fi
if [ "$PORT" -ne "$PREFERRED_PORT" ]; then
echo "Port $PREFERRED_PORT is in use. Using port $PORT instead."
else
echo "Port $PORT is available."
fi
# ── Launch ────────────────────────────────────────────────────────────────────
PID_FILE="$(dirname "$0")/.vite.pid"
LOG_FILE="$(dirname "$0")/.vite.log"
# Stop any previously started instance
if [ -f "$PID_FILE" ]; then
OLD_PID=$(cat "$PID_FILE")
if kill -0 "$OLD_PID" 2>/dev/null; then
echo "Stopping previous server (PID $OLD_PID)..."
kill "$OLD_PID"
sleep 1
fi
rm -f "$PID_FILE"
fi
echo ""
echo "Starting dev server in the background on http://localhost:$PORT"
echo "Logs: $LOG_FILE"
echo ""
nohup npx vite --port "$PORT" --host > "$LOG_FILE" 2>&1 &
echo $! > "$PID_FILE"
echo "Server PID: $(cat "$PID_FILE")"
echo ""
echo "To stop the server: kill \$(cat .vite.pid)"
echo "To view logs: tail -f .vite.log"