Integración continua con Github Actions workflow para este Proxecto
Cada proxecto é un mundo e as súas prioridades tamén, pero todos teñen algo en común: hai que probalos e despregalos. Podes facelo a man, pero acaba sendo repetitivo e tedioso — que é xusto o que a integración e o despregamento continuos existen para quitar.
Aquí uso as Github Actions para automatizar o despregamento deste proxecto en Vercel, máis as verificacións previas: testing, linting, type-checking e xeración de documentación.
Deseño
A parte que máis se pensa é o propio pipeline: que tarefas corren e en que orde. Debuxei o fluxo en Excalidraw e fun iterando ata que unha forma me convenceu. A partir de aí é mecánico: creas un cartafol .github/workflows/ e soltas os teus ficheiros .yml. Eu teño dous, pre-deploy.yml e post-deploy.yml, e en vez de explicar a sintaxe do YAML vou explicar que fai cada job.
O pre-deploy corre catro jobs en paralelo — cancelar runs redundantes, linting, testing e docs — e só se todos pasan versiona e desprega en pre-produción. Logo probo a feature ou o bugfix a man contra esa preview. Se aguanta, despregar a produción é só un pull request de dev a master. Pero o pipeline non acaba no merge: unha vez en vivo, o post-deploy corre un pase de Lighthouse e publica un informe de rendemento páxina a páxina. Separalo así mantén as verificacións rápidas bloqueando (nada se desprega roto) e as lentas contra o sitio en vivo fóra do camiño crítico.
Aquí de forma máis gráfica:
Este é un fragmento de como se ve o workflow de pre-deploy (Node 22, npm — axusta as versións ao teu proxecto, isto é do que queda desactualizado):
Workflow completo no meu github
Cinco cousas que paga a pena facer desde o día un
- Cachea a instalación.
actions/setup-nodeconcache: npmrestaura as descargas entre runs e recorta minutos de cada job. Apúntao ao teu lockfile real. - Cancela runs redundantes con
concurrency:, non cunha action. Facer push tres veces seguidas non debería lanzar tres pipelines enteiros. Aquí había un paso destyfle/cancel-workflow-action, e quiteino do meu propio pipeline por dous motivos. Estaba fixado cun tag mutable, que é xusto o que a guía de hardening de GitHub che di que non fagas con actions de terceiros — un tag pódese reapuntar a código novo, que é exactamente como o compromiso detj-actions/changed-fileschegou a milleiros de repositorios en marzo de 2025. E precisabaaccess_token, así que en cada push entregáballe a un terceiro un PAT con permisos de escritura sobre outros cinco repositorios. A clave nativaconcurrency:fai o mesmo sen token e sen código alleo. - Define
permissions:explicitamente. Sen ela, oGITHUB_TOKENleva o valor por defecto do repositorio, que é máis amplo do que un job de linting precisa.contents: readarriba do ficheiro, e subilo por job onde algo teña que escribir de verdade, é todo o cambio. - Mantén ao día os majors das actions.
actions/checkout@v4esetup-node@v4seguen funcionando, pero declaran o runtime de Node 20, que GitHub leva tempo retirando dos runners. O major actual de ambas é@v7, e corre sobre Node 24. - Garda os segredos en secrets. O token do rexistro sae de
${{ secrets.NPM_TOKEN }}, nunca do ficheiro. Se un token chega a un.npmrcsubido, rótao — o runner léeo do contorno, non do repo.
Resultados
Cada informe ten o seu propio repositorio en GitHub, e aí é onde se publica a saída de cada run:
- Informe de tests unitarios
- Informe de tests end to end
- Informe de rendemento
- Documentación
- Biblioteca de compoñentes
Conclusións
Cada vez que engado un compoñente en React ou unha páxina en Next.js, unha batería de tests comproba que non rompín o traballo que xa estaba — o cal só funciona porque es ti quen ten que escribir os tests das partes delicadas e críticas. O pipeline non inventa cobertura; fai cumprir a que decidiches ter.
Podes atopar todo este código no meu repositorio de github, e se che gustou podes axudarme cunha ⭐️. Grazas!
