1. ACTIVIDAD BASE: "GitHub Actions + Python Script + Auto Commit"¶
📝 Preparación del repositorio base¶
Estructura:
README.md inicial¶
# Mi Proyecto con GitHub Actions
Este proyecto sirve para aprender a usar GitHub Actions 🚀
## Estado de los tests
*Aún no ejecutados...*
main.py¶
test_main.py¶
🐍 Script en Python (update_readme.py)¶
Este script ejecuta los tests y actualiza el README:
import subprocess
def run_tests():
try:
subprocess.check_call(["pytest", "-q"])
return "✅ Tests correctos"
except subprocess.CalledProcessError:
return "❌ Tests fallidos"
def update_readme(status: str):
with open("README.md", "r", encoding="utf-8") as f:
lines = f.readlines()
new_lines = []
for line in lines:
new_lines.append(line)
if line.strip() == "## Estado de los tests":
new_lines.append(status + "\n")
break
with open("README.md", "w", encoding="utf-8") as f:
f.writelines(new_lines)
if __name__ == "__main__":
status = run_tests()
update_readme(status)
👉 Lo que hace:
- Ejecuta los tests con
pytest. - Según el resultado, genera un estado ✅ o ❌.
- Modifica el
README.mdjusto debajo de la sección## Estado de los tests.
⚙️ Workflow (.github/workflows/ci.yml)¶
name: CI con AutoCommit
on:
push:
branches: [ "main" ]
workflow_dispatch:
jobs:
test-and-update:
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v3
- name: Configurar Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Instalar dependencias
run: pip install pytest
- name: Ejecutar script de tests y actualizar README
run: python update_readme.py
- name: Commit automático del README
uses: stefanzweifel/git-auto-commit-action@v5
with:
commit_message: "Update README con estado de tests"
file_pattern: README.md
🚦 Flujo de la actividad¶
- Alumno hace un push en
main. - El workflow ejecuta el script en Python.
- El script corre los tests y modifica el
README.md. - La acción
git-auto-commit-actionhace commit automático con los cambios. -
El alumno ve en el repo cómo el
README.mdse actualiza con:- ✅ Tests correctos
- ❌ Tests fallidos
📑 Entregable del alumno¶
- Enlace a su repositorio con el
README.mdactualizado automáticamente. - Evidencia de haber provocado un test fallido y un test correcto.
-
Explicación breve de:
- Qué hace el script.
- Qué hace el workflow.
- Qué aporta GitHub Actions a un proyecto real.
👉 Con esta versión los alumnos programan un pequeño script y ven cómo GitHub Actions:
- Ejecuta código propio.
- Modifica el repositorio automáticamente.
- Se integra con acciones externas (auto-commit).
2. POSIBLES MEJORAS AL EJEMPLO ANTERIOR¶
La idea es que no solo no repitais el ejemplo, sino que investigueis, mejoreis y veais el potencial real de GitHub Actions. Para ello se piden funcionalidades extra e imaginativas. Aqui teneis varias propuestas, de más sencillas a más potentes, todas pensadas para que veais ventajas prácticas:
💡 Mejoras propuestas para el Action¶
1. Historial en el README¶
- Que en lugar de sobrescribir el estado, guarden un histórico en el README:
2. Generar un report.md con detalles¶
-
Crear un archivo
test-report.mdcon:- Número total de tests.
- Tests pasados y fallidos.
- Tiempo de ejecución.
- 👉 Les muestra cómo exportar resultados de procesos y tener documentación viva del proyecto.
3. Badges automáticos en README¶
-
Añadir un badge dinámico al README con el estado:
- Verde = Tests correctos
- Rojo = Tests fallidos
- Usando shields.io o generando un badge local en SVG.
- 👉 Entienden cómo mejorar la comunicación del estado de un proyecto.
4. Notificaciones externas¶
-
Enviar el resultado a:
- Slack/Discord (webhook sencillo).
- Email (con una acción de envío).
- 👉 Descubren que Actions también sirve para integrar con herramientas externas.
5. Ejecutar en múltiples entornos (matrix)¶
-
Hacer que los tests se ejecuten en:
- Varias versiones de Python (
3.8,3.9,3.10). - O en Linux y Windows.
- 👉 Ven la potencia del
strategy.matrixy comprueban compatibilidad multiplataforma.
- Varias versiones de Python (
6. Programar ejecución automática¶
- Añadir
schedulepara que se ejecute cada día a medianoche. - El README mostraría:
7. Generar una página web de resultados¶
- Publicar los resultados en GitHub Pages (
gh-pages) usandopeaceiris/actions-gh-pages. - 👉 Visualizan cómo GitHub Actions puede hacer CI/CD real (tests + despliegue).
8. Crear Issues automáticos si fallan los tests¶
- Si un test falla → abrir un issue automático en el repositorio:
- uses: actions/github-script@v7
with:
script: |
github.issues.create({
owner: context.repo.owner,
repo: context.repo.repo,
title: "❌ Tests fallidos",
body: "Se han detectado errores en los tests. Revisa el último commit."
})
🎯 Aprendizaje con estas mejoras¶
Con estas extensiones conseguireis:
- Experimentar cómo GitHub Actions conecta piezas del desarrollo real (tests, docs, issues, notificaciones, despliegues).
- Entender la ventaja competitiva de CI/CD: feedback inmediato, documentación viva y automatización.
- Pasar de un ejemplo didáctico a un flujo de trabajo que se parece mucho al que usan empresas reales.