Skip to content

E2E Playwright Tests (v2) #525

E2E Playwright Tests (v2)

E2E Playwright Tests (v2) #525

name: E2E Playwright Tests (v2)
on:
# Manual trigger
workflow_dispatch:
inputs:
environment:
description: 'Environment to run tests'
type: choice
options:
- staging
default: 'staging'
debug:
description: 'Enable SSH debugging'
type: boolean
default: false
# Trigger on PR with label (remove and re-add label to rerun)
pull_request:
types: [labeled]
# Nightly schedule (0 AM UTC)
schedule:
- cron: '0 0 * * *'
# Cancel in-progress runs for the same PR/branch
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
# Check if workflow should run (for PR label trigger)
check-trigger:
runs-on: ubuntu-latest
outputs:
should_run: ${{ steps.check.outputs.should_run }}
steps:
- name: Check trigger conditions
id: check
env:
EVENT_NAME: ${{ github.event_name }}
HAS_E2E_LABEL: ${{ contains(github.event.pull_request.labels.*.name, 'e2e-tests') }}
HAS_RUN_ALL_LABEL: ${{ contains(github.event.pull_request.labels.*.name, 'run-all-tests') }}
run: |
if [[ "$EVENT_NAME" == "workflow_dispatch" ]]; then
echo "should_run=true" >> $GITHUB_OUTPUT
elif [[ "$EVENT_NAME" == "schedule" ]]; then
echo "should_run=true" >> $GITHUB_OUTPUT
elif [[ "$EVENT_NAME" == "pull_request" ]]; then
if [[ "$HAS_E2E_LABEL" == "true" || "$HAS_RUN_ALL_LABEL" == "true" ]]; then
echo "should_run=true" >> $GITHUB_OUTPUT
else
echo "should_run=false" >> $GITHUB_OUTPUT
fi
else
echo "should_run=false" >> $GITHUB_OUTPUT
fi
# Lint and type-check E2E code
lint:
name: Lint
needs: check-trigger
if: needs.check-trigger.outputs.should_run == 'true'
uses: ./.github/workflows/tests-e2e-playwright-lint.yml
# Chromium tests (local dev mode) - no build required
e2e-dev-chromium:
name: Chromium (Dev)
needs: lint
uses: ./.github/workflows/tests-e2e-playwright-chromium.yml
secrets: inherit
with:
environment: ${{ inputs.environment || 'staging' }}
debug: ${{ inputs.debug || false }}
# Build Docker image for Docker tests
build-docker:
name: Build Docker
needs: lint
uses: ./.github/workflows/pipeline-build-docker.yml
secrets: inherit
with:
debug: ${{ inputs.debug || false }}
for_e2e_tests: true
# Docker tests (Chromium against Docker image)
e2e-docker:
name: Docker
needs: build-docker
uses: ./.github/workflows/tests-e2e-playwright-docker.yml
secrets: inherit
with:
environment: ${{ inputs.environment || 'staging' }}
debug: ${{ inputs.debug || false }}
# Build Linux AppImage for Electron tests
build-linux:
name: Build Linux
needs: lint
uses: ./.github/workflows/pipeline-build-linux.yml
secrets: inherit
with:
environment: ${{ inputs.environment || 'staging' }}
target: 'build_linux_appimage_x64'
debug: ${{ inputs.debug || false }}
enterprise: false
# Electron tests (Linux AppImage)
e2e-electron:
name: Electron (Linux)
needs: build-linux
uses: ./.github/workflows/tests-e2e-playwright-electron.yml
secrets: inherit
with:
environment: ${{ inputs.environment || 'staging' }}
debug: ${{ inputs.debug || false }}