Configuración de GitHub Actions para CI/CD con Python
Clase 8 de 17 • Curso de Python Profesional: Arquitectura de Proyectos, Entornos y PyPI
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.
- Ejecutar en push solo en branches main y develop.
- Ejecutar en pull request únicamente hacia main.
- Repos públicos: gratis. Repos privados: 2000 minutos gratis; adminístralos y evita validar ramas WIP.
Ejemplo de disparadores y estructura mínima:
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).
- ruff format: formatea el código automáticamente.
- mypy src: analiza tipos solo en la carpeta src.
- pytest -n auto: ejecuta pruebas aprovechando múltiples núcleos.
¿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 reales
API_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.