Lição: 295: Integrando Pipelines de Integração Contínua
No mundo do desenvolvimento de software, a Integração Contínua (IC) se tornou uma prática essencial para garantir que as alterações no código sejam testadas e integradas automaticamente ao branch principal. Isso é especialmente importante no desenvolvimento de contratos inteligentes com Solidity, onde a segurança e a correção do código são fundamentais. Nesta aula, vamos explorar como integrar pipelines de IC para projetos em Solidity, com foco em ferramentas como GitHub Actions.
Por que Usar Integração Contínua?
A Integração Contínua permite que os desenvolvedores:
- Testem automaticamente as alterações no código antes de mesclá-las.
- Identifiquem e corrijam bugs rapidamente.
- Mantenham um estado estável e prontamente implantável do código.
- Melhorem a colaboração entre os membros da equipe.
Configurando um Fluxo de Trabalho Básico no GitHub Actions
O GitHub Actions é uma poderosa ferramenta de CI/CD que permite automatizar seus fluxos de trabalho diretamente no GitHub. Abaixo está um exemplo de como configurar um pipeline de IC para um projeto em Solidity.
Passo 1: Crie Seu Projeto em Solidity
Para este exemplo, vamos assumir que você tem uma estrutura simples de projeto em Solidity como esta:
meu-projeto-solidity/
│
├── contratos/
│ └── MeuContrato.sol
│
├── teste/
│ └── MeuContrato.test.js
│
├── hardhat.config.js
└── package.json
Passo 2: Crie um Fluxo de Trabalho do GitHub Actions
Crie uma pasta chamada .github/workflows
no diretório raiz do seu projeto, caso ela ainda não exista. Dentro desta pasta, crie um arquivo chamado ci.yml
.
Exemplo de Configuração do ci.yml
Aqui está uma configuração básica para o fluxo de trabalho do GitHub Actions:
name: CI
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
test:
runs-on: ubuntu-latest
services:
hardhat:
image: nkozek/hardhat:latest
ports:
- 8545:8545
options: >-
--health-cmd "curl -f http://localhost:8545"
--health-interval 30s
--health-timeout 5s
--health-retries 5
steps:
- name: Fazer checkout do código
uses: actions/checkout@v2
- name: Configurar Node.js
uses: actions/setup-node@v2
with:
node-version: '14'
- name: Instalar dependências
run: |
npm install
- name: Executar testes do Hardhat
run: |
npx hardhat test
Explicação do Fluxo de Trabalho
-
Gatilhos: O fluxo de trabalho é acionado em pushes e solicitações de pull para o branch
main
. -
Jobs: O job principal chamado
test
é executado na versão mais recente do Ubuntu. -
Serviços: Um serviço Hardhat é definido para executar uma rede local Ethereum para testes.
-
Passos:
- Fazer Checkout do Código: Este passo faz o checkout do seu repositório para que o fluxo de trabalho tenha acesso ao código.
- Configurar Node.js: Isso inicializa o ambiente Node.js.
- Instalar Dependências: Este passo instala as dependências do projeto usando npm.
- Executar Testes do Hardhat: Finalmente, este comando executa os testes definidos no seu projeto Hardhat.
Passo 3: Escreva um Teste Simples
Aqui está um exemplo simples de como você poderia escrever um teste para MeuContrato.sol
. Salve isso em teste/MeuContrato.test.js
.
const { expect } = require("chai");
const { ethers } = require("hardhat");
describe("MeuContrato", function () {
let MeuContrato;
let meuContrato;
beforeEach(async function () {
MeuContrato = await ethers.getContractFactory("MeuContrato");
meuContrato = await MeuContrato.deploy();
await meuContrato.deployed();
});
it("deve ter um valor padrão", async function () {
const valor = await meuContrato.getValor();
expect(valor).to.equal(0);
});
it("deve definir o valor", async function () {
await meuContrato.setValor(42);
const valor = await meuContrato.getValor();
expect(valor).to.equal(42);
});
});
Conclusão
Integrar pipelines de Integração Contínua em seus projetos Solidity com ferramentas como o GitHub Actions pode melhorar significativamente seu fluxo de trabalho de desenvolvimento. Ao automatizar os testes, você pode garantir que seus contratos inteligentes estejam estáveis, seguros e prontos para implantação. Esta aula abordou os conceitos básicos de configuração de um pipeline de IC usando o GitHub Actions e forneceu um exemplo simples para você começar.
À medida que você se familiariza mais com Integração Contínua, pode explorar recursos adicionais, como notificações, implantação e integração de outras verificações automatizadas para aprimorar ainda mais seu pipeline. Boa programação!