Ir al contenido principal

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

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 haremos simple por ahora y solo ejecutaremos el script de prueba que ejecuta las pruebas unitarias o individuales de Truffle. Pero tenemos un problema, no habrá una cadena de bloques disponible en la máquina de Travis CI. Una solución simple para esto es npm install ganache-cli y simplemente ejecutarlo antes de la prueba. Puede hacer esto agregando un bash script con la línea npx ganache-cli > 7dev/null y antes de la llamada npx truffle test. El bash script de ejemplo completo(opens in a new tab).

Configurar Circle CI

CircleCI(opens in a new tab) requiere un archivo de configuración más grande. El comando adicional npm ci(opens in a new tab) se hace automáticante en Travis. Instala las dependencias más rápido y de forma más segura que npm install. Otra vez usamos el mismo script de la versión de 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ñadir el complemento eth-gas-reporter

El complemento eth-gas-reporter es muy útil para llevar un seguimiento de los costos de gas de las funciones de su contrato inteligente. Tenerlo en su CI será útil además para mostrar diferencias cuando se agreguen solicitudes de pull.

Paso 1: Instalar el complemento eth-gas-reporter y comprobaciones de código

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

Paso 2: Agrega el complemento a la configuración de moca dentro de su 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: Agregar un codechecks.yml al directorio raíz de su proyecto

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

Paso 4: Ejecutar comprobaciones de código después del comando de prueba

- npm test
- npx codechecks

Paso 5: Crear una cuenta de Codechecks

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

Reportes de gas de ejemplo

Agregar el complemento solidity-coverage

Con el complemento solidity-coverage puede chequear cuánto de sus rutas de código están cubiertas por sus pruebas. Agregar esto a su CI es muy conveniente una vez hecha la configuración.

Paso 1: Crear un proyecto de metacoin e instalar herramientas de cobertura

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

Paso 2: Agregar solidity-coverage a la matriz de complementos en truffle-config.js

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

Paso 3: Agregar los comandos de cobertura al .travis.yml o Circle CI config.yml

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

La cobertura de Solidity inicia su propio ganache-cli, así que no tenemos que preocuparnos de esto. Sin embargo, no remplace 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: Agregar repositorio a Coveralls

Ejemplo de coverall

Otras ideas

Ahí lo tiene. La integración continua es una estrategía muy útil para sus desarrollos. Puede ver un ejemplo completo en Truffle-CI-Example(opens in a new tab). Solo asegúrese de eliminar Circle-CI o Travis, ¡con uno es suficiente!

Última edición: @nhsz(opens in a new tab), 15 de agosto de 2023

¿Le ha resultado útil este tutorial?