[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 ───────────────────────────────────────────────────────
|
# ─── Configuración ───────────────────────────────────────────────────────
|
||||||
PROYECTO_ROOT="$(git rev-parse --show-toplevel)"
|
PROYECTO_ROOT="$(git rev-parse --show-toplevel)"
|
||||||
ADN_TOOLS_DIR="${PROYECTO_ROOT}/adn/tools"
|
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"
|
CONFIG_FILE="${ADN_TOOLS_DIR}/config/config.yml"
|
||||||
HOOK_NAME="pre-commit ADN"
|
HOOK_NAME="pre-commit ADN"
|
||||||
|
|
||||||
@@ -50,13 +50,40 @@ verificar_prerequisitos() {
|
|||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Verificar CLI ADN
|
# Verificar CLI ADN (con múltiples rutas posibles)
|
||||||
if [[ ! -f "${ADN_CLI}" ]]; then
|
local cli_encontrada=0
|
||||||
log_error "Herramienta ADN no encontrada: ${ADN_CLI}"
|
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."
|
log_info "Ejecuta desde la raíz del proyecto o instala las herramientas ADN."
|
||||||
return 1
|
return 1
|
||||||
fi
|
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
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,8 +119,8 @@ validar_archivo() {
|
|||||||
|
|
||||||
log_info "Validando $tipo: $nombre_archivo"
|
log_info "Validando $tipo: $nombre_archivo"
|
||||||
|
|
||||||
# Por ahora usamos el validador general (en el futuro podría haber validación por tipo)
|
# Según el principio "Menos es Más", usamos el validador general unificado
|
||||||
# El validador general ya filtra por tipo de archivo
|
# El validador ya filtra por tipo de archivo internamente
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -108,32 +135,56 @@ ejecutar_validacion() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
log_info "Validando $cantidad_archivos archivo(s) del ADN..."
|
log_info "Validando $cantidad_archivos archivo(s) del ADN..."
|
||||||
|
log_info "Principio aplicado: Armonía Integral - validando coherencia entre componentes"
|
||||||
|
|
||||||
# Ejecutar validador general
|
# Ejecutar validador general
|
||||||
cd "${PROYECTO_ROOT}" || exit 1
|
cd "${PROYECTO_ROOT}" || exit 1
|
||||||
|
|
||||||
# Ejecutar validador con opción --fix automática para correcciones menores
|
# Ejecutar validador con opción --fix automática para correcciones menores
|
||||||
|
# Según "Mejora Continua", el validador ayuda a evolucionar el ADN
|
||||||
local output
|
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
|
# El validador exitó con éxito
|
||||||
if echo "$output" | grep -q "Con errores: 0"; then
|
if echo "$output" | grep -q "Con errores: 0"; then
|
||||||
if echo "$output" | grep -q "Con advertencias: 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
|
else
|
||||||
log_advertencia "Validación del ADN completada con advertencias (revisa arriba)."
|
log_advertencia "⚠ Validación del ADN completada con advertencias (revisa arriba)."
|
||||||
# Permitir commit a pesar de advertencias
|
log_info "Principio aplicado: Mejora Continua - oportunidades de mejora identificadas"
|
||||||
|
# Permitir commit a pesar de advertencias (son oportunidades de mejora)
|
||||||
fi
|
fi
|
||||||
return 0
|
return 0
|
||||||
else
|
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 ""
|
||||||
echo "$output" | tail -20 # Mostrar últimas líneas del output
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||||
|
echo "$output" | tail -30 # Mostrar más contexto del output
|
||||||
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
# Error en la ejecución del validador
|
# 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 "$output"
|
||||||
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||||
|
log_info "Sugerencia: Ejecuta manualmente: ./adn/tools/run validador --fix"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@@ -150,10 +201,12 @@ instalar_hook() {
|
|||||||
|
|
||||||
log_info "Instalando hook pre-commit para validación ADN..."
|
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}"
|
cp "${hook_source}" "${hook_dest}"
|
||||||
chmod +x "${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
|
# Verificar si ya existe un hook pre-commit previo
|
||||||
if [[ -f "${PROYECTO_ROOT}/.git/hooks/pre-commit" && ! -L "${PROYECTO_ROOT}/.git/hooks/pre-commit" ]] && \
|
if [[ -f "${PROYECTO_ROOT}/.git/hooks/pre-commit" && ! -L "${PROYECTO_ROOT}/.git/hooks/pre-commit" ]] && \
|
||||||
! cmp -s "${hook_source}" "${hook_dest}"; then
|
! 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."
|
log_info "Si necesitas múltiples hooks, considera usar un gestor de hooks."
|
||||||
fi
|
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 "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 ───────────────────────────────────────────────────────────────
|
# ─── Ayuda ───────────────────────────────────────────────────────────────
|
||||||
@@ -184,6 +241,11 @@ mostrar_ayuda() {
|
|||||||
echo " - Advertencias: Muestra alerta pero permite el commit"
|
echo " - Advertencias: Muestra alerta pero permite el commit"
|
||||||
echo " - Correcciones automáticas: Intenta corregir errores simples (--fix)"
|
echo " - Correcciones automáticas: Intenta corregir errores simples (--fix)"
|
||||||
echo ""
|
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}"
|
echo "Configuración: ${CONFIG_FILE}"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -209,7 +271,10 @@ main() {
|
|||||||
"")
|
"")
|
||||||
# Modo hook normal (sin argumentos)
|
# Modo hook normal (sin argumentos)
|
||||||
if ! verificar_prerequisitos; then
|
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
|
fi
|
||||||
ejecutar_validacion
|
ejecutar_validacion
|
||||||
exit $?
|
exit $?
|
||||||
|
|||||||
Reference in New Issue
Block a user