Skip to main content
Glama
rollback-to-v4.0.3.sh9.91 kB
#!/bin/bash # EuConquisto Composer MCP - Rollback to v4.0.3 # Version: 1.0.0 # Purpose: Emergency rollback to working v4.0.3 system # Usage: ./scripts/rollback-to-v4.0.3.sh [backup_timestamp] set -e # Exit on any error # Configuration PROJECT_ROOT="/Users/ricardokawasaki/Desktop/euconquisto-composer-mcp-poc" BACKUP_ROOT="$PROJECT_ROOT/backups/migration-safety" # 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() { echo -e "${BLUE}[ROLLBACK]${NC} $1" } success() { echo -e "${GREEN}[SUCCESS]${NC} $1" } warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } error() { echo -e "${RED}[ERROR]${NC} $1" } # Find latest backup or use specified timestamp find_backup() { local timestamp="$1" if [ -n "$timestamp" ]; then BACKUP_DIR="$BACKUP_ROOT/backup_$timestamp" if [ ! -d "$BACKUP_DIR" ]; then error "Backup not found: $BACKUP_DIR" exit 1 fi else # Find latest backup BACKUP_DIR=$(find "$BACKUP_ROOT" -name "backup_*" -type d | sort | tail -1) if [ -z "$BACKUP_DIR" ]; then error "No backups found in $BACKUP_ROOT" exit 1 fi timestamp=$(basename "$BACKUP_DIR" | sed 's/backup_//') fi log "Using backup: $timestamp" log "Backup location: $BACKUP_DIR" } # Verify backup integrity verify_backup_integrity() { log "Verifying backup integrity" local essential_files=( "tier1-essential/browser-automation-api-direct-save-v4.0.3.js" "tier1-essential/correct-jwt-new.txt" "tier1-essential/jwt-redirect-server-v1.0.2.js" "tier1-essential/package.json" ) for file in "${essential_files[@]}"; do if [ ! -f "$BACKUP_DIR/$file" ]; then error "❌ Critical file missing from backup: $file" exit 1 fi done # Verify JWT token local jwt_file="$BACKUP_DIR/tier1-essential/correct-jwt-new.txt" local jwt_length=$(wc -c < "$jwt_file") if [ "$jwt_length" -ne 3276 ]; then error "❌ JWT token integrity check failed: $jwt_length characters (expected 3276)" exit 1 fi success "✅ Backup integrity verified" } # Stop running processes stop_processes() { log "Stopping running processes" # Stop JWT server if running local jwt_pid=$(lsof -ti :8080 2>/dev/null || true) if [ -n "$jwt_pid" ]; then warning "Stopping JWT server (PID: $jwt_pid)" kill "$jwt_pid" 2>/dev/null || true sleep 2 fi # Stop any MCP processes local mcp_pids=$(pgrep -f "mcp.*composer" 2>/dev/null || true) if [ -n "$mcp_pids" ]; then warning "Stopping MCP processes: $mcp_pids" echo "$mcp_pids" | xargs kill 2>/dev/null || true sleep 1 fi success "✅ Processes stopped" } # Restore v4.0.3 system restore_v403_system() { log "Restoring v4.0.3 system files" # Backup current state before rollback local rollback_backup="$PROJECT_ROOT/backups/pre-rollback-$(date +%Y%m%d_%H%M%S)" mkdir -p "$rollback_backup" # Backup current main file if it exists if [ -f "$PROJECT_ROOT/dist/browser-automation-api-direct-save-v4.0.3.js" ]; then cp "$PROJECT_ROOT/dist/browser-automation-api-direct-save-v4.0.3.js" "$rollback_backup/" log "Current state backed up to: $rollback_backup" fi # Restore v4.0.3 main file cp "$BACKUP_DIR/tier1-essential/browser-automation-api-direct-save-v4.0.3.js" "$PROJECT_ROOT/dist/" success "✅ v4.0.3 main file restored" # Restore JWT token cp "$BACKUP_DIR/tier1-essential/correct-jwt-new.txt" "$PROJECT_ROOT/archive/authentication/" success "✅ JWT token restored" # Restore JWT server cp "$BACKUP_DIR/tier1-essential/jwt-redirect-server-v1.0.2.js" "$PROJECT_ROOT/tools/servers/" success "✅ JWT server restored" # Restore package files cp "$BACKUP_DIR/tier1-essential/package.json" "$PROJECT_ROOT/" if [ -f "$BACKUP_DIR/tier1-essential/package-lock.json" ]; then cp "$BACKUP_DIR/tier1-essential/package-lock.json" "$PROJECT_ROOT/" success "✅ Package configuration restored" fi } # Restore dependencies restore_dependencies() { log "Restoring Node.js dependencies" # Remove current node_modules if it exists if [ -d "$PROJECT_ROOT/node_modules" ]; then warning "Removing current node_modules" rm -rf "$PROJECT_ROOT/node_modules" fi # Install dependencies log "Running npm install..." npm install --prefix "$PROJECT_ROOT" --silent success "✅ Dependencies restored" } # Start JWT server start_jwt_server() { log "Starting JWT redirect server" # Check if port 8080 is available if lsof -ti :8080 >/dev/null 2>&1; then warning "Port 8080 is already in use" return 0 fi # Start JWT server in background node "$PROJECT_ROOT/tools/servers/jwt-redirect-server-v1.0.2.js" > /dev/null 2>&1 & local jwt_pid=$! # Wait for server to start sleep 3 # Verify server is running if lsof -ti :8080 >/dev/null 2>&1; then success "✅ JWT server started (PID: $jwt_pid, Port: 8080)" else error "❌ Failed to start JWT server" return 1 fi } # Validate system functionality validate_system() { log "Validating system functionality" # Check critical files exist local critical_files=( "$PROJECT_ROOT/dist/browser-automation-api-direct-save-v4.0.3.js" "$PROJECT_ROOT/archive/authentication/correct-jwt-new.txt" "$PROJECT_ROOT/tools/servers/jwt-redirect-server-v1.0.2.js" ) for file in "${critical_files[@]}"; do if [ ! -f "$file" ]; then error "❌ Critical file missing: $file" return 1 fi done # Verify JWT token length local jwt_length=$(wc -c < "$PROJECT_ROOT/archive/authentication/correct-jwt-new.txt") if [ "$jwt_length" -ne 3276 ]; then error "❌ JWT token validation failed: $jwt_length characters" return 1 fi # Check JWT server is responding if ! curl -s "http://localhost:8080" > /dev/null; then error "❌ JWT server not responding" return 1 fi # Check Node.js can load the main file if ! node -c "$PROJECT_ROOT/dist/browser-automation-api-direct-save-v4.0.3.js"; then error "❌ Main file syntax validation failed" return 1 fi success "✅ System validation passed" } # Clean up modular infrastructure (optional) cleanup_modular() { if [ "$1" = "--clean-modular" ]; then log "Cleaning up modular infrastructure" if [ -d "$PROJECT_ROOT/src/infrastructure" ]; then # Backup modular infrastructure before removal local modular_backup="$PROJECT_ROOT/backups/modular-backup-$(date +%Y%m%d_%H%M%S)" mkdir -p "$modular_backup" cp -r "$PROJECT_ROOT/src/infrastructure" "$modular_backup/" warning "Modular infrastructure backed up to: $modular_backup" # Remove modular infrastructure rm -rf "$PROJECT_ROOT/src/infrastructure" success "✅ Modular infrastructure removed" fi else warning "Modular infrastructure preserved (use --clean-modular to remove)" fi } # Main execution main() { local timestamp="$1" local clean_flag="$2" echo "========================================" echo " EuConquisto Composer MCP Rollback" echo "========================================" echo "" warning "⚠️ EMERGENCY ROLLBACK TO v4.0.3" warning "This will restore the system to the previous working state" echo "" # Confirmation prompt read -p "Are you sure you want to proceed with rollback? (y/N): " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then log "Rollback cancelled by user" exit 0 fi find_backup "$timestamp" verify_backup_integrity stop_processes restore_v403_system restore_dependencies start_jwt_server if validate_system; then cleanup_modular "$clean_flag" echo "" success "🎉 ROLLBACK COMPLETED SUCCESSFULLY" echo "" echo "System Status:" echo " ✅ v4.0.3 system restored and operational" echo " ✅ JWT server running on port 8080" echo " ✅ Authentication system functional" echo " ✅ All dependencies restored" echo "" echo "Next Steps:" echo " 1. Test composition creation to verify functionality" echo " 2. Review rollback logs for any issues" echo " 3. Plan next migration attempt if needed" else error "❌ ROLLBACK VALIDATION FAILED" error "System may not be fully operational" exit 1 fi } # Show usage usage() { echo "Usage: $0 [backup_timestamp] [--clean-modular]" echo "" echo "Arguments:" echo " backup_timestamp Optional. Specific backup to restore (format: YYYYMMDD_HHMMSS)" echo " --clean-modular Optional. Remove modular infrastructure after rollback" echo "" echo "Examples:" echo " $0 # Use latest backup" echo " $0 20250705_143000 # Use specific backup" echo " $0 20250705_143000 --clean-modular # Restore and clean modular files" echo "" echo "Available backups:" if [ -d "$BACKUP_ROOT" ]; then find "$BACKUP_ROOT" -name "backup_*" -type d | sort | sed 's/.*backup_/ /' else echo " No backups found" fi } # Check arguments if [ "$1" = "--help" ] || [ "$1" = "-h" ]; then usage exit 0 fi # Execute main function main "$@"

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/rkm097git/euconquisto-composer-mcp-poc'

If you have feedback or need assistance with the MCP directory API, please join our Discord server