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
243 lines
6.2 KiB
Bash
Executable File
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 "$@"
|