# Test that local testnet starts successfully.
name: local testnet

on:
  push:
    branches:
      - unstable
  pull_request:
  merge_group:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  run-local-testnet:
    strategy:
      matrix:
        os:
          - ubuntu-22.04
          - macos-12
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v3

      - name: Get latest version of stable Rust
        run: rustup update stable
      - name: Install geth (ubuntu)
        if: matrix.os == 'ubuntu-22.04'
        run: |
          sudo add-apt-repository -y ppa:ethereum/ethereum
          sudo apt-get update
          sudo apt-get install ethereum
      - name: Install geth (mac)
        if: matrix.os == 'macos-12'
        run: |
          brew tap ethereum/ethereum
          brew install ethereum
      - name: Install GNU sed & GNU grep
        if: matrix.os == 'macos-12'
        run: |
          brew install gnu-sed grep
          echo "$(brew --prefix)/opt/gnu-sed/libexec/gnubin" >> $GITHUB_PATH
          echo "$(brew --prefix)/opt/grep/libexec/gnubin" >> $GITHUB_PATH
      # https://github.com/actions/cache/blob/main/examples.md#rust---cargo
      - uses: actions/cache@v3
        id: cache-cargo
        with:
          path: |
              ~/.cargo/bin/
              ~/.cargo/registry/index/
              ~/.cargo/registry/cache/
              ~/.cargo/git/db/
              target/
          key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}

      - name: Install lighthouse
        run: make && make install-lcli

      - name: Start local testnet
        run: ./start_local_testnet.sh genesis.json && sleep 60
        working-directory: scripts/local_testnet

      - name: Print logs
        run: ./dump_logs.sh
        working-directory: scripts/local_testnet

      - name: Stop local testnet
        run: ./stop_local_testnet.sh
        working-directory: scripts/local_testnet

      - name: Clean-up testnet
        run: ./clean.sh
        working-directory: scripts/local_testnet

      - name: Start local testnet with blinded block production
        run: ./start_local_testnet.sh -p genesis.json && sleep 60
        working-directory: scripts/local_testnet

      - name: Print logs for blinded block testnet
        run: ./dump_logs.sh
        working-directory: scripts/local_testnet

      - name: Stop local testnet with blinded block production
        run: ./stop_local_testnet.sh
        working-directory: scripts/local_testnet