From b4283f1acafb851d21c6b5f560ce6102927efb18 Mon Sep 17 00:00:00 2001 From: Oleg Nikonychev Date: Sat, 9 Nov 2024 14:23:29 +0400 Subject: [PATCH] chore: scheduled basic e2e tests for evm testnet endpoint (#2106) * chore: scheduled basic e2e tests for evm testnet endpoint * chore: changelog update * Update and rename e2e-evm-basic-testnet.yml to e2e-evm-cron.yml --------- Co-authored-by: Unique Divine <51418232+Unique-Divine@users.noreply.github.com> --- .github/workflows/e2e-evm-cron.yml | 47 ++++++++++++++++++++++++++++++ CHANGELOG.md | 2 ++ evm-e2e/justfile | 4 +++ evm-e2e/test/tx_receipt.test.ts | 2 +- 4 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/e2e-evm-cron.yml diff --git a/.github/workflows/e2e-evm-cron.yml b/.github/workflows/e2e-evm-cron.yml new file mode 100644 index 000000000..11ae62b9a --- /dev/null +++ b/.github/workflows/e2e-evm-cron.yml @@ -0,0 +1,47 @@ +name: EVM E2E Cron + +on: + schedule: + - cron: '0 * * * *' # every hour at 00 min + # cron syntax: https://jasonet.co/posts/scheduled-actions/ + +jobs: + # The "evm-e2e-cron" job runs end-to-end tests on a schedule against instances + # of Nibiru to ensure core functionality remains stable. This is intended to + # highlight any outage or catch degredations in public endpoint functionality + # early. Failures trigger immediate Slack notifications to alert the team. + # + # This workflow: + # 1. Executes basic EVM integration tests against the testnet + # 2. Uses a dedicated test wallet (configured via secrets) + # 3. Reports failures to the testnet Slack channel + # + # Environment requirements: + # - WALLET_MNEMONIC_TESTNET: Secret for test wallet access + # - SLACK_WEBHOOK_TESTNET: Webhook URL for failure notifications + evm-e2e-cron: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: 'just install' + run: just install + working-directory: 'evm-e2e' + + - name: 'Run tests (just test-basic)' + run: just test-basic + working-directory: 'evm-e2e' + env: + JSON_RPC_ENDPOINT: https://evm-rpc.testnet-1.nibiru.fi + MNEMONIC: ${{ secrets.WALLET_MNEMONIC_TESTNET }} + + - name: Send failure to slack channel + if: always() + uses: ravsamhq/notify-slack-action@v2 + with: + status: ${{ job.status }} + notify_when: 'failure' + notification_title: 'EVM basic tests failed on Testnet' + message_format: '{emoji} *{workflow}* {status_message} Run: {run_url}' + env: + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_TESTNET }} diff --git a/CHANGELOG.md b/CHANGELOG.md index 04f83b83e..ba6d3291e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -100,10 +100,12 @@ tests for race conditions within funtoken precompile - [#2100](https://github.com/NibiruChain/nibiru/pull/2100) - refactor: cleanup statedb and precompile sections - [#2101](https://github.com/NibiruChain/nibiru/pull/2101) - fix(evm): tx receipt proper marshalling - [#2105](https://github.com/NibiruChain/nibiru/pull/2105) - test(evm): precompile call with revert +- [#2106](https://github.com/NibiruChain/nibiru/pull/2106) - chore: scheduled basic e2e tests for evm testnet endpoint - [#2107](https://github.com/NibiruChain/nibiru/pull/2107) - feat(evm-funtoken-precompile): Implement methods: balance, bankBalance, whoAmI - [#2108](https://github.com/NibiruChain/nibiru/pull/2108) - fix(evm): removed deprecated root key from eth_getTransactionReceipt + #### Nibiru EVM | Before Audit 1 - 2024-10-18 - [#1837](https://github.com/NibiruChain/nibiru/pull/1837) - feat(eth): protos, eth types, and evm module types diff --git a/evm-e2e/justfile b/evm-e2e/justfile index d8153d37e..ce1a88523 100644 --- a/evm-e2e/justfile +++ b/evm-e2e/justfile @@ -16,6 +16,10 @@ install: test: npm test +# Runs tx receipt tests. Used for testnet quick check. +test-basic: + npm test -- tx_receipt.test.ts + # Format fmt: npm run format diff --git a/evm-e2e/test/tx_receipt.test.ts b/evm-e2e/test/tx_receipt.test.ts index adc91286a..7a95cd995 100644 --- a/evm-e2e/test/tx_receipt.test.ts +++ b/evm-e2e/test/tx_receipt.test.ts @@ -10,7 +10,7 @@ describe('Transaction Receipt Tests', () => { let recipient = ethers.Wallet.createRandom().address; it('simple transfer receipt', async () => { - const value = ethers.parseEther('1'); + const value = ethers.parseEther('0.0001'); const tx = await account.sendTransaction({ to: recipient, value,