Pular para o conteúdo principal

Configuração contínua de integração Solidity e Truffle

solidezcontratos inteligentestestandotruffleganache
Intermediário
Markus Waas
soliditydeveloper.com(opens in a new tab)
5 de junho de 2020
4 minutos de leitura minute read

A integração contínua (CI) com o Truffle é excelente para desenvolvimento assim que você tiver um conjunto básico de testes implementados. Isso permite que você execute testes muito longos, garantir que todos os testes passem antes de mesclar um pull request(opens in a new tab) e para manter o controle de várias estatísticas usando ferramentas adicionais.

Usaremos o Truffle Metacoin Box(opens in a new tab) para configurar nossa integração contínua. Você pode escolher o Travis CI ou o Circle CI.

Configurando Travis CI

Adicionando Travis CI(opens in a new tab) é reta. Você só precisará adicionar um arquivo de configuração .travis.yml na pasta raiz do projeto:

1language: node_js
2node_js:
3 - 10
4
5cache: npm
6
7before_script:
8 - echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
9
10script:
11 - npm test
Exibir tudo

Nós estamos mantendo tudo simples por enquanto e estamos executando apenas o script de teste que executa os testes de unidade Truffle. Mas temos um problema, não haverá uma blockchain disponível na máquina Travis CI. Uma correção simples para isso é npm install ganache-cli e simplesmente executá-lo antes do teste. Você pode fazer isso adicionando um bash script com a linha npx ganache-cli > /dev/null e antes da chamada npx truffle. O script bash completo de exemplo(opens in a new tab).

Configurando o Circle CI

CircleCi(opens in a new tab) requer um arquivo de configuração mais longo. O comando adicional npm ci(opens in a new tab) é feito automaticamente no Travis. Ele instala as dependências mais rápido e mais seguro do que o npm install faz. Nós usamos novamente o mesmo script da versão de Travis para rodar ganache-cli antes dos testes.

1version: 2
2
3aliases:
4 - &defaults
5 docker:
6 - image: circleci/node:10
7
8 - &cache_key_node_modules
9 key: v1-node_modules-{{ checksum "package-lock.json" }}
10
11jobs:
12 dependencies:
13 <<: *defaults
14 steps:
15 - checkout
16 - restore_cache:
17 <<: *cache_key_node_modules
18 - run:
19 name: Install npm dependencies
20 command: |
21 if [ ! -d node_modules ]; then
22 npm ci
23 fi
24 - persist_to_workspace:
25 root: .
26 paths:
27 - node_modules
28 - build
29 - save_cache:
30 paths:
31 - node_modules
32 <<: *cache_key_node_modules
33
34 test:
35 <<: *defaults
36 steps:
37 - checkout
38 - attach_workspace:
39 at: .
40 - run:
41 name: Unit tests
42 command: npm test
43
44workflows:
45 version: 2
46 everything:
47 jobs:
48 - dependencies
49 - test:
50 requires:
51 - dependencies
Exibir tudo

Adicionando o plugin eth-gas-reportter

O plugin eth-gas-reportter é bastante útil para manter o controle dos custos de gas de suas funções de contrato inteligente. Tê-lo em seu CI será mais útil para mostrar diffs ao adicionar pull requests.

Passo 1: Instale o plugin eth-gas-reportter e as verificações de código

npm install --save-dev eth-gas-reporter
npm install --save-dev @codechecks/client

Etapa 2: Adicione o plugin nas configurações do mocha dentro do arquivo truffle-config.js

Ver opções(opens in a new tab)

1module.exports = {
2 networks: { ... },
3 mocha: {
4 reporter: 'eth-gas-reporter',
5 reporterOptions: {
6 excludeContracts: ['Migrations']
7 }
8 }
9};
Exibir tudo
Copiar

Passo 3: Adicione um codechecks.yml ao diretório raiz do seu projeto

1checks:
2 - name: eth-gas-reporter/codechecks

Passo 4: Execute verificações de código após o comando de teste

- npm test
- npx codechecks

Passo 5: Crie uma conta no Codechecks

É isso. Agora você vai encontrar um bom relatório sobre mudanças nos custos de gas do seu pull request.

Exemplos de relatórios de gas

Adicionando o plugin Solidity-coverage

Com o plugin Solidity-coverage, você pode verificar a quantidade de caminhos de seu código cobertos por seus testes. Adicionar isto à sua criação de CI é muito conveniente quando for criado.

Passo 1: Crie um projeto metacoin e instale ferramentas de cobertura

npm install --save-dev truffle coveralls solidity-coverage

Etapa 2: Adicionar solidity-coverage para o array de plugins em truffle-config.js

1module.exports = {
2 networks: {...},
3 plugins: ["solidity-coverage"]
4}
Copiar

Passo 3: Adicione os comandos de cobertura ao arquivo .travis.yml ou Circle CI config.yml

- npx truffle run coverage
- cat coverage/lcov.info | npx coveralls

A cobertura da Solidity começa seu próprio ganache-cli, então não precisamos nos preocupar com isso. Não substitua o comando de teste regular, porém, a cobertura de ganache-cli funciona de forma diferente e, portanto, não é substituto para a execução de testes de unidade regulares.

Passo 4: Adicionar repositório às coberturas

Exemplo de cobertura

Mais idéias

Aí está o que tem. A integração contínua é uma estratégia muito útil para os seus desenvolvimentos. Você pode conferir um exemplo completo em Truffle-CI-Example(opens in a new tab). Basta remover o Circle-CI ou Travis, um é suficiente!

Este tutorial foi útil?