- Show helpful error message when Admin UI fails with log location - Add summary section with all URLs and log file locations - Better visual separation with dividers - Clear instructions for viewing logs
153 lines
4.1 KiB
Bash
Executable File
153 lines
4.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
|
|
PROJECT_DIR=$(cd "$SCRIPT_DIR/.." && pwd)
|
|
|
|
# Load environment variables
|
|
source "$SCRIPT_DIR/environment.sh"
|
|
|
|
# Spinner function
|
|
spinner() {
|
|
local pid=$1
|
|
local delay=0.1
|
|
local spinstr='⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏'
|
|
while ps -p $pid > /dev/null 2>&1; do
|
|
local temp=${spinstr#?}
|
|
printf " [%c] " "$spinstr"
|
|
local spinstr=$temp${spinstr%"$temp"}
|
|
sleep $delay
|
|
printf "\b\b\b\b\b\b"
|
|
done
|
|
printf " \b\b\b\b"
|
|
}
|
|
|
|
echo "Starting Hero Supervisor"
|
|
echo ""
|
|
|
|
# Build
|
|
printf "🔨 Building... "
|
|
if "$SCRIPT_DIR/build.sh" > /tmp/supervisor-run-build.log 2>&1 & spinner $!; wait $!; then
|
|
echo "✅"
|
|
else
|
|
echo "❌"
|
|
echo " Error: Build failed. Check /tmp/supervisor-run-build.log"
|
|
exit 1
|
|
fi
|
|
|
|
# Validate required environment variables
|
|
if [ -z "$ADMIN_SECRETS" ]; then
|
|
echo "❌ Error: ADMIN_SECRETS not set in .env"
|
|
echo " Generate a secret with: ./scripts/generate_secret.sh"
|
|
exit 1
|
|
fi
|
|
|
|
# Set defaults
|
|
REDIS_URL="${REDIS_URL:-redis://127.0.0.1:6379}"
|
|
PORT="${PORT:-3030}"
|
|
BIND_ADDRESS="${BIND_ADDRESS:-127.0.0.1}"
|
|
ADMIN_UI_PORT="${ADMIN_UI_PORT:-8080}"
|
|
LOG_LEVEL="${LOG_LEVEL:-error}"
|
|
|
|
# Cleanup function
|
|
cleanup() {
|
|
echo ""
|
|
printf "🛑 Stopping... "
|
|
kill $(jobs -p) 2>/dev/null || true
|
|
echo "✅"
|
|
exit 0
|
|
}
|
|
|
|
trap cleanup SIGINT SIGTERM
|
|
|
|
# Start supervisor
|
|
printf "📡 Supervisor... "
|
|
cd "$PROJECT_DIR"
|
|
|
|
# Build command with flags
|
|
SUPERVISOR_CMD="target/release/supervisor --redis-url $REDIS_URL --port $PORT --bind-address $BIND_ADDRESS"
|
|
|
|
# Add admin secrets
|
|
IFS=',' read -ra SECRETS <<< "$ADMIN_SECRETS"
|
|
for secret in "${SECRETS[@]}"; do
|
|
SUPERVISOR_CMD="$SUPERVISOR_CMD --admin-secret $secret"
|
|
done
|
|
|
|
# Add user secrets if provided
|
|
if [ ! -z "$USER_SECRETS" ]; then
|
|
IFS=',' read -ra SECRETS <<< "$USER_SECRETS"
|
|
for secret in "${SECRETS[@]}"; do
|
|
SUPERVISOR_CMD="$SUPERVISOR_CMD --user-secret $secret"
|
|
done
|
|
fi
|
|
|
|
# Add register secrets if provided
|
|
if [ ! -z "$REGISTER_SECRETS" ]; then
|
|
IFS=',' read -ra SECRETS <<< "$REGISTER_SECRETS"
|
|
for secret in "${SECRETS[@]}"; do
|
|
SUPERVISOR_CMD="$SUPERVISOR_CMD --register-secret $secret"
|
|
done
|
|
fi
|
|
|
|
# Add mycelium URL if provided
|
|
if [ ! -z "$MYCELIUM_URL" ]; then
|
|
SUPERVISOR_CMD="$SUPERVISOR_CMD --mycelium-url $MYCELIUM_URL"
|
|
fi
|
|
|
|
# Add runners if provided
|
|
if [ ! -z "$RUNNERS" ]; then
|
|
SUPERVISOR_CMD="$SUPERVISOR_CMD --runners $RUNNERS"
|
|
fi
|
|
|
|
RUST_LOG="$LOG_LEVEL" RUST_LOG_STYLE=never $SUPERVISOR_CMD > /tmp/supervisor-run.log 2>&1 &
|
|
SUPERVISOR_PID=$!
|
|
|
|
sleep 2
|
|
|
|
if ! ps -p $SUPERVISOR_PID > /dev/null 2>&1; then
|
|
echo "❌"
|
|
echo " Error: Supervisor failed to start. Check /tmp/supervisor-run.log"
|
|
exit 1
|
|
fi
|
|
echo "✅"
|
|
|
|
# Start admin UI
|
|
printf "🎨 Admin UI... "
|
|
cd "$PROJECT_DIR/ui"
|
|
|
|
UI_STARTED=false
|
|
if ! command -v trunk &> /dev/null; then
|
|
echo "⚠️"
|
|
echo " Trunk not installed. Run: cargo install trunk"
|
|
else
|
|
trunk serve --port "$ADMIN_UI_PORT" > /tmp/supervisor-ui.log 2>&1 &
|
|
ADMIN_UI_PID=$!
|
|
sleep 1
|
|
if ps -p $ADMIN_UI_PID > /dev/null 2>&1; then
|
|
echo "✅"
|
|
UI_STARTED=true
|
|
else
|
|
echo "❌"
|
|
echo " UI failed to start. Check logs: tail -f /tmp/supervisor-ui.log"
|
|
fi
|
|
fi
|
|
|
|
echo ""
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo "Hero Supervisor Running"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo "📡 OpenRPC Server: http://$BIND_ADDRESS:$PORT"
|
|
if [ "$UI_STARTED" = true ]; then
|
|
echo "🎨 Admin UI: http://127.0.0.1:$ADMIN_UI_PORT"
|
|
fi
|
|
echo ""
|
|
echo "Logs:"
|
|
echo " Supervisor: tail -f /tmp/supervisor-run.log"
|
|
if [ "$UI_STARTED" = true ]; then
|
|
echo " Admin UI: tail -f /tmp/supervisor-ui.log"
|
|
fi
|
|
echo ""
|
|
echo "Press Ctrl+C to stop all services"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
|
|
# Wait for processes
|
|
wait |