initial commit

Signed-off-by: ale <ale@manalejandro.com>
Este commit está contenido en:
ale
2025-10-08 02:57:03 +02:00
commit b4c6a7d52e
Se han modificado 25 ficheros con 6465 adiciones y 0 borrados

408
scripts/setup.sh Archivo ejecutable
Ver fichero

@@ -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