Sync
This commit is contained in:
188
start-dev.sh
Normal file
188
start-dev.sh
Normal file
@@ -0,0 +1,188 @@
|
||||
#!/bin/bash
|
||||
# ColaFlow Development Environment Startup Script
|
||||
# This script starts both backend API and frontend web application
|
||||
|
||||
set -e
|
||||
|
||||
# Colors
|
||||
CYAN='\033[0;36m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
RED='\033[0;31m'
|
||||
GRAY='\033[0;90m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
echo -e "${CYAN}========================================${NC}"
|
||||
echo -e "${CYAN} ColaFlow Development Environment${NC}"
|
||||
echo -e "${CYAN}========================================${NC}"
|
||||
echo ""
|
||||
|
||||
# Get the script directory (project root)
|
||||
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
|
||||
# Function to check if a port is in use
|
||||
check_port() {
|
||||
local port=$1
|
||||
if command -v netstat &> /dev/null; then
|
||||
netstat -an | grep ":$port " | grep -q LISTEN
|
||||
elif command -v lsof &> /dev/null; then
|
||||
lsof -i ":$port" -sTCP:LISTEN -t &> /dev/null
|
||||
else
|
||||
# Fallback: try to connect
|
||||
timeout 1 bash -c "cat < /dev/null > /dev/tcp/localhost/$port" 2>/dev/null
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to start backend
|
||||
start_backend() {
|
||||
echo -e "${YELLOW}[Backend] Starting ColaFlow API...${NC}"
|
||||
|
||||
# Check if backend port is already in use
|
||||
if check_port 5000; then
|
||||
echo -e "${GREEN}[Backend] Port 5000 is already in use. Backend may already be running.${NC}"
|
||||
echo -e "${GREEN}[Backend] Swagger UI: http://localhost:5000/swagger${NC}"
|
||||
return
|
||||
fi
|
||||
|
||||
# Start backend in background
|
||||
local backend_path="$PROJECT_ROOT/colaflow-api"
|
||||
local backend_project="$backend_path/src/ColaFlow.API/ColaFlow.API.csproj"
|
||||
|
||||
if [ ! -f "$backend_project" ]; then
|
||||
echo -e "${RED}[Backend] ERROR: Backend project not found at $backend_project${NC}"
|
||||
return
|
||||
fi
|
||||
|
||||
echo -e "${GRAY}[Backend] Starting at $backend_path${NC}"
|
||||
|
||||
# Start backend in background, redirecting output to a log file
|
||||
cd "$backend_path"
|
||||
nohup dotnet run --project "$backend_project" > "$PROJECT_ROOT/backend.log" 2>&1 &
|
||||
local backend_pid=$!
|
||||
echo $backend_pid > "$PROJECT_ROOT/backend.pid"
|
||||
|
||||
echo -e "${YELLOW}[Backend] Waiting for API to start (PID: $backend_pid)...${NC}"
|
||||
|
||||
# Wait for the backend to start (up to 30 seconds)
|
||||
for i in {1..30}; do
|
||||
if check_port 5000; then
|
||||
echo -e "${GREEN}[Backend] API started successfully at http://localhost:5000${NC}"
|
||||
echo -e "${GREEN}[Backend] Swagger UI: http://localhost:5000/swagger${NC}"
|
||||
return
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
|
||||
echo -e "${YELLOW}[Backend] API is starting... Check backend.log for status${NC}"
|
||||
}
|
||||
|
||||
# Function to start frontend
|
||||
start_frontend() {
|
||||
echo -e "${YELLOW}[Frontend] Starting ColaFlow Web...${NC}"
|
||||
|
||||
# Check if frontend port is already in use
|
||||
if check_port 3000; then
|
||||
echo -e "${GREEN}[Frontend] Port 3000 is already in use. Frontend may already be running.${NC}"
|
||||
echo -e "${GREEN}[Frontend] Web UI: http://localhost:3000${NC}"
|
||||
return
|
||||
fi
|
||||
|
||||
# Start frontend in background
|
||||
local frontend_path="$PROJECT_ROOT/colaflow-web"
|
||||
|
||||
if [ ! -d "$frontend_path" ]; then
|
||||
echo -e "${RED}[Frontend] ERROR: Frontend directory not found at $frontend_path${NC}"
|
||||
return
|
||||
fi
|
||||
|
||||
# Check if node_modules exists
|
||||
if [ ! -d "$frontend_path/node_modules" ]; then
|
||||
echo -e "${YELLOW}[Frontend] node_modules not found. Installing dependencies first...${NC}"
|
||||
cd "$frontend_path"
|
||||
npm install
|
||||
fi
|
||||
|
||||
echo -e "${GRAY}[Frontend] Starting at $frontend_path${NC}"
|
||||
|
||||
# Start frontend in background, redirecting output to a log file
|
||||
cd "$frontend_path"
|
||||
nohup npm run dev > "$PROJECT_ROOT/frontend.log" 2>&1 &
|
||||
local frontend_pid=$!
|
||||
echo $frontend_pid > "$PROJECT_ROOT/frontend.pid"
|
||||
|
||||
echo -e "${YELLOW}[Frontend] Waiting for Web to start (PID: $frontend_pid)...${NC}"
|
||||
|
||||
# Wait for the frontend to start (up to 30 seconds)
|
||||
for i in {1..30}; do
|
||||
if check_port 3000; then
|
||||
echo -e "${GREEN}[Frontend] Web started successfully at http://localhost:3000${NC}"
|
||||
return
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
|
||||
echo -e "${YELLOW}[Frontend] Web is starting... Check frontend.log for status${NC}"
|
||||
}
|
||||
|
||||
# Function to stop services
|
||||
stop_services() {
|
||||
echo ""
|
||||
echo -e "${YELLOW}Stopping services...${NC}"
|
||||
|
||||
if [ -f "$PROJECT_ROOT/backend.pid" ]; then
|
||||
local backend_pid=$(cat "$PROJECT_ROOT/backend.pid")
|
||||
if ps -p $backend_pid > /dev/null 2>&1; then
|
||||
echo -e "${YELLOW}[Backend] Stopping (PID: $backend_pid)...${NC}"
|
||||
kill $backend_pid 2>/dev/null || true
|
||||
fi
|
||||
rm "$PROJECT_ROOT/backend.pid"
|
||||
fi
|
||||
|
||||
if [ -f "$PROJECT_ROOT/frontend.pid" ]; then
|
||||
local frontend_pid=$(cat "$PROJECT_ROOT/frontend.pid")
|
||||
if ps -p $frontend_pid > /dev/null 2>&1; then
|
||||
echo -e "${YELLOW}[Frontend] Stopping (PID: $frontend_pid)...${NC}"
|
||||
kill $frontend_pid 2>/dev/null || true
|
||||
fi
|
||||
rm "$PROJECT_ROOT/frontend.pid"
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}Services stopped.${NC}"
|
||||
exit 0
|
||||
}
|
||||
|
||||
# Set up trap to stop services on Ctrl+C
|
||||
trap stop_services INT TERM
|
||||
|
||||
# Main execution
|
||||
echo -e "${CYAN}Starting development environment...${NC}"
|
||||
echo ""
|
||||
|
||||
# Start backend first
|
||||
start_backend
|
||||
echo ""
|
||||
|
||||
# Start frontend
|
||||
start_frontend
|
||||
echo ""
|
||||
|
||||
echo -e "${CYAN}========================================${NC}"
|
||||
echo -e "${CYAN} Development Environment Started${NC}"
|
||||
echo -e "${CYAN}========================================${NC}"
|
||||
echo ""
|
||||
echo -e "Services:"
|
||||
echo -e " - Backend API: http://localhost:5000"
|
||||
echo -e " - Swagger UI: http://localhost:5000/swagger"
|
||||
echo -e " - Frontend: http://localhost:3000"
|
||||
echo ""
|
||||
echo -e "${GRAY}Logs:${NC}"
|
||||
echo -e " - Backend: tail -f backend.log"
|
||||
echo -e " - Frontend: tail -f frontend.log"
|
||||
echo ""
|
||||
echo -e "${GRAY}Press Ctrl+C to stop all services.${NC}"
|
||||
echo ""
|
||||
|
||||
# Keep the script running
|
||||
while true; do
|
||||
sleep 1
|
||||
done
|
||||
Reference in New Issue
Block a user