workspace-v1/devtools/scripts/epic-008/purge-obsolete.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

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