Skip to content

E2E Playwright

E2E Playwright #8

Workflow file for this run

name: E2E Playwright
on:
workflow_dispatch:
inputs:
environment:
description: 'Target environment (edge, stage, local)'
required: true
default: edge
type: choice
options:
- edge
- stage
- local
tags:
description: 'Optional Playwright --grep (e.g., @smoke)'
required: false
setupMethod:
description: 'Override SETUP_METHOD (oauth2, sso-nextcloud, sso-external)'
required: false
jobs:
playwright:
runs-on: self-hosted
timeout-minutes: 45
env:
NODE_ENV: test
CI: true
HEADLESS: true
SKIP_SETUP_JOB_CHECK: true
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Resolve target environment
id: resolve_env
run: |
if [ -n "${{ github.event.inputs.environment }}" ]; then
echo "target=${{ github.event.inputs.environment }}" >> "$GITHUB_OUTPUT"
elif [ "${{ github.ref }}" = "refs/heads/release" ] || [ "${{ github.base_ref }}" = "release" ]; then
echo "target=stage" >> "$GITHUB_OUTPUT"
else
echo "target=edge" >> "$GITHUB_OUTPUT"
fi
- name: Export environment variables
run: |
set -euo pipefail
target="${{ steps.resolve_env.outputs.target }}"
echo "Resolved target: $target"
case "$target" in
stage)
echo "OPENPROJECT_HOST=${{ secrets.E2E_STAGE_OPENPROJECT_HOST }}" >> "$GITHUB_ENV"
echo "NEXTCLOUD_HOST=${{ secrets.E2E_STAGE_NEXTCLOUD_HOST }}" >> "$GITHUB_ENV"
echo "KEYCLOAK_HOST=${{ secrets.E2E_STAGE_KEYCLOAK_HOST }}" >> "$GITHUB_ENV"
echo "OPENPROJECT_VERSION=${{ secrets.E2E_STAGE_OPENPROJECT_VERSION }}" >> "$GITHUB_ENV"
echo "NEXTCLOUD_VERSION=${{ secrets.E2E_STAGE_NEXTCLOUD_VERSION }}" >> "$GITHUB_ENV"
echo "INTEGRATION_APP_VERSION=${{ secrets.E2E_STAGE_INTEGRATION_APP_VERSION }}" >> "$GITHUB_ENV"
echo "KEYCLOAK_VERSION=${{ secrets.E2E_STAGE_KEYCLOAK_VERSION }}" >> "$GITHUB_ENV"
echo "E2E_OP_ADMIN_USER=${{ secrets.E2E_STAGE_OP_ADMIN_USER }}" >> "$GITHUB_ENV"
echo "E2E_OP_ADMIN_PASS=${{ secrets.E2E_STAGE_OP_ADMIN_PASS }}" >> "$GITHUB_ENV"
echo "E2E_NC_ADMIN_USER=${{ secrets.E2E_STAGE_NC_ADMIN_USER }}" >> "$GITHUB_ENV"
echo "E2E_NC_ADMIN_PASS=${{ secrets.E2E_STAGE_NC_ADMIN_PASS }}" >> "$GITHUB_ENV"
echo "E2E_KC_ADMIN_USER=${{ secrets.E2E_STAGE_KC_ADMIN_USER }}" >> "$GITHUB_ENV"
echo "E2E_KC_ADMIN_PASS=${{ secrets.E2E_STAGE_KC_ADMIN_PASS }}" >> "$GITHUB_ENV"
echo "E2E_ENV=stage" >> "$GITHUB_ENV"
;;
edge)
echo "OPENPROJECT_HOST=${{ secrets.E2E_EDGE_OPENPROJECT_HOST }}" >> "$GITHUB_ENV"
echo "NEXTCLOUD_HOST=${{ secrets.E2E_EDGE_NEXTCLOUD_HOST }}" >> "$GITHUB_ENV"
echo "KEYCLOAK_HOST=${{ secrets.E2E_EDGE_KEYCLOAK_HOST }}" >> "$GITHUB_ENV"
echo "OPENPROJECT_VERSION=${{ secrets.E2E_EDGE_OPENPROJECT_VERSION }}" >> "$GITHUB_ENV"
echo "NEXTCLOUD_VERSION=${{ secrets.E2E_EDGE_NEXTCLOUD_VERSION }}" >> "$GITHUB_ENV"
echo "INTEGRATION_APP_VERSION=${{ secrets.E2E_EDGE_INTEGRATION_APP_VERSION }}" >> "$GITHUB_ENV"
echo "KEYCLOAK_VERSION=${{ secrets.E2E_EDGE_KEYCLOAK_VERSION }}" >> "$GITHUB_ENV"
echo "E2E_OP_ADMIN_USER=${{ secrets.E2E_EDGE_OP_ADMIN_USER }}" >> "$GITHUB_ENV"
echo "E2E_OP_ADMIN_PASS=${{ secrets.E2E_EDGE_OP_ADMIN_PASS }}" >> "$GITHUB_ENV"
echo "E2E_NC_ADMIN_USER=${{ secrets.E2E_EDGE_NC_ADMIN_USER }}" >> "$GITHUB_ENV"
echo "E2E_NC_ADMIN_PASS=${{ secrets.E2E_EDGE_NC_ADMIN_PASS }}" >> "$GITHUB_ENV"
echo "E2E_KC_ADMIN_USER=${{ secrets.E2E_EDGE_KC_ADMIN_USER }}" >> "$GITHUB_ENV"
echo "E2E_KC_ADMIN_PASS=${{ secrets.E2E_EDGE_KC_ADMIN_PASS }}" >> "$GITHUB_ENV"
echo "E2E_ENV=edge" >> "$GITHUB_ENV"
;;
local)
echo "OPENPROJECT_HOST=openproject.test" >> "$GITHUB_ENV"
echo "NEXTCLOUD_HOST=nextcloud.test" >> "$GITHUB_ENV"
echo "KEYCLOAK_HOST=keycloak.test" >> "$GITHUB_ENV"
echo "OPENPROJECT_VERSION=local" >> "$GITHUB_ENV"
echo "NEXTCLOUD_VERSION=local" >> "$GITHUB_ENV"
echo "INTEGRATION_APP_VERSION=local" >> "$GITHUB_ENV"
echo "KEYCLOAK_VERSION=local" >> "$GITHUB_ENV"
echo "E2E_OP_ADMIN_USER=admin" >> "$GITHUB_ENV"
echo "E2E_OP_ADMIN_PASS=admin" >> "$GITHUB_ENV"
echo "E2E_NC_ADMIN_USER=admin" >> "$GITHUB_ENV"
echo "E2E_NC_ADMIN_PASS=admin" >> "$GITHUB_ENV"
echo "E2E_KC_ADMIN_USER=admin" >> "$GITHUB_ENV"
echo "E2E_KC_ADMIN_PASS=admin" >> "$GITHUB_ENV"
echo "E2E_ENV=local" >> "$GITHUB_ENV"
;;
esac
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
- name: Install dependencies
run: npm ci
- name: Install Playwright browsers
run: npx playwright install --with-deps
- name: Run Playwright tests
env:
SETUP_METHOD: ${{ github.event.inputs.setupMethod }}
TAG_GREP: ${{ github.event.inputs.tags }}
run: |
set -euo pipefail
CMD="npx playwright test"
if [ -n "${TAG_GREP:-}" ]; then
CMD="$CMD --grep \"${TAG_GREP}\""
fi
echo "Running: $CMD"
echo "E2E_ENV=${E2E_ENV:-edge}, SETUP_METHOD=${SETUP_METHOD:-}"
eval "$CMD"
- name: Upload Playwright report
if: always()
uses: actions/upload-artifact@v4
with:
name: playwright-report
path: playwright-report