name: Playwright Tests
on:
  push:
    branches: [ main, master ]  
  pull_request:
    branches: [ main, master ]

jobs:
  e2e-testing:
    timeout-minutes: 60
    runs-on: ubuntu-latest
    env:
      FFMPEG_BIN: /usr/bin/ffmpeg
      USE_EMBEDDED_WEED_MINI: true
      BASE_URL: http://127.0.0.1:3003
      S3_ENDPOINT: http://127.0.0.1:8333
    steps:
    - uses: actions/checkout@v5
    - uses: actions/setup-node@v5
      with:
        node-version: lts/*
        package-manager-cache: false
    - uses: pnpm/action-setup@v6
    - name: Install system dependencies
      run: |
        sudo apt-get update
        sudo apt-get install -y libreoffice-writer ffmpeg
    - name: Install SeaweedFS weed binary
      run: |
        WEED_PATH=$(docker run --rm --entrypoint sh chrislusf/seaweedfs:4.18 -lc 'command -v weed')
        CID=$(docker create chrislusf/seaweedfs:4.18)
        docker cp "${CID}:${WEED_PATH}" ./weed
        docker rm "${CID}"
        sudo install -m 0755 ./weed /usr/local/bin/weed
        rm -f ./weed
        weed version
    - name: Install NATS server binary
      run: |
        curl -fsSL -o /tmp/nats-server.tar.gz \
          https://github.com/nats-io/nats-server/releases/download/v2.12.1/nats-server-v2.12.1-linux-amd64.tar.gz
        tar -xzf /tmp/nats-server.tar.gz -C /tmp
        sudo install -m 0755 /tmp/nats-server-v2.12.1-linux-amd64/nats-server /usr/local/bin/nats-server
        nats-server -v
    - name: Install dependencies
      run: pnpm install --frozen-lockfile
    - name: Build app and enforce bundle guard
      run: |
        pnpm build
        pnpm build:bundle-guard
    - name: Verify ffprobe
      run: ffprobe -version
    - name: Install Playwright Browsers
      run: pnpm exec playwright install --with-deps
    - name: Run Playwright tests
      env:
        API_BASE: https://api.deepinfra.com/v1/openai
        API_KEY: ${{ secrets.DEEPINFRA_API_KEY }}
      run: pnpm exec playwright test --reporter=list,github,html
    - uses: actions/upload-artifact@v7
      if: ${{ !cancelled() }}
      with:
        name: playwright-report
        path: playwright-report/
        retention-days: 30
