Bats E2E Tests #6858
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # This workflow runs the Bats E2E tests for aggkit. | |
| # - On push: uses hardcoded kurtosis-cdk commit | |
| # - On schedule: uses latest kurtosis-cdk main commit with Slack notifications | |
| name: Bats E2E Tests | |
| on: | |
| push: | |
| branches: | |
| - "**" | |
| schedule: | |
| # Run every 24 hours at 00:00 UTC | |
| - cron: "0 0 * * *" | |
| workflow_dispatch: {} | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| env: | |
| AGGKIT_REPORT_CHANNEL: "C092K6Z0EUT" | |
| KURTOSIS_CDK_COMMIT: "507e4e8e6581ab5ecbb44444f9b7f1d05e3dcd1c" | |
| permissions: | |
| packages: write | |
| id-token: write | |
| contents: read | |
| jobs: | |
| get-kurtosis-cdk-commit: | |
| name: Get Kurtosis CDK Commit | |
| runs-on: ubuntu-latest | |
| outputs: | |
| kurtosis-commit: ${{ steps.get-commit.outputs.commit }} | |
| steps: | |
| - name: Determine kurtosis-cdk ref | |
| id: determine-ref | |
| run: | | |
| if [[ "${{ github.event_name }}" == "schedule" ]]; then | |
| echo "ref=main" >> $GITHUB_OUTPUT | |
| echo "Using latest kurtosis-cdk main branch" | |
| else | |
| echo "ref=${{ env.KURTOSIS_CDK_COMMIT }}" >> $GITHUB_OUTPUT | |
| echo "Using fixed kurtosis-cdk commit: ${{ env.KURTOSIS_CDK_COMMIT }}" | |
| fi | |
| - name: Checkout kurtosis-cdk | |
| uses: actions/checkout@v5 | |
| with: | |
| repository: 0xPolygon/kurtosis-cdk | |
| ref: ${{ steps.determine-ref.outputs.ref }} | |
| - name: Get kurtosis-cdk commit SHA | |
| id: get-commit | |
| run: | | |
| COMMIT=$(git rev-parse HEAD) | |
| echo "commit=${COMMIT}" >> $GITHUB_OUTPUT | |
| echo "Using kurtosis-cdk commit: ${COMMIT}" | |
| build-aggkit-image: | |
| uses: ./.github/workflows/build-aggkit-image.yml | |
| with: | |
| go-version: 1.25.7 | |
| docker-image-name: aggkit | |
| read-aggkit-args: | |
| name: Read aggkit args | |
| runs-on: ubuntu-latest | |
| outputs: | |
| # single l2 network (op-succinct) | |
| kurtosis-cdk-args-single-op-succinct: ${{ steps.read-args.outputs.op_succinct_args }} | |
| # single l2 network (op-succinct with aggoracle committee) | |
| kurtosis-cdk-args-single-op-succinct-aggoracle-committee: ${{ steps.read-args.outputs.op_succinct_aggoracle_committee_args }} | |
| # single l2 network (op, pessimistic) | |
| kurtosis-cdk-args-single-op-pessimistic: ${{ steps.read-args.outputs.single_op_chain_pessimistic_args }} | |
| # multi l2 networks | |
| kurtosis-cdk-args-1: ${{ steps.read-args.outputs.kurtosis-cdk-args-1 }} | |
| kurtosis-cdk-args-2: ${{ steps.read-args.outputs.kurtosis-cdk-args-2 }} | |
| kurtosis-cdk-args-3: ${{ steps.read-args.outputs.kurtosis-cdk-args-3 }} | |
| kurtosis-cdk-args-4: ${{ steps.read-args.outputs.kurtosis-cdk-args-4 }} | |
| kurtosis-cdk-args-5: ${{ steps.read-args.outputs.kurtosis-cdk-args-5 }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v5 | |
| - name: Read kurtosis-cdk-args from file | |
| id: read-args | |
| run: | | |
| BASE_OP=./.github/test_e2e_op_args_base.json | |
| BASE_CDK_ERIGON=./.github/test_e2e_cdk_erigon_args_base.json | |
| # Helper: merge provided JSON files, output to GITHUB_OUTPUT, and pretty print | |
| put_args() { | |
| local name="$1" | |
| shift | |
| local files=("$@") | |
| local content | |
| if [ "${#files[@]}" -eq 0 ]; then | |
| echo "❌ Error: put_args requires at least one JSON file" >&2 | |
| exit 1 | |
| fi | |
| # Verify that all files exist | |
| for f in "${files[@]}"; do | |
| if [ ! -f "$f" ]; then | |
| echo "❌ Error: JSON file not found: $f" >&2 | |
| exit 1 | |
| fi | |
| done | |
| content=$(jq -s 'reduce .[] as $item ({}; . * $item)' "${files[@]}" | jq -c .) | |
| echo "${name}=${content}" >> "$GITHUB_OUTPUT" | |
| echo "### $name" | |
| echo "$content" | jq . | |
| } | |
| # single l2 network (op-succinct) | |
| put_args op_succinct_args "$BASE_OP" \ | |
| ./.github/test_e2e_op_succinct_args_base.json \ | |
| ./.github/test_e2e_single_chain_op_succinct_args.json | |
| # single l2 network (op-succinct with aggoracle committee) | |
| put_args op_succinct_aggoracle_committee_args "$BASE_OP" \ | |
| ./.github/test_e2e_op_succinct_args_base.json \ | |
| ./.github/test_e2e_single_chain_op_succinct_aggoracle_committee_args.json | |
| # single l2 network (op, pessimistic) | |
| put_args single_op_chain_pessimistic_args "$BASE_OP" \ | |
| ./.github/test_e2e_op_args_chain_1.json | |
| # multi l2 networks | |
| put_args kurtosis-cdk-args-1 "$BASE_OP" \ | |
| ./.github/test_e2e_op_args_chain_1.json | |
| put_args kurtosis-cdk-args-2 "$BASE_OP" \ | |
| ./.github/test_e2e_op_args_chain_2.json | |
| put_args kurtosis-cdk-args-3 "$BASE_CDK_ERIGON" \ | |
| ./.github/test_e2e_cdk_erigon_custom_gas_token.json | |
| put_args kurtosis-cdk-args-4 "$BASE_CDK_ERIGON" \ | |
| ./.github/test_e2e_cdk_erigon_multi_chains_args_2.json \ | |
| ./.github/test_e2e_cdk_erigon_custom_gas_token.json | |
| put_args kurtosis-cdk-args-5 "$BASE_CDK_ERIGON" \ | |
| ./.github/test_e2e_cdk_erigon_multi_chains_args_3.json | |
| build-tools: | |
| name: Build aggsender find imported bridge tool | |
| needs: | |
| - build-aggkit-image | |
| runs-on: amd-runner-2204 | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v5 | |
| - name: Install Go | |
| uses: actions/setup-go@v6 | |
| with: | |
| go-version: 1.25.7 | |
| - name: Build Aggsender Find Imported Bridge | |
| run: make build-tools | |
| - name: Upload Binary | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: aggsender_find_imported_bridge | |
| path: ./target/aggsender_find_imported_bridge | |
| # aggkit owns the kurtosis e2e config templates (test/e2e/kurtosis/). They | |
| # are uploaded here and overlaid on kurtosis-cdk's static_files by the | |
| # agglayer/e2e reusable workflows (input: aggkit-config-artifact), so a | |
| # config change ships in the same PR as the code — no kurtosis-cdk PR. | |
| - name: Upload aggkit e2e config templates | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: aggkit-e2e-config | |
| path: ./test/e2e/kurtosis/*.template.toml | |
| test-single-l2-network-op-pessimistic: | |
| name: Single L2 chain tests (OP, pessimistic) | |
| needs: | |
| - build-aggkit-image | |
| - build-tools | |
| - read-aggkit-args | |
| - get-kurtosis-cdk-commit | |
| uses: agglayer/e2e/.github/workflows/aggkit-e2e-single-chain.yml@e0dcceca73cc66c1dd577da2b491887586c0d4b8 | |
| secrets: inherit | |
| with: | |
| kurtosis-cdk-ref: ${{ needs.get-kurtosis-cdk-commit.outputs.kurtosis-commit }} | |
| agglayer-e2e-ref: e0dcceca73cc66c1dd577da2b491887586c0d4b8 # agglayer/e2e#263 (aggkit-config-artifact support) | |
| # aggkit-owned config templates overlaid onto kurtosis-cdk before it runs. | |
| aggkit-config-artifact: aggkit-e2e-config | |
| kurtosis-cdk-enclave-name: op | |
| kurtosis-cdk-args: ${{ needs.read-aggkit-args.outputs.kurtosis-cdk-args-single-op-pessimistic }} | |
| test-name: "test-single-l2-network-op-pessimistic" | |
| execute-all-tests: ${{ github.event_name == 'schedule' }} | |
| fail-fast: ${{ github.event_name != 'schedule' }} | |
| aggsender-find-imported-bridge-artifact: aggsender_find_imported_bridge | |
| check-single-l2-network-op-pessimistic-tests-result: | |
| name: Check results for single l2 network (OP, pessimistic) | |
| needs: | |
| - test-single-l2-network-op-pessimistic | |
| runs-on: ubuntu-latest | |
| steps: | |
| - run: exit 1 | |
| if: ${{ contains(fromJSON('["failure", "cancelled"]'), needs.test-single-l2-network-op-pessimistic.result) }} | |
| test-single-l2-network-op-succinct: | |
| name: Single L2 chain tests (op-succinct) | |
| needs: | |
| - build-aggkit-image | |
| - build-tools | |
| - read-aggkit-args | |
| - get-kurtosis-cdk-commit | |
| uses: agglayer/e2e/.github/workflows/aggkit-e2e-single-chain.yml@e0dcceca73cc66c1dd577da2b491887586c0d4b8 | |
| secrets: inherit | |
| with: | |
| kurtosis-cdk-ref: ${{ needs.get-kurtosis-cdk-commit.outputs.kurtosis-commit }} | |
| agglayer-e2e-ref: e0dcceca73cc66c1dd577da2b491887586c0d4b8 # agglayer/e2e#263 (aggkit-config-artifact support) | |
| # aggkit-owned config templates overlaid onto kurtosis-cdk before it runs. | |
| aggkit-config-artifact: aggkit-e2e-config | |
| kurtosis-cdk-enclave-name: op | |
| kurtosis-cdk-args: ${{ needs.read-aggkit-args.outputs.kurtosis-cdk-args-single-op-succinct }} | |
| aggsender-find-imported-bridge-artifact: aggsender_find_imported_bridge | |
| test-name: "test-single-l2-network-op-succinct" | |
| execute-all-tests: ${{ github.event_name == 'schedule' }} | |
| fail-fast: ${{ github.event_name != 'schedule' }} | |
| check-single-network-op-succinct-tests-result: | |
| name: Check results for single l2 network (op-succinct) | |
| needs: | |
| - test-single-l2-network-op-succinct | |
| runs-on: ubuntu-latest | |
| steps: | |
| - run: exit 1 | |
| if: ${{ contains(fromJSON('["failure", "cancelled"]'), needs.test-single-l2-network-op-succinct.result) }} | |
| test-single-l2-network-op-succinct-aggoracle-committee: | |
| name: Single L2 chain tests (op-succinct with aggoracle committee) | |
| needs: | |
| - build-aggkit-image | |
| - build-tools | |
| - read-aggkit-args | |
| - get-kurtosis-cdk-commit | |
| uses: agglayer/e2e/.github/workflows/aggkit-e2e-single-chain.yml@e0dcceca73cc66c1dd577da2b491887586c0d4b8 | |
| if: always() && github.event_name == 'schedule' && github.ref == 'refs/heads/develop' | |
| secrets: inherit | |
| with: | |
| kurtosis-cdk-ref: ${{ needs.get-kurtosis-cdk-commit.outputs.kurtosis-commit }} | |
| agglayer-e2e-ref: e0dcceca73cc66c1dd577da2b491887586c0d4b8 # agglayer/e2e#263 (aggkit-config-artifact support) | |
| # aggkit-owned config templates overlaid onto kurtosis-cdk before it runs. | |
| aggkit-config-artifact: aggkit-e2e-config | |
| kurtosis-cdk-enclave-name: op | |
| kurtosis-cdk-args: ${{ needs.read-aggkit-args.outputs.kurtosis-cdk-args-single-op-succinct-aggoracle-committee }} | |
| test-name: "test-single-l2-network-op-succinct-aggoracle-committee" | |
| execute-all-tests: ${{ github.event_name == 'schedule' }} | |
| fail-fast: ${{ github.event_name != 'schedule' }} | |
| aggsender-find-imported-bridge-artifact: aggsender_find_imported_bridge | |
| check-single-l2-network-op-succinct-aggoracle-committee-tests-result: | |
| name: Check results for single l2 network (op-succinct with aggoracle committee) | |
| needs: | |
| - test-single-l2-network-op-succinct-aggoracle-committee | |
| runs-on: ubuntu-latest | |
| steps: | |
| - run: exit 1 | |
| if: ${{ contains(fromJSON('["failure", "cancelled"]'), needs.test-single-l2-network-op-succinct-aggoracle-committee.result) }} | |
| test-multi-l2-networks-2-chains-op-pessimistic: | |
| name: Multi chains E2E tests (OP, pessimistic, 2 chains) | |
| needs: | |
| - build-aggkit-image | |
| - build-tools | |
| - read-aggkit-args | |
| - get-kurtosis-cdk-commit | |
| uses: agglayer/e2e/.github/workflows/aggkit-e2e-multi-chains.yml@e0dcceca73cc66c1dd577da2b491887586c0d4b8 | |
| secrets: inherit | |
| with: | |
| kurtosis-cdk-ref: ${{ needs.get-kurtosis-cdk-commit.outputs.kurtosis-commit }} | |
| agglayer-e2e-ref: e0dcceca73cc66c1dd577da2b491887586c0d4b8 # agglayer/e2e#263 (aggkit-config-artifact support) | |
| # aggkit-owned config templates overlaid onto kurtosis-cdk before it runs. | |
| aggkit-config-artifact: aggkit-e2e-config | |
| kurtosis-cdk-enclave-name: op | |
| aggsender-find-imported-bridge-artifact: aggsender_find_imported_bridge | |
| kurtosis-cdk-args-1: ${{ needs.read-aggkit-args.outputs.kurtosis-cdk-args-1 }} | |
| kurtosis-cdk-args-2: ${{ needs.read-aggkit-args.outputs.kurtosis-cdk-args-2 }} | |
| check-multi-l2-networks-2-chains-tests-result: | |
| name: Check results for multi l2 networks (OP, pessimistic, 2 chains) | |
| needs: | |
| - test-multi-l2-networks-2-chains-op-pessimistic | |
| runs-on: ubuntu-latest | |
| steps: | |
| - run: exit 1 | |
| if: ${{ contains(fromJSON('["failure", "cancelled"]'), needs.test-multi-l2-networks-2-chains-op-pessimistic.result) }} | |
| test-multi-l2-networks-3-chains-cdk-erigon-pessimistic: | |
| name: Multi chains E2E tests (CDK Erigon, pessimistic, 3 chains) | |
| needs: | |
| - build-aggkit-image | |
| - build-tools | |
| - read-aggkit-args | |
| - get-kurtosis-cdk-commit | |
| uses: agglayer/e2e/.github/workflows/aggkit-e2e-multi-chains.yml@e0dcceca73cc66c1dd577da2b491887586c0d4b8 | |
| secrets: inherit | |
| with: | |
| kurtosis-cdk-ref: ${{ needs.get-kurtosis-cdk-commit.outputs.kurtosis-commit }} | |
| agglayer-e2e-ref: e0dcceca73cc66c1dd577da2b491887586c0d4b8 # agglayer/e2e#263 (aggkit-config-artifact support) | |
| # aggkit-owned config templates overlaid onto kurtosis-cdk before it runs. | |
| aggkit-config-artifact: aggkit-e2e-config | |
| kurtosis-cdk-enclave-name: aggkit | |
| aggsender-find-imported-bridge-artifact: aggsender_find_imported_bridge | |
| kurtosis-cdk-args-1: ${{ needs.read-aggkit-args.outputs.kurtosis-cdk-args-3 }} | |
| kurtosis-cdk-args-2: ${{ needs.read-aggkit-args.outputs.kurtosis-cdk-args-4 }} | |
| kurtosis-cdk-args-3: ${{ needs.read-aggkit-args.outputs.kurtosis-cdk-args-5 }} | |
| number-of-chains: 3 | |
| check-multi-l2-networks-3-chains-tests-result: | |
| name: Check results for multi l2 networks (CDK Erigon, pessimisstic, 3 chains) | |
| needs: | |
| - test-multi-l2-networks-3-chains-cdk-erigon-pessimistic | |
| runs-on: ubuntu-latest | |
| steps: | |
| - run: exit 1 | |
| if: ${{ contains(fromJSON('["failure", "cancelled"]'), needs.test-multi-l2-networks-3-chains-cdk-erigon-pessimistic.result) }} | |
| notify-slack: | |
| name: Notify Slack | |
| needs: | |
| - test-single-l2-network-op-pessimistic | |
| - test-single-l2-network-op-succinct | |
| - test-single-l2-network-op-succinct-aggoracle-committee | |
| - test-multi-l2-networks-2-chains-op-pessimistic | |
| - test-multi-l2-networks-3-chains-cdk-erigon-pessimistic | |
| - get-kurtosis-cdk-commit | |
| runs-on: ubuntu-latest | |
| if: always() && github.event_name == 'schedule' && github.ref == 'refs/heads/develop' | |
| steps: | |
| - name: Send Slack notification | |
| uses: agglayer/gha-notify-generic@v1 | |
| with: | |
| slack-bot-token: ${{ secrets.SLACK_APP_TOKEN_AGGLAYER_NOTIFY_GENERIC }} | |
| channel-id: ${{ env.AGGKIT_REPORT_CHANNEL }} | |
| message: | | |
| Daily E2E Tests Report | |
| Kurtosis CDK Commit: `${{ needs.get-kurtosis-cdk-commit.outputs.kurtosis-commit }}` | |
| Test Results: | |
| • Single L2 (OP, pessimistic): ${{ needs.test-single-l2-network-op-pessimistic.result == 'success' && '🟢' || '🔴' }} | |
| • Single L2 (op-succinct): ${{ needs.test-single-l2-network-op-succinct.result == 'success' && '🟢' || '🔴' }} | |
| • Single L2 (op-succinct with aggoracle committee): ${{ needs.test-single-l2-network-op-succinct-aggoracle-committee.result == 'success' && '🟢' || '🔴' }} | |
| • Multi L2 (OP, pessimistic, 2 chains): ${{ needs.test-multi-l2-networks-2-chains-op-pessimistic.result == 'success' && '🟢' || '🔴' }} | |
| • Multi L2 (OP, pessimistic, 3 chains): ${{ needs.test-multi-l2-networks-3-chains-cdk-erigon-pessimistic.result == 'success' && '🟢' || '🔴' }} | |
| <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|View Workflow> |