on:
  push:
    branches:
      - main
  pull_request:
  merge_group:

name: Test

jobs:
  test:
    name: Test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
          submodules: recursive

      - name: "Setup"
        uses: ./.github/actions/setup

      - name: Run tests
        # using node because bun nx run-many is not doing coverage correctly in ci for some reason
        run: bun i && npx nx run-many --target=test:coverage
        env:
          NX_CLOUD_ACCESS_TOKEN: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }}
          RPC_URL_MAINNET: ${{ secrets.RPC_URL_MAINNET }}

      - name: 'Report @evmts/core Coverage'
        if: always() # Also generate the report if tests are failing
        uses:  davelosert/vitest-coverage-report-action@v2
        with:
          name: "@evmts/core"
          working-directory: "./packages/core"
      - name: 'Report @evmts/ethers Coverage'
        if: always() # Also generate the report if tests are failing
        uses:  davelosert/vitest-coverage-report-action@v2
        with:
          name: "@evmts/ethers"
          working-directory: "./extensions/ethers"
      - name: 'Report @evmts/base Coverage'
        if: always() # Also generate the report if tests are failing
        uses:  davelosert/vitest-coverage-report-action@v2
        with:
          name: "@evmts/base"
          working-directory: "./bundler/base"
      - name: 'Report @evmts/bun-plugin Coverage'
        if: always() # Also generate the report if tests are failing
        uses:  davelosert/vitest-coverage-report-action@v2
        with:
          name: "@evmts/bun-plugin"
          working-directory: "./bundler/bun"
      - name: 'Report @evmts/esbuild-plugin Coverage'
        if: always() # Also generate the report if tests are failing
        uses:  davelosert/vitest-coverage-report-action@v2
        with:
          name: "@evmts/esbuild-plugin"
          working-directory: "./bundler/esbuild"
      - name: 'Report @evmts/ts-plugin Coverage'
        if: always() # Also generate the report if tests are failing
        uses:  davelosert/vitest-coverage-report-action@v2
        with:
          name: "@evmts/ts-plugin"
          working-directory: "./bundler/ts-plugin"
      - name: 'Report @evmts/config Coverage'
        if: always() # Also generate the report if tests are failing
        uses:  davelosert/vitest-coverage-report-action@v2
        with:
          name: "@evmts/config"
          working-directory: "./bundler/config"
      - name: 'Report @evmts/schemas Coverage'
        if: always() # Also generate the report if tests are failing
        uses:  davelosert/vitest-coverage-report-action@v2
        with:
          name: "@evmts/schemas"
          working-directory: "./packages/schemas"
      - name: 'Report @evmts/blockexplorer Coverage'
        if: always() # Also generate the report if tests are failing
        uses:  davelosert/vitest-coverage-report-action@v2
        with:
          name: "@evmts/blockexplorer"
          working-directory: "./packages/blockexplorer"
      - name: 'Report @evmts/runtime Coverage'
        if: always() # Also generate the report if tests are failing
        uses:  davelosert/vitest-coverage-report-action@v2
        with:
          name: "@evmts/runtime"
          working-directory: "./bundler/runtime"
      - name: 'Report @evmts/solc Coverage'
        if: always() # Also generate the report if tests are failing
        uses:  davelosert/vitest-coverage-report-action@v2
        with:
          name: "@evmts/solc"
          working-directory: "./bundler/solc"
      - name: 'Report @evmts/unplugin Coverage'
        if: always() # Also generate the report if tests are failing
        uses:  davelosert/vitest-coverage-report-action@v2
        with:
          name: "@evmts/unplugin"
          working-directory: "./bundler/unplugin"
      - name: 'Report @evmts/resolutions Coverage'
        if: always() # Also generate the report if tests are failing
        uses:  davelosert/vitest-coverage-report-action@v2
        with:
          name: "@evmts/resolutions"
          working-directory: "./bundler/resolutions"
      - name: 'Report @evmts/effect Coverage'
        if: always() # Also generate the report if tests are failing
        uses:  davelosert/vitest-coverage-report-action@v2
        with:
          name: "@evmts/effect"
          working-directory: "./packages/effect"
