on: 
  pull_request:
    branches:
      - master
  push:
    branches:
      - master

jobs:
  unit-tests:
    strategy:
      matrix:
        go-version: [1.20.x]
        platform: [ubuntu-22.04]
    runs-on: ${{ matrix.platform }}
    steps:
      - id: go-cache-paths
        run: |
          echo "go-build=$(go env GOCACHE)"  >> $GITHUB_OUTPUT
          echo "go-mod=$(go env GOMODCACHE)" >> $GITHUB_OUTPUT
      
      - uses: actions/setup-go@v3
        with:
          go-version: ${{ matrix.go-version }}
      - uses: actions/checkout@v3

      # cache go build cache
      - name: Cache go modules
        uses: actions/cache@v3
        with:
          path: ${{ steps.go-cache-paths.outputs.go-build }}
          key: ${{ runner.os }}-go-build-${{ hashFiles('**/go.sum') }}
          restore-keys: ${{ runner.os }}-go-build

      # cache go mod cache
      - name: Cache go modules
        uses: actions/cache@v3
        with:
          path: ${{ steps.go-cache-paths.outputs.go-mod }}
          key: ${{ runner.os }}-go-mod-${{ hashFiles('**/go.sum') }}
          restore-keys: ${{ runner.os }}-go-mod

      - name: Cache monero install
        id: monero-install
        uses: actions/cache@v3
        with:
          path: |
            ./monero-bin
            ./monero-x86_64-linux-gnu-*
          key: monero-install

      - name: Install monero
        if: steps.monero-install.outputs.cache-hit != 'true'
        run: ./scripts/install-monero-linux.sh

      - name: Run build
        run: make build
        
      - name: Run unit tests
        env:
          ETH_MAINNET_ENDPOINT: ${{ secrets.ETH_MAINNET_ENDPOINT }}
          ETH_SEPOLIA_ENDPOINT: ${{ secrets.ETH_SEPOLIA_ENDPOINT }}
        run: ./scripts/run-unit-tests.sh

      - name: Upload code coverage
        uses: codecov/codecov-action@v3
        with:
          verbose: true
          fail_ci_if_error: true
