Vai al contenuto principale

Aiuta ad aggiornare questa pagina

🌏

C'è una nuova versione di questa pagina, ma al momento è solo in inglese. Aiutaci a tradurre l'ultima versione.

Traduci la pagina
Visualizza in inglese

Nessun bug qui!🐛

Questa pagina non è stata tradotta. Per il momento, è stata intenzionalmente lasciata in inglese.

Configurazione dell'integrazione continua di Solidity e Truffle

Solidity
smart contract
test
truffle
integrazione continua
ganache
Intermedio
✍Markus Waas
📚soliditydeveloper.com
📆5 giugno 2020
⏱️5 minuti letti

L'integrazione continua (CI) con Truffle è ottima per lo sviluppo una volta implementata una serie di test di base. Permette di eseguire test molto lunghi, assicurare che passino tutti prima di fondere una richiesta di pull e tenere traccia delle varie statistiche usando strumenti aggiuntivi.

Useremo la Truffle Metacoin Box per configurare la nostra integrazione continua. Puoi scegliere Travis CI o Circle CI.

Configurare Travis CI

Aggiungere Travis CI è semplice. Dovrai solo aggiungere il file di configurazione .travis.yml alla cartella di root del progetto:

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
12
Mostra tutto

Per il momento manteniamo le cose semplici ed eseguiamo solo lo script di test che esegue i test unitari di Truffle. Ma abbiamo un problema, non ci sarà una blockchain disponibile sulla macchina di Travis CI. Una soluzione semplice per ovviare al problema è npm install ganache-cli, da eseguire semplicemente prima del test. Puoi farlo aggiungendo uno script di bash con la riga npx ganache-cli > /dev/null e prima della chiamata di npx truffle test. L'esempio completo dello script di bash.

Configurare Circle CI

CircleCi richiede un file di configurazione più lungo. Il comando aggiuntivo npm ci è eseguito automaticamente su Travis. Installa le dipendenze in modo più veloce e sicuro di quanto faccia npm install. Usiamo nuovamente lo stesso script dalla versione di Travis per eseguire ganache-cli prima dei test.

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
52
Mostra tutto

Aggiungere il plugin eth-gas-reporter

Il plugin eth-gas-reporter è piuttosto utile per tenere traccia dei costi del carburante delle funzioni del tuo smart contract. Averlo nella tua CI sarà inoltre utile per mostrare le differenze quando si aggiungono le richieste di pull.

Fase 1: Installa il plugin eth-gas-reporter e i codecheck

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

Fase 2: Aggiungi il plugin alle impostazioni di mocha nel tuo truffle-config.js

Visualizza le opzioni

1module.exports = {
2 networks: { ... },
3 mocha: {
4 reporter: 'eth-gas-reporter',
5 reporterOptions: {
6 excludeContracts: ['Migrations']
7 }
8 }
9};
10
Mostra tutto
📋 Copia

Fase 3: Aggiungi un codechecks.yml alla cartella di root del tuo progetto

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

Fase 4: Esegui codechecks dopo il comando di test

- npm test
- npx codechecks

Fase 5: Crea un conto Codechecks

  • Crea un conto con Codechecks.
  • Aggiungi la repo di GitHub.
  • Copia il segreto e aggiungi CC_SECRET=COPIED SECRET alla tua CI (vedi qui per Travis, qui per CircleCI).
  • Ora prosegui e crea una richiesta di pull.

È tutto. Ora troverai un bel rapporto sulle modifiche ai costi del carburante della tua richiesta di pull.

Esempio di rapporti del carburante

Aggiungere il plugin di solidity-coverage

Con il plugin di solidity-coverage puoi controllare in quale misura i percorsi del tuo codice sono coperti dai test. Una volta configurato e aggiunto alla tua CI, è molto pratico da usare.

Fase 1: Crea un progetto di metacoin e installa gli strumenti di coverage

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

Fase 2: Aggiungi solidity-coverage all'insieme di plugin in truffle-config.js

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

Fase 3: Aggiungi i comandi di coverage al .travis.yml o config.yml di Circle CI

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

Solidity coverage avvia la propria ganache-cli, quindi non dobbiamo preoccuparcene. Tuttavia, non sostituire il comando di test regolare, la ganache-cli di coverage funziona differentemente e non esiste dunque alcun sostituto per l'esecuzione dei test unitari regolari.

Fase 4: Aggiungi la repository a coveralls

  • Crea un conto Coveralls.
  • Aggiungi la repo di GitHub.
  • Ora prosegui e crea una richiesta di pull.

Esempio di coverall

Ulteriori idee

  • MythX: Con MythX puoi analizzare automaticamente la sicurezza del tuo smart contract. Ha quindi molto senso aggiungerlo alla tua CI.
  • Linting: Un buon codice è applicabile in una certa misura con gli strumenti di linting. Eslint è ottimo per JavaScript e facile da configurare, mentre per Solidity si può usare Solhint.
  • Test lunghi: A volte potresti voler aggiungere dei test estremi, ad es. testando un contratto con centinaia di utenti. Ciò richiede molto tempo. Invece di eseguirli a ogni esecuzione del test, aggiungili alla CI.

Ecco tutto. L'integrazione continua è una strategia molto utile per i tuoi sviluppi. Puoi dare un'occhiata all'esempio completo su Truffle-CI-Example. Basta assicurarti di rimuovere Circle-CI o Travis, ne basta uno!

Ultima modifica: , Invalid DateTime
Modifica la pagina

Questa pagina è stata utile?