name: Continuous Integration
on: [push, pull_request]

jobs:
  test:
    name: Test
    runs-on: ${{ matrix.os }}
    timeout-minutes: 30

    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]
        node-version: ["14", "16", "18"]

    steps:
      - name: Checkout project
        uses: actions/checkout@v2

      - name: Setup Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}
          check-latest: true
          cache: "npm"

      - name: Install dependencies
        run: npm ci

      - name: Run tests
        run: npm test

  test-contracts:
    name: Test verifier contracts
    runs-on: ${{ matrix.os }}
    timeout-minutes: 30

    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest]
        # Pinning to 18.15 and dropped 20 due to https://github.com/NomicFoundation/hardhat/issues/3877
        node-version: ["16", "18.15.0"]

    steps:
      - name: Checkout project
        uses: actions/checkout@v2

      - name: Setup Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}
          check-latest: true
          cache: "npm"

      - name: Install dependencies
        run: npm ci

      - name: Install hardhat dependencies
        working-directory: smart_contract_tests
        run: npm ci

      - name: Run hardhat tests
        working-directory: smart_contract_tests
        run: npm test

  testv12:
    name: Testv12
    runs-on: ${{ matrix.os }}
    timeout-minutes: 30

    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]
        node-version: ["12"]

    steps:
      - name: Checkout project
        uses: actions/checkout@v2

      - name: Setup Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}
          check-latest: true
          cache: "npm"

      - name: Install dependencies
        run: npm ci

      - name: Run tests
        run: npm run testv12

  test-browser:
    name: Test browser
    runs-on: ${{ matrix.os }}
    timeout-minutes: 30

    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest]
        node-version: ["18"]

    steps:
      - name: Checkout project
        uses: actions/checkout@v2

      - name: Setup Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}
          check-latest: true
          cache: "npm"

      - name: Install browser dependencies
        working-directory: browser_tests
        run: npm ci

      - name: Run browser tests
        working-directory: browser_tests
        run: npm test
