Introdução: Por que CI/CD é crucial para projetos TypeScript
\nDesenvolver em TypeScript é uma ferramenta poderosa, mas sem a automação dos processos de build, teste e implantação, você corre o risco de enfrentar erros humanos, perda de tempo e instabilidade em produção. CI/CD (Integração Contínua / Implantação Contínua) é uma filosofia e um conjunto de práticas que permitem automatizar esses processos. GitHub Actions é uma ferramenta integrada do GitHub, ideal para projetos TypeScript, oferecendo pipelines flexíveis, escaláveis e gratuitos (para repositórios públicos).
\nNeste artigo, percorreremos o caminho do zero até um pipeline completo: configuraremos linting, testes, build e deploy automático de uma aplicação TypeScript. Você aprenderá a escrever arquivos YAML eficientes, otimizar o tempo de execução e evitar erros comuns.
\n\nParte principal: Criação passo a passo de um pipeline CI/CD
\n\n1. Fundamentos do GitHub Actions: estrutura do workflow
\nUm workflow (fluxo de trabalho) no GitHub Actions é um conjunto de etapas agrupadas em jobs. Ele é descrito em um arquivo YAML, armazenado no diretório .github/workflows/ do seu repositório. A estrutura básica é assim:
name: CI/CD Pipeline for TypeScript\n\non:\n push:\n branches: [ main, develop ]\n pull_request:\n branches: [ main ]\n\njobs:\n build-and-test:\n runs-on: ubuntu-latest\n\n steps:\n - uses: actions/checkout@v4\n - name: Setup Node.js\n uses: actions/setup-node@v4\n with:\n node-version: '20'\n cache: 'npm'\n - run: npm ci\n - run: npm run build\n - run: npm test\nElementos-chave:
\n- \n
on:— gatilhos (push, pull_request). \njobs:— lista de tarefas (jobs) que são executadas em paralelo ou sequencialmente. \nruns-on:— sistema operacional para execução (geralmenteubuntu-latest). \nsteps:— sequência de comandos.useschama ações prontas (actions), erunexecuta comandos shell. \nnpm ci— instalação limpa e rápida de dependências com base nopackage-lock.json. \n
Este pipeline mínimo já garante um CI básico: a cada push ou PR, o código será verificado quanto ao build e testes.
\n\n2. Configuração avançada: linting, formatação e matriz de versões
\nPara projetos TypeScript, é fundamental manter um estilo de código consistente. Vamos adicionar verificação com linter (eslint) e formatador (prettier). Também usaremos uma matriz de estratégias para testar em várias versões do Node.js.
jobs:\n lint-and-format:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n - uses: actions/setup-node@v4\n with:\n node-version: '20'\n cache: 'npm'\n - run: npm ci\n - run: npm run lint\n - run: npm run format:check\n\n test:\n needs: lint-and-format\n runs-on: ubuntu-latest\n strategy:\n matrix:\n node-version: [18, 20, 22]\n steps:\n - uses: actions/checkout@v4\n - uses: actions/setup-node@v4\n with:\n node-version: ${{ matrix.node-version }}\n cache: 'npm'\n - run: npm ci\n - run: npm test\nPontos importantes:
\n- \n
needs:— define a ordem de execução dos jobs (primeiro linting, depois testes).strategy.matrix— permite executar o mesmo job com diferentes parâmetros (versões do Node.js).- O cache (
cache: 'npm') acelera a instalação de dependências. - Adicione scripts no
package.json:"lint": "eslint src/"e"format:check": "prettier --check src/".
Agora seu pipeline não apenas ver