Configuration de l'intégration continue entre Solidy et Truffle
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_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 testAfficher 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: 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 - dependenciesAfficher 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-reporternpm 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 toutCopier
É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
- Créez un compte Codechecks(opens in a new tab).
- Ajoutez-y le dépôt GitHub.
- Copiez le secret et ajoutez le
CC_SECRET=COPIED SECRET
à votre CI (voir ici pour Travis(opens in a new tab), ici pour CircleCi(opens in a new tab)). - Maintenant, allez de l'avant et créez un pull request.
C’est tout. Vous retrouverez maintenant un bon rapport sur les changements dans le coût du gaz de votre pull resquest.
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
- Créez un compte Coveralls(opens in a new tab).
- Ajoutez-y le dépôt GitHub.
- Maintenant, allez de l'avant et créez une pull request.
Plus d'idées
- MythX(opens in a new tab) : Avec MythX, vous pouvez analyser automatiquement la sécurité de votre contrat intelligent. Il est donc très logique d'ajouter ceci à votre CI(opens in a new tab).
- Linting(opens in a new tab) : Un bon code peut être appliqué dans une certaine mesure avec des outils de linting. Eslint(opens in a new tab) fonctionne parfaitement pour JavaScript, est facile à installer(opens in a new tab), tandis que Solhint(opens in a new tab) peut être utilisé pour Solidity.
- Examens longs: Parfois, vous pouvez vouloir ajouter des tests extrêmes, par exemple, tester un contrat avec des centaines d'utilisateurs. Cela prend beaucoup de temps. Au lieu de les faire tourner à chaque exécution de tests, ajoutez-les à la CI.
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), Invalid DateTime