diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index a6553852a..c0901ea6f 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,13 +1,8 @@ ## ๐Ÿ”„ Changes Summary - [Brief description of what was added, fixed, or changed in this PR] -## โš ๏ธ Breaking Changes -- ๐Ÿ› ๏ธ **Config**: [Optional: Changes to TOML config] -- ๐Ÿ”Œ **API/CLI**: [Optional: Breaking interface changes] -- ๐Ÿ—‘๏ธ **Deprecated Features**: [Optional: Removed features] - ## ๐Ÿ“‹ Config Updates -- ๐Ÿงพ **Diff/Config snippet**: [Optional: Enumerate config changes/provide snippet of changes] +CONFIG-CHANGE: [Optional: Enumerate config changes/provide snippet of changes] ## โœ… Testing - ๐Ÿค– **Automatic**: [Optional: Enumerate E2E tests] @@ -21,3 +16,6 @@ ## ๐Ÿ“ Notes - [Optional: design decisions, tradeoffs, or TODOs] + +## โš ๏ธ Breaking Changes +BREAKING-CHANGE: [Optional: Enumerate breaking changes] diff --git a/.github/RELEASE_TEMPLATE.md b/.github/RELEASE_TEMPLATE.md deleted file mode 100644 index 2269db344..000000000 --- a/.github/RELEASE_TEMPLATE.md +++ /dev/null @@ -1,16 +0,0 @@ -## ๐Ÿš€ What's New -- [Brief description of new features] - -## โš ๏ธ Breaking Changes -- ๐Ÿ› ๏ธ **Config**: [Optional: Changes to TOML config] -- ๐Ÿ”Œ **API/CLI**: [Optional: Breaking interface changes] -- ๐Ÿ—‘๏ธ **Deprecated Features**: [Optional: Removed features] - -## ๐Ÿ“‹ Configuration Updates -- ๐Ÿงพ **Config Diff**: [Link to diff showing configuration changes] - -## โœ… Testing & Validation -- **Test cases**: [Link to added e2e test cases] - -## ๐Ÿ“ฆ Full Changelog -[Auto-generated PR list and detailed changes] \ No newline at end of file diff --git a/.github/workflows/govulncheck.yml b/.github/workflows/govulncheck.yml deleted file mode 100644 index 8c3833c9a..000000000 --- a/.github/workflows/govulncheck.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: Go Vulnerability Check - -on: [push] - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -jobs: - govulncheck_job: - runs-on: ubuntu-latest - name: Run govulncheck - steps: - - id: govulncheck - uses: golang/govulncheck-action@v1 - with: - go-version-input: 1.25.0 - go-package: ./... diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7fac1aa0b..b4f4c1da7 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,177 +1,282 @@ name: Release on: - push: - tags: - - "v*.*.*" - - "v*.*.*-*" + push: + branches: + - feat/ci-revamp + tags: + - "v*.*.*" + - "v*.*.*-*" concurrency: - group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} - cancel-in-progress: true + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true permissions: - contents: write - packages: write + contents: write + packages: write + id-token: write env: - REGISTRY: ghcr.io - REGISTRY_IMAGE: ghcr.io/${{ github.repository }} - REGEX_IMAGE: ${{ github.repository }}:\\d+.\\d+.\\d+ + REGISTRY: ghcr.io + REGISTRY_IMAGE: ghcr.io/${{ github.repository }} + REGEX_IMAGE: ${{ github.repository }}:\\d+.\\d+.\\d+ jobs: - build: - runs-on: amd-runner-2204 - strategy: - fail-fast: false - matrix: - platform: - - linux/amd64 - - linux/arm64 - variant: - - { suffix: "", include_shell: "false", description: "production" } - - { - suffix: "-dev", - include_shell: "true", - description: "development", - } - outputs: - IMAGE_NAME_PROD: ${{ steps.image_builder_prod.outputs.IMAGE }} - IMAGE_NAME_DEV: ${{ steps.image_builder_dev.outputs.IMAGE }} - TAGS_PROD: ${{ steps.meta_prod.outputs.tags }} - TAGS_DEV: ${{ steps.meta_dev.outputs.tags }} - VERSION: ${{ steps.meta_prod.outputs.version }} - steps: - - name: Prepare - run: | - platform=${{ matrix.platform }} - echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV - VARIANT_SUFFIX="${{ matrix.variant.suffix }}" - echo "VARIANT_SUFFIX=$VARIANT_SUFFIX" >> $GITHUB_ENV - PLATFORM_VARIANT="${platform//\//-}${VARIANT_SUFFIX}" - echo "PLATFORM_VARIANT=$PLATFORM_VARIANT" >> $GITHUB_ENV - - - name: Checkout - uses: actions/checkout@v5 - - - name: Docker meta (prod) - id: meta_prod - if: matrix.variant.suffix == '' - uses: docker/metadata-action@v5 - with: - images: ${{ env.REGISTRY_IMAGE }} - tags: | - type=ref,event=branch - type=ref,event=pr - type=semver,pattern={{version}} - type=semver,pattern={{major}}.{{minor}} - - - name: Docker meta (dev) - id: meta_dev - if: matrix.variant.suffix != '' - uses: docker/metadata-action@v5 - with: - images: ${{ env.REGISTRY_IMAGE }} - tags: | - type=ref,event=branch,suffix=-dev - type=ref,event=pr,suffix=-dev - type=semver,pattern={{version}}-dev - type=semver,pattern={{major}}.{{minor}}-dev - - - name: Image name builder (prod) - id: image_builder_prod - if: matrix.variant.suffix == '' - run: | - IMAGE=$(jq -ecr '.tags | map(select(match("${{ env.REGEX_IMAGE }}", "i"))) | first| sub(":.*$";"")' <<< "$DOCKER_METADATA_OUTPUT_JSON") - echo "IMAGE=$IMAGE" >> $GITHUB_OUTPUT - - - name: Image name builder (dev) - id: image_builder_dev - if: matrix.variant.suffix != '' - run: | - IMAGE=$(jq -ecr '.tags | map(select(match("${{ env.REGEX_IMAGE }}-dev", "i"))) | first| sub(":.*$";"")' <<< "$DOCKER_METADATA_OUTPUT_JSON") - echo "IMAGE=$IMAGE" >> $GITHUB_OUTPUT - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Login to Docker Hub - uses: docker/login-action@v3 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Build and push by digest - id: build - uses: docker/build-push-action@v6 - with: - context: . - push: false - platforms: ${{ matrix.platform }} - labels: ${{ (matrix.variant.suffix == '') && steps.meta_prod.outputs.labels || steps.meta_dev.outputs.labels }} - cache-from: type=gha - cache-to: type=gha,mode=max - build-args: | - INCLUDE_SHELL=${{ matrix.variant.include_shell }} - outputs: type=image,name=${{ (matrix.variant.suffix == '') && steps.image_builder_prod.outputs.IMAGE || steps.image_builder_dev.outputs.IMAGE }},push-by-digest=true,push=true - - - name: Export digest - run: | - mkdir -p /tmp/digests - digest="${{ steps.build.outputs.digest }}" - touch "/tmp/digests/${digest#sha256:}.${{ env.PLATFORM_VARIANT }}" - - - name: Upload digest - uses: actions/upload-artifact@v4 - with: - name: digests-${{ env.PLATFORM_VARIANT }} - path: /tmp/digests/* - if-no-files-found: error - retention-days: 1 - - merge: - runs-on: arm-runner-2204 - needs: - - build - strategy: - matrix: - variant: - - { suffix: "", description: "production" } - - { suffix: "-dev", description: "development" } - steps: - - name: Download digests - uses: actions/download-artifact@v4 - with: - path: /tmp/digests - pattern: digests-*${{ matrix.variant.suffix }} - merge-multiple: true - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Login to Docker Hub - uses: docker/login-action@v3 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Create manifest list and push - working-directory: /tmp/digests - run: | - IMAGE_NAME="${{ (matrix.variant.suffix == '') && needs.build.outputs.IMAGE_NAME_PROD || needs.build.outputs.IMAGE_NAME_DEV }}" - TAGS="${{ (matrix.variant.suffix == '') && needs.build.outputs.TAGS_PROD || needs.build.outputs.TAGS_DEV }}" - docker buildx imagetools create $(jq -cRr 'split("\n") | map(gsub("\\s+";"")) | map("-t "+ .) | join(" ")' <<< "$TAGS") \ - $(for f in *${{ matrix.variant.suffix }}; do echo "${IMAGE_NAME}@sha256:${f%%.*}"; done) - - - name: Inspect image - run: | - IMAGE_NAME="${{ (matrix.variant.suffix == '') && needs.build.outputs.IMAGE_NAME_PROD || needs.build.outputs.IMAGE_NAME_DEV }}" - TAGS="${{ (matrix.variant.suffix == '') && needs.build.outputs.TAGS_PROD || needs.build.outputs.TAGS_DEV }}" - # Use the first tag for inspection - FIRST_TAG=$(echo "$TAGS" | head -n1) - docker buildx imagetools inspect "$FIRST_TAG" + setup: + runs-on: ubuntu-latest + env: + GH_TOKEN: ${{ github.token }} + outputs: + release-id: ${{ steps.create-release.outputs.release-id }} + steps: + - name: Checkout + uses: actions/checkout@v5 + with: + fetch-depth: 0 # Needed for git-cliff to access commit history + + # Step 2: Parse test configuration + - name: Parse test configuration + id: parse-config + run: | + echo "๐Ÿ“‹ Parsing test configuration..." + + # Parse the test configuration and extract test names + TEST_NAMES=$(echo '${{ env.TEST_CONFIG }}' | jq -r '.[].name') + + # Create the test configuration output + echo "test-config<> $GITHUB_OUTPUT + echo '${{ env.TEST_CONFIG }}' >> $GITHUB_OUTPUT + echo "EOF" >> $GITHUB_OUTPUT + + echo "โœ… Test configuration parsed" + echo "Test names:" + echo "$TEST_NAMES" + + # Step 1: Set up git-cliff + - name: Setup git-cliff + uses: kenji-miyake/setup-git-cliff@v1 + + # Step 2: Generate dynamic release notes template + - name: Generate release notes + id: generate-notes + run: | + TAG_VERSION="${{ github.ref_name }}" + + echo "๐Ÿ“ Generating release notes for $TAG_VERSION..." + + # Generate release notes with git-cliff + git-cliff --latest --output release_notes.md + echo "โœ… Release notes generated" + + # Step 3: Create pre-release + - name: Create pre-release + id: create-release + run: | + TAG_VERSION="${{ github.ref_name }}" + + echo "๐Ÿ“ฆ Creating pre-release: $TAG_VERSION" + + # Get previous tag for comparison link + PREVIOUS_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "") + + # Read the generated release notes + RELEASE_NOTES=$(cat release_notes.md) + + # Add header with tag comparison link if we have a previous tag + if [ -n "$PREVIOUS_TAG" ] && [ "$PREVIOUS_TAG" != "$TAG_VERSION" ]; then + HEADER="**Full Changelog**: [\`$PREVIOUS_TAG...$TAG_VERSION\`](https://github.com/${{ github.repository }}/compare/$PREVIOUS_TAG...$TAG_VERSION)"$'\n\n' + else + HEADER="**Full Changelog**: [View all commits](https://github.com/${{ github.repository }}/commits/$TAG_VERSION)"$'\n\n' + fi + + FULL_NOTES="$HEADER$RELEASE_NOTES" + + # Create pre-release using git-cliff generated notes + RELEASE_DATA=$(gh api repos/${{ github.repository }}/releases \ + --method POST \ + --field tag_name="$TAG_VERSION" \ + --field name="$TAG_VERSION" \ + --field body="$FULL_NOTES" \ + --field draft=true \ + --field prerelease=true) + + RELEASE_ID=$(echo "$RELEASE_DATA" | jq -r '.id') + echo "release-id=$RELEASE_ID" >> $GITHUB_OUTPUT + echo "โœ… Created pre-release: $TAG_VERSION (ID: $RELEASE_ID)" + + # Dynamic test jobs - calling reusable workflows as black boxes + unit-tests: + needs: setup + uses: ./.github/workflows/test-unit.yml + secrets: inherit + + integration-tests: + needs: setup + uses: ./.github/workflows/test-e2e.yml + + security-scan: + needs: setup + uses: ./.github/workflows/test-security.yml + + build: + runs-on: amd-runner-2204 + needs: [setup, unit-tests, security-scan, integration-tests] + if: needs.setup.outputs.version-changed == 'true' && needs.unit-tests.result == 'success' && needs.integration-tests.result == 'success' && needs.security-scan.result == 'success' + strategy: + fail-fast: false + matrix: + platform: + - linux/amd64 + - linux/arm64 + variant: + - { + suffix: "", + include_shell: "false", + description: "production", + } + - { + suffix: "-dev", + include_shell: "true", + description: "development", + } + outputs: + IMAGE_NAME_PROD: ${{ steps.image_builder_prod.outputs.IMAGE }} + IMAGE_NAME_DEV: ${{ steps.image_builder_dev.outputs.IMAGE }} + TAGS_PROD: ${{ steps.meta_prod.outputs.tags }} + TAGS_DEV: ${{ steps.meta_dev.outputs.tags }} + VERSION: ${{ steps.meta_prod.outputs.version }} + steps: + - name: Prepare + run: | + platform=${{ matrix.platform }} + echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV + VARIANT_SUFFIX="${{ matrix.variant.suffix }}" + echo "VARIANT_SUFFIX=$VARIANT_SUFFIX" >> $GITHUB_ENV + PLATFORM_VARIANT="${platform//\//-}${VARIANT_SUFFIX}" + echo "PLATFORM_VARIANT=$PLATFORM_VARIANT" >> $GITHUB_ENV + + - name: Checkout + uses: actions/checkout@v5 + + - name: Docker meta (prod) + id: meta_prod + if: matrix.variant.suffix == '' + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY_IMAGE }} + tags: | + type=ref,event=branch + type=ref,event=pr + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + + - name: Docker meta (dev) + id: meta_dev + if: matrix.variant.suffix != '' + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY_IMAGE }} + tags: | + type=ref,event=branch,suffix=-dev + type=ref,event=pr,suffix=-dev + type=semver,pattern={{version}}-dev + type=semver,pattern={{major}}.{{minor}}-dev + + - name: Image name builder (prod) + id: image_builder_prod + if: matrix.variant.suffix == '' + run: | + IMAGE=$(jq -ecr '.tags | map(select(match("${{ env.REGEX_IMAGE }}", "i"))) | first| sub(":.*$";"")' <<< "$DOCKER_METADATA_OUTPUT_JSON") + echo "IMAGE=$IMAGE" >> $GITHUB_OUTPUT + + - name: Image name builder (dev) + id: image_builder_dev + if: matrix.variant.suffix != '' + run: | + IMAGE=$(jq -ecr '.tags | map(select(match("${{ env.REGEX_IMAGE }}-dev", "i"))) | first| sub(":.*$";"")' <<< "$DOCKER_METADATA_OUTPUT_JSON") + echo "IMAGE=$IMAGE" >> $GITHUB_OUTPUT + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push by digest + id: build + uses: docker/build-push-action@v6 + with: + context: . + push: false + platforms: ${{ matrix.platform }} + labels: ${{ (matrix.variant.suffix == '') && steps.meta_prod.outputs.labels || steps.meta_dev.outputs.labels }} + cache-from: type=gha + cache-to: type=gha,mode=max + build-args: | + INCLUDE_SHELL=${{ matrix.variant.include_shell }} + outputs: type=image,name=${{ (matrix.variant.suffix == '') && steps.image_builder_prod.outputs.IMAGE || steps.image_builder_dev.outputs.IMAGE }},push-by-digest=true,push=true + + - name: Export digest + run: | + mkdir -p /tmp/digests + digest="${{ steps.build.outputs.digest }}" + touch "/tmp/digests/${digest#sha256:}.${{ env.PLATFORM_VARIANT }}" + + - name: Upload digest + uses: actions/upload-artifact@v4 + with: + name: digests-${{ env.PLATFORM_VARIANT }} + path: /tmp/digests/* + if-no-files-found: error + retention-days: 1 + + merge: + runs-on: arm-runner-2204 + needs: + - build + strategy: + matrix: + variant: + - { suffix: "", description: "production" } + - { suffix: "-dev", description: "development" } + steps: + - name: Download digests + uses: actions/download-artifact@v4 + with: + path: /tmp/digests + pattern: digests-*${{ matrix.variant.suffix }} + merge-multiple: true + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Create manifest list and push + working-directory: /tmp/digests + run: | + IMAGE_NAME="${{ (matrix.variant.suffix == '') && needs.build.outputs.IMAGE_NAME_PROD || needs.build.outputs.IMAGE_NAME_DEV }}" + TAGS="${{ (matrix.variant.suffix == '') && needs.build.outputs.TAGS_PROD || needs.build.outputs.TAGS_DEV }}" + docker buildx imagetools create $(jq -cRr 'split("\n") | map(gsub("\\s+";"")) | map("-t "+ .) | join(" ")' <<< "$TAGS") \ + $(for f in *${{ matrix.variant.suffix }}; do echo "${IMAGE_NAME}@sha256:${f%%.*}"; done) + + - name: Inspect image + run: | + IMAGE_NAME="${{ (matrix.variant.suffix == '') && needs.build.outputs.IMAGE_NAME_PROD || needs.build.outputs.IMAGE_NAME_DEV }}" + TAGS="${{ (matrix.variant.suffix == '') && needs.build.outputs.TAGS_PROD || needs.build.outputs.TAGS_DEV }}" + # Use the first tag for inspection + FIRST_TAG=$(echo "$TAGS" | head -n1) + docker buildx imagetools inspect "$FIRST_TAG" diff --git a/.github/workflows/test-e2e.yml b/.github/workflows/test-e2e.yml index fbad3e3be..4e5d7ef9c 100644 --- a/.github/workflows/test-e2e.yml +++ b/.github/workflows/test-e2e.yml @@ -4,330 +4,331 @@ name: Bats E2E Tests on: - push: - branches: - - "**" - schedule: - # Run every 24 hours at 00:00 UTC - - cron: "0 0 * * *" - workflow_dispatch: {} + push: + branches: + - "**" + schedule: + # Run every 24 hours at 00:00 UTC + - cron: "0 0 * * *" + workflow_dispatch: {} + workflow_call: {} concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true + group: test-e2e-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true env: - AGGKIT_REPORT_CHANNEL: "C092K6Z0EUT" + AGGKIT_REPORT_CHANNEL: "C092K6Z0EUT" permissions: - packages: write - id-token: write - contents: read + 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 + 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="f84ec739ff66d09caa584e887edc7942dc9a1a9a" - echo "Using fixed kurtosis-cdk commit: ${COMMIT}" - fi - echo "commit=${COMMIT}" >> $GITHUB_OUTPUT + 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="f84ec739ff66d09caa584e887edc7942dc9a1a9a" + 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.x - docker-image-name: aggkit + build-aggkit-image: + uses: ./.github/workflows/build-aggkit-image.yml + with: + go-version: 1.25.x + 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 (fork 12, pessimistic) - kurtosis-cdk-args-single-fork12-pessimistic: ${{ steps.read-args.outputs.fork12_pessimistic_args }} - # single l2 network (fork 12, global index pp old contracts) - kurtosis-cdk-args-single-fork12-global-index-pp-old-contracts: ${{ steps.read-args.outputs.fork12_global_index_pp_old_contracts_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 + 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 (fork 12, pessimistic) + kurtosis-cdk-args-single-fork12-pessimistic: ${{ steps.read-args.outputs.fork12_pessimistic_args }} + # single l2 network (fork 12, global index pp old contracts) + kurtosis-cdk-args-single-fork12-global-index-pp-old-contracts: ${{ steps.read-args.outputs.fork12_global_index_pp_old_contracts_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: | - # single l2 network (fork 12, op-succinct) - CONTENT=$(cat ./.github/test_e2e_single_chain_op_succinct_args.json | jq -c .) - echo "op_succinct_args=${CONTENT}" >> $GITHUB_OUTPUT - # single l2 network (fork 12, op-succinct with aggoracle committee) - CONTENT=$(cat ./.github/test_e2e_single_chain_op_succinct_aggoracle_committee_args.json | jq -c .) - echo "op_succinct_aggoracle_committee_args=${CONTENT}" >> $GITHUB_OUTPUT - # single l2 network (fork 12, pessimistic) - CONTENT=$(jq -s '.[0] * .[1]' ./.github/test_e2e_cdk_args_base.json ./.github/test_e2e_gas_token_enabled_args.json | jq -c .) - echo "fork12_pessimistic_args=${CONTENT}" >> $GITHUB_OUTPUT - # single l2 network (fork 12, global index pp old contracts) - CONTENT=$(jq -s '.[0] * .[1]' ./.github/test_e2e_cdk_args_base.json ./.github/test_e2e_cdk_args_global_index_pp_old_contracts.json | jq -c .) - echo "fork12_global_index_pp_old_contracts_args=${CONTENT}" >> $GITHUB_OUTPUT - # multi l2 networks - CONTENT=$(cat ./.github/test_e2e_cdk_args_base.json | jq -c .) - echo "kurtosis-cdk-args-1=${CONTENT}" >> $GITHUB_OUTPUT - CONTENT=$(jq -s '.[0] * .[1]' ./.github/test_e2e_cdk_args_base.json ./.github/test_e2e_multi_chains_args_2.json | jq -c .) - echo "kurtosis-cdk-args-2=${CONTENT}" >> $GITHUB_OUTPUT - # Merge base_1 args with args_3 for kurtosis-cdk-args-3 - CONTENT=$(jq -s '.[0] * .[1]' ./.github/test_e2e_cdk_args_base.json ./.github/test_e2e_gas_token_enabled_args.json | jq -c .) - echo "kurtosis-cdk-args-3=${CONTENT}" >> $GITHUB_OUTPUT - # Merge base_2 args with args_4 for kurtosis-cdk-args-4 - CONTENT=$(jq -s '.[0] * .[1] * .[2]' ./.github/test_e2e_cdk_args_base.json ./.github/test_e2e_multi_chains_args_2.json ./.github/test_e2e_gas_token_enabled_args.json | jq -c .) - echo "kurtosis-cdk-args-4=${CONTENT}" >> $GITHUB_OUTPUT - # Merge base_2 args with args_5 for kurtosis-cdk-args-5 - CONTENT=$(jq -s '.[0] * .[1] * .[2]' ./.github/test_e2e_cdk_args_base.json ./.github/test_e2e_multi_chains_args_2.json ./.github/test_e2e_multi_chains_args_3.json | jq -c .) - echo "kurtosis-cdk-args-5=${CONTENT}" >> $GITHUB_OUTPUT + - name: Read kurtosis-cdk-args from file + id: read-args + run: | + # single l2 network (fork 12, op-succinct) + CONTENT=$(cat ./.github/test_e2e_single_chain_op_succinct_args.json | jq -c .) + echo "op_succinct_args=${CONTENT}" >> $GITHUB_OUTPUT + # single l2 network (fork 12, op-succinct with aggoracle committee) + CONTENT=$(cat ./.github/test_e2e_single_chain_op_succinct_aggoracle_committee_args.json | jq -c .) + echo "op_succinct_aggoracle_committee_args=${CONTENT}" >> $GITHUB_OUTPUT + # single l2 network (fork 12, pessimistic) + CONTENT=$(jq -s '.[0] * .[1]' ./.github/test_e2e_cdk_args_base.json ./.github/test_e2e_gas_token_enabled_args.json | jq -c .) + echo "fork12_pessimistic_args=${CONTENT}" >> $GITHUB_OUTPUT + # single l2 network (fork 12, global index pp old contracts) + CONTENT=$(jq -s '.[0] * .[1]' ./.github/test_e2e_cdk_args_base.json ./.github/test_e2e_cdk_args_global_index_pp_old_contracts.json | jq -c .) + echo "fork12_global_index_pp_old_contracts_args=${CONTENT}" >> $GITHUB_OUTPUT + # multi l2 networks + CONTENT=$(cat ./.github/test_e2e_cdk_args_base.json | jq -c .) + echo "kurtosis-cdk-args-1=${CONTENT}" >> $GITHUB_OUTPUT + CONTENT=$(jq -s '.[0] * .[1]' ./.github/test_e2e_cdk_args_base.json ./.github/test_e2e_multi_chains_args_2.json | jq -c .) + echo "kurtosis-cdk-args-2=${CONTENT}" >> $GITHUB_OUTPUT + # Merge base_1 args with args_3 for kurtosis-cdk-args-3 + CONTENT=$(jq -s '.[0] * .[1]' ./.github/test_e2e_cdk_args_base.json ./.github/test_e2e_gas_token_enabled_args.json | jq -c .) + echo "kurtosis-cdk-args-3=${CONTENT}" >> $GITHUB_OUTPUT + # Merge base_2 args with args_4 for kurtosis-cdk-args-4 + CONTENT=$(jq -s '.[0] * .[1] * .[2]' ./.github/test_e2e_cdk_args_base.json ./.github/test_e2e_multi_chains_args_2.json ./.github/test_e2e_gas_token_enabled_args.json | jq -c .) + echo "kurtosis-cdk-args-4=${CONTENT}" >> $GITHUB_OUTPUT + # Merge base_2 args with args_5 for kurtosis-cdk-args-5 + CONTENT=$(jq -s '.[0] * .[1] * .[2]' ./.github/test_e2e_cdk_args_base.json ./.github/test_e2e_multi_chains_args_2.json ./.github/test_e2e_multi_chains_args_3.json | jq -c .) + echo "kurtosis-cdk-args-5=${CONTENT}" >> $GITHUB_OUTPUT - 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.x - - 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 + 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.x + - 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-fork12-pessimistic: - name: Single L2 chain tests (pessimistic) - needs: - - build-aggkit-image - - read-aggkit-args - - get-kurtosis-cdk-commit - uses: agglayer/e2e/.github/workflows/aggkit-e2e-single-chain.yml@b89e67587388ddf57c992b9113b28ef1d90ee8ef - secrets: inherit - with: - kurtosis-cdk-ref: ${{ needs.get-kurtosis-cdk-commit.outputs.kurtosis-commit }} - agglayer-e2e-ref: b89e67587388ddf57c992b9113b28ef1d90ee8ef - kurtosis-cdk-enclave-name: aggkit - kurtosis-cdk-args: ${{ needs.read-aggkit-args.outputs.kurtosis-cdk-args-single-fork12-pessimistic }} - test-name: "test-single-l2-network-fork12-pessimistic" - event-name: ${{ github.event_name }} + test-single-l2-network-fork12-pessimistic: + name: Single L2 chain tests (pessimistic) + needs: + - build-aggkit-image + - read-aggkit-args + - get-kurtosis-cdk-commit + uses: agglayer/e2e/.github/workflows/aggkit-e2e-single-chain.yml@b89e67587388ddf57c992b9113b28ef1d90ee8ef + secrets: inherit + with: + kurtosis-cdk-ref: ${{ needs.get-kurtosis-cdk-commit.outputs.kurtosis-commit }} + agglayer-e2e-ref: b89e67587388ddf57c992b9113b28ef1d90ee8ef + kurtosis-cdk-enclave-name: aggkit + kurtosis-cdk-args: ${{ needs.read-aggkit-args.outputs.kurtosis-cdk-args-single-fork12-pessimistic }} + test-name: "test-single-l2-network-fork12-pessimistic" + event-name: ${{ github.event_name }} - check-single-l2-network-fork12-pessimistic-tests-result: - name: Check results for single l2 network (pessimistic) - needs: - - test-single-l2-network-fork12-pessimistic - runs-on: ubuntu-latest - steps: - - run: exit 1 - if: ${{ contains(fromJSON('["failure", "cancelled"]'), needs.test-single-l2-network-fork12-pessimistic.result) }} + check-single-l2-network-fork12-pessimistic-tests-result: + name: Check results for single l2 network (pessimistic) + needs: + - test-single-l2-network-fork12-pessimistic + runs-on: ubuntu-latest + steps: + - run: exit 1 + if: ${{ contains(fromJSON('["failure", "cancelled"]'), needs.test-single-l2-network-fork12-pessimistic.result) }} - test-single-l2-network-fork12-global-index-pp-old-contracts: - name: Single L2 chain tests (global index pp old contracts) - needs: - - build-aggkit-image - - build-tools - - read-aggkit-args - - get-kurtosis-cdk-commit - uses: agglayer/e2e/.github/workflows/aggkit-e2e-single-chain.yml@b89e67587388ddf57c992b9113b28ef1d90ee8ef - secrets: inherit - if: always() && github.event_name == 'schedule' && github.ref == 'refs/heads/develop' - with: - kurtosis-cdk-ref: ${{ needs.get-kurtosis-cdk-commit.outputs.kurtosis-commit }} - agglayer-e2e-ref: b89e67587388ddf57c992b9113b28ef1d90ee8ef - kurtosis-cdk-enclave-name: aggkit - kurtosis-cdk-args: ${{ needs.read-aggkit-args.outputs.kurtosis-cdk-args-single-fork12-global-index-pp-old-contracts }} - test-name: "test-single-l2-network-fork12-global-index-pp-old-contracts" - aggsender-find-imported-bridge-artifact: aggsender_find_imported_bridge - event-name: ${{ github.event_name }} + test-single-l2-network-fork12-global-index-pp-old-contracts: + name: Single L2 chain tests (global index pp old contracts) + needs: + - build-aggkit-image + - build-tools + - read-aggkit-args + - get-kurtosis-cdk-commit + uses: agglayer/e2e/.github/workflows/aggkit-e2e-single-chain.yml@b89e67587388ddf57c992b9113b28ef1d90ee8ef + secrets: inherit + if: always() && github.event_name == 'schedule' && github.ref == 'refs/heads/develop' + with: + kurtosis-cdk-ref: ${{ needs.get-kurtosis-cdk-commit.outputs.kurtosis-commit }} + agglayer-e2e-ref: b89e67587388ddf57c992b9113b28ef1d90ee8ef + kurtosis-cdk-enclave-name: aggkit + kurtosis-cdk-args: ${{ needs.read-aggkit-args.outputs.kurtosis-cdk-args-single-fork12-global-index-pp-old-contracts }} + test-name: "test-single-l2-network-fork12-global-index-pp-old-contracts" + aggsender-find-imported-bridge-artifact: aggsender_find_imported_bridge + event-name: ${{ github.event_name }} - check-single-l2-network-fork12-global-index-pp-old-contracts-tests-result: - name: Check results for single l2 network (global index pp old contracts) - needs: - - test-single-l2-network-fork12-global-index-pp-old-contracts - if: always() && github.event_name == 'schedule' && github.ref == 'refs/heads/develop' - runs-on: ubuntu-latest - steps: - - run: exit 1 - if: ${{ contains(fromJSON('["failure", "cancelled"]'), needs.test-single-l2-network-fork12-global-index-pp-old-contracts.result) }} + check-single-l2-network-fork12-global-index-pp-old-contracts-tests-result: + name: Check results for single l2 network (global index pp old contracts) + needs: + - test-single-l2-network-fork12-global-index-pp-old-contracts + if: always() && github.event_name == 'schedule' && github.ref == 'refs/heads/develop' + runs-on: ubuntu-latest + steps: + - run: exit 1 + if: ${{ contains(fromJSON('["failure", "cancelled"]'), needs.test-single-l2-network-fork12-global-index-pp-old-contracts.result) }} - test-single-l2-network-op-succinct: - name: Single L2 chain tests (op-succinct) - needs: - - build-aggkit-image - - read-aggkit-args - - get-kurtosis-cdk-commit - uses: agglayer/e2e/.github/workflows/aggkit-e2e-single-chain.yml@b89e67587388ddf57c992b9113b28ef1d90ee8ef - secrets: inherit - with: - kurtosis-cdk-ref: ${{ needs.get-kurtosis-cdk-commit.outputs.kurtosis-commit }} - agglayer-e2e-ref: b89e67587388ddf57c992b9113b28ef1d90ee8ef - kurtosis-cdk-enclave-name: op - kurtosis-cdk-args: ${{ needs.read-aggkit-args.outputs.kurtosis-cdk-args-single-op-succinct }} - test-name: "test-single-l2-network-op-succinct" - event-name: ${{ github.event_name }} + test-single-l2-network-op-succinct: + name: Single L2 chain tests (op-succinct) + needs: + - build-aggkit-image + - read-aggkit-args + - get-kurtosis-cdk-commit + uses: agglayer/e2e/.github/workflows/aggkit-e2e-single-chain.yml@b89e67587388ddf57c992b9113b28ef1d90ee8ef + secrets: inherit + with: + kurtosis-cdk-ref: ${{ needs.get-kurtosis-cdk-commit.outputs.kurtosis-commit }} + agglayer-e2e-ref: b89e67587388ddf57c992b9113b28ef1d90ee8ef + kurtosis-cdk-enclave-name: op + kurtosis-cdk-args: ${{ needs.read-aggkit-args.outputs.kurtosis-cdk-args-single-op-succinct }} + 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) }} + 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 - - read-aggkit-args - - get-kurtosis-cdk-commit - uses: agglayer/e2e/.github/workflows/aggkit-e2e-single-chain.yml@b89e67587388ddf57c992b9113b28ef1d90ee8ef - secrets: inherit - if: always() && github.event_name == 'schedule' && github.ref == 'refs/heads/develop' - with: - kurtosis-cdk-ref: ${{ needs.get-kurtosis-cdk-commit.outputs.kurtosis-commit }} - agglayer-e2e-ref: b89e67587388ddf57c992b9113b28ef1d90ee8ef - 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 }} + test-single-l2-network-op-succinct-aggoracle-committee: + name: Single L2 chain tests (op-succinct with aggoracle committee) + needs: + - build-aggkit-image + - read-aggkit-args + - get-kurtosis-cdk-commit + uses: agglayer/e2e/.github/workflows/aggkit-e2e-single-chain.yml@b89e67587388ddf57c992b9113b28ef1d90ee8ef + secrets: inherit + if: always() && github.event_name == 'schedule' && github.ref == 'refs/heads/develop' + with: + kurtosis-cdk-ref: ${{ needs.get-kurtosis-cdk-commit.outputs.kurtosis-commit }} + agglayer-e2e-ref: b89e67587388ddf57c992b9113b28ef1d90ee8ef + 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 }} - 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 - if: always() && github.event_name == 'schedule' && github.ref == 'refs/heads/develop' - runs-on: ubuntu-latest - steps: - - run: exit 1 - if: ${{ contains(fromJSON('["failure", "cancelled"]'), needs.test-single-l2-network-op-succinct-aggoracle-committee.result) }} + 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 + if: always() && github.event_name == 'schedule' && github.ref == 'refs/heads/develop' + 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: - name: Multi chains E2E test (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@b89e67587388ddf57c992b9113b28ef1d90ee8ef - secrets: inherit - with: - kurtosis-cdk-ref: ${{ needs.get-kurtosis-cdk-commit.outputs.kurtosis-commit }} - agglayer-e2e-ref: b89e67587388ddf57c992b9113b28ef1d90ee8ef - 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-1 }} - kurtosis-cdk-args-2: ${{ needs.read-aggkit-args.outputs.kurtosis-cdk-args-2 }} + test-multi-l2-networks-2-chains: + name: Multi chains E2E test (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@b89e67587388ddf57c992b9113b28ef1d90ee8ef + secrets: inherit + with: + kurtosis-cdk-ref: ${{ needs.get-kurtosis-cdk-commit.outputs.kurtosis-commit }} + agglayer-e2e-ref: b89e67587388ddf57c992b9113b28ef1d90ee8ef + 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-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 (2 chains) - needs: - - test-multi-l2-networks-2-chains - runs-on: ubuntu-latest - steps: - - run: exit 1 - if: ${{ contains(fromJSON('["failure", "cancelled"]'), needs.test-multi-l2-networks-2-chains.result) }} + check-multi-l2-networks-2-chains-tests-result: + name: Check results for multi l2 networks (2 chains) + needs: + - test-multi-l2-networks-2-chains + runs-on: ubuntu-latest + steps: + - run: exit 1 + if: ${{ contains(fromJSON('["failure", "cancelled"]'), needs.test-multi-l2-networks-2-chains.result) }} - test-multi-l2-networks-3-chains: - name: Multi chains E2E test (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@b89e67587388ddf57c992b9113b28ef1d90ee8ef - secrets: inherit - if: always() && github.event_name == 'schedule' && github.ref == 'refs/heads/develop' - with: - kurtosis-cdk-ref: ${{ needs.get-kurtosis-cdk-commit.outputs.kurtosis-commit }} - agglayer-e2e-ref: b89e67587388ddf57c992b9113b28ef1d90ee8ef - 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 + test-multi-l2-networks-3-chains: + name: Multi chains E2E test (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@b89e67587388ddf57c992b9113b28ef1d90ee8ef + secrets: inherit + if: always() && github.event_name == 'schedule' && github.ref == 'refs/heads/develop' + with: + kurtosis-cdk-ref: ${{ needs.get-kurtosis-cdk-commit.outputs.kurtosis-commit }} + agglayer-e2e-ref: b89e67587388ddf57c992b9113b28ef1d90ee8ef + 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 (3 chains) - needs: - - test-multi-l2-networks-3-chains - 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-multi-l2-networks-3-chains.result) }} + check-multi-l2-networks-3-chains-tests-result: + name: Check results for multi l2 networks (3 chains) + needs: + - test-multi-l2-networks-3-chains + 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-multi-l2-networks-3-chains.result) }} - notify-slack: - name: Notify Slack - needs: - - test-single-l2-network-fork12-pessimistic - - test-single-l2-network-op-succinct - - test-single-l2-network-op-succinct-aggoracle-committee - - test-multi-l2-networks-2-chains - - test-multi-l2-networks-3-chains - - test-single-l2-network-fork12-global-index-pp-old-contracts - - 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 + notify-slack: + name: Notify Slack + needs: + - test-single-l2-network-fork12-pessimistic + - test-single-l2-network-op-succinct + - test-single-l2-network-op-succinct-aggoracle-committee + - test-multi-l2-networks-2-chains + - test-multi-l2-networks-3-chains + - test-single-l2-network-fork12-global-index-pp-old-contracts + - 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 }}` + Kurtosis CDK Commit: `${{ needs.get-kurtosis-cdk-commit.outputs.kurtosis-commit }}` - Test Results: - โ€ข Single L2 (pessimistic): ${{ needs.test-single-l2-network-fork12-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 (2 chains): ${{ needs.test-multi-l2-networks-2-chains.result == 'success' && '๐ŸŸข' || '๐Ÿ”ด' }} - โ€ข Multi L2 (3 chains): ${{ needs.test-multi-l2-networks-3-chains.result == 'success' && '๐ŸŸข' || '๐Ÿ”ด' }} - โ€ข Single L2 (global index pp old contracts): ${{ needs.test-single-l2-network-fork12-global-index-pp-old-contracts.result == 'success' && '๐ŸŸข' || '๐Ÿ”ด' }} + Test Results: + โ€ข Single L2 (pessimistic): ${{ needs.test-single-l2-network-fork12-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 (2 chains): ${{ needs.test-multi-l2-networks-2-chains.result == 'success' && '๐ŸŸข' || '๐Ÿ”ด' }} + โ€ข Multi L2 (3 chains): ${{ needs.test-multi-l2-networks-3-chains.result == 'success' && '๐ŸŸข' || '๐Ÿ”ด' }} + โ€ข Single L2 (global index pp old contracts): ${{ needs.test-single-l2-network-fork12-global-index-pp-old-contracts.result == 'success' && '๐ŸŸข' || '๐Ÿ”ด' }} - <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|View Workflow> + <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|View Workflow> diff --git a/.github/workflows/test-security.yml b/.github/workflows/test-security.yml new file mode 100644 index 000000000..7e59f06d2 --- /dev/null +++ b/.github/workflows/test-security.yml @@ -0,0 +1,20 @@ +name: Go Vulnerability Check + +on: + push: {} + workflow_call: {} + +concurrency: + group: test-security-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: false + +jobs: + govulncheck_job: + runs-on: ubuntu-latest + name: Run govulncheck + steps: + - id: govulncheck + uses: golang/govulncheck-action@v1 + with: + go-version-input: 1.25.0 + go-package: ./... diff --git a/.github/workflows/test-unit.yml b/.github/workflows/test-unit.yml index 1990c3a4a..cc9f41e0a 100644 --- a/.github/workflows/test-unit.yml +++ b/.github/workflows/test-unit.yml @@ -1,44 +1,45 @@ name: Test Unit and SonarCloud analysis on: - push: - branches: - - main - - develop - - 'release/**' - pull_request: - workflow_dispatch: {} + push: + branches: + - main + - develop + - "release/**" + pull_request: + workflow_dispatch: {} + workflow_call: {} concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true jobs: - test-unit: - strategy: - fail-fast: false - matrix: - go-version: [1.25.0] - goarch: ["amd64"] - runs-on: amd-runner-2204 - steps: - - name: Checkout code - uses: actions/checkout@v5 - with: - fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis + test-unit: + strategy: + fail-fast: false + matrix: + go-version: [1.25.0] + goarch: ["amd64"] + runs-on: amd-runner-2204 + steps: + - name: Checkout code + uses: actions/checkout@v5 + with: + fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis - - name: Install Go - uses: actions/setup-go@v5 - with: - go-version: ${{ matrix.go-version }} - env: - GOARCH: ${{ matrix.goarch }} + - name: Install Go + uses: actions/setup-go@v5 + with: + go-version: ${{ matrix.go-version }} + env: + GOARCH: ${{ matrix.goarch }} - - name: Test - run: make test-unit + - name: Test + run: make test-unit - - name: SonarQube Scan - uses: SonarSource/sonarqube-scan-action@v4.2.1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + - name: SonarQube Scan + uses: SonarSource/sonarqube-scan-action@v4.2.1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} diff --git a/cliff.toml b/cliff.toml new file mode 100644 index 000000000..ddb80361b --- /dev/null +++ b/cliff.toml @@ -0,0 +1,126 @@ +# git-cliff configuration file +# https://git-cliff.org/docs/configuration + +[changelog] +# changelog header +header = """ +# Changelog + +All notable changes to this project will be documented in this file. + +""" +# template for the changelog body +# config_change_commits is a list of commits that have a CONFIG-CHANGE footer +# and is built here instead of using a group so that the commits are still grouped +# in their original groups (a commit cannot be in multiple groups). +# https://keats.github.io/tera/docs/#introduction +body = """ + +{%- set breaking_commits = commits | filter(attribute="breaking", value=true) -%} +{%- set config_change_commits = [] -%} +{%- for commit in commits -%} + {%- for footer in commit.footers -%} + {%- if footer.token == 'CONFIG-CHANGE' -%} + {%- set_global config_change_commits = config_change_commits | concat(with=commit) -%} + {%- endif -%} + {%- endfor -%} +{%- endfor -%} + +## ๐Ÿš€ What's New +- [Brief description of new features] + +## โœ… Testing & Validation +[![Release](https://github.com/agglayer/aggkit/actions/workflows/release.yml/badge.svg?branch={{ version }})](https://github.com/agglayer/aggkit/actions/workflows/release.yml) + + + +{% if breaking_commits %} + ## โš ๏ธ Breaking Changes + {%- for commit in breaking_commits %} + {%- for line in commit.footers %} + {%- if line.breaking %} + - {{ line.value | trim }} + ***Original commit:*** {% if commit.type %}{{ commit.type }}{% endif -%}{% if commit.scope %}(_{{commit.scope}}_){% endif -%} {{ commit.message | trim }} + {%- endif %} + {%- endfor %} + {%- endfor %} +{%- endif %} + +{% if config_change_commits %} + ## ๐Ÿ“‹ Configuration Changes + {%- for commit in config_change_commits %} + {%- for line in commit.footers %} + {%- if line.token == 'CONFIG-CHANGE' %} + - {{ line.value | trim }} + ***Original commit:*** {% if commit.type %}{{ commit.type }}{% endif -%}{% if commit.scope %}(_{{commit.scope}}_){% endif -%} {{ commit.message | trim }} + {%- endif %} + {%- endfor %} + {%- endfor %} +{%- endif %} + +## ๐Ÿ“ฆ Full Changelog +{% for group, group_commits in commits | group_by(attribute="group") %} + ### {{ group | striptags | trim | upper_first }} + {% for commit in group_commits %} + - {% if commit.scope %}(_{{commit.scope}}_) {% endif -%} {{ commit.message | upper_first | trim }} + {%- endfor -%} +{% endfor %} +""" +# remove the leading and trailing whitespace from the templates +trim = true +# changelog footer +footer = """ + +""" +# postprocessors +postprocessors = [ + # { pattern = '', replace = "https://github.com/orhun/git-cliff" }, # replace repository URL +] + +[git] +# parse the commits based on https://www.conventionalcommits.org +conventional_commits = true +# filter out the commits that are not conventional +filter_unconventional = true +# process each line of a commit as an individual commit +split_commits = false +# regex for preprocessing the commit messages +commit_preprocessors = [ + # Replace issue numbers + #{ pattern = '\((\w+\s)?#([0-9]+)\)', replace = "([#${2}](/issues/${2}))"}, + # Check spelling of the commit with https://github.com/crate-ci/typos + # If the spelling is incorrect, it will be automatically fixed. + # { pattern = '.*', replace_command = 'typos --write-changes -' }, + # { pattern = '\-\s\[\s] I have .*', replace = "" }, +] +# regex for parsing and grouping commits +commit_parsers = [ + # Regular commit types - message-based grouping only + { message = "^feat", group = "๐Ÿš€ Features" }, + { message = "^fix", group = "๐Ÿ› Bug Fixes" }, + { message = "^doc", group = "๐Ÿ“š Documentation" }, + { message = "^perf", group = "โšก Performance" }, + { message = "^refactor", group = "๐Ÿšœ Refactor" }, + { message = "^style", group = "๐ŸŽจ Styling" }, + { message = "^test", group = "๐Ÿงช Testing" }, + { message = "^ci", group = "๐Ÿค– CI" }, + { message = "^chore", group = "โš™๏ธ Miscellaneous Tasks" }, + { message = "^\\[(.*)\\]", group = "๐Ÿ“ฆ Uncategorized" }, +] +# protect breaking changes from being skipped due to matching a skipping pattern +protect_breaking_commits = false +# filter out the commits that are not matched by commit parsers +filter_commits = true +# regex for matching git tags +# tag_pattern = "v[0-9].*" + +# regex for skipping tags +# skip_tags = "" +# regex for ignoring tags +# ignore_tags = "" +# sort the tags topologically +topo_order = false +# sort the commits inside sections by oldest/newest order +sort_commits = "oldest" +# limit the number of commits included in the changelog. +# limit_commits = 42