workspace-v1/devtools/scripts/propagation/generate-propagation-report.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

288 lines
7.4 KiB
Bash
Executable File

#!/bin/bash
# =============================================================================
# generate-propagation-report.sh
# Genera dashboard visual de estado de modulos
# Sistema: NEXUS v3.4
# =============================================================================
#
# Descripcion:
# Genera un reporte ASCII art formateado mostrando el estado de todos
# los modulos del knowledge-base, que proyectos los usan, y cuales
# estan desactualizados.
#
# Uso:
# ./generate-propagation-report.sh [opciones]
#
# Opciones:
# --no-color Output sin codigos ANSI
# --markdown Generar reporte en formato Markdown
# --output FILE Guardar reporte en archivo
# --help Mostrar esta ayuda
#
# =============================================================================
set -e
# Colores (se pueden desactivar con --no-color)
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
WHITE='\033[1;37m'
NC='\033[0m'
# Configuracion
WORKSPACE="/home/isem/workspace-v1"
KB_PATH="$WORKSPACE/shared/knowledge-base"
TRAZABILIDAD="$KB_PATH/TRAZABILIDAD-PROYECTOS.yml"
REGISTRO="$KB_PATH/propagacion/REGISTRO-PROPAGACIONES.yml"
# Parametros
NO_COLOR=false
MARKDOWN=false
OUTPUT_FILE=""
# Contadores
TOTAL_MODULOS=0
TOTAL_PROYECTOS=0
PROPAGACIONES_PENDIENTES=0
EVALUACIONES_PENDIENTES=0
# =============================================================================
# FUNCIONES
# =============================================================================
show_help() {
head -25 "$0" | tail -20
exit 0
}
parse_args() {
while [[ $# -gt 0 ]]; do
case $1 in
--help)
show_help
;;
--no-color)
NO_COLOR=true
RED=''
GREEN=''
YELLOW=''
BLUE=''
CYAN=''
WHITE=''
NC=''
shift
;;
--markdown)
MARKDOWN=true
NO_COLOR=true
RED=''
GREEN=''
YELLOW=''
BLUE=''
CYAN=''
WHITE=''
NC=''
shift
;;
--output)
OUTPUT_FILE=$2
shift 2
;;
*)
shift
;;
esac
done
}
check_files() {
if [ ! -f "$TRAZABILIDAD" ]; then
echo "ERROR: TRAZABILIDAD-PROYECTOS.yml no encontrado"
exit 2
fi
}
print_header() {
if $MARKDOWN; then
echo "# Estado de Modulos - NEXUS v3.4"
echo ""
echo "**Generado:** $(date '+%Y-%m-%d %H:%M:%S')"
echo ""
else
echo ""
echo "===================================================================="
echo " ESTADO DE MODULOS - NEXUS v3.4"
echo "===================================================================="
echo ""
fi
}
get_kb_version() {
local modulo=$1
grep "^ $modulo:" "$TRAZABILIDAD" 2>/dev/null | head -1 | sed 's/.*: *"*//; s/"*$//'
}
get_projects_for_module() {
local modulo=$1
grep -A20 "^ $modulo:" "$TRAZABILIDAD" 2>/dev/null | grep "^ - " | sed 's/^ - //'
}
get_project_version() {
local proyecto=$1
local modulo=$2
grep -A50 "^ $proyecto:" "$TRAZABILIDAD" 2>/dev/null | grep "$modulo:" | head -1 | sed 's/.*: *"*//; s/"*$//'
}
print_module_section() {
local modulo=$1
local kb_version=$2
TOTAL_MODULOS=$((TOTAL_MODULOS + 1))
if $MARKDOWN; then
echo "## $modulo (v$kb_version)"
echo ""
echo "| Proyecto | Version | Estado |"
echo "|----------|---------|--------|"
else
echo -e " ${CYAN}$modulo${NC} (v$kb_version)"
fi
local proyectos=$(get_projects_for_module "$modulo")
if [ -z "$proyectos" ]; then
if $MARKDOWN; then
echo "| - | - | Sin proyectos |"
else
echo " (sin proyectos usando este modulo)"
fi
echo ""
return
fi
for proyecto in $proyectos; do
TOTAL_PROYECTOS=$((TOTAL_PROYECTOS + 1))
local project_version=$(get_project_version "$proyecto" "$modulo")
if [ -z "$project_version" ]; then
project_version="?"
fi
local status_icon=""
local status_text=""
if [ "$kb_version" == "$project_version" ]; then
status_icon="${GREEN}[OK]${NC}"
status_text="OK"
else
PROPAGACIONES_PENDIENTES=$((PROPAGACIONES_PENDIENTES + 1))
status_icon="${YELLOW}[!!]${NC}"
status_text="DESACTUALIZADO"
fi
if $MARKDOWN; then
echo "| $proyecto | $project_version | $status_text |"
else
# Padding para alineacion
local padding="................"
local name_len=${#proyecto}
local pad_len=$((20 - name_len))
if [ $pad_len -lt 1 ]; then pad_len=1; fi
local dots="${padding:0:$pad_len}"
echo -e " +-- $proyecto $dots $status_icon v$project_version"
fi
done
echo ""
}
print_legend() {
if $MARKDOWN; then
echo "---"
echo ""
echo "**Leyenda:**"
echo "- OK = Al dia"
echo "- DESACTUALIZADO = Requiere propagacion"
echo "- EVALUANDO = En evaluacion"
echo ""
else
echo "--------------------------------------------------------------------"
echo -e "LEYENDA: ${GREEN}[OK]${NC} Al dia ${YELLOW}[!!]${NC} Desactualizado ${BLUE}[??]${NC} Evaluando"
echo "--------------------------------------------------------------------"
fi
}
print_summary() {
echo ""
if $MARKDOWN; then
echo "## Resumen"
echo ""
echo "| Metrica | Valor |"
echo "|---------|-------|"
echo "| Modulos trackeados | $TOTAL_MODULOS |"
echo "| Relaciones proyecto-modulo | $TOTAL_PROYECTOS |"
echo "| Propagaciones pendientes | $PROPAGACIONES_PENDIENTES |"
echo ""
else
echo "RESUMEN:"
echo " - Modulos trackeados: $TOTAL_MODULOS"
echo " - Relaciones proyecto-modulo: $TOTAL_PROYECTOS"
echo " - Propagaciones pendientes: $PROPAGACIONES_PENDIENTES"
echo ""
fi
}
print_footer() {
if $MARKDOWN; then
echo "---"
echo ""
echo "*Generado por generate-propagation-report.sh*"
else
echo "Ultima actualizacion: $(date '+%Y-%m-%d %H:%M:%S')"
echo "===================================================================="
echo ""
fi
}
generate_report() {
print_header
# Obtener modulos principales del indice inverso
local modulos="auth-jwt-nestjs payments-stripe-checkout payments-stripe-subscriptions users-roles-permissions ui-admin-dashboard"
for modulo in $modulos; do
local kb_version=$(get_kb_version "$modulo")
if [ -n "$kb_version" ]; then
print_module_section "$modulo" "$kb_version"
fi
done
print_legend
print_summary
print_footer
}
# =============================================================================
# MAIN
# =============================================================================
main() {
parse_args "$@"
check_files
if [ -n "$OUTPUT_FILE" ]; then
generate_report > "$OUTPUT_FILE"
echo "Reporte guardado en: $OUTPUT_FILE"
else
generate_report
fi
exit 0
}
main "$@"