Configura pre-commit para ejecutar validaciones automáticas antes de cada commit y evita que problemas de calidad lleguen a GitHub. Con Ruff como linter y formatter, más MyPy para tipos y reglas de seguridad de Bandit, tu código en Python cumple estándares desde el primer intento.
¿Qué es pre-commit y cómo garantiza calidad en cada commit?
Pre-commit es un framework que simplifica la configuración de hooks que se ejecutan automáticamente cada vez que haces un commit. Al instalarlo y crear el archivo de configuración pre-commit.config.yml, puedes activar reglas como corrección de fin de archivo, eliminación de espacios en blanco y validación de YAML. Al correr pre-commit install, el hook se integra en la carpeta .git para que todo commit pase por estas comprobaciones.
¿Qué reglas básicas conviene activar?
end-of-file-fixer: asegura una línea vacía al final del archivo.
trailing-whitespace: elimina espacios en blanco innecesarios.
check-yaml: valida la sintaxis de archivos YAML.
¿Cómo instalar y configurar pre-commit con Ruff y MyPy?
Primero instala pre-commit como dependencia de desarrollo y valida que responde en la terminal. Si avisa que falta configuración, crea pre-commit.config.yml y añade tus reglas. Luego ejecuta pre-commit install: se activará el hook local.
Herramientas clave: Ruff como linter y formatter. MyPy como analizador estático de tipos.
Archivo de proyecto: pyproject.toml con la configuración de Ruff y reglas como Bandit.
Habilidad práctica: interpretar mensajes de error y corregirlos antes del commit.
# Instalar el hook en el repositoriopre-commit install# Flujo de trabajo básicogit status
gitadd.git commit -m "mensaje"
Un ejemplo minimal de estructura para pre-commit.config.yml con las reglas mencionadas:
Genera un cambio que viole una regla: por ejemplo, una línea muy larga.
Ejecuta git add y git commit con un mensaje como “intento de commit malo”.
El primer commit puede instalar dependencias de hooks automáticamente.
Verás que Ruff bloquea el commit con el detalle del error: la línea supera el límite.
¿Cómo integrar MyPy en los hooks?
Añade mirrors-mypy con un ref que coincida con tu versión, por ejemplo: "1.8.0".
Guarda cambios y recuerda: si modificas pre-commit.config.yml, debes hacer git add de ese archivo para que el hook lo tenga en cuenta.
Reintenta el commit y confirma que MyPy ejecute sus comprobaciones.
¿Cómo validar, evitar errores y aplicar seguridad con Bandit?
Puedes necesitar terminar un commit urgente y omitir las verificaciones de estilo. En ese caso, usa la opción --no-verify al final del comando de commit. Úsala con responsabilidad.
git commit -m "mensaje urgente" --no-verify
Para seguridad, activa reglas de Bandit desde la configuración de Ruff en tu pyproject.toml. Un caso típico es la regla S307, que alerta sobre el uso inseguro de eval.
# Ejemplo inseguro: Bandit S307user_input =input("Ingresa una expresión:")resultado =eval(user_input)# Inseguro: ejecución arbitraria de código
Al intentar el commit, pre-commit mostrará: “función insegura, considera cambiarla”.
Elimina el uso de eval y vuelve a ejecutar git add y git commit.
El commit pasará cuando el código cumpla las reglas activadas.
¿Qué buenas prácticas mejoran tu flujo?
Configúralo desde el inicio del proyecto para estándares consistentes.
Incluye solo herramientas esenciales para no ralentizar los commits.
Combínalo con continuous integration y continuous deployment para doble validación: local y remota.
¿Te funcionó esta guía y activaste tus hooks con Ruff y MyPy? Comparte en comentarios qué reglas usas y qué errores te ayudan a prevenir.