#!/bin/bash # ============================================================================= # Script de Validacion de Dependencias # Valida que un proyecto tenga correctamente configuradas sus dependencias # con erp-core y el catalogo de modulos compartidos. # ============================================================================= set -e # Colores para output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color WORKSPACE="/home/isem/workspace-v1" PROJECT=$1 if [ -z "$PROJECT" ]; then echo -e "${RED}Error: Debe especificar un proyecto${NC}" echo "Uso: $0 " echo "Ejemplo: $0 erp-construccion" exit 1 fi PROJECT_PATH="$WORKSPACE/projects/$PROJECT" if [ ! -d "$PROJECT_PATH" ]; then echo -e "${RED}Error: Proyecto no encontrado: $PROJECT_PATH${NC}" exit 1 fi echo "========================================" echo "Validando dependencias de: $PROJECT" echo "========================================" echo "" ERRORS=0 WARNINGS=0 # ----------------------------------------------------------------------------- # 1. Verificar estructura de orchestration # ----------------------------------------------------------------------------- echo "1. Verificando estructura de orchestration..." if [ -d "$PROJECT_PATH/orchestration/00-guidelines" ]; then echo -e " ${GREEN}[OK]${NC} orchestration/00-guidelines/ existe" else echo -e " ${RED}[ERROR]${NC} orchestration/00-guidelines/ no existe" ((ERRORS++)) fi # ----------------------------------------------------------------------------- # 2. Verificar HERENCIA-ERP-CORE.md # ----------------------------------------------------------------------------- echo "" echo "2. Verificando HERENCIA-ERP-CORE.md..." HERENCIA_FILE="$PROJECT_PATH/orchestration/00-guidelines/HERENCIA-ERP-CORE.md" if [ -f "$HERENCIA_FILE" ]; then echo -e " ${GREEN}[OK]${NC} HERENCIA-ERP-CORE.md existe" # Verificar que menciona la version de core if grep -q "Version ERP-Core" "$HERENCIA_FILE" 2>/dev/null; then VERSION=$(grep "Version ERP-Core" "$HERENCIA_FILE" | head -1) echo -e " ${GREEN}[OK]${NC} $VERSION" else echo -e " ${YELLOW}[WARN]${NC} No especifica version de ERP-Core" ((WARNINGS++)) fi else echo -e " ${RED}[ERROR]${NC} HERENCIA-ERP-CORE.md no existe" ((ERRORS++)) fi # ----------------------------------------------------------------------------- # 3. Verificar CONTEXTO-PROYECTO.md # ----------------------------------------------------------------------------- echo "" echo "3. Verificando CONTEXTO-PROYECTO.md..." CONTEXTO_FILE="$PROJECT_PATH/orchestration/00-guidelines/CONTEXTO-PROYECTO.md" if [ -f "$CONTEXTO_FILE" ]; then echo -e " ${GREEN}[OK]${NC} CONTEXTO-PROYECTO.md existe" # Verificar referencias a workspace-v1 V1_REFS=$(grep -c "workspace-v1" "$CONTEXTO_FILE" 2>/dev/null || echo "0") if [ "$V1_REFS" -gt "0" ]; then echo -e " ${GREEN}[OK]${NC} Tiene $V1_REFS referencias a workspace-v1" else echo -e " ${YELLOW}[WARN]${NC} No tiene referencias a workspace-v1" ((WARNINGS++)) fi else echo -e " ${RED}[ERROR]${NC} CONTEXTO-PROYECTO.md no existe" ((ERRORS++)) fi # ----------------------------------------------------------------------------- # 4. Verificar directorio referencias/ # ----------------------------------------------------------------------------- echo "" echo "4. Verificando directorio referencias/..." REFS_DIR="$PROJECT_PATH/orchestration/referencias" if [ -d "$REFS_DIR" ]; then echo -e " ${GREEN}[OK]${NC} orchestration/referencias/ existe" if [ -f "$REFS_DIR/DEPENDENCIAS-ERP-CORE.yml" ]; then echo -e " ${GREEN}[OK]${NC} DEPENDENCIAS-ERP-CORE.yml existe" else echo -e " ${YELLOW}[WARN]${NC} DEPENDENCIAS-ERP-CORE.yml no existe" ((WARNINGS++)) fi if [ -f "$REFS_DIR/DEPENDENCIAS-SHARED.yml" ]; then echo -e " ${GREEN}[OK]${NC} DEPENDENCIAS-SHARED.yml existe" else echo -e " ${YELLOW}[WARN]${NC} DEPENDENCIAS-SHARED.yml no existe" ((WARNINGS++)) fi else echo -e " ${YELLOW}[WARN]${NC} orchestration/referencias/ no existe" ((WARNINGS++)) fi # ----------------------------------------------------------------------------- # 5. Verificar variable RLS en DDL # ----------------------------------------------------------------------------- echo "" echo "5. Verificando variable RLS en DDL..." DDL_PATH="$PROJECT_PATH/apps/database" if [ -d "$DDL_PATH" ]; then # Buscar uso correcto de variable RLS CORRECT_RLS=$(grep -r "current_tenant_id" "$DDL_PATH" 2>/dev/null | wc -l) INCORRECT_RLS=$(grep -r "current_tenant'" "$DDL_PATH" 2>/dev/null | wc -l) if [ "$CORRECT_RLS" -gt "0" ]; then echo -e " ${GREEN}[OK]${NC} Variable RLS correcta encontrada ($CORRECT_RLS ocurrencias)" else echo -e " ${YELLOW}[WARN]${NC} Variable RLS no encontrada en DDL" ((WARNINGS++)) fi if [ "$INCORRECT_RLS" -gt "0" ]; then echo -e " ${RED}[ERROR]${NC} Variable RLS incorrecta detectada ($INCORRECT_RLS ocurrencias)" ((ERRORS++)) fi else echo -e " ${YELLOW}[WARN]${NC} Directorio apps/database/ no existe" ((WARNINGS++)) fi # ----------------------------------------------------------------------------- # 6. Verificar que no hay referencias a rutas antiguas # ----------------------------------------------------------------------------- echo "" echo "6. Verificando referencias a rutas antiguas..." OLD_REFS=$(grep -r "/home/isem/workspace/" "$PROJECT_PATH/orchestration" 2>/dev/null | grep -v "workspace-v1" | wc -l) if [ "$OLD_REFS" -eq "0" ]; then echo -e " ${GREEN}[OK]${NC} Sin referencias a workspace/ (ruta antigua)" else echo -e " ${RED}[ERROR]${NC} Encontradas $OLD_REFS referencias a ruta antigua (workspace/)" ((ERRORS++)) fi CP_REFS=$(grep -r "control-plane/orchestration/directivas" "$PROJECT_PATH/orchestration" 2>/dev/null | wc -l) if [ "$CP_REFS" -eq "0" ]; then echo -e " ${GREEN}[OK]${NC} Sin referencias a control-plane/orchestration/" else echo -e " ${RED}[ERROR]${NC} Encontradas $CP_REFS referencias a control-plane/orchestration/ (obsoleto)" ((ERRORS++)) fi # ----------------------------------------------------------------------------- # Resumen # ----------------------------------------------------------------------------- echo "" echo "========================================" echo "RESUMEN DE VALIDACION" echo "========================================" echo "" if [ $ERRORS -eq 0 ] && [ $WARNINGS -eq 0 ]; then echo -e "${GREEN}VALIDACION EXITOSA${NC}" echo "El proyecto cumple con todos los requisitos de dependencias." exit 0 elif [ $ERRORS -eq 0 ]; then echo -e "${YELLOW}VALIDACION CON ADVERTENCIAS${NC}" echo "Errores: $ERRORS" echo "Advertencias: $WARNINGS" echo "" echo "El proyecto puede funcionar pero tiene elementos por completar." exit 0 else echo -e "${RED}VALIDACION FALLIDA${NC}" echo "Errores: $ERRORS" echo "Advertencias: $WARNINGS" echo "" echo "El proyecto tiene errores que deben corregirse." exit 1 fi