Automatiza la calidad de tu código con GitHub Actions: configura Continuous Integration y Continuous Deployment para ejecutar ruff, mypy y pytest en cada push y pull request. Así detectas errores de estilo, tipado y pruebas antes de llegar a producción y evitas diferencias entre entornos.
¿Cómo configurar GitHub Actions para CI/CD en Python con ruff, mypy y pytest?
La integración continua ejecuta pruebas y validaciones automáticamente al integrar cambios con frecuencia. La entrega continua va más allá automatizando el despliegue. Con Actions, puedes crear un workflow que corra en cada push y en cada pull request hacia ramas clave.
Problema común: funciona local, falla en otro entorno por configuraciones o dependencias distintas.
Solución: automatizar validaciones de estilo con ruff, tipado estático con mypy y pruebas unitarias con pytest.
Beneficio: calidad consistente y detección temprana de errores.
¿Qué eventos disparan el workflow y cómo ahorrar minutos?
Define cuándo corre la Action con la llave on. Se recomienda limitar a ramas críticas para optimizar minutos.
ame: Code style
on:push:branches:[main, develop]pull_request:branches:[main]jobs:python:runs-on: ubuntu-latest
steps:-name: Checkout
uses: actions/checkout@v4
# - name: Instalar UV# run: <comando de instalación de UV>-name: ruff check
run: V run ruff check
-name: ruff format
run: V run ruff format
-name: mypy
run: V run mypy src
-name: pytest
run: V run pytest -n auto
¿Qué pasos y comandos ejecuta el pipeline?
En el job se usa Ubuntu automáticamente. Los pasos típicos incluyen:
Checkout del repositorio.
Instalar UV para ejecutar comandos de Python.
ruff check: valida reglas de estilo y errores como E501 (línea muy larga).
¿Cómo corregir fallos de estilo y tipado en la pipeline?
Si falla ruff por E501 (línea muy larga), corrige el archivo y valida con un flujo de git ordenado.
git pull para traer cambios recientes.
Crear rama: git switch -c fixed-pep8.
Editar el archivo, por ejemplo quitando el comentario que rompe PEP8.
git add y git commit (pasa validaciones de pre-commit).
git push y abrir el pull request.
Verifica en la pestaña Actions que los checks corren en el PR.
Cuando ruff y mypy pasen, puede fallar pytest si faltan variables de entorno como un API key. Los tests no deben usar claves reales; solo comprobar que existen.
¿Cómo inyectar variables de entorno seguras en pytest?
Agrega env en el paso de pytest con valores falsos, suficientes para que los tests encuentren las variables.
-name: pytest
env:# define las variables usadas en tu .env con valores NO realesAPI_KEY:"this is not a API key"# API_SECRET: "this is not a API key"# PROJECT_ID: "dummy"run: V run pytest -n auto
Haz commit y push de la actualización del workflow.
Revisa el PR: ruff, mypy y pytest deben pasar en segundos.
¿Qué buenas prácticas fortalecen tu CI/CD con GitHub Actions?
Adopta hábitos que mantengan tu flujo estable y rápido.
Crear el workflow desde la pestaña Actions y partir de ejemplos oficiales de las librerías.
Usar actions reusables desde la documentación de cada herramienta para mayor flexibilidad.
Considerar la funcionalidad de cache disponible en la action de ruff para mejorar tiempos.
Nombrar el workflow (por ejemplo, Code style) para identificar los checks fácilmente.
Limitar on a main y develop, y pull requests hacia main, para cuidar minutos.
Ejecutar pytest con -n auto para paralelizar pruebas.
Mantener variables sensibles fuera del repo; usar valores dummy en env del workflow.
¿Te gustaría que revisemos tu YAML de Actions o que integremos otra herramienta de calidad? Comenta tus dudas y ajustes deseados.