208 lines
5.2 KiB
Bash
208 lines
5.2 KiB
Bash
![]() |
#!/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 "$@"
|