SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
11.12.2024

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!

Video

Did you like this article? Rate it from 1 to 5:

Thank you for voting!