name: Playground Worker tests

on:
  push:
    branches:
      - main
      - changeset-release/main
  pull_request:
    types: [synchronize, opened, reopened, labeled, unlabeled]
  repository_dispatch:

jobs:
  e2e-test:
    if: github.repository_owner == 'cloudflare' && (github.event_name != 'pull_request' || (github.event_name == 'pull_request' && contains(github.event.*.labels.*.name, 'playground-worker' )) || (github.event_name == 'pull_request' && github.head_ref == 'changeset-release/main'))
    name: "Playground Worker Test"
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Repo
        uses: actions/checkout@v3
        with:
          fetch-depth: 0
      - uses: pnpm/action-setup@v2
        with:
          version: 8.8.0
      - name: Use Node.js 18
        uses: actions/setup-node@v3
        with:
          node-version: 18
          cache: "pnpm"

      - name: Install workerd Dependencies
        if: ${{ runner.os == 'Linux' }}
        run: |
          export DEBIAN_FRONTEND=noninteractive
          sudo apt-get update
          sudo apt-get install -y libc++1

      - name: Install NPM Dependencies
        run: pnpm install --frozen-lockfile

      - name: Run builds
        run: pnpm run build
        env:
          NODE_ENV: "production"

      - name: Build & Publish Testing Playground Worker
        run: pnpm run deploy:testing
        env:
          NODE_ENV: "production"
          CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
        working-directory: packages/playground-preview-worker

      - name: Run tests & collect coverage
        run: pnpm run test:ci
        env:
          TMP_CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
          TMP_CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
          NODE_OPTIONS: "--max_old_space_size=8192"
        working-directory: packages/playground-preview-worker