408
scripts/setup.sh
Archivo ejecutable
408
scripts/setup.sh
Archivo ejecutable
@@ -0,0 +1,408 @@
|
||||
#!/bin/bash
|
||||
|
||||
# CUDA Quantum MCP Server - Build and Deployment Script
|
||||
# Automates the complete setup and deployment process
|
||||
|
||||
set -e # Exit on any error
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Logging functions
|
||||
log_info() {
|
||||
echo -e "${BLUE}ℹ️ $1${NC}"
|
||||
}
|
||||
|
||||
log_success() {
|
||||
echo -e "${GREEN}✅ $1${NC}"
|
||||
}
|
||||
|
||||
log_warning() {
|
||||
echo -e "${YELLOW}⚠️ $1${NC}"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}❌ $1${NC}"
|
||||
}
|
||||
|
||||
# Check if command exists
|
||||
command_exists() {
|
||||
command -v "$1" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
# System requirements check
|
||||
check_requirements() {
|
||||
log_info "Checking system requirements..."
|
||||
|
||||
# Check Node.js
|
||||
if command_exists node; then
|
||||
NODE_VERSION=$(node --version)
|
||||
log_success "Node.js found: $NODE_VERSION"
|
||||
else
|
||||
log_error "Node.js not found. Please install Node.js 18 or later."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check Python
|
||||
if command_exists python3; then
|
||||
PYTHON_VERSION=$(python3 --version)
|
||||
log_success "Python found: $PYTHON_VERSION"
|
||||
else
|
||||
log_error "Python 3 not found. Please install Python 3.8 or later."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check npm
|
||||
if command_exists npm; then
|
||||
NPM_VERSION=$(npm --version)
|
||||
log_success "npm found: $NPM_VERSION"
|
||||
else
|
||||
log_error "npm not found. Please install npm."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check for GPU (optional)
|
||||
if command_exists nvidia-smi; then
|
||||
log_success "NVIDIA GPU detected"
|
||||
nvidia-smi --query-gpu=name --format=csv,noheader,nounits | head -1
|
||||
else
|
||||
log_warning "No NVIDIA GPU detected. GPU acceleration will not be available."
|
||||
fi
|
||||
|
||||
log_success "System requirements check completed"
|
||||
}
|
||||
|
||||
# Install CUDA Quantum
|
||||
install_cudaq() {
|
||||
log_info "Installing CUDA Quantum..."
|
||||
|
||||
# Check if CUDA Quantum is already installed
|
||||
if python3 -c "import cudaq" 2>/dev/null; then
|
||||
log_success "CUDA Quantum already installed"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Install CUDA Quantum
|
||||
log_info "Installing CUDA Quantum via pip..."
|
||||
python3 -m pip install cudaq --user
|
||||
|
||||
# Verify installation
|
||||
if python3 -c "import cudaq" 2>/dev/null; then
|
||||
log_success "CUDA Quantum installed successfully"
|
||||
else
|
||||
log_error "Failed to install CUDA Quantum"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Install Node.js dependencies
|
||||
install_node_deps() {
|
||||
log_info "Installing Node.js dependencies..."
|
||||
|
||||
if [ ! -f "package.json" ]; then
|
||||
log_error "package.json not found. Are you in the right directory?"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
npm install
|
||||
|
||||
log_success "Node.js dependencies installed"
|
||||
}
|
||||
|
||||
# Install Python dependencies
|
||||
install_python_deps() {
|
||||
log_info "Installing additional Python dependencies..."
|
||||
|
||||
# Install common scientific computing packages
|
||||
python3 -m pip install --user numpy scipy matplotlib jupyter notebook
|
||||
|
||||
log_success "Python dependencies installed"
|
||||
}
|
||||
|
||||
# Build TypeScript
|
||||
build_typescript() {
|
||||
log_info "Building TypeScript..."
|
||||
|
||||
npm run build
|
||||
|
||||
if [ -d "dist" ]; then
|
||||
log_success "TypeScript build completed"
|
||||
else
|
||||
log_error "TypeScript build failed"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Set up environment
|
||||
setup_environment() {
|
||||
log_info "Setting up environment..."
|
||||
|
||||
# Copy environment template if .env doesn't exist
|
||||
if [ ! -f ".env" ]; then
|
||||
if [ -f ".env.example" ]; then
|
||||
cp .env.example .env
|
||||
log_info "Created .env from .env.example"
|
||||
log_warning "Please edit .env file with your configuration"
|
||||
else
|
||||
log_warning ".env.example not found, creating minimal .env"
|
||||
cat > .env << EOF
|
||||
# CUDA Quantum MCP Server Configuration
|
||||
NODE_ENV=development
|
||||
CUDAQ_DEFAULT_TARGET=qpp-cpu
|
||||
LOG_LEVEL=info
|
||||
CUDAQ_PYTHON_PATH=$(which python3)
|
||||
EOF
|
||||
fi
|
||||
else
|
||||
log_success "Environment file .env already exists"
|
||||
fi
|
||||
|
||||
# Create logs directory
|
||||
mkdir -p logs
|
||||
log_success "Environment setup completed"
|
||||
}
|
||||
|
||||
# Run tests
|
||||
run_tests() {
|
||||
log_info "Running tests..."
|
||||
|
||||
if [ "$1" = "--skip-tests" ]; then
|
||||
log_warning "Skipping tests as requested"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Run unit tests
|
||||
if npm test 2>/dev/null; then
|
||||
log_success "All tests passed"
|
||||
else
|
||||
log_warning "Some tests failed or no tests configured"
|
||||
fi
|
||||
}
|
||||
|
||||
# Validate installation
|
||||
validate_installation() {
|
||||
log_info "Validating installation..."
|
||||
|
||||
# Check if main files exist
|
||||
if [ -f "dist/index.js" ]; then
|
||||
log_success "Main server file found"
|
||||
else
|
||||
log_error "Main server file not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Test CUDA Quantum import
|
||||
if python3 -c "import cudaq; print('CUDA Quantum version:', cudaq.__version__ if hasattr(cudaq, '__version__') else 'unknown')" 2>/dev/null; then
|
||||
log_success "CUDA Quantum validation passed"
|
||||
else
|
||||
log_warning "CUDA Quantum validation failed"
|
||||
fi
|
||||
|
||||
# Test server startup (quick test)
|
||||
log_info "Testing server startup..."
|
||||
timeout 5s node dist/index.js --test 2>/dev/null || log_warning "Server startup test inconclusive"
|
||||
|
||||
log_success "Installation validation completed"
|
||||
}
|
||||
|
||||
# Start server
|
||||
start_server() {
|
||||
log_info "Starting CUDA Quantum MCP Server..."
|
||||
|
||||
if [ "$1" = "--daemon" ]; then
|
||||
nohup npm start > logs/server.log 2>&1 &
|
||||
SERVER_PID=$!
|
||||
echo $SERVER_PID > logs/server.pid
|
||||
log_success "Server started as daemon (PID: $SERVER_PID)"
|
||||
log_info "Logs: tail -f logs/server.log"
|
||||
log_info "Stop: kill $SERVER_PID"
|
||||
else
|
||||
log_success "Starting server in foreground..."
|
||||
npm start
|
||||
fi
|
||||
}
|
||||
|
||||
# Stop server daemon
|
||||
stop_server() {
|
||||
if [ -f "logs/server.pid" ]; then
|
||||
SERVER_PID=$(cat logs/server.pid)
|
||||
if kill -0 $SERVER_PID 2>/dev/null; then
|
||||
kill $SERVER_PID
|
||||
rm logs/server.pid
|
||||
log_success "Server stopped (PID: $SERVER_PID)"
|
||||
else
|
||||
log_warning "Server process not running"
|
||||
rm -f logs/server.pid
|
||||
fi
|
||||
else
|
||||
log_warning "No server PID file found"
|
||||
fi
|
||||
}
|
||||
|
||||
# Run integration examples
|
||||
run_examples() {
|
||||
log_info "Running integration examples..."
|
||||
|
||||
if [ -f "examples/integration_example.py" ]; then
|
||||
python3 examples/integration_example.py
|
||||
else
|
||||
log_warning "Integration examples not found"
|
||||
fi
|
||||
}
|
||||
|
||||
# Create Docker image
|
||||
build_docker() {
|
||||
log_info "Building Docker image..."
|
||||
|
||||
if command_exists docker; then
|
||||
docker build -t mcp-quantum:latest .
|
||||
log_success "Docker image built: mcp-quantum:latest"
|
||||
else
|
||||
log_error "Docker not found. Please install Docker to build image."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Deploy to production
|
||||
deploy_production() {
|
||||
log_info "Deploying to production..."
|
||||
|
||||
# Set production environment
|
||||
export NODE_ENV=production
|
||||
|
||||
# Build with production settings
|
||||
npm run build
|
||||
|
||||
# Install only production dependencies
|
||||
npm ci --only=production
|
||||
|
||||
# Set up production environment
|
||||
if [ ! -f ".env.production" ]; then
|
||||
cp .env.example .env.production
|
||||
log_warning "Created .env.production - please configure for production"
|
||||
fi
|
||||
|
||||
log_success "Production deployment prepared"
|
||||
log_info "Configure .env.production and start with: NODE_ENV=production npm start"
|
||||
}
|
||||
|
||||
# Help function
|
||||
show_help() {
|
||||
echo "CUDA Quantum MCP Server - Build and Deployment Script"
|
||||
echo
|
||||
echo "Usage: $0 [COMMAND] [OPTIONS]"
|
||||
echo
|
||||
echo "Commands:"
|
||||
echo " setup Complete setup (install deps, build, configure)"
|
||||
echo " install Install all dependencies"
|
||||
echo " build Build TypeScript code"
|
||||
echo " test Run tests"
|
||||
echo " start Start the server"
|
||||
echo " stop Stop server daemon"
|
||||
echo " restart Restart server daemon"
|
||||
echo " status Check server status"
|
||||
echo " examples Run integration examples"
|
||||
echo " docker Build Docker image"
|
||||
echo " deploy Deploy to production"
|
||||
echo " clean Clean build artifacts"
|
||||
echo " help Show this help"
|
||||
echo
|
||||
echo "Options:"
|
||||
echo " --skip-tests Skip running tests"
|
||||
echo " --daemon Start server as daemon"
|
||||
echo " --gpu Enable GPU support check"
|
||||
echo
|
||||
echo "Examples:"
|
||||
echo " $0 setup # Complete setup"
|
||||
echo " $0 start --daemon # Start as daemon"
|
||||
echo " $0 test --skip-tests # Build without tests"
|
||||
echo " $0 deploy # Production deployment"
|
||||
}
|
||||
|
||||
# Main execution
|
||||
main() {
|
||||
local command="${1:-help}"
|
||||
shift || true
|
||||
|
||||
case "$command" in
|
||||
setup)
|
||||
log_info "🚀 Starting complete setup..."
|
||||
check_requirements
|
||||
install_cudaq
|
||||
install_node_deps
|
||||
install_python_deps
|
||||
setup_environment
|
||||
build_typescript
|
||||
run_tests "$@"
|
||||
validate_installation
|
||||
log_success "🎉 Setup completed successfully!"
|
||||
log_info "Start the server with: $0 start"
|
||||
;;
|
||||
install)
|
||||
check_requirements
|
||||
install_cudaq
|
||||
install_node_deps
|
||||
install_python_deps
|
||||
;;
|
||||
build)
|
||||
build_typescript
|
||||
;;
|
||||
test)
|
||||
run_tests "$@"
|
||||
;;
|
||||
start)
|
||||
start_server "$@"
|
||||
;;
|
||||
stop)
|
||||
stop_server
|
||||
;;
|
||||
restart)
|
||||
stop_server
|
||||
sleep 2
|
||||
start_server "$@"
|
||||
;;
|
||||
status)
|
||||
if [ -f "logs/server.pid" ]; then
|
||||
SERVER_PID=$(cat logs/server.pid)
|
||||
if kill -0 $SERVER_PID 2>/dev/null; then
|
||||
log_success "Server running (PID: $SERVER_PID)"
|
||||
else
|
||||
log_warning "Server PID file exists but process not running"
|
||||
fi
|
||||
else
|
||||
log_info "Server not running"
|
||||
fi
|
||||
;;
|
||||
examples)
|
||||
run_examples
|
||||
;;
|
||||
docker)
|
||||
build_docker
|
||||
;;
|
||||
deploy)
|
||||
deploy_production
|
||||
;;
|
||||
clean)
|
||||
log_info "Cleaning build artifacts..."
|
||||
rm -rf dist/ node_modules/ logs/ coverage/
|
||||
log_success "Clean completed"
|
||||
;;
|
||||
help|--help|-h)
|
||||
show_help
|
||||
;;
|
||||
*)
|
||||
log_error "Unknown command: $command"
|
||||
show_help
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Script entry point
|
||||
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
||||
main "$@"
|
||||
fi
|
||||
Referencia en una nueva incidencia
Block a user