Pengaturan integrasi berkelanjutan untuk Solidity dan Truffle
Integrasi berkelanjutan (CI) dengan Truffle merupakan cara yang bagus untuk pekerjaan pengembangan setelah Anda memiliki sekumpulan tes dasar yang diimplementasikan. CI memungkinkan Anda menjalankan tes yang sangat panjang, memastikan semua tes lolos uji sebelum bergabung dengan permintaan penarikan dan untuk melacak berbagai statistik menggunakan peralatan tambahan.
Kita akan menggunakan Kotak Metacoin Truffle untuk menyiapkan integrasi berkelanjutan kita. Anda dapat memilih Travis CI atau Circle CI.
Menyiapkan Travis CI
Menambahkan Travis CI merupakan hal yang mudah. Anda hanya perlu menambahkan file konfigurasi .travis.yml
ke folder akar proyeknya:
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 test12Tampilkan semua
Kita akan menjaganya tetap tampak mudah untuk saat ini dan hanya akan menjalankan skrip tes yang mengeksekusi tes unit Truffle. Tapi kita memiliki satu masalah, tidak akan ada blockchain yang tersedia di mesin Travis CI. Solusi mudah untuk ini adalah melakukannpm instal ganache-cli
dan cukup menjalankannya sebelum tes. Anda dapat melakukan ini dengan menambahkan skrip bash dengan barisan npx ganache-cli > /dev/null
dan sebelum pemanggilan npx truffle test
. Contoh lengkap skrip bash.
Menyiapkan Circle CI
CircleCi memerlukan file konfigurasi yang lebih panjang. Perintah tambahan npm ci
secara otomatis dijalankan di Travis. Perintah ini menginstal dependensi dengan lebih cepat dan lebih aman daripada yang dilakukan oleh npm install
. Kita sekali lagi menggunakan skrip yang sama dari versi Travis untuk menjalankan ganache-cli sebelum pengujiannya.
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 - dependencies52Tampilkan semua
Menambahkan plugin eth-gas-reporter
Plugin eth-gas-reporter cukup berguna untuk melacak biaya gas dari fungsi kontrak pintar Anda. Memilikinya dalam CI Anda akan jauh lebih berguna untuk menunjukkan perbedaan saat menambahkan permintaan penarikan.
Langkah 1: Instal plugin eth-gas-reporter dan codechecks
$ npm install --save-dev eth-gas-reporter$ npm install --save-dev @codechecks/client
Langkah 2: Tambahkan plugin ke pengaturan mocha di dalam truffle-config.js Anda
1module.exports = {2 networks: { ... },3 mocha: {4 reporter: 'eth-gas-reporter',5 reporterOptions: {6 excludeContracts: ['Migrations']7 }8 }9};10Tampilkan semuaSalin
Langkah 3: Tambahkan codechecks.yml ke direktori akar proyek Anda
1checks:2 - name: eth-gas-reporter/codechecks3
Langkah 4: Jalankan codechecks setelah perintah pengujian
- npm test- npx codechecks
Langkah 5: Buat akun Codechecks
- Buat akun dengan Codechecks.
- Add the GitHub repo to it.
- Salin rahasianya dan tambahkan
CC_SECRET=COPIED SECRET
ke dalam CI Anda (lihat di sini untuk Travis, di sini untuk CircleCi). - Sekarang lanjutkan dan buat permintaan penarikan.
Selesai. Sekarang Anda akan menemukan laporan yang bagus tentang perubahan biaya gas dari permintaan penarikan Anda.
Menambahkan plugin solidity-coverage
Dengan plugin solidity-coverage, Anda dapat memeriksa seberapa banyak jalur kode Anda yang dicakup oleh tes Anda. Menambahkan ini ke CI Anda sangatlah praktis untuk digunakan setelah disiapkan.
Langkah 1: Buat proyek metacoin dan instal peralatan coverage
$ npm install --save-dev truffle$ npm install --save-dev coveralls$ npm install --save-dev solidity-coverage
Langkah 2: Tambahkan solidity-coverage ke dalam array plugin di dalam truffle-config.js
1module.exports = {2 networks: {...},3 plugins: ["solidity-coverage"]4}5Salin
Langkah 3: Tambahkan perintah coverage ke dalam .travis.yml atau Circle CI config.yml
- npx truffle run coverage- cat coverage/lcov.info | npx coveralls
Coverage Solidity memulai ganache-cli miliknya, sehingga kita tidak perlu merisaukan tentang ini. Namun, jangan mengganti perintah tes reguler, ganache-cli coverage bekerja dengan cara berbeda dan oleh karena itu bukanlah pengganti untuk menjalankan tes reguler.
Langkah 4: Tambahkan repositori ke coveralls
- Buat akun dengan Coveralls.
- Add the GitHub repo to it.
- Sekarang lanjutkan dan buat permintaan penarikan.
Ide lebih lanjut
- MythX: Dengan MythX, Anda dapat secara otomatis menganalisa keamanan kontrak pintar Anda. Jadi, sangat masuk akal untuk menambahkan ini ke dalam CI Anda.
- Linting: Good code can be enforced to some degree with linting tools. Eslint works great for JavaScript, is easy to setup, while Solhint can be used for Solidity.
- Tes panjang: Terkadang Anda mungkin ingin menambahkan tes ekstrim, seperti menguji kontrak yang memiliki ratusan pengguna. Ini memerlukan waktu yang lama. Alih-alih menjalankannya di setiap pengoperasian tes, tambahkan ke dalam CI.
Begitu mudah, bukan. Integrasi berkelanjutan merupakan strategi yang sangat berguna untuk pengembangan Anda. Anda dapat melihat contoh lengkapnya di Truffle-CI-Example. Pastikan saja menghapus Circle-CI atau Travis, satu sudah cukup!