workspace-v1/devtools/scripts/propagation/check-module-versions.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

243 lines
6.2 KiB
Bash
Executable File

#!/bin/bash
# =============================================================================
# check-module-versions.sh
# Detecta modulos desactualizados en proyectos
# Sistema: NEXUS v3.4
# =============================================================================
#
# Descripcion:
# Compara las versiones de modulos en el knowledge-base (fuente de verdad)
# contra las versiones usadas en cada proyecto, identificando cuales
# proyectos estan desactualizados.
#
# Uso:
# ./check-module-versions.sh [opciones]
#
# Opciones:
# --modulo <nombre> Verificar solo un modulo especifico
# --proyecto <nombre> Verificar solo un proyecto especifico
# --verbose Mostrar todos los modulos, no solo desactualizados
# --json Output en formato JSON
# --help Mostrar esta ayuda
#
# Exit codes:
# 0 - Todos los proyectos estan al dia
# 1 - Hay desactualizaciones detectadas
# 2 - Error de configuracion
#
# Clasificacion de urgencia:
# CRITICAL - Modulos con security fixes pendientes
# HIGH - Bug fixes pendientes
# MEDIUM - Features nuevos disponibles
# LOW - Refactors o mejoras menores
#
# =============================================================================
set -e
# Colores
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m'
# Configuracion
WORKSPACE="/home/isem/workspace-v1"
KB_PATH="$WORKSPACE/shared/knowledge-base"
TRAZABILIDAD="$KB_PATH/TRAZABILIDAD-PROYECTOS.yml"
CATALOGO="$KB_PATH/CATALOGO-MODULOS.yml"
# Parametros
MODULO_FILTER=""
PROYECTO_FILTER=""
VERBOSE=false
JSON_OUTPUT=false
DESACTUALIZADOS=0
# =============================================================================
# FUNCIONES
# =============================================================================
show_help() {
head -35 "$0" | tail -30
exit 0
}
log_header() {
echo ""
echo "============================================"
echo " VERIFICADOR DE VERSIONES DE MODULOS"
echo " Sistema: NEXUS v3.4"
echo "============================================"
echo ""
}
parse_args() {
while [[ $# -gt 0 ]]; do
case $1 in
--help)
show_help
;;
--modulo)
MODULO_FILTER=$2
shift 2
;;
--proyecto)
PROYECTO_FILTER=$2
shift 2
;;
--verbose)
VERBOSE=true
shift
;;
--json)
JSON_OUTPUT=true
shift
;;
*)
echo "Opcion desconocida: $1"
echo "Use --help para ver opciones disponibles"
exit 2
;;
esac
done
}
check_files() {
if [ ! -f "$TRAZABILIDAD" ]; then
echo -e "${RED}[ERROR]${NC} TRAZABILIDAD-PROYECTOS.yml no encontrado"
exit 2
fi
}
get_kb_version() {
local modulo=$1
# Buscar en la seccion versiones_kb
grep "^ $modulo:" "$TRAZABILIDAD" | head -1 | sed 's/.*: *"*//; s/"*$//'
}
get_project_version() {
local proyecto=$1
local modulo=$2
# Buscar en la seccion del proyecto
grep -A50 "^ $proyecto:" "$TRAZABILIDAD" | grep "$modulo:" | head -1 | sed 's/.*: *"*//; s/"*$//'
}
compare_versions() {
local kb_version=$1
local project_version=$2
if [ "$kb_version" == "$project_version" ]; then
echo "OK"
else
echo "OUTDATED"
fi
}
get_urgency() {
# Por defecto, asignar MEDIUM
# En una implementacion mas completa, se leeria metadata del modulo
echo "MEDIUM"
}
print_module_status() {
local modulo=$1
local kb_version=$2
echo ""
echo -e "${CYAN}$modulo${NC} (KB: v$kb_version)"
# Obtener proyectos que usan este modulo
local proyectos=$(grep -A20 "^ $modulo:" "$TRAZABILIDAD" | grep "^ - " | sed 's/^ - //')
if [ -z "$proyectos" ]; then
echo " (sin proyectos usando este modulo)"
return
fi
for proyecto in $proyectos; do
if [ -n "$PROYECTO_FILTER" ] && [ "$proyecto" != "$PROYECTO_FILTER" ]; then
continue
fi
local project_version=$(get_project_version "$proyecto" "$modulo")
if [ -z "$project_version" ]; then
project_version="?"
fi
local status=$(compare_versions "$kb_version" "$project_version")
if [ "$status" == "OK" ]; then
if $VERBOSE; then
echo -e " +-- $proyecto ................ ${GREEN}[OK]${NC} v$project_version"
fi
else
local urgency=$(get_urgency)
DESACTUALIZADOS=$((DESACTUALIZADOS + 1))
echo -e " +-- $proyecto ................ ${YELLOW}[!!]${NC} v$project_version (KB: $kb_version) [$urgency]"
fi
done
}
print_summary() {
echo ""
echo "--------------------------------------------"
echo ""
if [ $DESACTUALIZADOS -eq 0 ]; then
echo -e "${GREEN}Todos los proyectos estan al dia!${NC}"
else
echo -e "${YELLOW}Propagaciones pendientes: $DESACTUALIZADOS${NC}"
fi
echo ""
echo "Ultima verificacion: $(date '+%Y-%m-%d %H:%M:%S')"
echo ""
echo "============================================"
}
# =============================================================================
# MAIN
# =============================================================================
main() {
parse_args "$@"
if ! $JSON_OUTPUT; then
log_header
fi
check_files
if ! $JSON_OUTPUT; then
echo "Verificando versiones de modulos..."
echo ""
fi
# Obtener lista de modulos desde versiones_kb
local modulos=$(grep -A100 "^versiones_kb:" "$TRAZABILIDAD" | grep "^ [a-z]" | sed 's/:.*//; s/^ *//' | head -30)
for modulo in $modulos; do
if [ -n "$MODULO_FILTER" ] && [ "$modulo" != "$MODULO_FILTER" ]; then
continue
fi
local kb_version=$(get_kb_version "$modulo")
if [ -n "$kb_version" ]; then
print_module_status "$modulo" "$kb_version"
fi
done
if ! $JSON_OUTPUT; then
print_summary
fi
if [ $DESACTUALIZADOS -gt 0 ]; then
exit 1
else
exit 0
fi
}
main "$@"