Modificar las condiciones de falla después de verificar el linter en el hook pre-push de Git

martes, 11 de marzo de 2025

Contexto del trabajo

En el proyecto de nuestro equipo, contamos con reglas de linter estrictas que incluso obligan a ordenar las importaciones. Aunque esto tiene la ventaja de unificar el estilo del código, ocasionalmente surgían errores de linter en CI después de crear un PR.

Aunque no era común, cuando había errores de linter, había que ejecutar scripts localmente para corregirlos, volver a realizar commit y push del código, lo que resultaba un poco tedioso y, sobre todo, alargaba significativamente el tiempo de revisión del código. Por ello, propuse al resto del equipo incluir una verificación de linter en el hook pre-push.

Una vez acordado con los compañeros, decidimos utilizar el existente script lint-fix:global, y así implementamos el siguiente hook pre-push.

echo "🔍 Corriendo fix de linter..."
pnpm run lint-fix:global

# Verificar si hay cambios
if ! git diff --quiet; then
  echo "❌ Se corrigieron algunos archivos con el linter. Por favor, realiza commit de los cambios antes de hacer push."
  exit 1
fi

Sin embargo, al día siguiente recibí feedback como el siguiente. Quizás algunos ya hayan notado el problema en el código.

Independientemente de si se ejecuta lint-fix:global, intentaba hacer push con algunos archivos en estado staged. Esto causaba que el push fallara. 🤦

Finalmente, decidí que en lugar de un fix de linter, debíamos simplemente verificar los errores del linter, y así modifiqué el código de la siguiente manera:

echo "🔍 Ejecutando linter..."

if ! pnpm run lint -- --quiet; then
  echo "❌ Se detectaron errores de linter."
  echo "👉 Para corregir automáticamente los errores: pnpm run lint-fix:global"
  exit 1
fi

En el código anterior, el script lint realmente ejecuta next lint. Con la opción --quiet, solo se muestran los errores, y si se detecta alguno, se muestra un mensaje amistoso indicando qué hacer, previniendo así el push. Asimismo, aproveché para hacer el mensaje más claro para todos los compañeros.

Espero que en el futuro dejemos de perder tiempo debido a errores de linter en CI. 🙏