name: Test

on:
  push:
  workflow_dispatch:

jobs:
  go_test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          submodules: recursive

      - name: Setup Go
        uses: actions/setup-go@v3
        with:
          go-version: "1.18.0"

      - name: Setup NodeJs
        uses: actions/setup-node@v2
        with:
          node-version: 16

      - name: Cache dependencies
        id: cache
        uses: actions/cache@v2
        with:
          path: ./node_modules
          key: modules-${{ hashFiles('yarn.lock') }}

      - name: Install yarn dependencies
        if: steps.cache.outputs.cache-hit != 'true'
        run: rm -rf node_modules && yarn install --frozen-lockfile

      - name: Setup Solidity tooling
        run: |
          sudo add-apt-repository ppa:ethereum/ethereum
          sudo apt-get update
          sudo apt-get install -y solc abigen

      - name: Build ethier
        run: |
          go version
          npm run build

      - name: Run tests
        run: npm run test:go

  foundry_test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          submodules: recursive

      - name: Setup Go
        uses: actions/setup-go@v3
        with:
          go-version: "1.18.0"

      - name: Install Foundry
        uses: foundry-rs/foundry-toolchain@v1
        with:
          version: nightly

      - name: Setup NodeJs
        uses: actions/setup-node@v2
        with:
          node-version: 16

      - name: Cache dependencies
        id: cache
        uses: actions/cache@v2
        with:
          path: ./node_modules
          key: modules-${{ hashFiles('yarn.lock') }}

      - name: Install yarn dependencies
        if: steps.cache.outputs.cache-hit != 'true'
        run: rm -rf node_modules && yarn install --frozen-lockfile

      - name: Build ethier
        run: |
          go version
          npm run build

      - name: Run tests
        run: npm run test:forge
# TODO(aschlosberg): Run Bazel tests once `ethier gen` is wrapped in a macro or rule.

# bazel_test:
#   runs-on: ubuntu-latest

#   steps:
#     - uses: actions/checkout@v3
#     # Source: README of github.com/ngalaiko/bazel-action (MIT)
#     - name: Mount bazel cache
#       uses: actions/cache@v3
#       with:
#         path: "/home/runner/.cache/bazel"
#         key: bazel-workspace-${{ hashFiles('WORKSPACE', 'repositories.bzl') }}

#     - name: Install bazelisk
#       run: |
#         curl -LO "https://github.com/bazelbuild/bazelisk/releases/download/v1.1.0/bazelisk-linux-amd64"
#         mkdir -p "${GITHUB_WORKSPACE}/bin/"
#         mv bazelisk-linux-amd64 "${GITHUB_WORKSPACE}/bin/bazel"
#         chmod +x "${GITHUB_WORKSPACE}/bin/bazel"

#     - name: Check BUILD.bazel files
#       run: |
#         "${GITHUB_WORKSPACE}/bin/bazel" run //:gazelle_diff

#     - name: Build
#       run: |
#         "${GITHUB_WORKSPACE}/bin/bazel" build //...

#     - name: Test
#       run: |
#         "${GITHUB_WORKSPACE}/bin/bazel" test --test_output=errors --cache_test_results=no //...
