diff --git a/.github/workflows/ci-surge.yml b/.github/workflows/ci-surge.yml new file mode 100644 index 000000000000..87ff8b8c4688 --- /dev/null +++ b/.github/workflows/ci-surge.yml @@ -0,0 +1,167 @@ +name: "Surge Integration Tests" + +on: + pull_request: + types: [opened, synchronize, reopened, ready_for_review] + paths: + - "src/Nethermind/Nethermind.Taiko/**" + - ".github/workflows/ci-surge.yml" + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + integration_tests: + if: >- + ${{ github.event.pull_request.draft == false + && !startsWith(github.head_ref, 'release-please') }} + name: Integration tests + runs-on: [ubuntu-latest] + timeout-minutes: 45 + env: + SURGE_TAIKO_MONO_DIR: surge-taiko-mono + PACAYA_FORK_TAIKO_MONO_DIR: pacaya-fork-taiko-mono + SHASTA_FORK_TAIKO_MONO_DIR: shasta-fork-taiko-mono + + steps: + - name: Checkout Nethermind + uses: actions/checkout@v6 + + - name: Checkout surge-taiko-mono + uses: actions/checkout@v6 + with: + repository: NethermindEth/surge-taiko-mono + path: ${{ env.SURGE_TAIKO_MONO_DIR }} + ref: surge-shasta + + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 + + - name: Set up Go + uses: actions/setup-go@v6 + with: + go-version-file: ${{ env.SURGE_TAIKO_MONO_DIR }}/go.mod + cache: true + + - name: Install pnpm + uses: pnpm/action-setup@v4 + with: + version: 9 + run_install: false + + - name: Install Node.js + uses: actions/setup-node@v5 + with: + node-version: 20 + cache: pnpm + cache-dependency-path: ${{ env.SURGE_TAIKO_MONO_DIR }}/pnpm-lock.yaml + + - name: Install dependencies + working-directory: ${{ env.SURGE_TAIKO_MONO_DIR }} + shell: bash + run: pnpm install + + - name: Checkout Pacaya fork + uses: actions/checkout@v6 + with: + repository: NethermindEth/surge-taiko-mono + path: >- + ${{ format('{0}/{1}', env.SURGE_TAIKO_MONO_DIR, + env.PACAYA_FORK_TAIKO_MONO_DIR) }} + ref: jmadibekov/pacaya-dummy-verifiers-fix + + - name: Checkout Shasta fork + uses: actions/checkout@v6 + with: + repository: NethermindEth/surge-taiko-mono + path: >- + ${{ format('{0}/{1}', env.SURGE_TAIKO_MONO_DIR, + env.SHASTA_FORK_TAIKO_MONO_DIR) }} + ref: surge-alethia-protocol-v3.0.0 + + - name: Install pnpm dependencies for pacaya fork taiko-mono + working-directory: >- + ${{ format('{0}/{1}', env.SURGE_TAIKO_MONO_DIR, + env.PACAYA_FORK_TAIKO_MONO_DIR) }} + run: cd ./packages/protocol && pnpm install + + - name: Install pnpm dependencies for shasta fork taiko-mono + working-directory: >- + ${{ format('{0}/{1}', env.SURGE_TAIKO_MONO_DIR, + env.SHASTA_FORK_TAIKO_MONO_DIR) }} + run: cd ./packages/protocol && pnpm install + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Docker Build Nethermind Client + run: | + image_name="nethermindeth/nethermind" + image_tag="${GITHUB_SHA:0:8}" + full_image="${image_name}:${image_tag}" + + echo "Building Docker image: ${full_image}" + + docker buildx build . \ + --platform linux/amd64 \ + -f Dockerfile \ + -t "${full_image}" \ + --load \ + --build-arg BUILD_CONFIG=release \ + --build-arg CI=true \ + --build-arg COMMIT_HASH=${{ github.sha }} \ + --build-arg SOURCE_DATE_EPOCH=$(git log -1 --format=%ct) + + echo "IMAGE_TAG=${full_image}" >> $GITHUB_ENV + + echo "Verifying image exists locally:" + docker images | grep "${image_name}" | grep "${image_tag}" || (echo "Error: Image not found locally" && exit 1) + + - name: Install yq + run: | + sudo wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 + sudo chmod +x /usr/local/bin/yq + yq --version + + - name: Update taiko-client docker-compose.yml with new image + working-directory: >- + ${{ env.SURGE_TAIKO_MONO_DIR }}/packages/taiko-client/internal/docker/nodes + run: | + docker_compose_file="docker-compose.yml" + if [ -f "$docker_compose_file" ]; then + echo "Current image in docker-compose.yml:" + yq eval '.services.l2_nmc.image' "$docker_compose_file" + + echo "Updating docker-compose.yml with image: ${IMAGE_TAG}" + yq eval '.services.l2_nmc.image = "'"${IMAGE_TAG}"'"' -i "$docker_compose_file" + + yq eval '.services.l2_nmc.pull_policy = "never"' -i "$docker_compose_file" + + echo "Updated image in docker-compose.yml:" + yq eval '.services.l2_nmc.image' "$docker_compose_file" + + echo "Pull policy set to:" + yq eval '.services.l2_nmc.pull_policy' "$docker_compose_file" + else + echo "Warning: docker-compose.yml not found at expected path" + exit 1 + fi + + - name: Run integration tests + working-directory: >- + ${{ env.SURGE_TAIKO_MONO_DIR }}/packages/taiko-client + env: + L2_NODE: l2_nmc + run: >- + SHASTA_FORK_TAIKO_MONO=${GITHUB_WORKSPACE}/${{ format('{0}/{1}', env.SURGE_TAIKO_MONO_DIR, env.SHASTA_FORK_TAIKO_MONO_DIR) }} + PACAYA_FORK_TAIKO_MONO=${GITHUB_WORKSPACE}/${{ format('{0}/{1}', env.SURGE_TAIKO_MONO_DIR, env.PACAYA_FORK_TAIKO_MONO_DIR) }} + make test + + - name: Codecov.io + uses: codecov/codecov-action@v5 + with: + files: ${{ env.SURGE_TAIKO_MONO_DIR }}/packages/taiko-client/coverage.out + flags: taiko-client + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/ci-taiko.yml b/.github/workflows/ci-taiko.yml index d01e20692415..2d92a38090aa 100644 --- a/.github/workflows/ci-taiko.yml +++ b/.github/workflows/ci-taiko.yml @@ -1,4 +1,4 @@ -name: "Nethermind/Ethereum Taiko Client CI Tests" +name: "Taiko Integration Tests" on: pull_request: @@ -18,25 +18,22 @@ jobs: && !startsWith(github.head_ref, 'release-please') }} name: Integration tests runs-on: [ubuntu-latest] - timeout-minutes: 30 + timeout-minutes: 45 env: - OLD_FORK_TAIKO_MONO_DIR: old-fork-taiko-mono - TAIKO_MONO_MAIN_DIR: taiko-mono-main + TAIKO_MONO_DIR: taiko-mono PACAYA_FORK_TAIKO_MONO_DIR: pacaya-fork-taiko-mono SHASTA_FORK_TAIKO_MONO_DIR: shasta-fork-taiko-mono - strategy: - matrix: - execution_node: [l2_nmc] - steps: - - uses: actions/checkout@v6 + - name: Checkout Nethermind + uses: actions/checkout@v6 - - uses: actions/checkout@v6 + - name: Checkout taiko-mono + uses: actions/checkout@v6 with: - repository: NethermindEth/surge-taiko-mono - path: ${{ env.TAIKO_MONO_MAIN_DIR }} - ref: surge-shasta + repository: taikoxyz/taiko-mono + path: ${{ env.TAIKO_MONO_DIR }} + ref: main - name: Install Foundry uses: foundry-rs/foundry-toolchain@v1 @@ -44,14 +41,9 @@ jobs: - name: Set up Go uses: actions/setup-go@v6 with: - go-version-file: ${{ env.TAIKO_MONO_MAIN_DIR }}/go.mod + go-version-file: ${{ env.TAIKO_MONO_DIR }}/go.mod cache: true - - name: Set up Git to use HTTPS - shell: bash - run: | - git config --global url."https://github.com/".insteadOf "git@github.com:" - - name: Install pnpm uses: pnpm/action-setup@v4 with: @@ -63,38 +55,40 @@ jobs: with: node-version: 20 cache: pnpm - cache-dependency-path: ${{ env.TAIKO_MONO_MAIN_DIR }}/pnpm-lock.yaml + cache-dependency-path: ${{ env.TAIKO_MONO_DIR }}/pnpm-lock.yaml - name: Install dependencies - working-directory: ${{ env.TAIKO_MONO_MAIN_DIR }} + working-directory: ${{ env.TAIKO_MONO_DIR }} shell: bash run: pnpm install - - uses: actions/checkout@v6 + - name: Checkout Pacaya fork + uses: actions/checkout@v6 with: repository: taikoxyz/taiko-mono path: >- - ${{ format('{0}/{1}', env.TAIKO_MONO_MAIN_DIR, + ${{ format('{0}/{1}', env.TAIKO_MONO_DIR, env.PACAYA_FORK_TAIKO_MONO_DIR) }} ref: taiko-alethia-protocol-v2.3.0-devnet-shasta-test - - uses: actions/checkout@v6 + - name: Checkout Shasta fork + uses: actions/checkout@v6 with: repository: taikoxyz/taiko-mono path: >- - ${{ format('{0}/{1}', env.TAIKO_MONO_MAIN_DIR, + ${{ format('{0}/{1}', env.TAIKO_MONO_DIR, env.SHASTA_FORK_TAIKO_MONO_DIR) }} ref: taiko-alethia-protocol-v3.0.0 - name: Install pnpm dependencies for pacaya fork taiko-mono working-directory: >- - ${{ format('{0}/{1}', env.TAIKO_MONO_MAIN_DIR, + ${{ format('{0}/{1}', env.TAIKO_MONO_DIR, env.PACAYA_FORK_TAIKO_MONO_DIR) }} run: cd ./packages/protocol && pnpm install - name: Install pnpm dependencies for shasta fork taiko-mono working-directory: >- - ${{ format('{0}/{1}', env.TAIKO_MONO_MAIN_DIR, + ${{ format('{0}/{1}', env.TAIKO_MONO_DIR, env.SHASTA_FORK_TAIKO_MONO_DIR) }} run: cd ./packages/protocol && pnpm install @@ -132,7 +126,7 @@ jobs: - name: Update taiko-client docker-compose.yml with new image working-directory: >- - ${{ env.TAIKO_MONO_MAIN_DIR }}/packages/taiko-client/internal/docker/nodes + ${{ env.TAIKO_MONO_DIR }}/packages/taiko-client/internal/docker/nodes run: | docker_compose_file="docker-compose.yml" if [ -f "$docker_compose_file" ]; then @@ -154,20 +148,20 @@ jobs: exit 1 fi - - name: Run Tests on ${{ matrix.execution_node }} execution engine + - name: Run integration tests working-directory: >- - ${{ env.TAIKO_MONO_MAIN_DIR }}/packages/taiko-client + ${{ env.TAIKO_MONO_DIR }}/packages/taiko-client env: - L2_NODE: ${{ matrix.execution_node }} + L2_NODE: l2_nmc run: >- - SHASTA_FORK_TAIKO_MONO=${GITHUB_WORKSPACE}/${{ format('{0}/{1}', env.TAIKO_MONO_MAIN_DIR, env.SHASTA_FORK_TAIKO_MONO_DIR) }} - PACAYA_FORK_TAIKO_MONO=${GITHUB_WORKSPACE}/${{ format('{0}/{1}', env.TAIKO_MONO_MAIN_DIR, env.PACAYA_FORK_TAIKO_MONO_DIR) }} + SHASTA_FORK_TAIKO_MONO=${GITHUB_WORKSPACE}/${{ format('{0}/{1}', env.TAIKO_MONO_DIR, env.SHASTA_FORK_TAIKO_MONO_DIR) }} + PACAYA_FORK_TAIKO_MONO=${GITHUB_WORKSPACE}/${{ format('{0}/{1}', env.TAIKO_MONO_DIR, env.PACAYA_FORK_TAIKO_MONO_DIR) }} make test - name: Codecov.io uses: codecov/codecov-action@v5 with: - files: ${{ env.TAIKO_MONO_MAIN_DIR }}/packages/taiko-client/coverage.out + files: ${{ env.TAIKO_MONO_DIR }}/packages/taiko-client/coverage.out flags: taiko-client env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}