Vai al contenuto principale

Configurazione dell'integrazione continua di Solidity e Truffle

Soliditycontratto intelligentetesttruffleganache
Intermedio
Markus Waas
soliditydeveloper.com(opens in a new tab)
5 giugno 2020
4 minuti letti minute read

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(opens in a new tab) e tenere traccia delle varie statistiche usando strumenti aggiuntivi.

Useremo la Truffle Metacoin Box(opens in a new tab) per configurare la nostra integrazione continua. Puoi scegliere Travis CI o Circle CI.

Configurare Travis CI

Aggiungere Travis CI(opens in a new tab) è 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
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(opens in a new tab).

Configurare Circle CI

CircleCi(opens in a new tab) richiede un file di configurazione più lungo. Il comando aggiuntivo npm ci(opens in a new tab) è 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
Mostra tutto

Aggiungere il plugin eth-gas-reporter

Il plugin eth-gas-reporter è piuttosto utile per tenere traccia dei costi del gas delle funzioni del tuo contratto intelligente. 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(opens in a new tab)

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

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

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

Fase 4: Esegui codechecks dopo il comando di test

- npm test
- npx codechecks

Fase 5: Crea un conto di Codechecks

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

Esempio di rapporti del gas

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 coveralls solidity-coverage

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

1module.exports = {
2 networks: {...},
3 plugins: ["solidity-coverage"]
4}
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

Esempio di coverall

Ulteriori idee

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

Ultima modifica: @Herbie_23(opens in a new tab), 15 novembre 2023

Questo tutorial è stato utile?