211 lines
6.4 KiB
Bash
211 lines
6.4 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
# Archipelago Development Server Starter
|
||
|
|
# Pure Archipelago implementation - NO StartOS
|
||
|
|
|
||
|
|
set +e
|
||
|
|
|
||
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||
|
|
|
||
|
|
echo "🚀 Archipelago Development Server Starter"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Use the workspace directory
|
||
|
|
FRONTEND_DIR="$PROJECT_ROOT/neode-ui"
|
||
|
|
BACKEND_DIR="$PROJECT_ROOT/core"
|
||
|
|
|
||
|
|
# Verify the frontend directory exists
|
||
|
|
if [ ! -d "$FRONTEND_DIR" ]; then
|
||
|
|
echo "❌ Frontend directory not found: $FRONTEND_DIR"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo "Choose a development mode:"
|
||
|
|
echo " 1) Mock backend (UI development only - fastest)"
|
||
|
|
echo " 2) Full stack (Archipelago backend + frontend)"
|
||
|
|
echo " 3) Setup mode (first-time user setup flow - mock)"
|
||
|
|
echo " 4) Onboarding mode (onboarding flow - mock)"
|
||
|
|
echo " 5) Existing user (login with password - mock)"
|
||
|
|
echo " 6) Show manual instructions"
|
||
|
|
echo ""
|
||
|
|
read -p "Enter choice [1-6]: " choice
|
||
|
|
|
||
|
|
case $choice in
|
||
|
|
1)
|
||
|
|
echo ""
|
||
|
|
echo "🎨 Starting frontend with mock backend..."
|
||
|
|
cd "$FRONTEND_DIR"
|
||
|
|
|
||
|
|
# Kill any existing processes
|
||
|
|
echo " 🧹 Cleaning up ports 5959 and 8100..."
|
||
|
|
lsof -ti:5959 | xargs kill -9 2>/dev/null || true
|
||
|
|
lsof -ti:8100 | xargs kill -9 2>/dev/null || true
|
||
|
|
sleep 1
|
||
|
|
|
||
|
|
# Check dependencies
|
||
|
|
if [ ! -d "node_modules" ]; then
|
||
|
|
echo "⚠️ Installing dependencies..."
|
||
|
|
npm install
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo " Running: npm run dev:mock"
|
||
|
|
echo " (Press Ctrl+C to stop)"
|
||
|
|
echo ""
|
||
|
|
npm run dev:mock
|
||
|
|
;;
|
||
|
|
2)
|
||
|
|
echo ""
|
||
|
|
echo "🔧 Starting FULL STACK (Archipelago backend + frontend)..."
|
||
|
|
|
||
|
|
# Kill ports
|
||
|
|
echo " 🧹 Cleaning up ports 5959 and 8100..."
|
||
|
|
lsof -ti:5959 | xargs kill -9 2>/dev/null || true
|
||
|
|
lsof -ti:8100 | xargs kill -9 2>/dev/null || true
|
||
|
|
sleep 1
|
||
|
|
|
||
|
|
# Check if backend can build
|
||
|
|
echo " 🔨 Checking backend build..."
|
||
|
|
if [ ! -d "$BACKEND_DIR" ]; then
|
||
|
|
echo "❌ Backend directory not found: $BACKEND_DIR"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
cd "$BACKEND_DIR"
|
||
|
|
if ! cargo check --bin archipelago > /tmp/archipelago-backend-check.log 2>&1; then
|
||
|
|
echo "❌ Backend build check failed. See /tmp/archipelago-backend-check.log for details."
|
||
|
|
echo " Falling back to mock backend for UI development."
|
||
|
|
cd "$FRONTEND_DIR"
|
||
|
|
if [ ! -d "node_modules" ]; then
|
||
|
|
npm install
|
||
|
|
fi
|
||
|
|
npm run dev:mock
|
||
|
|
exit 0
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo " 🚀 Starting Archipelago backend..."
|
||
|
|
cargo run --bin archipelago > /tmp/archipelago-backend.log 2>&1 &
|
||
|
|
BACKEND_PID=$!
|
||
|
|
echo " Backend PID: $BACKEND_PID"
|
||
|
|
echo " Logs: tail -f /tmp/archipelago-backend.log"
|
||
|
|
|
||
|
|
# Wait for backend to start listening on port 5959
|
||
|
|
echo " ⏳ Waiting for backend to start on port 5959..."
|
||
|
|
timeout=60
|
||
|
|
count=0
|
||
|
|
while ! lsof -ti:5959 > /dev/null 2>&1 && [ $count -lt $timeout ]; do
|
||
|
|
sleep 1
|
||
|
|
count=$((count + 1))
|
||
|
|
done
|
||
|
|
|
||
|
|
if ! lsof -ti:5959 > /dev/null 2>&1; then
|
||
|
|
echo "❌ Backend did not start on port 5959 within $timeout seconds."
|
||
|
|
echo " Killing backend process $BACKEND_PID."
|
||
|
|
kill $BACKEND_PID 2>/dev/null || true
|
||
|
|
echo " Falling back to mock backend for UI development."
|
||
|
|
cd "$FRONTEND_DIR"
|
||
|
|
if [ ! -d "node_modules" ]; then
|
||
|
|
npm install
|
||
|
|
fi
|
||
|
|
npm run dev:mock
|
||
|
|
exit 0
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo " ✅ Backend is listening on port 5959"
|
||
|
|
|
||
|
|
# Start frontend
|
||
|
|
echo " 🎨 Starting frontend..."
|
||
|
|
cd "$FRONTEND_DIR"
|
||
|
|
|
||
|
|
if [ ! -d "node_modules" ]; then
|
||
|
|
echo " Installing frontend dependencies..."
|
||
|
|
npm install
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Trap to kill backend on exit
|
||
|
|
trap "kill $BACKEND_PID 2>/dev/null" EXIT
|
||
|
|
|
||
|
|
echo " (Press Ctrl+C to stop both servers)"
|
||
|
|
echo ""
|
||
|
|
npm run dev
|
||
|
|
;;
|
||
|
|
3)
|
||
|
|
echo ""
|
||
|
|
echo "🔧 Starting in SETUP mode (mock backend)..."
|
||
|
|
cd "$FRONTEND_DIR"
|
||
|
|
|
||
|
|
# Kill ports
|
||
|
|
lsof -ti:5959 | xargs kill -9 2>/dev/null || true
|
||
|
|
lsof -ti:8100 | xargs kill -9 2>/dev/null || true
|
||
|
|
sleep 1
|
||
|
|
|
||
|
|
if [ ! -d "node_modules" ]; then
|
||
|
|
npm install
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo " Starting setup flow..."
|
||
|
|
VITE_DEV_MODE=setup npm run dev:mock
|
||
|
|
;;
|
||
|
|
4)
|
||
|
|
echo ""
|
||
|
|
echo "📚 Starting in ONBOARDING mode (mock backend)..."
|
||
|
|
cd "$FRONTEND_DIR"
|
||
|
|
|
||
|
|
# Kill ports
|
||
|
|
lsof -ti:5959 | xargs kill -9 2>/dev/null || true
|
||
|
|
lsof -ti:8100 | xargs kill -9 2>/dev/null || true
|
||
|
|
sleep 1
|
||
|
|
|
||
|
|
if [ ! -d "node_modules" ]; then
|
||
|
|
npm install
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo " Starting onboarding flow..."
|
||
|
|
VITE_DEV_MODE=onboarding npm run dev:mock
|
||
|
|
;;
|
||
|
|
5)
|
||
|
|
echo ""
|
||
|
|
echo "👤 Starting as EXISTING USER (mock backend)..."
|
||
|
|
cd "$FRONTEND_DIR"
|
||
|
|
|
||
|
|
# Kill ports
|
||
|
|
lsof -ti:5959 | xargs kill -9 2>/dev/null || true
|
||
|
|
lsof -ti:8100 | xargs kill -9 2>/dev/null || true
|
||
|
|
sleep 1
|
||
|
|
|
||
|
|
if [ ! -d "node_modules" ]; then
|
||
|
|
npm install
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo " Starting with login screen..."
|
||
|
|
VITE_DEV_MODE=existing npm run dev:mock
|
||
|
|
;;
|
||
|
|
6)
|
||
|
|
echo ""
|
||
|
|
echo "📋 Manual Instructions:"
|
||
|
|
echo ""
|
||
|
|
echo "For UI development (mock backend):"
|
||
|
|
echo " cd $FRONTEND_DIR"
|
||
|
|
echo " npm run dev:mock"
|
||
|
|
echo ""
|
||
|
|
echo "For full stack (Archipelago backend + frontend):"
|
||
|
|
echo " Terminal 1 (Backend):"
|
||
|
|
echo " cd $BACKEND_DIR"
|
||
|
|
echo " cargo run --bin archipelago"
|
||
|
|
echo ""
|
||
|
|
echo " Terminal 2 (Frontend):"
|
||
|
|
echo " cd $FRONTEND_DIR"
|
||
|
|
echo " npm run dev"
|
||
|
|
echo ""
|
||
|
|
echo "Then open: http://localhost:8100"
|
||
|
|
echo ""
|
||
|
|
echo "Mock backend dev modes:"
|
||
|
|
echo " VITE_DEV_MODE=setup - First-time setup flow"
|
||
|
|
echo " VITE_DEV_MODE=onboarding - Onboarding flow"
|
||
|
|
echo " VITE_DEV_MODE=existing - Login screen"
|
||
|
|
;;
|
||
|
|
*)
|
||
|
|
echo "Invalid choice"
|
||
|
|
exit 1
|
||
|
|
;;
|
||
|
|
esac
|