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(opens in a new tab) dan untuk melacak berbagai statistik menggunakan peralatan tambahan.
Kita akan menggunakan Kotak Metacoin Truffle(opens in a new tab) untuk menyiapkan integrasi berkelanjutan kita. Anda dapat memilih Travis CI atau Circle CI.
Menyiapkan Travis CI
Menambahkan Travis CI(opens in a new tab) 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 testTampilkan 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(opens in a new tab).
Menyiapkan Circle CI
CircleCi(opens in a new tab) memerlukan file konfigurasi yang lebih panjang. Perintah tambahan npm ci
(opens in a new tab) 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 - dependenciesTampilkan 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-reporternpm install --save-dev @codechecks/client
Langkah 2: Tambahkan plugin ke pengaturan mocha di dalam truffle-config.js Anda
Lihat opsi(opens in a new tab)
1module.exports = {2 networks: { ... },3 mocha: {4 reporter: 'eth-gas-reporter',5 reporterOptions: {6 excludeContracts: ['Migrations']7 }8 }9};Tampilkan semuaSalin
Langkah 3: Tambahkan codechecks.yml ke direktori akar proyek Anda
1checks:2 - name: eth-gas-reporter/codechecks
Langkah 4: Jalankan codechecks setelah perintah pengujian
- npm test- npx codechecks
Langkah 5: Buat akun Codechecks
- Buat akun dengan Codechecks(opens in a new tab).
- Add the GitHub repo to it.
- Salin rahasianya dan tambahkan
CC_SECRET=COPIED SECRET
ke dalam CI Anda (lihat di sini untuk Travis(opens in a new tab), di sini untuk CircleCi(opens in a new tab)). - 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 trufflenpm install --save-dev coverallsnpm 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}Salin
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(opens in a new tab).
- Add the GitHub repo to it.
- Sekarang lanjutkan dan buat permintaan penarikan.
Ide lebih lanjut
- MythX(opens in a new tab): Dengan MythX, Anda dapat secara otomatis menganalisa keamanan kontrak pintar Anda. Jadi, sangat masuk akal untuk menambahkan ini ke dalam CI Anda(opens in a new tab).
- Linting(opens in a new tab): Good code can be enforced to some degree with linting tools. Eslint(opens in a new tab) works great for JavaScript, is easy to setup(opens in a new tab), while Solhint(opens in a new tab) 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(opens in a new tab). Pastikan saja menghapus Circle-CI atau Travis, satu sudah cukup!
Terakhir diedit: @yeremiaryangunadi(opens in a new tab), Invalid DateTime