Cambios principales: - Actualizar .gitmodules: gamilit usa HTTPS (github.com) - Actualizar .gitignore: ignorar proyectos con repos en Gitea - Crear SUBREPOSITORIOS.md: documentacion de arquitectura de repos - Actualizar submodulo gamilit: sincronizado con workspace desarrollo Proyectos removidos del tracking (4050 archivos): - erp-suite, erp-core, erp-construccion, erp-clinicas - erp-retail, erp-mecanicas-diesel, erp-vidrio-templado - trading-platform, betting-analytics, inmobiliaria-analytics - platform_marketing_content Estos proyectos tienen repositorios independientes en Gitea: http://72.60.226.4:3000/rckrdmrd/ 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
301 lines
10 KiB
Bash
Executable File
301 lines
10 KiB
Bash
Executable File
#!/bin/bash
|
|
# =============================================================================
|
|
# validate-propagation-chain.sh
|
|
# Valida integridad post-propagacion
|
|
# Version: 1.0.0
|
|
# Sistema: NEXUS v3.4 + SIMCO + CAPVED
|
|
# EPIC: EPIC-012
|
|
# =============================================================================
|
|
#
|
|
# Uso:
|
|
# ./validate-propagation-chain.sh <propagacion_id>
|
|
# ./validate-propagation-chain.sh --all
|
|
# ./validate-propagation-chain.sh --last
|
|
#
|
|
# Parametros:
|
|
# propagacion_id ID de propagacion (ej: PROP-2026-001)
|
|
# --all Validar todas las propagaciones recientes
|
|
# --last Validar ultima propagacion registrada
|
|
#
|
|
# Validaciones:
|
|
# 1. REGISTRO-PROPAGACIONES.yml tiene entrada
|
|
# 2. TRAZABILIDAD-PROYECTOS.yml versiones actualizadas
|
|
# 3. HERENCIA-SIMCO.md de proyectos actualizados
|
|
# 4. PROJECT-STATUS.md menciona propagacion (opcional)
|
|
# 5. Versiones consistentes entre archivos
|
|
#
|
|
# Ejemplo:
|
|
# ./validate-propagation-chain.sh PROP-2026-001
|
|
#
|
|
# =============================================================================
|
|
|
|
set -e
|
|
|
|
# Configuracion
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
KB_PATH="/home/isem/workspace-v1/shared/knowledge-base"
|
|
REGISTRO="$KB_PATH/propagacion/REGISTRO-PROPAGACIONES.yml"
|
|
TRAZABILIDAD="$KB_PATH/TRAZABILIDAD-PROYECTOS.yml"
|
|
PROJECTS_PATH="/home/isem/workspace-v1/projects"
|
|
|
|
# Colores
|
|
GREEN='\033[0;32m'
|
|
RED='\033[0;31m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
# Contadores
|
|
PASS=0
|
|
FAIL=0
|
|
WARN=0
|
|
|
|
# Funciones de logging
|
|
check_pass() { PASS=$((PASS + 1)); echo -e " ${GREEN}[PASS]${NC} $1"; }
|
|
check_fail() { FAIL=$((FAIL + 1)); echo -e " ${RED}[FAIL]${NC} $1"; }
|
|
check_warn() { WARN=$((WARN + 1)); echo -e " ${YELLOW}[WARN]${NC} $1"; }
|
|
log_info() { echo -e " ${BLUE}[INFO]${NC} $1"; }
|
|
|
|
# Funcion de ayuda
|
|
show_help() {
|
|
head -32 "$0" | tail -25
|
|
exit 0
|
|
}
|
|
|
|
# Parsear argumentos
|
|
if [ "$1" == "--help" ] || [ "$1" == "-h" ]; then
|
|
show_help
|
|
fi
|
|
|
|
PROP_ID="${1:-}"
|
|
|
|
if [ -z "$PROP_ID" ]; then
|
|
echo -e "${RED}ERROR:${NC} Debe especificar un ID de propagacion"
|
|
echo "Uso: $0 <propagacion_id> | --all | --last"
|
|
exit 1
|
|
fi
|
|
|
|
# Manejar --last
|
|
if [ "$PROP_ID" == "--last" ]; then
|
|
if [ -f "$REGISTRO" ]; then
|
|
PROP_ID=$(grep -E "^ - id:" "$REGISTRO" 2>/dev/null | tail -1 | sed 's/.*id: *//' | tr -d '"' || echo "")
|
|
if [ -z "$PROP_ID" ]; then
|
|
echo -e "${RED}ERROR:${NC} No se encontraron propagaciones en el registro"
|
|
exit 1
|
|
fi
|
|
echo "Usando ultima propagacion: $PROP_ID"
|
|
else
|
|
echo -e "${RED}ERROR:${NC} REGISTRO-PROPAGACIONES.yml no existe"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# Manejar --all (simplificado - solo muestra resumen)
|
|
if [ "$PROP_ID" == "--all" ]; then
|
|
echo "╔═══════════════════════════════════════════════════════════════╗"
|
|
echo "║ VALIDACION DE TODAS LAS PROPAGACIONES ║"
|
|
echo "╚═══════════════════════════════════════════════════════════════╝"
|
|
echo ""
|
|
|
|
if [ -f "$REGISTRO" ]; then
|
|
PROP_IDS=$(grep -E "^ - id:" "$REGISTRO" 2>/dev/null | sed 's/.*id: *//' | tr -d '"' || echo "")
|
|
if [ -z "$PROP_IDS" ]; then
|
|
echo "No se encontraron propagaciones en el registro"
|
|
exit 0
|
|
fi
|
|
|
|
echo "$PROP_IDS" | while read -r pid; do
|
|
if [ -n "$pid" ]; then
|
|
echo " - $pid"
|
|
fi
|
|
done
|
|
echo ""
|
|
echo "Para validar una especifica: $0 <PROP-ID>"
|
|
else
|
|
echo "REGISTRO-PROPAGACIONES.yml no existe"
|
|
fi
|
|
exit 0
|
|
fi
|
|
|
|
echo "╔═══════════════════════════════════════════════════════════════╗"
|
|
echo "║ VALIDACION DE CADENA DE PROPAGACION ║"
|
|
echo "║ ID: $PROP_ID"
|
|
echo "╚═══════════════════════════════════════════════════════════════╝"
|
|
echo ""
|
|
|
|
# =============================================================================
|
|
# 1. Verificar REGISTRO-PROPAGACIONES.yml
|
|
# =============================================================================
|
|
echo "=== 1. REGISTRO-PROPAGACIONES.yml ==="
|
|
|
|
if [ -f "$REGISTRO" ]; then
|
|
if grep -q "$PROP_ID" "$REGISTRO" 2>/dev/null; then
|
|
check_pass "Propagacion registrada en REGISTRO-PROPAGACIONES.yml"
|
|
|
|
# Extraer informacion de la propagacion
|
|
MODULO=$(grep -A10 "$PROP_ID" "$REGISTRO" | grep "modulo:" | head -1 | sed 's/.*modulo: *//' | tr -d '"' || echo "desconocido")
|
|
VERSION=$(grep -A10 "$PROP_ID" "$REGISTRO" | grep "version:" | head -1 | sed 's/.*version: *//' | tr -d '"' || echo "desconocida")
|
|
log_info "Modulo: $MODULO, Version: $VERSION"
|
|
else
|
|
check_fail "Propagacion NO encontrada en registro"
|
|
MODULO="desconocido"
|
|
VERSION="desconocida"
|
|
fi
|
|
else
|
|
check_fail "REGISTRO-PROPAGACIONES.yml no existe"
|
|
MODULO="desconocido"
|
|
VERSION="desconocida"
|
|
fi
|
|
echo ""
|
|
|
|
# =============================================================================
|
|
# 2. Verificar TRAZABILIDAD-PROYECTOS.yml
|
|
# =============================================================================
|
|
echo "=== 2. TRAZABILIDAD-PROYECTOS.yml ==="
|
|
|
|
if [ -f "$TRAZABILIDAD" ]; then
|
|
check_pass "Archivo existe"
|
|
|
|
if [ "$MODULO" != "desconocido" ]; then
|
|
if grep -q "$MODULO" "$TRAZABILIDAD" 2>/dev/null; then
|
|
check_pass "Modulo $MODULO referenciado en trazabilidad"
|
|
else
|
|
check_warn "Modulo $MODULO no encontrado en trazabilidad"
|
|
fi
|
|
fi
|
|
else
|
|
check_fail "TRAZABILIDAD-PROYECTOS.yml no existe"
|
|
fi
|
|
echo ""
|
|
|
|
# =============================================================================
|
|
# 3. Verificar HERENCIA-SIMCO.md de proyectos
|
|
# =============================================================================
|
|
echo "=== 3. HERENCIA-SIMCO.md de proyectos ==="
|
|
|
|
PROYECTOS=("gamilit" "trading-platform" "erp-core" "erp-suite")
|
|
|
|
for proj in "${PROYECTOS[@]}"; do
|
|
HERENCIA="$PROJECTS_PATH/$proj/orchestration/00-guidelines/HERENCIA-SIMCO.md"
|
|
|
|
if [ -f "$HERENCIA" ]; then
|
|
# Verificar si tiene seccion de propagacion
|
|
if grep -qi "propagacion" "$HERENCIA" 2>/dev/null; then
|
|
check_pass "$proj: Seccion de propagacion existe"
|
|
else
|
|
check_warn "$proj: Sin seccion de propagacion"
|
|
fi
|
|
else
|
|
# Intentar ruta alternativa
|
|
HERENCIA_ALT="$PROJECTS_PATH/$proj/orchestration/HERENCIA-SIMCO.md"
|
|
if [ -f "$HERENCIA_ALT" ]; then
|
|
check_pass "$proj: HERENCIA-SIMCO.md existe (ruta alternativa)"
|
|
else
|
|
check_warn "$proj: HERENCIA-SIMCO.md no encontrado"
|
|
fi
|
|
fi
|
|
done
|
|
echo ""
|
|
|
|
# =============================================================================
|
|
# 4. Verificar PROJECT-STATUS.md (opcional)
|
|
# =============================================================================
|
|
echo "=== 4. PROJECT-STATUS.md (opcional) ==="
|
|
|
|
for proj in "${PROYECTOS[@]}"; do
|
|
STATUS="$PROJECTS_PATH/$proj/orchestration/00-guidelines/PROJECT-STATUS.md"
|
|
|
|
if [ -f "$STATUS" ]; then
|
|
log_info "$proj: PROJECT-STATUS.md existe"
|
|
else
|
|
# No es error, es opcional
|
|
log_info "$proj: Sin PROJECT-STATUS.md (opcional)"
|
|
fi
|
|
done
|
|
echo ""
|
|
|
|
# =============================================================================
|
|
# 5. Verificar consistencia de versiones
|
|
# =============================================================================
|
|
echo "=== 5. Consistencia de versiones ==="
|
|
|
|
if [ "$MODULO" != "desconocido" ] && [ "$VERSION" != "desconocida" ]; then
|
|
# Verificar en NIVELES-PROPAGACION.yml
|
|
NIVELES_FILE="$KB_PATH/propagacion/NIVELES-PROPAGACION.yml"
|
|
if [ -f "$NIVELES_FILE" ]; then
|
|
check_pass "NIVELES-PROPAGACION.yml existe"
|
|
else
|
|
check_warn "NIVELES-PROPAGACION.yml no existe"
|
|
fi
|
|
|
|
# Verificar PROTOCOLO-COORDINACION.yml
|
|
PROTOCOLO_FILE="$KB_PATH/propagacion/PROTOCOLO-COORDINACION.yml"
|
|
if [ -f "$PROTOCOLO_FILE" ]; then
|
|
check_pass "PROTOCOLO-COORDINACION.yml existe"
|
|
else
|
|
check_warn "PROTOCOLO-COORDINACION.yml no existe"
|
|
fi
|
|
else
|
|
check_warn "No se puede verificar versiones (modulo/version desconocidos)"
|
|
fi
|
|
echo ""
|
|
|
|
# =============================================================================
|
|
# 6. Verificar scripts de propagacion
|
|
# =============================================================================
|
|
echo "=== 6. Scripts de propagacion ==="
|
|
|
|
SCRIPTS=(
|
|
"$SCRIPT_DIR/propagate-module-update.sh"
|
|
"$SCRIPT_DIR/generate-scrum-tasks.sh"
|
|
"$SCRIPT_DIR/cascade-propagation.sh"
|
|
"$SCRIPT_DIR/validate-propagation-chain.sh"
|
|
)
|
|
|
|
for script in "${SCRIPTS[@]}"; do
|
|
SCRIPT_NAME=$(basename "$script")
|
|
if [ -f "$script" ]; then
|
|
if [ -x "$script" ]; then
|
|
check_pass "$SCRIPT_NAME ejecutable"
|
|
else
|
|
check_warn "$SCRIPT_NAME existe pero no es ejecutable"
|
|
fi
|
|
else
|
|
check_fail "$SCRIPT_NAME no existe"
|
|
fi
|
|
done
|
|
echo ""
|
|
|
|
# =============================================================================
|
|
# Resumen
|
|
# =============================================================================
|
|
echo "═══════════════════════════════════════════════════════════════"
|
|
echo " RESUMEN DE VALIDACION"
|
|
echo "═══════════════════════════════════════════════════════════════"
|
|
echo ""
|
|
echo -e " ${GREEN}PASS:${NC} $PASS"
|
|
echo -e " ${YELLOW}WARN:${NC} $WARN"
|
|
echo -e " ${RED}FAIL:${NC} $FAIL"
|
|
echo ""
|
|
|
|
# Calcular porcentaje
|
|
TOTAL=$((PASS + WARN + FAIL))
|
|
if [ $TOTAL -gt 0 ]; then
|
|
PERCENT=$((PASS * 100 / TOTAL))
|
|
echo " Porcentaje de exito: ${PERCENT}%"
|
|
echo ""
|
|
fi
|
|
|
|
# Resultado final
|
|
if [ $FAIL -eq 0 ]; then
|
|
if [ $WARN -eq 0 ]; then
|
|
echo -e "${GREEN}[VALIDACION EXITOSA]${NC} Cadena de propagacion integra"
|
|
else
|
|
echo -e "${YELLOW}[VALIDACION CON ADVERTENCIAS]${NC} Revisar warnings"
|
|
fi
|
|
exit 0
|
|
else
|
|
echo -e "${RED}[VALIDACION FALLIDA]${NC} Hay errores que corregir"
|
|
exit 1
|
|
fi
|