CI/CD para proyectos TypeScript: configuración de GitHub Actions desde cero

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción a CI/CD para proyectos TypeScript



El desarrollo de software moderno es impensable sin automatización. CI/CD (Continuous Integration / Continuous Delivery) es una práctica que permite a los equipos de desarrollo entregar cambios a producción de forma rápida y segura. Para proyectos en TypeScript, especialmente en el ecosistema Node.js, configurar un pipeline de CI/CD se convierte en una tarea crítica.



En este artículo, analizaremos cómo configurar un pipeline de CI/CD completo para un proyecto TypeScript usando GitHub Actions. Aprenderá a automatizar la ejecución de pruebas, la compilación del proyecto y el despliegue en un hosting. El material está dirigido a desarrolladores que ya conocen TypeScript y desean implementar prácticas modernas de DevOps.



¿Qué es GitHub Actions y por qué es conveniente para TypeScript?



GitHub Actions es un sistema de CI/CD integrado que permite crear flujos de trabajo automatizados (workflows) directamente en el repositorio de GitHub. Las principales ventajas son:



  • Límite gratuito — para repositorios públicos están disponibles 2000 minutos de compilación al mes.
  • Integración con GitHub — no es necesario configurar servicios de terceros.
  • Flexibilidad — admite cualquier lenguaje, incluido TypeScript, mediante la ejecución de comandos de shell.
  • Gran ecosistema — actions listos para desplegar en AWS, Vercel, Netlify y otras plataformas.


Para proyectos TypeScript, GitHub Actions es ideal, ya que permite ejecutar fácilmente comandos npm o yarn, usar almacenamiento en caché de dependencias y tareas paralelas.



Estructura básica del archivo de workflow



Un workflow en GitHub Actions se describe en archivos YAML que se almacenan en el directorio .github/workflows/. Veamos una configuración mínima para un proyecto TypeScript.



Cree el archivo .github/workflows/ci.yml:



name: CI Pipeline

on: push: branches: [ main, develop ] pull_request: branches: [ main ]

jobs: build-and-test: runs-on: ubuntu-latest

strategy: matrix: node-version: [18.x, 20.x]

steps: - name: Checkout repository uses: actions/checkout@v4

- name: Setup Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }}

- name: Install dependencies run: npm ci

- name: Lint check run: npm run lint

- name: Type check run: npx tsc --noEmit

- name: Run tests run: npm test

- name: Build project run: npm run build


Análisis de los elementos clave:

  • on — desencadenadores de ejecución (push en main/develop, pull request).
  • runs-on — sistema operativo para la ejecución (ubuntu-latest).
  • matrix — ejecución paralela en diferentes versiones de Node.js (18 y 20).
  • actions/checkout — action estándar para clonar el repositorio.
  • actions/setup-node — instalación de la versión especificada de Node.js.
  • npm ci — instalación limpia de dependencias desde el archivo lock (más rápido y fiable que npm install).


Adición de almacenamiento en caché para acelerar la compilación



Para no descargar las dependencias cada vez, agregue almacenamiento en caché:



      - name: Cache Node.js modules        uses: actions/cache@v3        with:          path: ~/.npm          key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}          restore-keys: |            ${{ runner.os }}-node-


Este paso almacena en caché ~/.npm basándose en el hash de package-lock.json. En ejecuciones posteriores, si las dependencias no han cambiado, se restaurará la caché, lo que ahorrará entre 30 y 60 segundos.

Blogs

Book Recommendations