Merge branch 'develop' into feat/e2e_mutlisign #4632
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" | |
| 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: Get kurtosis-cdk commit based on trigger | |
| id: get-commit | |
| run: | | |
| if [[ "${{ github.event_name }}" == "schedule" ]]; then | |
| # For scheduled runs, get the latest commit | |
| COMMIT="" | |
| for i in {1..3}; do | |
| COMMIT=$(curl -s https://api.github.com/repos/0xPolygon/kurtosis-cdk/commits/main | jq -r '.sha') | |
| if [[ -n "$COMMIT" && "$COMMIT" != "null" ]]; then | |
| echo "Using latest kurtosis-cdk commit: ${COMMIT}" | |
| break | |
| else | |
| echo "Attempt $i: Failed to fetch commit, retrying..." | |
| sleep 2 | |
| fi | |
| done | |
| if [[ -z "$COMMIT" || "$COMMIT" == "null" ]]; then | |
| echo "Error: Failed to fetch kurtosis-cdk commit after 3 attempts" | |
| exit 1 | |
| fi | |
| else | |
| # For push/workflow_dispatch, use the fixed commit | |
| COMMIT="5bcd88d0695ee976cfb2bd059f08463f0a95cf9c" | |
| echo "Using fixed kurtosis-cdk commit: ${COMMIT}" | |
| fi | |
| echo "commit=${COMMIT}" >> $GITHUB_OUTPUT | |
| build-aggkit-image: | |
| uses: ./.github/workflows/build-aggkit-image.yml | |
| with: | |
| go-version: 1.25.3 | |
| 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@v5 | |
| with: | |
| go-version: 1.25.3 | |
| - 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 | |
| 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@ae92165db92fcda4dd6bab323ab2b7b8fe579d82 | |
| secrets: inherit | |
| with: | |
| kurtosis-cdk-ref: ${{ needs.get-kurtosis-cdk-commit.outputs.kurtosis-commit }} | |
| agglayer-e2e-ref: ae92165db92fcda4dd6bab323ab2b7b8fe579d82 | |
| 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" | |
| event-name: ${{ github.event_name }} | |
| 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@ae92165db92fcda4dd6bab323ab2b7b8fe579d82 | |
| secrets: inherit | |
| with: | |
| kurtosis-cdk-ref: ${{ needs.get-kurtosis-cdk-commit.outputs.kurtosis-commit }} | |
| agglayer-e2e-ref: ae92165db92fcda4dd6bab323ab2b7b8fe579d82 # main | |
| 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" | |
| event-name: ${{ github.event_name }} | |
| 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@ae92165db92fcda4dd6bab323ab2b7b8fe579d82 | |
| 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: ae92165db92fcda4dd6bab323ab2b7b8fe579d82 | |
| 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" | |
| event-name: ${{ github.event_name }} | |
| 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 | |
| if: always() && github.event_name == 'schedule' && github.ref == 'refs/heads/develop' | |
| 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@ae92165db92fcda4dd6bab323ab2b7b8fe579d82 | |
| secrets: inherit | |
| with: | |
| kurtosis-cdk-ref: ${{ needs.get-kurtosis-cdk-commit.outputs.kurtosis-commit }} | |
| agglayer-e2e-ref: ae92165db92fcda4dd6bab323ab2b7b8fe579d82 | |
| 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@ae92165db92fcda4dd6bab323ab2b7b8fe579d82 | |
| secrets: inherit | |
| with: | |
| kurtosis-cdk-ref: ${{ needs.get-kurtosis-cdk-commit.outputs.kurtosis-commit }} | |
| agglayer-e2e-ref: ae92165db92fcda4dd6bab323ab2b7b8fe579d82 | |
| 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> |