CI/CD para projetos TypeScript: configurando GitHub Actions do zero

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução ao CI/CD para Projetos TypeScript



O desenvolvimento moderno de software é impensável sem automação. CI/CD (Continuous Integration / Continuous Delivery) é uma prática que permite que equipes de desenvolvimento entreguem mudanças para produção de forma rápida e segura. Para projetos em TypeScript, especialmente no ecossistema Node.js, configurar um pipeline de CI/CD torna-se uma tarefa criticamente importante.



Neste artigo, vamos abordar como configurar um pipeline de CI/CD completo para um projeto TypeScript usando GitHub Actions. Você aprenderá como automatizar a execução de testes, a compilação do projeto e o deploy para hospedagem. O material é voltado para desenvolvedores que já conhecem TypeScript e desejam implementar práticas modernas de DevOps.



O que é GitHub Actions e por que é conveniente para TypeScript



GitHub Actions é um sistema de CI/CD integrado que permite criar fluxos de trabalho automatizados (workflows) diretamente no repositório do GitHub. As principais vantagens são:



  • Limite gratuito — para repositórios públicos, estão disponíveis 2000 minutos de compilação por mês.
  • Integração com GitHub — não é necessário configurar serviços de terceiros.
  • Flexibilidade — suporta qualquer linguagem, incluindo TypeScript, através da execução de comandos shell.
  • Grande ecossistema — actions prontas para deploy em AWS, Vercel, Netlify e outras plataformas.


Para projetos TypeScript, GitHub Actions é ideal, pois permite executar facilmente comandos npm ou yarn, usar cache de dependências e tarefas paralelas.



Estrutura básica do arquivo de workflow



O workflow no GitHub Actions é descrito em arquivos YAML, armazenados no diretório .github/workflows/. Vamos analisar uma configuração mínima para um projeto TypeScript.



Crie o arquivo .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álise dos elementos-chave:

  • on — gatilhos de execução (push em main/develop, pull request).
  • runs-on — sistema operacional para execução (ubuntu-latest).
  • matrix — execução paralela em diferentes versões do Node.js (18 e 20).
  • actions/checkout — action padrão para clonar o repositório.
  • actions/setup-node — instalação da versão especificada do Node.js.
  • npm ci — instalação limpa de dependências a partir do arquivo lock (mais rápido e confiável que npm install).


Adicionando cache para acelerar a compilação



Para não baixar as dependências toda vez, adicione o cache:



      - 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 passo armazena em cache o diretório ~/.npm com base no hash do package-lock.json. Em execuções repetidas, se as dependências não mudaram, o cache será restaurado, economizando de 30 a 60 segundos.

Blogs

Book Recommendations