Configuración de Solidity y Truffle de integración continua
La integración continua (CI) con Truffle es genial para el desarrollo una vez que se implementa un conjunto básico de pruebas. Le permite realizar pruebas muy largas, asegurarse de que todas las pruebas pasen antes de combinar una solicitud de pull(opens in a new tab) y llevar un seguimiento de varias estadísticas utilizando herramientas adicionales.
Utilizaremos el Truffle Metacoin Box(opens in a new tab) para configurar nuestra integración continua. Puede elegir Travis CI o Circle CI.
Configurar Travis CI
Añadir Travis CI(opens in a new tab) es sencillo. Solo necesitará añadir un archivo de configuración .travis.yml
a la carpeta raíz del proyecto:
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 testMostrar todo
Lo estamos manteniendo simple por ahora y sólo estamos ejecutando el script de prueba que ejecuta las pruebas individuales de Truffle. Pero tenemos un problema, no habrá una blockchain disponible en la máquina Travis CI. Una solución simple para esto es npm install ganache-cli
y simplemente ejecutarlo antes de la prueba. Puedes hacer esto al agregar un guión basj con la línea npx ganache-cli > 7dev/null
y antes de llamada de prueba truffle npx
. El ejemplo completo de bash script(opens in a new tab).
Configurando Circle CI
CircleCI(opens in a new tab) requiere un archivo config más grande. El comando adicional npm ci
(opens in a new tab) es automáticante hecho en Travis. Instala las dependencias más rápido y más seguras que npm install
lo hace. Otra vez usamos el mismo guión de la versión Travis para ejecutar ganache-cli antes de las pruebas.
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 - dependenciesMostrar todo
Añadiendo el plugin de eth-gas-reporter
El puglin de eth-gas-reporter es muy útil para llevar el rastro de los costos de las funciones de gas de tu contrato inteligente. Tenerlo en tu CI seguirá siendo útil para mostrar diferencias cuando se agreguen la solicitud de pull.
Paso 1: Instalar el plugin de eth-gas-reporter y comprobantes de código
npm install --save-dev eth-gas-reporternpm install --save-dev @codechecks/client
Paso 2: Agrega el plugin a la configuración de moca adentro de tu truffle-config.js
Ver opciones(opens in a new tab)
1module.exports = {2 networks: { ... },3 mocha: {4 reporter: 'eth-gas-reporter',5 reporterOptions: {6 excludeContracts: ['Migrations']7 }8 }9};Mostrar todoCopiar
Paso 3: Agrega comprobantes de código.yml para el directorio de raíz de tu proyecto
1checks:2 - name: eth-gas-reporter/codechecks
Paso 4: Ejecuta el comprobante de código después del comando de prueba
- npm test- npx codechecks
Paso 5: Crear una cuenta de comprobación de código
- Crea una cuenta con Codechecks(opens in a new tab).
- Agrega el repositorio de GitHub.
- Copia el secreto y agrega el
CC_SECRET=COPIED SECRET
a tu CI (vea aquí para Travis(opens in a new tab), aquí para CircleCi(opens in a new tab)). - Ahora adelante y crea una solicitud de pull.
Eso es todo. Ahora tú encontrarás un buen reporte acerca de los cambios en los costos del gas de tú solicitud de pull.
Agregando el plugin solidity-coverage
Con el plugin solidity-coverage puedes chequear cuanto de tu rutas de código están cubiertas por tús pruebas. Agregar esto a tu CI lo hace muy conveniente para usar una vez que se coloca.
Paso 1: Crea un proyecto de metacoin e instala herramientas de cobertura
npm install --save-dev truffle coveralls solidity-coverage
Paso 2: Agregar solidity-coverage a la matriz de plugins en truffle-config.js
1module.exports = {2 networks: {...},3 plugins: ["solidity-coverage"]4}Copiar
Paso 3: Agrega los comandos de cobertura al .travis.yml o Circle CI config.yml
- npx truffle run coverage- cat coverage/lcov.info | npx coveralls
Cobertura de solidity comienza su propio ganache-cli, así que no tenemos que preocuparnos de esto. Sin embargo, no remplaces el comando de prueba normal, la cobertura de ganache-cli funciona diferente y es por lo tanto no reemplazable para ejecutar pruebas unitarias regulares.
Step 4: Agrega el repositorio a los coveralls
- Crea una cuenta con Coveralls(opens in a new tab).
- Agrega el repositorio de GitHub.
- Ahora adelante y crea una solicitud de pull.
Otras ideas
- MythX(opens in a new tab): Con MythX puedes automáticamente analizar la seguridad de tu contrato inteligente. Entonces tiene mucho sentido agregar esto a tu CI(opens in a new tab).
- Linting(opens in a new tab): Un buen código puede ser aplicado hasta cierto grado con herramientas de linting. Eslint(opens in a new tab) trabaja genial para JavaScript, es fácil de configurar(opens in a new tab), mientras que Solhint(opens in a new tab) puede ser usadao por solidity.
- Pruebas largas: Algunas veces es posible que desees agregar pruebas extremas, ej., pruebas a contratos con cientos de usuarios. Esto toma mucho tiempo. En lugar de ejecutar esos en cada ejecución de prueba, agregalos al CI.
Ahí lo tienes. Integración continua es una estrategía muy útil para su desarrollo. Puedes chequear un ejemplo completo en Truffle-CI-Example(opens in a new tab). Solo asegurate de remover Circle-CI o Travis, ¡uno es suficiente!
Última edición: , 21 de febrero de 2024