name: Sim tests

concurrency:
  # If PR, cancel prev commits. head_ref = source branch name on pull_request, null if push
  group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
  cancel-in-progress: true

on:
  push:
    # We intentionally don't run push on feature branches. See PR for rational.
    branches: [unstable, stable]
  pull_request:
  workflow_dispatch:
    inputs:
      debug:
        description: Runtime DEBUG value
        required: false
        default: ""
      genesisDelaySlots:
        description: "Number of slots delay before genesis"
        required: true
        type: number
        default: 40

jobs:
  build:
    name: Build
    runs-on: buildjet-4vcpu-ubuntu-2204
    steps:
      # <common-build> - Uses YAML anchors in the future
      - uses: actions/checkout@v4
      - uses: "./.github/actions/setup-and-build"
        with:
          node: 22

  sim-test-multifork:
    name: Multifork sim test
    needs: build
    runs-on: buildjet-4vcpu-ubuntu-2204
    steps:
      # <common-build> - Uses YAML anchors in the future
      - uses: actions/checkout@v4
      - uses: "./.github/actions/setup-and-build"
        with:
          node: 22
      - name: Load env variables
        uses: ./.github/actions/dotenv
      - name: Download required docker images before running tests
        run: |
          docker pull ${{env.GETH_DOCKER_IMAGE}}
          docker pull ${{env.LIGHTHOUSE_DOCKER_IMAGE}}
          docker pull ${{env.NETHERMIND_DOCKER_IMAGE}}
      - name: Sim tests multifork
        run: DEBUG='${{github.event.inputs.debug}}' yarn test:sim:multifork
        working-directory: packages/cli
        env:
          GENESIS_DELAY_SLOTS: ${{github.event.inputs.genesisDelaySlots}}
      - name: Upload debug log test files for "packages/cli"
        if: ${{ always() }}
        uses: actions/upload-artifact@v4
        with:
          name: sim-test-multifork-logs
          path: packages/cli/test-logs

  sim-test-endpoints:
    name: Endpoint sim tests
    needs: build
    runs-on: buildjet-4vcpu-ubuntu-2204
    steps:
      # <common-build> - Uses YAML anchors in the future
      - uses: actions/checkout@v4
      - uses: "./.github/actions/setup-and-build"
        with:
          node: 22
      - name: Load env variables
        uses: ./.github/actions/dotenv
      - name: Download required docker images before running tests
        run: |
          docker pull ${{env.GETH_DOCKER_IMAGE}}
          docker pull ${{env.LIGHTHOUSE_DOCKER_IMAGE}}
          docker pull ${{env.NETHERMIND_DOCKER_IMAGE}}
      - name: Sim tests endpoints
        run: DEBUG='${{github.event.inputs.debug}}'  yarn test:sim:endpoints
        working-directory: packages/cli
        env:
          GENESIS_DELAY_SLOTS: ${{github.event.inputs.genesisDelaySlots}}
      - name: Upload debug log test files for "packages/cli"
        if: ${{ always() }}
        uses: actions/upload-artifact@v4
        with:
          name: sim-test-endpoints-logs
          path: packages/cli/test-logs

  sim-test-deneb:
    name: Deneb sim tests
    needs: build
    runs-on: buildjet-4vcpu-ubuntu-2204
    steps:
      # <common-build> - Uses YAML anchors in the future
      - uses: actions/checkout@v4
      - uses: "./.github/actions/setup-and-build"
        with:
          node: 22
      - name: Load env variables
        uses: ./.github/actions/dotenv
      - name: Download required docker images before running tests
        run: |
          docker pull ${{env.GETH_DOCKER_IMAGE}}
          docker pull ${{env.LIGHTHOUSE_DOCKER_IMAGE}}
          docker pull ${{env.NETHERMIND_DOCKER_IMAGE}}
      - name: Sim tests deneb
        run: DEBUG='${{github.event.inputs.debug}}' yarn test:sim:deneb
        working-directory: packages/cli
        env:
          GENESIS_DELAY_SLOTS: ${{github.event.inputs.genesisDelaySlots}}
      - name: Upload debug log test files for "packages/cli"
        if: ${{ always() }}
        uses: actions/upload-artifact@v4
        with:
          name: sim-test-deneb-logs
          path: packages/cli/test-logs

  sim-test-eth-backup-provider:
    name: Eth backup provider sim tests
    needs: build
    runs-on: buildjet-4vcpu-ubuntu-2204
    steps:
      # <common-build> - Uses YAML anchors in the future
      - uses: actions/checkout@v4
      - uses: "./.github/actions/setup-and-build"
        with:
          node: 22
      - name: Load env variables
        uses: ./.github/actions/dotenv
      - name: Download required docker images before running tests
        run: |
          docker pull ${{env.GETH_DOCKER_IMAGE}}
          docker pull ${{env.LIGHTHOUSE_DOCKER_IMAGE}}
          docker pull ${{env.NETHERMIND_DOCKER_IMAGE}}
      - name: Sim tests backup eth provider
        run: DEBUG='${{github.event.inputs.debug}}' yarn test:sim:backup_eth_provider
        working-directory: packages/cli
        env:
          GENESIS_DELAY_SLOTS: ${{github.event.inputs.genesisDelaySlots}}
      - name: Upload debug log test files for "packages/cli"
        if: ${{ always() }}
        uses: actions/upload-artifact@v4
        with:
          name: sim-test-eth-backup-provider-logs
          path: packages/cli/test-logs

  sim-test-mixed-clients:
    name: Mixed clients sim tests
    needs: build
    runs-on: buildjet-4vcpu-ubuntu-2204
    steps:
      # <common-build> - Uses YAML anchors in the future
      - uses: actions/checkout@v4
      - uses: "./.github/actions/setup-and-build"
        with:
          node: 22
      - name: Load env variables
        uses: ./.github/actions/dotenv
      - name: Download required docker images before running tests
        run: |
          docker pull ${{env.GETH_DOCKER_IMAGE}}
          docker pull ${{env.LIGHTHOUSE_DOCKER_IMAGE}}
          # docker pull ${{env.NETHERMIND_DOCKER_IMAGE}}
      - name: Sim tests mixed client
        run: DEBUG='${{github.event.inputs.debug}}' yarn test:sim:mixedclient
        working-directory: packages/cli
        env:
          GENESIS_DELAY_SLOTS: ${{github.event.inputs.genesisDelaySlots}}
      - name: Upload debug log test files for "packages/cli"
        if: ${{ always() }}
        uses: actions/upload-artifact@v4
        with:
          name: sim-test-mixed-clients-logs
          path: packages/cli/test-logs
