Ir al contenido principal

Configuración de Solidity y Truffle de integración continua

soliditycontratos Inteligentespruebastruffleganache
Intermedio
Markus Waas
soliditydeveloper.com(opens in a new tab)
5 de junio de 2020
4 minuto leído minute read

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_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
Mostrar 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: 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
Mostrar 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-reporter
npm 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 todo
Copiar

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

Eso es todo. Ahora tú encontrarás un buen reporte acerca de los cambios en los costos del gas de tú solicitud de pull.

Ejemplo de los reportes de gas

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

Ejemplo de coverall

Otras ideas

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: @EmelyGarcia(opens in a new tab), 21 de febrero de 2024

¿Le ha resultado útil este tutorial?