Proyecto React + Vite + Jest pensado para explicar GitHub Actions con un caso simple: instalar dependencias, ejecutar tests, pasar lint y generar el build.
Este proyecto ya tiene los comandos que después ejecutará GitHub Actions:
npm install
npm test
npm run lint
npm run buildLa idea es que GitHub Actions haga exactamente eso en una máquina temporal de GitHub.
Primero conviene enseñar un workflow mínimo para que se entienda la estructura.
Archivo:
.github/workflows/hello.ymlContenido:
name: Hello Workflow
on:
push:
branches: [main]
jobs:
hello:
runs-on: ubuntu-latest
steps:
- name: Mostrar mensaje
run: echo "Hola desde GitHub Actions"Qué explica este YAML:
name: nombre visible del workflow en la pestaña Actions.on: evento que dispara la ejecución.jobs: trabajos que GitHub ejecuta.runs-on: sistema operativo de la máquina temporal.steps: comandos que se ejecutan dentro del job.
Cuando el alumnado entienda la estructura básica, el siguiente paso es usar el workflow real del proyecto.
Archivo:
.github/workflows/main.ymlname: Validar proyecto
on:
pull_request:
branches: [main]
jobs:
validate:
runs-on: ubuntu-latest
steps:
- name: Descargar el código
uses: actions/checkout@v6
- name: Instalar Node
uses: actions/setup-node@v6
with:
node-version: 24
- name: Instalar dependencias
run: npm install
- name: Ejecutar linter
run: npm run lint
- name: Ejecutar tests
run: npm test
- name: Comprobar build
run: npm run buildContenido:
name: Validar proyecto
on:
push:
branches: [main]
pull_request:
branches: [main]
permissions:
contents: read
jobs:
validate:
runs-on: ubuntu-latest
steps:
- name: Descargar el código
uses: actions/checkout@v6
- name: Instalar Node
uses: actions/setup-node@v6
with:
node-version: 24
cache: npm
- name: Instalar dependencias
run: npm install
- name: Ejecutar linter
run: npm run lint
- name: Ejecutar tests
run: npm test
- name: Comprobar build
run: npm run buildNota importante:
- La documentación actual de GitHub ya usa
actions/setup-node@v6. - Se puede poner
node-version: 24directamente. actions/checkoutyactions/setup-nodeno tienen por qué compartir número de versión, pero ahora mismo ambos tienen versión modernav6.permissions: contents: reades una buena práctica mínima para este caso.cache: npmactiva la caché de dependencias de npm.
Este flujo enseña una idea muy útil: GitHub Actions puede repetir automáticamente el mismo proceso que haríamos en local.
Orden del job:
- Descarga el repositorio con
actions/checkout@v6. - Instala Node 24 con
actions/setup-node@v6. - Ejecuta
npm install. - Ejecuta
npm run lint. - Ejecuta
npm test. - Ejecuta
npm run build.
Si uno de esos pasos falla, el workflow falla.
Por qué está bien así:
- El checkout usa la versión moderna actual de la action.
- El setup de Node usa la versión moderna actual de la action.
- Node 24 queda fijado de forma explícita.
- El proyecto pasa exactamente los comandos que quieres enseñar después.
El flujo recomendado para clase es este:
- La rama protegida es
main. - El alumnado crea una rama nueva para trabajar.
- Hace cambios y sube esa rama a GitHub.
- Abre una pull request hacia
main. - GitHub Actions ejecuta el workflow
Validar proyecto. - Si todo pasa, se puede aprobar y hacer merge.
Esto permite enseñar integración continua de una forma muy visual.
La protección de rama no se configura con YAML dentro del repositorio. Se configura en la interfaz de GitHub.
Ruta en GitHub:
Repository Settings > Branches > Branch protection rulesConfiguración recomendada para main:
- Crear una regla para la rama
main. - Activar
Require a pull request before merging. - Activar
Require approvalssi quieres forzar revisión. - Activar
Require status checks to pass before merging. - Seleccionar el check del workflow de CI cuando aparezca en la lista.
- Guardar la regla.
Normalmente el check aparecerá con un nombre parecido a:
Validar proyecto / validateEso depende del nombre del workflow (Validar proyecto) y del nombre del job (validate).
Si quieres enseñarlo por fases, este orden funciona bien:
- Crear el workflow
hello.ymly enseñar la estructura mínima. - Crear o mostrar el workflow definitivo
main.ymly explicarcheckoutysetup-node. - Lanzar una pull request para ver cómo se ejecuta.
- Activar la protección de
main. - Intentar mergear con un fallo para que se vea cómo GitHub lo bloquea.
GitHub Actions ejecuta en la nube los mismos comandos que ejecutaríamos en local. En este proyecto, el workflow definitivo de .github/workflows/main.yml instala dependencias, pasa el linter, lanza tests y genera el build antes de permitir integrar cambios en main.