Solidity ve Truffle sürekli entegrasyon kurulumu
Truffle ile sürekli entegrasyon (CI), temel bir test setini uyguladıktan sonra geliştirme yapmak için harikadır. Bir çekme talebini(opens in a new tab) birleştirmeden önce oldukça uzun testler yapmanızı ve ek araçlar kullanarak çeşitli istatistikleri takip etmenizi sağlar.
Sürekli entegrasyonumuzu kurmak için Truffle Metacoin Box(opens in a new tab) kullanacağız. Travis CI veya Circle CI'yi seçebilirsiniz.
Travis CI kurulumu
Travis CI(opens in a new tab) eklemek basittir. Projenin kök dizinine yalnızca bir .travis.yml
yapılandırma dosyası eklemeniz gerekecek:
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 testTümünü göster
Şimdilik çok karmaşıklaştırmıyoruz ve yalnızca Truffle birim testlerini yürüten test komut dosyasını çalıştırıyoruz. Ancak bir sorunumuz var, Travis CI makinesinde kullanılabilir bir blok zinciri olmayacak. Bunun için basit bir düzeltme, npm install ganache-cli
ve bunu testten önce çalıştırmaktır. Bunu npx ganache-cli > /dev/null
satırıyla bir bash komut dosyası ekleyerek npx truffle test
çağrısından önce yapabilirsiniz. Tam örnek bash komut dosyası(opens in a new tab).
Circle CI kurulumu
CircleCi(opens in a new tab) daha uzun bir yapılandırma dosyası gerektirir. Ek npm ci
(opens in a new tab) komutu Travis'te otomatik olarak yapılır. Bağımlılıkları npm install
'dan daha hızlı ve daha güvenli kurar. Testlerden önce ganache-cli'yi çalıştırmak için yine Travis versiyonundaki aynı komut dosyasını kullanıyoruz.
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 - dependenciesTümünü göster
Eth-gas-reporter eklentisini ekleme
Eth-gas-reporter eklentisi, akıllı sözleşme fonksiyonlarınızın gaz maliyetlerini takip etmek için oldukça kullanışlıdır. CI'nizde bulundurmak, çekme talepleri eklerken farkları göstermek için ayrıca yararlı olacaktır.
1. Adım: Eth-gas-reporter eklentisini ve kod kontrollerini kurun
npm install --save-dev eth-gas-reporternpm install --save-dev @codechecks/client
2. Adım: Eklentiyi truffle-config.js içindeki mocha ayarlarına ekleyin
Seçeneklere bakın(opens in a new tab)
1module.exports = {2 networks: { ... },3 mocha: {4 reporter: 'eth-gas-reporter',5 reporterOptions: {6 excludeContracts: ['Migrations']7 }8 }9};Tümünü gösterKopyala
3. Adım: Projenizin kök dizinine bir codechecks.yml ekleyin
1checks:2 - name: eth-gas-reporter/codechecks
4. Adım: Test komutundan sonra kod kontrollerini çalıştırın
- npm test- npx codechecks
5. Adım: Bir Codechecks hesabı oluşturun
- Codechecks(opens in a new tab) ile bir hesap oluşturun.
- GitHub deposunu buna ekleyin.
- Secret'ı kopyalayın ve CI'nize
CC_SECRET=COPIED SECRET
ekleyin (Travis(opens in a new tab) için buraya, CircleCi(opens in a new tab) için buraya bakın). - Şimdi devam edin ve bir çekme talebi oluşturun.
Bu kadar. Artık çekme talebinizin gaz maliyetlerindeki değişiklikler hakkında güzel bir rapor bulacaksınız.
Solidity-coverage eklentisini ekleme
solidity-coverage eklentisi ile, testlerinizin kod yollarınızın ne kadarını kapsadığını kontrol edebilirsiniz. Bunu CI'ınıza eklemek, kurulduktan sonra kullanımını çok kolay hâle getirir.
1. Adım: Bir metacoin projesi oluşturun ve kapsama araçlarını kurun
npm install --save-dev truffle coveralls solidity-coverage
2. Adım: truffle-config.js'deki eklentiler dizisine solidity-coverage ekleyin
1module.exports = {2 networks: {...},3 plugins: ["solidity-coverage"]4}Kopyala
3. Adım: Coverage komutlarını .travis.yml veya Circle CI config.yml dosyasına ekleyin
- npx truffle run coverage- cat coverage/lcov.info | npx coveralls
Solidity coverage, kendi ganache-cli'sini başlatır, bu yüzden bu konuda endişelenmemize gerek yok. Yine de normal test komutunu değiştirmeyin, coverage'ın ganache-cli'si farklı şekilde çalışır ve bu nedenle düzenli birim testleri çalıştırmanın yerini alamaz.
4. Adım: Depoyu coveralls'a ekleyin
- Coveralls(opens in a new tab) ile bir hesap oluşturun.
- GitHub deposunu buna ekleyin.
- Şimdi devam edin ve bir çekme talebi oluşturun.
Diğer fikirler
- MythX(opens in a new tab): MythX ile akıllı sözleşme güvenliğinizi otomatik olarak analiz edebilirsiniz. Yani bunu CI'nize eklemek(opens in a new tab) gayet mantıklıdır.
- Linting(opens in a new tab): İyi kod, linting araçlarıyla bir dereceye kadar zorlanabilir. Eslint(opens in a new tab) JavaScript ile harika çalışır ve kurulumu kolaydır(opens in a new tab). Solhint(opens in a new tab) ise Solidity için kullanılabilir.
- Uzun testler: Bazen, örneğin yüzlerce kullanıcıyla bir sözleşmeyi test etmek gibi ekstrem testler eklemek isteyebilirsiniz. Bu, uzun bir süre alır. Bunları her test çalışmasında çalıştırmak yerine CI'a ekleyin.
İşte oldu. Sürekli entegrasyon, geliştirmeleriniz için çok faydalı bir stratejidir. Truffle-CI-Example(opens in a new tab)'da tam bir örneğe göz atabilirsiniz. Sadece Circle-CI veya Travis'i çıkardığınızdan emin olun, bir tane yeterlidir!
Son düzenleme: @kaanmetu(opens in a new tab), Invalid DateTime