name: E2E Tests
on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

env:
  POETRY_VERSION: "1.6.1"

jobs:
  e2e-python:
    name: python
    timeout-minutes: 60
    strategy:
      fail-fast: true
      matrix:
        node-version: [20]
        python-version: ["3.11"]
        os: [macos-latest, windows-latest, ubuntu-22.04]
        frameworks: ["fastapi"]
        datasources: ["--example-file", "--llamacloud"]
    defaults:
      run:
        shell: bash
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v4

      - name: Set up python ${{ matrix.python-version }}
        uses: actions/setup-python@v5
        with:
          python-version: ${{ matrix.python-version }}

      - name: Install Poetry
        uses: snok/install-poetry@v1
        with:
          version: ${{ env.POETRY_VERSION }}

      - uses: pnpm/action-setup@v3

      - name: Setup Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}
          cache: "pnpm"

      - name: Install dependencies
        run: pnpm install

      - name: Install Playwright Browsers
        run: pnpm exec playwright install --with-deps
        working-directory: .

      - name: Build create-llama
        run: pnpm run build
        working-directory: .

      - name: Install
        run: pnpm run pack-install
        working-directory: .

      - name: Run Playwright tests for Python
        run: pnpm run e2e:python
        env:
          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
          LLAMA_CLOUD_API_KEY: ${{ secrets.LLAMA_CLOUD_API_KEY }}
          FRAMEWORK: ${{ matrix.frameworks }}
          DATASOURCE: ${{ matrix.datasources }}
        working-directory: .

      - uses: actions/upload-artifact@v4
        if: always()
        with:
          name: playwright-report-python-${{ matrix.os }}-${{ matrix.frameworks }}-${{ matrix.datasources }}
          path: ./playwright-report/
          overwrite: true
          retention-days: 30

  e2e-typescript:
    name: typescript
    timeout-minutes: 60
    strategy:
      fail-fast: true
      matrix:
        node-version: [18, 20]
        python-version: ["3.11"]
        os: [macos-latest, windows-latest, ubuntu-22.04]
        frameworks: ["nextjs", "express"]
        datasources: ["--no-files", "--example-file", "--llamacloud"]
    defaults:
      run:
        shell: bash
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v4

      - name: Set up python ${{ matrix.python-version }}
        uses: actions/setup-python@v5
        with:
          python-version: ${{ matrix.python-version }}

      - name: Install Poetry
        uses: snok/install-poetry@v1
        with:
          version: ${{ env.POETRY_VERSION }}

      - uses: pnpm/action-setup@v3

      - name: Setup Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}
          cache: "pnpm"

      - name: Install dependencies
        run: pnpm install

      - name: Install Playwright Browsers
        run: pnpm exec playwright install --with-deps
        working-directory: .

      - name: Build create-llama
        run: pnpm run build
        working-directory: .

      - name: Install
        run: pnpm run pack-install
        working-directory: .

      - name: Run Playwright tests for TypeScript
        run: pnpm run e2e:typescript
        env:
          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
          LLAMA_CLOUD_API_KEY: ${{ secrets.LLAMA_CLOUD_API_KEY }}
          FRAMEWORK: ${{ matrix.frameworks }}
          DATASOURCE: ${{ matrix.datasources }}
        working-directory: .

      - uses: actions/upload-artifact@v4
        if: always()
        with:
          name: playwright-report-typescript-${{ matrix.os }}-${{ matrix.frameworks }}-${{ matrix.datasources }}-node${{ matrix.node-version }}
          path: ./playwright-report/
          overwrite: true
          retention-days: 30