Passer au contenu principal

Configuration de l'intégration continue entre Solidy et Truffle

soliditycontrats intelligentsteststruffleganache
Intermédiaire
Markus Waas
soliditydeveloper.com(opens in a new tab)
5 juin 2020
5 minutes de lecture minute read

L'intégration continue (CI) avec Truffle est idéale pour le développement une fois que vous avez un ensemble de tests de base implémentés. Elle vous permet de faire de très longs tests, s'assurer que tous les tests passent avant de fusionner une pull request(opens in a new tab) et garder une trace de diverses statistiques à l'aide d'outils supplémentaires.

Nous utiliserons la Truffle Metacoin Box(opens in a new tab) pour configurer notre intégration continue. Vous pouvez choisir entre Travis CI ou Circle CI.

Configuration de Travis CI

Ajouter Travis CI(opens in a new tab) est très simple. Vous n'avez qu'à ajouter un fichier de configuration .travis.yml au dossier racine du projet :

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
Afficher tout

Pour le moment, nous allons garder ça de façon aussi simple que possible et lancerons uniquement le script de test qui exécute les tests unitaires Truffle. Mais nous avons un problème : il n'y a pas de blockchain disponible sur la machine Travis CI. Un simple correctif à cela consiste à lancer npm install ganache-cli et simplement l'exécuter avant le test. Vous pouvez le faire en ajoutant un script bash avec la ligne npx ganache-cli > /dev/null et avant l'appel npx truffle test. L'exemple complet du script bash(opens in a new tab).

Configuration de Circle CI

CircleCi(opens in a new tab) nécessite un fichier de configuration plus long. La commande supplémentaire npm ci(opens in a new tab) se fait automatiquement dans Travis. Elle installe les dépendances plus rapidement et de manière plus sécurisée que ne le fait npm install. Nous utilisons à nouveau le même script de la version Travis pour exécuter ganache-cli avant les tests.

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
Afficher tout

Ajout du plugin eth-gas-reporter

Le plugin eth-gas-reporter est utile pour garder une trace des coûts de gaz de vos fonctions de contrat intelligent. L'avoir dans votre CI sera plus utile pour afficher des « diffs » lors de l'ajout de pull requests.

Étape 1 : Installez le plugin eth-gas-reporter et Codechecks

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

Étape 2 : Ajoutez le plugin aux paramètres mocha dans votre truffle-config.js

Voir les options(opens in a new tab)

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

Étape 3 : Ajouter un codechecks.yml à la racine de votre projet

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

Étape 4 : Exécutez des Codechecks après la commande de test

- npm test
- npx codechecks

Étape 5 : Créer un compte Codechecks

C’est tout. Vous retrouverez maintenant un bon rapport sur les changements dans le coût du gaz de votre pull resquest.

Exemple de rapports de gaz

Ajout du plugin solidity-coverage

Avec le plugin solidity-coverage vous pouvez vérifier combien de chemins de code sont couverts par vos tests. Ajouter ceci à votre CI rend son utilisation très pratique une fois qu'il est configuré.

Étape 1 : Créer un projet Metacoin et installez des outils de couverture

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

Étape 2 : Ajouter solidity-coverage au tableau des plugins dans truffle-config.js

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

Étape 3 : Ajouter les commandes de couverture au fichier .travis.yml ou Circle CI config.yml

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

La coverage de Solidity démarre sa propre ganache-cli, pour que nous n'ayons pas à nous en occuper. Cependant, ne remplacez pas la commande de test standard, le coverage de la ganache-cli fonctionne différemment et ne remplace donc pas les tests unitaires réguliers.

Étape 4 : Ajouter un dépôt à Coveralls

Exemple Coverall

Plus d'idées

Voilà, c'est fait. L'intégration continue est une stratégie très utile pour vos développements. Vous pouvez consulter un exemple complet sur Truffle-CI-Exemple(opens in a new tab). Il suffit de supprimer Circle-CI ou Travis, un seul suffit !

Dernière modification: @MATsxm(opens in a new tab), 10 octobre 2023

Ce tutoriel vous a été utile ?