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
192 lines
4.7 KiB
Bash
Executable File
192 lines
4.7 KiB
Bash
Executable File
#!/bin/bash
|
|
# purge-obsolete.sh - EPIC-008
|
|
# Elimina archivos obsoletos de un proyecto de forma segura
|
|
# Version: 1.0.0
|
|
|
|
PROJECT=$1
|
|
MODE=${2:---dry-run}
|
|
PROJECT_PATH="/home/isem/workspace-v1/projects/$PROJECT"
|
|
LOG_FILE="$PROJECT_PATH/PURGE-LOG.yml"
|
|
|
|
# Colores
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
# Validar argumento
|
|
if [ -z "$PROJECT" ]; then
|
|
echo -e "${RED}ERROR: Uso: $0 <proyecto> [--dry-run | --execute]${NC}"
|
|
echo " --dry-run : Solo muestra lo que se eliminaria (default)"
|
|
echo " --execute : Ejecuta la eliminacion"
|
|
echo ""
|
|
echo "Ejemplo: $0 gamilit --dry-run"
|
|
exit 1
|
|
fi
|
|
|
|
# Validar proyecto existe
|
|
if [ ! -d "$PROJECT_PATH" ]; then
|
|
echo -e "${RED}ERROR: Proyecto '$PROJECT' no existe${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
echo "=== PURGA DE ARCHIVOS OBSOLETOS: $PROJECT ==="
|
|
echo -e "Modo: ${BLUE}$MODE${NC}"
|
|
echo ""
|
|
|
|
# Buscar archivos obsoletos (excluyendo apps/ y database/)
|
|
echo "Buscando archivos obsoletos en docs/ y orchestration/..."
|
|
|
|
OBSOLETE_FILES=""
|
|
|
|
# Buscar en docs/
|
|
if [ -d "$PROJECT_PATH/docs" ]; then
|
|
DOCS_OBSOLETE=$(find "$PROJECT_PATH/docs" -type f \( \
|
|
-name "*.old" -o \
|
|
-name "*.backup" -o \
|
|
-name "*.bak" -o \
|
|
-name "*LEGACY*" -o \
|
|
-name "OLD-*" -o \
|
|
-name "DEPRECATED-*" -o \
|
|
-name ".DS_Store" -o \
|
|
-name "Thumbs.db" -o \
|
|
-name "*~" \
|
|
\) 2>/dev/null || true)
|
|
OBSOLETE_FILES+="$DOCS_OBSOLETE"
|
|
fi
|
|
|
|
# Buscar en orchestration/
|
|
if [ -d "$PROJECT_PATH/orchestration" ]; then
|
|
ORCH_OBSOLETE=$(find "$PROJECT_PATH/orchestration" -type f \( \
|
|
-name "*.old" -o \
|
|
-name "*.backup" -o \
|
|
-name "*.bak" -o \
|
|
-name "*LEGACY*" -o \
|
|
-name "OLD-*" -o \
|
|
-name "DEPRECATED-*" -o \
|
|
-name ".DS_Store" -o \
|
|
-name "Thumbs.db" -o \
|
|
-name "*~" \
|
|
\) 2>/dev/null || true)
|
|
if [ -n "$ORCH_OBSOLETE" ]; then
|
|
OBSOLETE_FILES+=$'\n'"$ORCH_OBSOLETE"
|
|
fi
|
|
fi
|
|
|
|
# Filtrar lineas vacias
|
|
OBSOLETE_FILES=$(echo "$OBSOLETE_FILES" | grep -v '^$' || true)
|
|
|
|
# Contar archivos
|
|
COUNT=0
|
|
if [ -n "$OBSOLETE_FILES" ]; then
|
|
COUNT=$(echo "$OBSOLETE_FILES" | wc -l)
|
|
fi
|
|
|
|
echo "Archivos obsoletos encontrados: $COUNT"
|
|
echo ""
|
|
|
|
# Si no hay archivos, generar log vacio y salir
|
|
if [ "$COUNT" -eq 0 ]; then
|
|
echo -e "${GREEN}No hay archivos obsoletos para eliminar.${NC}"
|
|
|
|
cat > "$LOG_FILE" << EOF
|
|
# Log de purga generado por EPIC-008
|
|
proyecto: $PROJECT
|
|
fecha: "$(date +%Y-%m-%d)"
|
|
modo: "$MODE"
|
|
archivos_eliminados: []
|
|
total_eliminados: 0
|
|
espacio_liberado: "0KB"
|
|
estado: "sin_cambios"
|
|
EOF
|
|
echo ""
|
|
echo "Log generado: $LOG_FILE"
|
|
exit 0
|
|
fi
|
|
|
|
# Mostrar archivos encontrados
|
|
echo -e "${YELLOW}Archivos a eliminar:${NC}"
|
|
TOTAL_SIZE=0
|
|
echo "$OBSOLETE_FILES" | while read -r file; do
|
|
if [ -n "$file" ] && [ -f "$file" ]; then
|
|
size=$(du -h "$file" 2>/dev/null | cut -f1)
|
|
# Mostrar ruta relativa para mejor legibilidad
|
|
rel_path=${file#$PROJECT_PATH/}
|
|
echo " - $rel_path ($size)"
|
|
fi
|
|
done
|
|
echo ""
|
|
|
|
# Ejecutar segun modo
|
|
if [ "$MODE" == "--execute" ]; then
|
|
echo -e "${YELLOW}EJECUTANDO eliminacion...${NC}"
|
|
echo ""
|
|
|
|
# Iniciar log
|
|
cat > "$LOG_FILE" << EOF
|
|
# Log de purga generado por EPIC-008
|
|
proyecto: $PROJECT
|
|
fecha: "$(date +%Y-%m-%d)"
|
|
modo: "execute"
|
|
archivos_eliminados:
|
|
EOF
|
|
|
|
DELETED=0
|
|
echo "$OBSOLETE_FILES" | while read -r file; do
|
|
if [ -n "$file" ] && [ -f "$file" ]; then
|
|
size=$(du -h "$file" 2>/dev/null | cut -f1)
|
|
rel_path=${file#$PROJECT_PATH/}
|
|
|
|
# Eliminar archivo
|
|
rm "$file"
|
|
|
|
# Registrar en log
|
|
echo " - archivo: \"$rel_path\"" >> "$LOG_FILE"
|
|
echo " tamano: \"$size\"" >> "$LOG_FILE"
|
|
echo " eliminado: true" >> "$LOG_FILE"
|
|
|
|
echo -e " ${RED}ELIMINADO${NC}: $rel_path"
|
|
DELETED=$((DELETED + 1))
|
|
fi
|
|
done
|
|
|
|
# Cerrar log
|
|
cat >> "$LOG_FILE" << EOF
|
|
|
|
total_eliminados: $COUNT
|
|
estado: "completado"
|
|
EOF
|
|
|
|
echo ""
|
|
echo -e "${GREEN}Purga completada.${NC}"
|
|
echo "Archivos eliminados: $COUNT"
|
|
echo "Log: $LOG_FILE"
|
|
|
|
else
|
|
# Modo dry-run
|
|
echo -e "${BLUE}[DRY-RUN] No se eliminaron archivos.${NC}"
|
|
echo "Ejecutar con --execute para eliminar."
|
|
|
|
# Generar log preview
|
|
cat > "$LOG_FILE" << EOF
|
|
# Log de purga generado por EPIC-008
|
|
proyecto: $PROJECT
|
|
fecha: "$(date +%Y-%m-%d)"
|
|
modo: "dry-run"
|
|
archivos_a_eliminar: $COUNT
|
|
preview: true
|
|
archivos_detectados:
|
|
EOF
|
|
|
|
echo "$OBSOLETE_FILES" | while read -r file; do
|
|
if [ -n "$file" ]; then
|
|
rel_path=${file#$PROJECT_PATH/}
|
|
echo " - \"$rel_path\"" >> "$LOG_FILE"
|
|
fi
|
|
done
|
|
|
|
echo ""
|
|
echo "Preview guardado: $LOG_FILE"
|
|
fi
|