name: gradio-ui

on:
  push:
    branches:
      - "main"
  pull_request:

env:
  CI: true
  PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: "1"
  NODE_OPTIONS: "--max-old-space-size=4096"

concurrency:
  group: deploy-${{ github.ref }}-${{ github.event_name == 'push' || github.event.inputs.fire != null }}
  cancel-in-progress: true

jobs:
  quick-checks:
    name: static checks
    runs-on: ubuntu-22.04
    steps:
      - uses: actions/checkout@v3
      - name: install dependencies
        uses: "./.github/actions/install-frontend-deps"
        with:
          always-install-pnpm: true
      - name: build client
        run: pnpm --filter @gradio/client build
      - name: build the wasm module
        run: pnpm --filter @gradio/wasm build
      - name: lint
        run: pnpm lint
        continue-on-error: true
      - name: typecheck
        run: pnpm ts:check
      - name: unit tests
        run: pnpm test:run
  functional-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: install dependencies
        uses: "./.github/actions/install-all-deps"
        with:
          always-install-pnpm: true
      - name: install outbreak_forecast dependencies
        run: |
          . venv/bin/activate
          python -m pip install -r demo/outbreak_forecast/requirements.txt
      - run: pnpm exec playwright install chromium
      - name: run browser tests
        run: |
          . venv/bin/activate
          pnpm test:browser
      - name: upload screenshots
        uses: actions/upload-artifact@v3
        if: always()
        with:
          name: playwright-screenshots
          path: |
            ./test-results
      - name: run browser component tests
        run: |
          . venv/bin/activate
          pnpm run test:ct