name: Test JS SDK

on:
  workflow_call:
    inputs:
      E2B_DOMAIN:
        required: false
        type: string
        default: ''
    secrets:
      E2B_API_KEY:
        required: true

permissions:
  contents: read

jobs:
  test:
    defaults:
      run:
        working-directory: ./packages/js-sdk
        shell: bash
    name: JS SDK - Build and test (${{ matrix.os }})
    strategy:
      matrix:
        os: [ubuntu-22.04, windows-latest]
      fail-fast: false
    runs-on: ${{ matrix.os }}
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Parse .tool-versions
        uses: wistia/parse-tool-versions@v2.1.1
        with:
          filename: '.tool-versions'
          uppercase: 'true'
          prefix: 'tool_version_'

      - name: Install pnpm
        uses: pnpm/action-setup@v4
        id: pnpm-install
        with:
          version: '${{ env.TOOL_VERSION_PNPM }}'

      - name: Setup Node
        uses: actions/setup-node@v3
        with:
          node-version: '${{ env.TOOL_VERSION_NODEJS }}'
          registry-url: 'https://registry.npmjs.org'
          cache: pnpm
          cache-dependency-path: pnpm-lock.yaml

      - name: Configure pnpm
        run: |
          pnpm config set auto-install-peers true
          pnpm config set exclude-links-from-lockfile true

      - name: Install dependencies
        run: |
          pnpm install --frozen-lockfile

      - name: Cache Playwright binaries (Linux)
        if: matrix.os == 'ubuntu-22.04'
        uses: actions/cache@v4
        with:
          path: ~/.cache/ms-playwright
          key: playwright-${{ runner.os }}-${{ env.TOOL_VERSION_NODEJS }}-${{ hashFiles('packages/js-sdk/package.json') }}
          restore-keys: |
            playwright-${{ runner.os }}-${{ env.TOOL_VERSION_NODEJS }}-

      - name: Cache Playwright binaries (Windows)
        if: matrix.os == 'windows-latest'
        uses: actions/cache@v4
        with:
          path: ~/AppData/Local/ms-playwright
          key: playwright-${{ runner.os }}-${{ env.TOOL_VERSION_NODEJS }}-${{ hashFiles('packages/js-sdk/package.json') }}
          restore-keys: |
            playwright-${{ runner.os }}-${{ env.TOOL_VERSION_NODEJS }}-

      - name: Test build
        run: pnpm build

      - name: Run Node tests
        run: pnpm test
        env:
          E2B_API_KEY: ${{ secrets.E2B_API_KEY }}
          E2B_DOMAIN: ${{ inputs.E2B_DOMAIN }}

      - name: Install Bun
        uses: oven-sh/setup-bun@v2

      - name: Run Bun tests
        run: pnpm test:bun
        env:
          E2B_API_KEY: ${{ secrets.E2B_API_KEY }}
          E2B_DOMAIN: ${{ inputs.E2B_DOMAIN }}

      - name: Install Deno
        uses: denoland/setup-deno@v1
        with:
          deno-version: v${{ env.TOOL_VERSION_DENO }}

      - name: Run Deno tests
        run: pnpm test:deno
        env:
          E2B_API_KEY: ${{ secrets.E2B_API_KEY }}
          E2B_DOMAIN: ${{ inputs.E2B_DOMAIN }}
