name: Playwright Tests

on:
  push:
    branches:
    - master
  pull_request:
    types:
    - opened
    - synchronize
  workflow_dispatch:
    inputs:
      debug_enabled:
        description: 'Run the build with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)'
        required: false
        default: 'false'

jobs:

  test:
    timeout-minutes: 60
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - uses: actions/setup-node@v4
      with:
        node-version: lts/*
    - uses: actions/setup-python@v5
      with:
        python-version: '3.10'
    - name: Setup tmate session
      uses: mxschmitt/action-tmate@v3
      if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.debug_enabled == 'true' }}
      with:
        limit-access-to-actor: true
    - name: Install dependencies
      run: npm ci
      working-directory: frontend
    - name: Install Playwright Browsers
      run: npx playwright install --with-deps
      working-directory: frontend
    - run: docker compose build
    - run: docker compose down -v --remove-orphans
    - run: docker compose up -d
    - name: Run Playwright tests
      run: npx playwright test
      working-directory: frontend
    - run: docker compose down -v --remove-orphans
    - uses: actions/upload-artifact@v4
      if: always()
      with:
        name: playwright-report
        path: frontend/playwright-report/
        retention-days: 30

  # https://github.com/marketplace/actions/alls-green#why
  e2e-alls-green:  # This job does nothing and is only used for the branch protection
    if: always()
    needs:
      - test
    runs-on: ubuntu-latest
    steps:
      - name: Decide whether the needed jobs succeeded or failed
        uses: re-actors/alls-green@release/v1
        with:
          jobs: ${{ toJSON(needs) }}
