Sistema NEXUS v3.4 migrado con: Estructura principal: - core/orchestration: Sistema SIMCO + CAPVED (27 directivas, 28 perfiles) - core/catalog: Catalogo de funcionalidades reutilizables - shared/knowledge-base: Base de conocimiento compartida - devtools/scripts: Herramientas de desarrollo - control-plane/registries: Control de servicios y CI/CD - orchestration/: Configuracion de orquestacion de agentes Proyectos incluidos (11): - gamilit (submodule -> GitHub) - trading-platform (OrbiquanTIA) - erp-suite con 5 verticales: - erp-core, construccion, vidrio-templado - mecanicas-diesel, retail, clinicas - betting-analytics - inmobiliaria-analytics - platform_marketing_content - pos-micro, erp-basico Configuracion: - .gitignore completo para Node.js/Python/Docker - gamilit como submodule (git@github.com:rckrdmrd/gamilit-workspace.git) - Sistema de puertos estandarizado (3005-3199) Generated with NEXUS v3.4 Migration System EPIC-010: Configuracion Git y Repositorios
120 lines
4.1 KiB
Python
120 lines
4.1 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Script para corregir la unificación PROD ↔ DEV
|
|
"""
|
|
|
|
import os
|
|
import shutil
|
|
from pathlib import Path
|
|
|
|
GREEN = '\033[0;32m'
|
|
RED = '\033[0;31m'
|
|
YELLOW = '\033[1;33m'
|
|
NC = '\033[0m'
|
|
|
|
print("=" * 75)
|
|
print("CORRECCIÓN DE UNIFICACIÓN PROD ↔ DEV")
|
|
print("=" * 75)
|
|
print()
|
|
|
|
actions_taken = []
|
|
|
|
# 1. Sincronizar archivos desincronizados (PROD → DEV)
|
|
print("1. SINCRONIZANDO ARCHIVOS PROD → DEV")
|
|
print("-" * 75)
|
|
|
|
sync_files = [
|
|
("seeds/prod/educational_content/01-modules.sql", "seeds/dev/educational_content/01-modules.sql"),
|
|
("seeds/prod/gamification_system/01-achievement_categories.sql", "seeds/dev/gamification_system/01-achievement_categories.sql"),
|
|
("seeds/prod/auth/01-demo-users.sql", "seeds/dev/auth/01-demo-users.sql"),
|
|
]
|
|
|
|
for prod_file, dev_file in sync_files:
|
|
if os.path.exists(prod_file):
|
|
os.makedirs(os.path.dirname(dev_file), exist_ok=True)
|
|
shutil.copy2(prod_file, dev_file)
|
|
print(f"{GREEN}✓{NC} Copiado: {prod_file} → {dev_file}")
|
|
actions_taken.append(f"Sincronizado: {os.path.basename(dev_file)}")
|
|
else:
|
|
print(f"{RED}✗{NC} PROD no existe: {prod_file}")
|
|
|
|
# 2. Copiar archivos faltantes en DEV
|
|
print()
|
|
print("2. COPIANDO ARCHIVOS FALTANTES PROD → DEV")
|
|
print("-" * 75)
|
|
|
|
missing_in_dev = [
|
|
("seeds/prod/gamification_system/02-leaderboard_metadata.sql", "seeds/dev/gamification_system/02-leaderboard_metadata.sql"),
|
|
("seeds/prod/gamification_system/03-maya_ranks.sql", "seeds/dev/gamification_system/03-maya_ranks.sql"),
|
|
("seeds/prod/gamification_system/04-achievements.sql", "seeds/dev/gamification_system/04-achievements.sql"),
|
|
]
|
|
|
|
for prod_file, dev_file in missing_in_dev:
|
|
if os.path.exists(prod_file):
|
|
os.makedirs(os.path.dirname(dev_file), exist_ok=True)
|
|
shutil.copy2(prod_file, dev_file)
|
|
print(f"{GREEN}✓{NC} Copiado: {prod_file} → {dev_file}")
|
|
actions_taken.append(f"Creado: {os.path.basename(dev_file)}")
|
|
else:
|
|
print(f"{YELLOW}⚠{NC} PROD no existe: {prod_file}")
|
|
|
|
# 3. Copiar archivos faltantes en educational_content (si existen)
|
|
print()
|
|
print("3. VERIFICANDO educational_content ADICIONALES")
|
|
print("-" * 75)
|
|
|
|
additional_files = [
|
|
("seeds/prod/educational_content/07-assessment-rubrics.sql", "seeds/dev/educational_content/07-assessment-rubrics.sql"),
|
|
("seeds/prod/educational_content/08-difficulty_criteria.sql", "seeds/dev/educational_content/08-difficulty_criteria.sql"),
|
|
("seeds/prod/educational_content/09-exercise_mechanic_mapping.sql", "seeds/dev/educational_content/09-exercise_mechanic_mapping.sql"),
|
|
]
|
|
|
|
for prod_file, dev_file in additional_files:
|
|
if os.path.exists(prod_file):
|
|
os.makedirs(os.path.dirname(dev_file), exist_ok=True)
|
|
shutil.copy2(prod_file, dev_file)
|
|
print(f"{GREEN}✓{NC} Copiado: {prod_file} → {dev_file}")
|
|
actions_taken.append(f"Creado: {os.path.basename(dev_file)}")
|
|
else:
|
|
print(f"{YELLOW}⚠{NC} PROD no existe (OK si no se usa): {prod_file}")
|
|
|
|
# 4. Eliminar archivos temporales
|
|
print()
|
|
print("4. ELIMINANDO ARCHIVOS TEMPORALES")
|
|
print("-" * 75)
|
|
|
|
temp_patterns = ["**/*.bak", "**/*~", "**/*.tmp"]
|
|
deleted_count = 0
|
|
|
|
for pattern in temp_patterns:
|
|
for temp_file in Path(".").glob(pattern):
|
|
try:
|
|
temp_file.unlink()
|
|
print(f"{GREEN}✓{NC} Eliminado: {temp_file}")
|
|
deleted_count += 1
|
|
except Exception as e:
|
|
print(f"{RED}✗{NC} Error eliminando {temp_file}: {e}")
|
|
|
|
if deleted_count == 0:
|
|
print(f"{GREEN}✓{NC} No se encontraron archivos temporales")
|
|
else:
|
|
actions_taken.append(f"Eliminados {deleted_count} archivos temporales")
|
|
|
|
# Resumen
|
|
print()
|
|
print("=" * 75)
|
|
print("RESUMEN DE ACCIONES")
|
|
print("=" * 75)
|
|
print()
|
|
|
|
if actions_taken:
|
|
for action in actions_taken:
|
|
print(f" • {action}")
|
|
print()
|
|
print(f"{GREEN}✅ Se realizaron {len(actions_taken)} acciones de corrección{NC}")
|
|
else:
|
|
print(f"{GREEN}✅ No se necesitaron correcciones{NC}")
|
|
|
|
print()
|
|
print("Ejecuta verify-unification.py nuevamente para verificar")
|