Configurando pre-commit con Ruff para un proyecto en Python
Cuando utilizas Git, dispones de una herramienta muy poderosa llamada hooks
. Te permite lanzar scripts en diferentes momentos del ciclo de vida de un repositorio. Por ejemplo, puedes ejecutar un comando después de hacer un push
, el cual podría desplegar el código a un servidor, o lanzar un software que se ejecute antes de hacer un commit
para asegurarte de que el código cumple con ciertas normas. Y aquí es donde entra en juego pre-commit
.
pre-commit
es un framework que simplifica la gestión de los scripts que se ejecutan en los hooks de Git entre proyectos. A través de plantillas, puedes definir y compartir diferentes procesos en momentos concretos. Su uso más popular, que además le da su nombre, es el uso del hook pre-commit
, que se ejecuta antes de hacer un commit
. Es un momento muy importante cuando se necesita incorporar nuevo código. Es un momento idóneo para lanzar una serie de tareas de validación y formateo del código, asegurando que el código que se va a enviar al repositorio cumple con unos mínimos estándares de calidad: si falta algún punto y coma, si hay errores de sintaxis, si el código no sigue las convenciones de estilo, los comentarios están bien escritos, etc.
A continuación vamos a instalar pre-commit
y a configurarlo para que se ejecute en un proyecto de Python.
Instalación
Lo más recomendado sería usando uv
. Si desconoces qué es, te recomiendo que previamente leas Guia rápida de herramientas modernas en Python.
uv tool install pre-commit
En caso contrario, puedes usar pip
.
pip install pre-commit
O el sistema de paquetes de tu sistema operativo. Por ejemplo, en Debian/Ubuntu:
sudo apt install pre-commit
Configuración
Para configurar pre-commit
en un proyecto, debes crear un archivo YAML. Este archivo define los hooks que se ejecutarán antes de cada commit
.
Astral, los creadores de uv
y ruff
, han creado una plantilla fantástica. Puedes encontrar toda la información en su repositorio.
Crea el archivo .pre-commit-config.yaml
en la raíz de tu proyecto y añade el siguiente contenido:
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
# Ruff version.
rev: v0.12.8
hooks:
# Run the linter.
- id: ruff
args: [ --fix ]
# Run the formatter.
- id: ruff-format
En la plantilla se indica que repositorio contiene los hooks que se van a utilizar, y qué comandos se van a ejecutar. En este caso, se utiliza ruff
para el análisis y formateo del código Python. La opción --fix
indica que se debe intentar corregir automáticamente los problemas encontrados.
A continuación, actívalo en tu proyecto:
pre-commit install
¡Y ya está listo! Ahora, cada vez que hagas un commit
, pre-commit
ejecutará un formateo y validación en el código Python. Si hay algún error, el commit
fallará y tendrás que corregirlo antes de poder continuar.
Este trabajo está bajo una licencia Attribution-NonCommercial-NoDerivatives 4.0 International.
¿Me invitas a un café?
Puedes usar el terminal.
ssh customer@andros.dev -p 5555