name: Sim merge execution/builder tests

on:
  push:
    # We intentionally don't run push on feature branches. See PR for rational.
    branches: [unstable, stable]
  pull_request:
  workflow_dispatch:

env:
  GETH_IMAGE: ethereum/client-go:v1.10.25
  NETHERMIND_IMAGE: nethermind/nethermind:1.14.3
  MERGEMOCK_IMAGE: g11tech/mergemock:latest
  GETH_WITHDRAWALS_IMAGE: ethpandaops/geth:withdrawals-timestamp-e92fb91
  ETHEREUMJS_WITHDRAWALS_IMAGE: g11tech/ethereumjs:withdrawals-07b106
  NETHERMIND_WITHDRAWALS_IMAGE: nethermindeth/nethermind:withdrawals_yolo

jobs:
  sim-merge-tests:
    name: Sim merge tests
    runs-on: ubuntu-latest
    steps:
      # <common-build> - Uses YAML anchors in the future
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: 18
      - name: Node.js version
        id: node
        run: echo "v8CppApiVersion=$(node --print "process.versions.modules")" >> $GITHUB_OUTPUT
      - name: Restore dependencies
        uses: actions/cache@master
        id: cache-deps
        with:
          path: |
            node_modules
            packages/*/node_modules
          key: ${{ runner.os }}-${{ steps.node.outputs.v8CppApiVersion }}-${{ hashFiles('**/yarn.lock', '**/package.json') }}
      - name: Install & build
        if: steps.cache-deps.outputs.cache-hit != 'true'
        run: yarn install --frozen-lockfile --ignore-optional && yarn build
      - name: Build
        run: yarn build
        if: steps.cache-deps.outputs.cache-hit == 'true'
      # </common-build>

      - name: Pull Geth
        run: docker pull $GETH_IMAGE

      - name: Test Lodestar <> Geth interop
        run: yarn test:sim:merge-interop
        working-directory: packages/beacon-node
        env:
          EL_BINARY_DIR: ${{ env.GETH_IMAGE }}
          EL_SCRIPT_DIR: gethdocker
          ENGINE_PORT: 8551
          ETH_PORT: 8545
          TX_SCENARIOS: simple

      - name: Pull Nethermind
        run: docker pull $NETHERMIND_IMAGE

      - name: Test Lodestar <> Nethermind interop
        run: yarn test:sim:merge-interop
        working-directory: packages/beacon-node
        env:
          EL_BINARY_DIR: ${{ env.NETHERMIND_IMAGE }}
          EL_SCRIPT_DIR: netherminddocker
          ENGINE_PORT: 8551
          ETH_PORT: 8545

      - name: Pull mergemock
        run: docker pull $MERGEMOCK_IMAGE

      - name: Test Lodestar <> mergemock relay
        run: yarn test:sim:mergemock
        working-directory: packages/beacon-node
        env:
          EL_BINARY_DIR: ${{ env.MERGEMOCK_IMAGE }}
          EL_SCRIPT_DIR: mergemock
          LODESTAR_PRESET: mainnet
          ENGINE_PORT: 8551
          ETH_PORT: 8661

      - name: Upload debug log test files
        if: ${{ always() }}
        uses: actions/upload-artifact@v2
        with:
          name: debug-test-logs
          path: packages/beacon-node/test-logs

      # - name: Pull geth withdrawals 
      #   run: docker pull $GETH_WITHDRAWALS_IMAGE

      # - name: Test Lodestar <> geth withdrawals
      #   run: yarn test:sim:withdrawals
      #   working-directory: packages/beacon-node
      #   env:
      #     EL_BINARY_DIR: ${{ env.GETH_WITHDRAWALS_IMAGE }}
      #     EL_SCRIPT_DIR: gethdocker

      # - name: Pull ethereumjs withdrawals 
      #   run: docker pull $ETHEREUMJS_WITHDRAWALS_IMAGE

      # - name: Test Lodestar <> ethereumjs withdrawals
      #   run: yarn test:sim:withdrawals
      #   working-directory: packages/beacon-node
      #   env:
      #     EL_BINARY_DIR: ${{ env.ETHEREUMJS_WITHDRAWALS_IMAGE }}
      #     EL_SCRIPT_DIR: ethereumjsdocker

      # Disable nethermind build as the withdrawal test config seems to be no
      # longer available, enable after grabbing a build which has one
      #
      # - name: Pull nethermind withdrawals
      #   run: docker pull $NETHERMIND_WITHDRAWALS_IMAGE

      # - name: Test Lodestar <> nethermind withdrawals
      #   run: yarn test:sim:withdrawals
      #   working-directory: packages/beacon-node
      #   env:
      #     EL_BINARY_DIR: ${{ env.NETHERMIND_WITHDRAWALS_IMAGE }}
      #     EL_SCRIPT_DIR: netherminddocker

      - name: Upload debug log test files
        if: ${{ always() }}
        uses: actions/upload-artifact@v2
        with:
          name: debug-test-logs
          path: packages/beacon-node/test-logs

