[ADN] Mejora de hook pre-commit - Mayor robustez y aplicación de principios rectores
This commit is contained in:
+81
-16
@@ -7,7 +7,7 @@
|
||||
# ─── Configuración ───────────────────────────────────────────────────────
|
||||
PROYECTO_ROOT="$(git rev-parse --show-toplevel)"
|
||||
ADN_TOOLS_DIR="${PROYECTO_ROOT}/adn/tools"
|
||||
ADN_CLI="${PROYECTO_ROOT}/adn/tools/run"
|
||||
ADN_CLI="${ADN_TOOLS_DIR}/run"
|
||||
CONFIG_FILE="${ADN_TOOLS_DIR}/config/config.yml"
|
||||
HOOK_NAME="pre-commit ADN"
|
||||
|
||||
@@ -50,13 +50,40 @@ verificar_prerequisitos() {
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Verificar CLI ADN
|
||||
if [[ ! -f "${ADN_CLI}" ]]; then
|
||||
log_error "Herramienta ADN no encontrada: ${ADN_CLI}"
|
||||
# Verificar CLI ADN (con múltiples rutas posibles)
|
||||
local cli_encontrada=0
|
||||
local posibles_rutas=(
|
||||
"${ADN_CLI}"
|
||||
"${PROYECTO_ROOT}/adn/tools/run"
|
||||
"./adn/tools/run"
|
||||
"adn/tools/run"
|
||||
)
|
||||
|
||||
for ruta in "${posibles_rutas[@]}"; do
|
||||
if [[ -f "$ruta" ]]; then
|
||||
ADN_CLI="$ruta"
|
||||
cli_encontrada=1
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ $cli_encontrada -eq 0 ]]; then
|
||||
log_error "Herramienta ADN no encontrada en ninguna ruta esperada."
|
||||
log_info "Rutas probadas:"
|
||||
for ruta in "${posibles_rutas[@]}"; do
|
||||
log_info " - $ruta"
|
||||
done
|
||||
log_info "Ejecuta desde la raíz del proyecto o instala las herramientas ADN."
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Verificar que la CLI sea ejecutable
|
||||
if [[ ! -x "${ADN_CLI}" ]]; then
|
||||
log_error "Herramienta ADN no es ejecutable: ${ADN_CLI}"
|
||||
log_info "Ejecuta: chmod +x ${ADN_CLI}"
|
||||
return 1
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
@@ -92,8 +119,8 @@ validar_archivo() {
|
||||
|
||||
log_info "Validando $tipo: $nombre_archivo"
|
||||
|
||||
# Por ahora usamos el validador general (en el futuro podría haber validación por tipo)
|
||||
# El validador general ya filtra por tipo de archivo
|
||||
# Según el principio "Menos es Más", usamos el validador general unificado
|
||||
# El validador ya filtra por tipo de archivo internamente
|
||||
return 0
|
||||
}
|
||||
|
||||
@@ -108,32 +135,56 @@ ejecutar_validacion() {
|
||||
fi
|
||||
|
||||
log_info "Validando $cantidad_archivos archivo(s) del ADN..."
|
||||
log_info "Principio aplicado: Armonía Integral - validando coherencia entre componentes"
|
||||
|
||||
# Ejecutar validador general
|
||||
cd "${PROYECTO_ROOT}" || exit 1
|
||||
|
||||
# Ejecutar validador con opción --fix automática para correcciones menores
|
||||
# Según "Mejora Continua", el validador ayuda a evolucionar el ADN
|
||||
local output
|
||||
if output=$(ruby "${ADN_CLI}" validador --fix 2>&1); then
|
||||
local exit_code=0
|
||||
|
||||
log_info "Ejecutando: ruby ${ADN_CLI} validador --fix"
|
||||
|
||||
# Cambiar al directorio del proyecto para rutas relativas correctas
|
||||
cd "${PROYECTO_ROOT}" || {
|
||||
log_error "No se pudo cambiar al directorio del proyecto: ${PROYECTO_ROOT}"
|
||||
return 1
|
||||
}
|
||||
|
||||
output=$(ruby "${ADN_CLI}" validador --fix 2>&1)
|
||||
exit_code=$?
|
||||
|
||||
if [[ $exit_code -eq 0 ]]; then
|
||||
# El validador exitó con éxito
|
||||
if echo "$output" | grep -q "Con errores: 0"; then
|
||||
if echo "$output" | grep -q "Con advertencias: 0"; then
|
||||
log_exito "Validación del ADN completada sin errores ni advertencias."
|
||||
log_exito "✅ Validación del ADN completada sin errores ni advertencias."
|
||||
log_exito "Principio aplicado: Armonía Integral - todos los componentes son coherentes"
|
||||
else
|
||||
log_advertencia "Validación del ADN completada con advertencias (revisa arriba)."
|
||||
# Permitir commit a pesar de advertencias
|
||||
log_advertencia "⚠ Validación del ADN completada con advertencias (revisa arriba)."
|
||||
log_info "Principio aplicado: Mejora Continua - oportunidades de mejora identificadas"
|
||||
# Permitir commit a pesar de advertencias (son oportunidades de mejora)
|
||||
fi
|
||||
return 0
|
||||
else
|
||||
log_error "Validación del ADN encontró errores. Corrígelos antes de commit."
|
||||
log_error "✗ Validación del ADN encontró errores. Corrígelos antes de commit."
|
||||
log_info "Principio aplicado: Armonía Integral - se requiere coherencia antes de avanzar"
|
||||
echo ""
|
||||
echo "$output" | tail -20 # Mostrar últimas líneas del output
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo "$output" | tail -30 # Mostrar más contexto del output
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
# Error en la ejecución del validador
|
||||
log_error "Error ejecutando el validador del ADN:"
|
||||
log_error "✗ Error ejecutando el validador del ADN (código: $exit_code):"
|
||||
echo ""
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo "$output"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
log_info "Sugerencia: Ejecuta manualmente: ./adn/tools/run validador --fix"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
@@ -150,10 +201,12 @@ instalar_hook() {
|
||||
|
||||
log_info "Instalando hook pre-commit para validación ADN..."
|
||||
|
||||
# Copiar hook
|
||||
# Copiar hook (seguir principio "Menos es Más" - reutilizar componente existente)
|
||||
cp "${hook_source}" "${hook_dest}"
|
||||
chmod +x "${hook_dest}"
|
||||
|
||||
log_info "Hook instalado como componente reutilizable en: ${hook_dest}"
|
||||
|
||||
# Verificar si ya existe un hook pre-commit previo
|
||||
if [[ -f "${PROYECTO_ROOT}/.git/hooks/pre-commit" && ! -L "${PROYECTO_ROOT}/.git/hooks/pre-commit" ]] && \
|
||||
! cmp -s "${hook_source}" "${hook_dest}"; then
|
||||
@@ -161,8 +214,12 @@ instalar_hook() {
|
||||
log_info "Si necesitas múltiples hooks, considera usar un gestor de hooks."
|
||||
fi
|
||||
|
||||
log_exito "Hook pre-commit instalado en ${hook_dest}"
|
||||
log_exito "✅ Hook pre-commit instalado en ${hook_dest}"
|
||||
log_info "Se ejecutará automáticamente en cada 'git commit'."
|
||||
log_info "Principios aplicados:"
|
||||
log_info " • Menos es Más - componente atómico y reutilizable"
|
||||
log_info " • Armonía Integral - valida coherencia antes de cada commit"
|
||||
log_info " • Mejora Continua - identifica oportunidades de mejora"
|
||||
}
|
||||
|
||||
# ─── Ayuda ───────────────────────────────────────────────────────────────
|
||||
@@ -184,6 +241,11 @@ mostrar_ayuda() {
|
||||
echo " - Advertencias: Muestra alerta pero permite el commit"
|
||||
echo " - Correcciones automáticas: Intenta corregir errores simples (--fix)"
|
||||
echo ""
|
||||
echo "Principios ADN aplicados:"
|
||||
echo " • Menos es Más: Validador unificado, sin duplicación"
|
||||
echo " • Armonía Integral: Valida coherencia entre componentes"
|
||||
echo " • Mejora Continua: Identifica oportunidades de mejora"
|
||||
echo ""
|
||||
echo "Configuración: ${CONFIG_FILE}"
|
||||
}
|
||||
|
||||
@@ -209,7 +271,10 @@ main() {
|
||||
"")
|
||||
# Modo hook normal (sin argumentos)
|
||||
if ! verificar_prerequisitos; then
|
||||
exit 0 # No fallar el commit si falta Ruby, solo advertir
|
||||
# Según "Mejora Continua", no bloquear pero advertir para permitir evolución
|
||||
log_advertencia "Prerequisitos incompletos, pero permitiendo commit para no bloquear trabajo."
|
||||
log_info "Sugerencia: Ejecuta './adn/tools/hooks/pre-commit --install' para configurar correctamente."
|
||||
exit 0
|
||||
fi
|
||||
ejecutar_validacion
|
||||
exit $?
|
||||
|
||||
Reference in New Issue
Block a user