#!/bin/bash # Migration Coordinator Script # Orchestrates the complete migration process # Usage: ./migration_coordinator.sh [phase] set -e # Exit on any error PHASE=${1:-"all"} # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color log() { echo -e "${BLUE}[$(date +'%H:%M:%S')]${NC} $1" } success() { echo -e "${GREEN}โœ…${NC} $1" } warning() { echo -e "${YELLOW}โš ๏ธ${NC} $1" } error() { echo -e "${RED}โŒ${NC} $1" } # Ensure we're on config-driven branch if [ "$(git branch --show-current)" != "config-driven" ]; then error "Not on config-driven branch. Run: git checkout config-driven" exit 1 fi # Create state directory if it doesn't exist mkdir -p .migration/state # Function to commit progress commit_progress() { local message="$1" git add -A git commit --no-gpg-sign -m "$message" || true log "Committed: $message" } # Phase 1: Analysis phase_analysis() { log "๐Ÿ” Phase 1: Analysis" log "Running syntax analysis..." chmod +x .migration/agents/01_analyze_syntax.sh ./.migration/agents/01_analyze_syntax.sh log "Running ENV reference analysis..." chmod +x .migration/agents/03_analyze_env.sh ./.migration/agents/03_analyze_env.sh commit_progress "chore: complete analysis phase - syntax and env references" success "Analysis phase complete" } # Phase 2: Fix Syntax Errors phase_syntax_fixes() { log "๐Ÿ”ง Phase 2: Syntax Fixes" if [ ! -f ".migration/state/syntax_analysis.json" ]; then warning "No syntax analysis found. Running analysis first..." phase_analysis fi # Get files with syntax errors (simplified - in practice would parse JSON) log "Applying syntax fixes to critical files..." chmod +x .migration/agents/02_fix_syntax.sh # Fix high-priority files first FILES_TO_FIX=( "core/nulib/servers/ssh.nu" "core/nulib/servers/status.nu" "core/nulib/servers/state.nu" "core/nulib/main_provisioning/create.nu" "core/nulib/main_provisioning/delete.nu" "core/nulib/main_provisioning/update.nu" ) for file in "${FILES_TO_FIX[@]}"; do if [ -f "$file" ]; then log "Fixing syntax in $file..." ./.migration/agents/02_fix_syntax.sh "$file" || warning "Failed to fix $file" fi done commit_progress "fix: apply syntax corrections to core files" success "Syntax fixes phase complete" } # Phase 3: Migrate ENV References phase_env_migration() { log "๐Ÿ”„ Phase 3: ENV Migration" chmod +x .migration/agents/04_migrate_env.sh # Migrate modules in order of dependency MODULES=( "core/nulib/lib_provisioning/utils" "core/nulib/servers" "core/nulib/taskservs" "core/nulib/main_provisioning" ) for module_dir in "${MODULES[@]}"; do if [ -d "$module_dir" ]; then log "Migrating ENV references in $module_dir..." for file in "$module_dir"/*.nu; do if [ -f "$file" ]; then log " Processing $file..." ./.migration/agents/04_migrate_env.sh "$file" || warning "Failed to migrate $file" fi done fi done commit_progress "refactor: migrate ENV references to config accessors" success "ENV migration phase complete" } # Phase 4: Testing phase_testing() { log "๐Ÿงช Phase 4: Testing" chmod +x .migration/agents/05_test_module.sh MODULES=("utils" "servers" "taskservs" "main") for module in "${MODULES[@]}"; do log "Testing $module module..." ./.migration/agents/05_test_module.sh "$module" || warning "Testing failed for $module" done commit_progress "test: validate migrated modules" success "Testing phase complete" } # Phase 5: Final Validation phase_validation() { log "โœ… Phase 5: Final Validation" log "Running comprehensive validation..." # Test main commands if ./core/nulib/provisioning help >/dev/null 2>&1; then success "Main provisioning command works" else error "Main provisioning command failed" fi if ./core/nulib/provisioning server help >/dev/null 2>&1; then success "Server module works" else warning "Server module has issues" fi commit_progress "chore: final validation complete" success "Migration validation complete" } # Main execution main() { log "๐Ÿš€ Starting Config-Driven Migration" log "Phase: $PHASE" case $PHASE in "analysis"|"1") phase_analysis ;; "syntax"|"2") phase_syntax_fixes ;; "env"|"3") phase_env_migration ;; "test"|"4") phase_testing ;; "validate"|"5") phase_validation ;; "all") phase_analysis phase_syntax_fixes phase_env_migration phase_testing phase_validation success "๐ŸŽ‰ Complete migration finished!" ;; *) echo "Usage: $0 [analysis|syntax|env|test|validate|all]" exit 1 ;; esac } # Run main function main "$@"