Introdução: Por que um CI/CD avançado para TypeScript?
Um pipeline CI/CD básico, que simplesmente executa npm test e npm build, deixa de ser eficiente assim que o projeto TypeScript começa a crescer. O tempo de build aumenta, os testes levam horas e o gerenciamento manual de versões leva a erros. Um nível avançado de configuração do GitHub Actions permite resolver esses problemas: acelerar o pipeline com cache, executar testes em paralelo para diferentes versões do Node.js e sistemas operacionais, além de automatizar o deploy para produção.
Neste artigo, abordaremos três técnicas-chave para projetos TypeScript: cache inteligente de node_modules, builds matriciais para verificar compatibilidade e deploy automático usando actions/upload-pages-artifact. Todos os exemplos são escritos em TypeScript e estão prontos para integração no seu repositório.
1. Cache inteligente de dependências e compilação
O primeiro problema em grandes projetos TypeScript é a longa instalação de dependências e compilação. O GitHub Actions fornece um mecanismo de cache, mas ele precisa ser configurado corretamente. Em vez de armazenar em cache toda a pasta node_modules (o que pode levar a versões desatualizadas), é melhor armazenar em cache o package-lock.json e a pasta .cache do compilador.
Exemplo de cache avançado para TypeScript:
name: TypeScript CI (Advanced)on: [push, pull_request]
jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' - name: Cache TypeScript cache uses: actions/cache@v4 with: path: | **/node_modules **/.tsbuildinfo key: ${{ runner.os }}-ts-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-ts- - run: npm ci - run: npm run build --if-present - run: npm testA otimização principal aqui é o uso de hashFiles('**/package-lock.json') para gerar uma chave de cache única. Se o package-lock.json não mudou, o cache é restaurado em segundos. A flag --if-present permite pular o script de build se ele não estiver definido.
2. Builds matriciais: testando em diferentes versões do Node.js e sistemas operacionais
TypeScript é compilado para JavaScript, mas o comportamento do código pode diferir em diferentes ambientes de execução. A estratégia de matriz do GitHub Actions permite executar o mesmo pipeline em várias combinações de sistemas operacionais e versões do Node.js. Isso é crítico para bibliotecas e aplicações servidoras.
Exemplo de configuração de matriz para um projeto TypeScript:
jobs: test: runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] node-version: [18, 20, 22] exclude: - os: windows-latest node-version: 22 fail-fast: false
steps: - uses: actions/checkout@v4 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} cache: 'npm' - run: npm ci - run: npx tsc --noEmit - run: npm test - name: Upload coverage uses: actions/upload-artifact@v4 with: name: coverage-${{ matrix.os }}-${{ matrix.node-version }} path: coverage/Pontos-chave:
fail-fast: false— não interrompe os outros jobs se um deles falhar. Permite ver todos os problemas de uma vez.exclude— permite excluir combinações sabidamente não funcionais (por exemplo, Node 22 no Windows, se houver um problema conhecido).Blogs
Book Recommendations
Leia também
Operador !! em JavaScript: otimização de código e desempenho
Funções Serverless em PHP: AWS Lambda do A ao Z
CI/CD para Go: construindo um pipeline do zero em 20 minutos
Como passar em uma entrevista de C++: principais perguntas e respostas
Retornando iteradores em Rust: segredos de desempenho e abstrações de custo zero