Configurarea integrării continue cu Solidity și Truffle
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 și să țineți evidența diferitelor statistici folosind instrumente suplimentare.
Vom folosi Truffle Metacoin Box pentru a ne configura integrarea continuă. Puteți să alegeți fie Travis CI, fie Circle CI.
Configurarea Travis CI
Adăugarea Travis CI 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_js2node_js:3 - 1045cache: npm67before_script:8 - echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p910script:11 - npm test12Afișați 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.
Configurarea Circle CI
CircleCi necesită un fișier mai lung de configurare. Comanda suplimentară npm ci
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: 223aliases:4 - &defaults5 docker:6 - image: circleci/node:1078 - &cache_key_node_modules9 key: v1-node_modules-{{ checksum "package-lock.json" }}1011jobs:12 dependencies:13 <<: *defaults14 steps:15 - checkout16 - restore_cache:17 <<: *cache_key_node_modules18 - run:19 name: Install npm dependencies20 command: |21 if [ ! -d node_modules ]; then22 npm ci23 fi24 - persist_to_workspace:25 root: .26 paths:27 - node_modules28 - build29 - save_cache:30 paths:31 - node_modules32 <<: *cache_key_node_modules3334 test:35 <<: *defaults36 steps:37 - checkout38 - attach_workspace:39 at: .40 - run:41 name: Unit tests42 command: npm test4344workflows:45 version: 246 everything:47 jobs:48 - dependencies49 - test:50 requires:51 - dependencies52Afișați 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”
1module.exports = {2 networks: { ... },3 mocha: {4 reporter: 'eth-gas-reporter',5 reporterOptions: {6 excludeContracts: ['Migrations']7 }8 }9};10Afișați totCopiați
Etapa 3: Adăugați „codechecks.yml” în directorul rădăcină al proiectului dvs.
1checks:2 - name: eth-gas-reporter/codechecks3
Etapa 4: Executați „codechecks” după comanda „test”
- npm test- npx codechecks
Etapa 5: Creați un cont „Codechecks”
- Creați un cont cu Codechecks.
- Add the GitHub repo to it.
- Copiați secretul și adăugați
CC_SECRET=COPIED SECRET
la CI-ul dvs. (uitați aici pentru Travis și aici pentru CircleCi). - Acum continuați creând un „pull request”.
Asta e tot. Iar acum veți găsi un raport atractiv despre schimbările costurilor de gaz ale „pull request-ului” dvs.
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}5Copiaț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”
- Creați un cont cu Coveralls.
- Add the GitHub repo to it.
- Acum continuați creând un „pull request”.
Sugestii suplimentare
- MythX: Cu „MythX” puteți analiza securitatea contractului dvs. inteligent în mod automat. Prin urmare, este foarte logic să îl adăugați la CI-ul dvs.
- Linting: Good code can be enforced to some degree with linting tools. Eslint works great for JavaScript, is easy to setup, while Solhint can be used for Solidity.
- Teste lungi: Uneori este necesar să adăugați teste extreme, de exemplu, testarea unui contract cu sute de utilizatori. Aceasta durează foarte mult timp. În loc să le executați la fiecare testare, adăugați-le la CI.
Ș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. Doar aveți grijă să eliminați „Circle-CI” sau „Travis”, unul este suficient!