e4c7119c51
🎉 Major v2.0 rebuild kickoff - Week 1 accomplished! ## Highlights ### Cross-Platform Support 🌍 - ✅ Linux primary platform (Ubuntu/Debian tested) - ✅ Windows fully supported - ✅ macOS experimental support - ✅ Platform-agnostic path handling (XDG spec) - ✅ Auto-detection of KiCAD installation ### Infrastructure 🏗️ - ✅ GitHub Actions CI/CD pipeline - ✅ Pytest framework with 20+ tests - ✅ Pre-commit hooks (Black, MyPy, ESLint) - ✅ Automated Linux installation script - ✅ Enhanced npm scripts ### IPC API Migration Prep 🚀 - ✅ Comprehensive migration plan (30 pages) - ✅ Backend abstraction layer (800+ lines) - ✅ Factory pattern with auto-detection - ✅ SWIG backward compatibility wrapper - ✅ IPC backend skeleton ready ### Documentation 📚 - ✅ Updated README (Linux installation) - ✅ CONTRIBUTING.md guide - ✅ Linux compatibility audit - ✅ IPC API migration plan - ✅ Session summaries - ✅ Platform-specific config templates ## Files Changed - 27 files created - ~3,000 lines of code/docs - 8 comprehensive documentation pages - 20+ unit tests - 5 abstraction layer modules ## Next Steps - Week 2: IPC API migration (project.py → component.py → routing.py) - Migrate from deprecated SWIG to official IPC API - JLCPCB/Digikey integration prep 🤖 Generated with Claude Code https://claude.com/claude-code Co-Authored-By: Claude <noreply@anthropic.com>
166 lines
6.1 KiB
Bash
Executable File
166 lines
6.1 KiB
Bash
Executable File
#!/bin/bash
|
||
# KiCAD MCP Server - Linux Installation Script
|
||
# Supports Ubuntu/Debian-based distributions
|
||
|
||
set -e # Exit on 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
|
||
|
||
# Print colored messages
|
||
print_info() { echo -e "${BLUE}ℹ${NC} $1"; }
|
||
print_success() { echo -e "${GREEN}✓${NC} $1"; }
|
||
print_warning() { echo -e "${YELLOW}⚠${NC} $1"; }
|
||
print_error() { echo -e "${RED}✗${NC} $1"; }
|
||
|
||
# Header
|
||
echo ""
|
||
echo "╔═══════════════════════════════════════════════════════════════╗"
|
||
echo "║ KiCAD MCP Server - Linux Installation ║"
|
||
echo "║ ║"
|
||
echo "║ This script will install: ║"
|
||
echo "║ - KiCAD 9.0 ║"
|
||
echo "║ - Node.js 20.x ║"
|
||
echo "║ - Python dependencies ║"
|
||
echo "║ - Build the TypeScript server ║"
|
||
echo "╚═══════════════════════════════════════════════════════════════╝"
|
||
echo ""
|
||
|
||
# Check if running on Linux
|
||
if [[ "$OSTYPE" != "linux-gnu"* ]]; then
|
||
print_error "This script is for Linux only. Detected: $OSTYPE"
|
||
exit 1
|
||
fi
|
||
|
||
# Check for Ubuntu/Debian
|
||
if ! command -v apt-get &> /dev/null; then
|
||
print_warning "This script is optimized for Ubuntu/Debian"
|
||
print_warning "For other distributions, please install manually"
|
||
read -p "Continue anyway? (y/N) " -n 1 -r
|
||
echo
|
||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||
exit 1
|
||
fi
|
||
fi
|
||
|
||
# Function to check if command exists
|
||
command_exists() {
|
||
command -v "$1" &> /dev/null
|
||
}
|
||
|
||
# Step 1: Install KiCAD 9.0
|
||
print_info "Step 1/5: Installing KiCAD 9.0..."
|
||
if command_exists kicad; then
|
||
KICAD_VERSION=$(kicad-cli version 2>/dev/null | head -n 1 || echo "unknown")
|
||
print_success "KiCAD is already installed: $KICAD_VERSION"
|
||
else
|
||
print_info "Adding KiCAD PPA and installing..."
|
||
sudo add-apt-repository --yes ppa:kicad/kicad-9.0-releases
|
||
sudo apt-get update
|
||
sudo apt-get install -y kicad kicad-libraries
|
||
print_success "KiCAD 9.0 installed"
|
||
fi
|
||
|
||
# Verify KiCAD Python module
|
||
print_info "Verifying KiCAD Python module..."
|
||
if python3 -c "import pcbnew; print(pcbnew.GetBuildVersion())" 2>/dev/null; then
|
||
PCBNEW_VERSION=$(python3 -c "import pcbnew; print(pcbnew.GetBuildVersion())")
|
||
print_success "KiCAD Python module (pcbnew) found: $PCBNEW_VERSION"
|
||
else
|
||
print_warning "KiCAD Python module (pcbnew) not found in default Python path"
|
||
print_warning "You may need to set PYTHONPATH manually"
|
||
fi
|
||
|
||
# Step 2: Install Node.js
|
||
print_info "Step 2/5: Installing Node.js 20.x..."
|
||
if command_exists node; then
|
||
NODE_VERSION=$(node --version)
|
||
MAJOR_VERSION=$(echo $NODE_VERSION | cut -d'.' -f1 | sed 's/v//')
|
||
if [ "$MAJOR_VERSION" -ge 18 ]; then
|
||
print_success "Node.js is already installed: $NODE_VERSION"
|
||
else
|
||
print_warning "Node.js version is too old: $NODE_VERSION (need 18+)"
|
||
print_info "Installing Node.js 20.x..."
|
||
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
|
||
sudo apt-get install -y nodejs
|
||
print_success "Node.js updated"
|
||
fi
|
||
else
|
||
print_info "Installing Node.js 20.x..."
|
||
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
|
||
sudo apt-get install -y nodejs
|
||
print_success "Node.js installed: $(node --version)"
|
||
fi
|
||
|
||
# Step 3: Install Python dependencies
|
||
print_info "Step 3/5: Installing Python dependencies..."
|
||
if [ -f "requirements.txt" ]; then
|
||
pip3 install --user -r requirements.txt
|
||
print_success "Python dependencies installed"
|
||
else
|
||
print_warning "requirements.txt not found - skipping Python dependencies"
|
||
fi
|
||
|
||
# Step 4: Install Node.js dependencies
|
||
print_info "Step 4/5: Installing Node.js dependencies..."
|
||
if [ -f "package.json" ]; then
|
||
npm install
|
||
print_success "Node.js dependencies installed"
|
||
else
|
||
print_error "package.json not found! Are you in the correct directory?"
|
||
exit 1
|
||
fi
|
||
|
||
# Step 5: Build TypeScript
|
||
print_info "Step 5/5: Building TypeScript..."
|
||
npm run build
|
||
print_success "TypeScript build complete"
|
||
|
||
# Final checks
|
||
echo ""
|
||
print_info "Running final checks..."
|
||
|
||
# Check if dist directory was created
|
||
if [ -d "dist" ]; then
|
||
print_success "dist/ directory created"
|
||
else
|
||
print_error "dist/ directory not found - build may have failed"
|
||
exit 1
|
||
fi
|
||
|
||
# Test platform helper
|
||
print_info "Testing platform detection..."
|
||
if python3 python/utils/platform_helper.py > /dev/null 2>&1; then
|
||
print_success "Platform helper working"
|
||
else
|
||
print_warning "Platform helper test failed"
|
||
fi
|
||
|
||
# Installation complete
|
||
echo ""
|
||
echo "╔═══════════════════════════════════════════════════════════════╗"
|
||
echo "║ 🎉 Installation Complete! 🎉 ║"
|
||
echo "╚═══════════════════════════════════════════════════════════════╝"
|
||
echo ""
|
||
print_success "KiCAD MCP Server is ready to use!"
|
||
echo ""
|
||
print_info "Next steps:"
|
||
echo " 1. Configure Cline in VSCode with the path to dist/index.js"
|
||
echo " 2. Set PYTHONPATH in Cline config (see README.md)"
|
||
echo " 3. Restart VSCode"
|
||
echo " 4. Test with: 'Create a new KiCAD project named TestProject'"
|
||
echo ""
|
||
print_info "For detailed configuration, see:"
|
||
echo " - README.md (Linux section)"
|
||
echo " - config/linux-config.example.json"
|
||
echo ""
|
||
print_info "To run tests:"
|
||
echo " pytest tests/"
|
||
echo ""
|
||
print_info "Need help? Check docs/LINUX_COMPATIBILITY_AUDIT.md"
|
||
echo ""
|