Introdução ao CI/CD e GitHub Actions para JavaScript
O desenvolvimento moderno de aplicações JavaScript em Node.js exige não apenas código de qualidade, mas também um processo confiável de entrega aos usuários. CI/CD (Continuous Integration / Continuous Deployment) é um conjunto de práticas que permite automatizar a construção, teste e implantação do código. Uma das ferramentas mais populares para implementar CI/CD é o GitHub Actions — um sistema de automação de fluxo de trabalho integrado na plataforma GitHub.
Neste artigo, vamos detalhar como configurar CI/CD para um projeto JavaScript (Node.js) usando GitHub Actions. Você aprenderá a criar pipelines, executar testes, realizar linting, compilar o projeto e implantá-lo automaticamente em um servidor ou hospedagem em nuvem. O material será útil tanto para desenvolvedores iniciantes quanto para engenheiros experientes que desejam otimizar o processo de desenvolvimento.
Fundamentos do GitHub Actions: estrutura e sintaxe
O GitHub Actions funciona com base em arquivos YAML, armazenados no diretório .github/workflows do seu repositório. Cada um desses arquivos define um ou mais workflows, que são acionados por eventos específicos: push, pull request, criação de release, etc.
A estrutura básica de um workflow inclui:
- name — nome do pipeline;
- on — evento que aciona a execução;
- jobs — conjunto de tarefas executadas sequencialmente ou em paralelo;
- steps — etapas dentro de cada tarefa (comandos, ações).
Vamos considerar um exemplo mínimo para um projeto Node.js:
name: Node.js CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
- run: npm test
Neste exemplo, usamos actions integradas: actions/checkout para clonar o repositório e actions/setup-node para instalar a versão necessária do Node.js. O comando npm ci instala as dependências estritamente de acordo com o package-lock.json, e npm test executa os testes.
Configuração de teste e linting
Um pipeline CI/CD de qualidade para projetos JavaScript deve incluir verificação de código conforme padrões e testes automatizados. Vamos considerar um exemplo avançado usando ferramentas populares: ESLint para linting, Jest para testes e Prettier para formatação.
Adicione as dependências necessárias ao projeto:
npm install --save-dev eslint jest prettier eslint-config-prettier
Crie o arquivo de configuração .eslintrc.json:
{
"env": {
"node": true,
"es2021": true,
"jest": true
},
"extends": ["eslint:recommended", "prettier"],
"parserOptions": {
"ecmaVersion": "latest",
"sourceType": "module"
},
"rules": {
"no-console": "warn",
"semi": ["error", "always"]
}
}
Agora atualize o arquivo do workflow:
name: Lint and Test
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
jobs:
quality:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Run linter
run: npx eslint .
- name: Check formatting
run: npx prettier --check .
- name: Run tests
run: npm test
- name: Upload test coverage
```