workspace-v1/devtools/scripts/epic-008/validate-code-integrity.sh
rckrdmrd 66161b1566 feat: Workspace-v1 complete migration with NEXUS v3.4
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
2026-01-04 03:37:42 -06:00

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