Salt la conținutul principal

Configurarea integrării continue cu Solidity și Truffle

soliditycontracte inteligentetestaretruffleintegrare continuăganache
Intermediar
Markus Waas
soliditydeveloper.com(opens in a new tab)
5 iunie 2020
4 minute de citit minute read

Integrarea continuă (CI) cu Truffle este excelentă pentru dezvoltare, odată ce aveți implementat un set de bază de teste. Vă permite să executați teste foarte lungi, să vă asigurați că toate testele reușesc înainte de a fuziona un pull request(opens in a new tab) și să țineți evidența diferitelor statistici folosind instrumente suplimentare.

Vom folosi Truffle Metacoin Box(opens in a new tab) pentru a ne configura integrarea continuă. Puteți să alegeți fie Travis CI, fie Circle CI.

Configurarea Travis CI

Adăugarea Travis CI(opens in a new tab) este simplă. Va trebui doar să adăugați un fișier de configurare .travis.yml în directorul rădăcină al proiectului:

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
Afișează tot

Ne vom limita pentru moment la lucrurile simple și vom executa doar scriptul de testare care execută testele unitare Truffle. Dar avem o problemă, și anume că pe mașina Travis CI nu va fi disponibil un blockchain. Soluția cea mai simplă este de a npm instala ganache-cli și de a-l executa pur și simplu înainte de test. Puteți face acest lucru adăugând un script „bash” cu linia npx ganache-cli > /dev/null înainte de apelarea npx truffle test. Iată exemplul complet de script bash(opens in a new tab).

Configurarea Circle CI

CircleCi(opens in a new tab) necesită un fișier mai lung de configurare. Comanda suplimentară npm ci(opens in a new tab) este efectuată automat în Travis. Aceasta instalează dependențele mai rapid și mai securizat decât o face npm install. Vom folosi din nou același script din versiunea Travis pentru a executa ganache-cli înainte de teste.

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
Afișează tot

Adăugarea plugin-ului „eth-gas-reporter”

Plugin-ul „eth-gas-reporter” este foarte util pentru a ține evidența costurilor de gaz ale funcțiilor contractului dvs. inteligent. Dacă aveți acest plugin în CI, se va dovedi și mai util pentru a afișa „diff-urile” atunci când adăugați „pull request-uri".

Etapa 1: Instalarea plugin-ului „eth-gas-reporter” și „codechecks”

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

Etapa 2: Adăugați plugin-ul la setările „mocha” în interiorul fișierului „truffle-config.js”

Iată opțiunile(opens in a new tab)

1module.exports = {
2 networks: { ... },
3 mocha: {
4 reporter: 'eth-gas-reporter',
5 reporterOptions: {
6 excludeContracts: ['Migrations']
7 }
8 }
9};
Afișează tot
Copiați

Etapa 3: Adăugați „codechecks.yml” în directorul rădăcină al proiectului dvs.

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

Etapa 4: Executați „codechecks” după comanda „test”

- npm test
- npx codechecks

Etapa 5: Creați un cont „Codechecks”

Asta e tot. Iar acum veți găsi un raport atractiv despre schimbările costurilor de gaz ale „pull request-ului” dvs.

Exemple de rapoarte de gaz

Adăugarea plugin-ului „solidity-coverage”

Cu plugin-ul „solidity-coverage” puteți să verificați la câte dintre căile de cod se referă testele dumneavoastră. Dacă îl adăugați la CI, va fi foarte comod de utilizat, odată configurat.

Etapa 1: Creați un proiect „metacoin” și instalați instrumentele „coverage”

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

Etapa 2: Adăugați „solidity-coverage” la matricea plugin-urilor din truffle-config.js

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

Etapa 3: Adăugați comenzile „coverage” la fișierul „.travis.yml” sau la „config.yml" al Circle CI

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

Plugin-ul „coverage” al Solidity își pornește propriul „ganache-cli”, de aceea nu trebuie să ne facem griji în această privință. Totuși, nu înlocuiți comanda de testare obișnuită, întrucât „coverage” al „ganache-cli” funcționează diferit și nu înlocuiește deci rularea testelor unitare obișnuite.

Etapa 4: Adăugați un „repository” la „coveralls”

Exemplu de „coverall”

Sugestii suplimentare

Și asta e tot. Integrarea continuă este o strategie foarte utilă pentru dezvoltările dvs. Puteți vedea un exemplu complet la Truffle-CI-Example(opens in a new tab). Doar aveți grijă să eliminați „Circle-CI” sau „Travis”, unul este suficient!

Ultima modificare: @nicklcanada(opens in a new tab), 15 august 2023

A fost util acest tutorial?