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
155 lines
4.7 KiB
Bash
Executable File
155 lines
4.7 KiB
Bash
Executable File
#!/bin/bash
|
|
# validate-code-integrity.sh - EPIC-008
|
|
# Valida que el codigo funcional permanece intacto durante purga
|
|
# Version: 1.0.0
|
|
|
|
set -e
|
|
|
|
PROJECT=$1
|
|
MODE=$2
|
|
PROJECT_PATH="/home/isem/workspace-v1/projects/$PROJECT"
|
|
BACKUP_PATH="/home/isem/workspace-v1-bckp/projects/$PROJECT"
|
|
BASELINE_FILE="$PROJECT_PATH/.code-checksums.txt"
|
|
|
|
# Colores
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m'
|
|
|
|
# Validar argumento
|
|
if [ -z "$PROJECT" ]; then
|
|
echo -e "${RED}ERROR: Uso: $0 <proyecto> [--generate-baseline]${NC}"
|
|
echo "Ejemplo: $0 gamilit"
|
|
echo "Ejemplo: $0 gamilit --generate-baseline"
|
|
exit 1
|
|
fi
|
|
|
|
# Validar proyecto existe
|
|
if [ ! -d "$PROJECT_PATH" ]; then
|
|
echo -e "${RED}ERROR: Proyecto '$PROJECT' no existe${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# Funcion para generar checksums de codigo
|
|
generate_checksums() {
|
|
local path=$1
|
|
local checksums=""
|
|
|
|
# Archivos TypeScript/JavaScript en apps/
|
|
if [ -d "$path/apps" ]; then
|
|
checksums+=$(find "$path/apps" -type f \( -name "*.ts" -o -name "*.tsx" -o -name "*.js" -o -name "*.jsx" \) \
|
|
! -path "*/node_modules/*" ! -path "*/.next/*" ! -path "*/dist/*" ! -path "*/.turbo/*" \
|
|
-exec md5sum {} \; 2>/dev/null | sort)
|
|
checksums+=$'\n'
|
|
fi
|
|
|
|
# Archivos SQL en database/
|
|
if [ -d "$path/database" ]; then
|
|
checksums+=$(find "$path/database" -type f \( -name "*.sql" -o -name "*.ts" \) \
|
|
-exec md5sum {} \; 2>/dev/null | sort)
|
|
fi
|
|
|
|
echo "$checksums"
|
|
}
|
|
|
|
# Modo: Generar baseline
|
|
if [ "$MODE" == "--generate-baseline" ]; then
|
|
echo "=== GENERANDO BASELINE DE CHECKSUMS: $PROJECT ==="
|
|
echo ""
|
|
|
|
generate_checksums "$PROJECT_PATH" > "$BASELINE_FILE"
|
|
|
|
total=$(wc -l < "$BASELINE_FILE" 2>/dev/null || echo 0)
|
|
echo -e "${GREEN}Baseline guardado: $BASELINE_FILE${NC}"
|
|
echo "Total archivos: $total"
|
|
exit 0
|
|
fi
|
|
|
|
# Modo: Validacion
|
|
echo "=== VALIDACION DE INTEGRIDAD: $PROJECT ==="
|
|
echo ""
|
|
|
|
APPS_OK=true
|
|
DB_OK=true
|
|
CONFIGS_OK=true
|
|
TOTAL_DIFFS=0
|
|
|
|
# 1. Comparar apps/ con backup
|
|
echo "Comparando apps/..."
|
|
if [ -d "$BACKUP_PATH/apps" ] && [ -d "$PROJECT_PATH/apps" ]; then
|
|
diff_output=$(diff -rq "$BACKUP_PATH/apps" "$PROJECT_PATH/apps" \
|
|
--exclude="node_modules" --exclude=".next" --exclude="dist" --exclude=".turbo" \
|
|
--exclude=".cache" --exclude="coverage" --exclude=".nyc_output" 2>&1 || true)
|
|
|
|
if [ -z "$diff_output" ]; then
|
|
echo -e " apps/: ${GREEN}IDENTICO${NC}"
|
|
else
|
|
echo -e " apps/: ${RED}DIFERENCIAS DETECTADAS${NC}"
|
|
APPS_OK=false
|
|
diff_count=$(echo "$diff_output" | wc -l)
|
|
TOTAL_DIFFS=$((TOTAL_DIFFS + diff_count))
|
|
fi
|
|
elif [ ! -d "$BACKUP_PATH/apps" ]; then
|
|
echo -e " apps/: ${YELLOW}NO EXISTE EN BACKUP${NC}"
|
|
else
|
|
echo -e " apps/: ${YELLOW}NO EXISTE EN PROYECTO${NC}"
|
|
fi
|
|
|
|
# 2. Comparar database/ con backup
|
|
echo "Comparando database/..."
|
|
if [ -d "$BACKUP_PATH/database" ] && [ -d "$PROJECT_PATH/database" ]; then
|
|
diff_output=$(diff -rq "$BACKUP_PATH/database" "$PROJECT_PATH/database" 2>&1 || true)
|
|
|
|
if [ -z "$diff_output" ]; then
|
|
echo -e " database/: ${GREEN}IDENTICO${NC}"
|
|
else
|
|
echo -e " database/: ${RED}DIFERENCIAS DETECTADAS${NC}"
|
|
DB_OK=false
|
|
diff_count=$(echo "$diff_output" | wc -l)
|
|
TOTAL_DIFFS=$((TOTAL_DIFFS + diff_count))
|
|
fi
|
|
elif [ ! -d "$BACKUP_PATH/database" ]; then
|
|
echo -e " database/: ${YELLOW}NO EXISTE EN BACKUP (OK)${NC}"
|
|
else
|
|
echo -e " database/: ${YELLOW}NO EXISTE EN PROYECTO${NC}"
|
|
fi
|
|
|
|
# 3. Comparar archivos de configuracion
|
|
echo "Comparando configuraciones..."
|
|
for config in package.json tsconfig.json docker-compose.yml; do
|
|
if [ -f "$BACKUP_PATH/$config" ] && [ -f "$PROJECT_PATH/$config" ]; then
|
|
if diff -q "$BACKUP_PATH/$config" "$PROJECT_PATH/$config" > /dev/null 2>&1; then
|
|
echo -e " $config: ${GREEN}IDENTICO${NC}"
|
|
else
|
|
echo -e " $config: ${YELLOW}DIFERENTE${NC}"
|
|
# No marcamos como error, solo warning
|
|
fi
|
|
elif [ -f "$BACKUP_PATH/$config" ]; then
|
|
echo -e " $config: ${YELLOW}FALTA EN PROYECTO${NC}"
|
|
fi
|
|
done
|
|
|
|
# Resultado final
|
|
echo ""
|
|
echo "=== RESULTADO ==="
|
|
if [ "$APPS_OK" = true ] && [ "$DB_OK" = true ]; then
|
|
echo -e "${GREEN}PASS: Codigo funcional intacto${NC}"
|
|
echo ""
|
|
echo "Resumen:"
|
|
echo " apps/: OK"
|
|
echo " database/: OK"
|
|
echo " diferencias: 0"
|
|
exit 0
|
|
else
|
|
echo -e "${RED}FAIL: Se detectaron diferencias en codigo funcional${NC}"
|
|
echo ""
|
|
echo "Resumen:"
|
|
echo " apps/: $([ "$APPS_OK" = true ] && echo "OK" || echo "DIFERENCIAS")"
|
|
echo " database/: $([ "$DB_OK" = true ] && echo "OK" || echo "DIFERENCIAS")"
|
|
echo " total_diferencias: $TOTAL_DIFFS"
|
|
echo ""
|
|
echo -e "${YELLOW}ADVERTENCIA: Verificar manualmente antes de continuar${NC}"
|
|
exit 1
|
|
fi
|