Skip to content

Test on All Platforms #1292

Test on All Platforms

Test on All Platforms #1292

Workflow file for this run

name: Test on All Platforms
on:
workflow_dispatch:
schedule:
- cron: '10 5 * * *' # 6:10 AM CET / 7:10 AM CEST
- cron: '50 11 * * *' # 12:50 PM CET / 1:50 PM CEST
- cron: '30 18 * * *' # 7:30 PM CET / 8:30 PM CEST
jobs:
test:
timeout-minutes: 60
runs-on: ubuntu-24.04
environment: ${{ matrix.testType }}
strategy:
fail-fast: false
matrix:
include:
- testType: complete
platform: react
configFile: playwright.config.complete.ts
- testType: complete
platform: web-js
configFile: playwright.config.complete.ts
playgroundType: web-js
- testType: complete
platform: web-js-script
configFile: playwright.config.complete.ts
playgroundType: web-js-script
- testType: connect
platform: react
configFile: playwright.config.connect.ts
env:
# ── Shared (hardcoded) ──
PLAYWRIGHT_NUM_CORES: 4
DEFAULT_CORBADO_BACKEND_API_BASIC_AUTH: ${{ secrets.DEFAULT_CORBADO_BACKEND_API_BASIC_AUTH }}
# ── "complete" environment secrets (empty on connect runners) ──
PLAYWRIGHT_JWT_TOKEN: ${{ secrets.PLAYWRIGHT_JWT_TOKEN }}
PLAYWRIGHT_GOOGLE_EMAIL: ${{ secrets.PLAYWRIGHT_GOOGLE_EMAIL }}
PLAYWRIGHT_GOOGLE_PASSWORD: ${{ secrets.PLAYWRIGHT_GOOGLE_PASSWORD }}
PLAYWRIGHT_GOOGLE_TOTP_SECRET: ${{ secrets.PLAYWRIGHT_GOOGLE_TOTP_SECRET }}
# ── "connect" environment secrets (empty on complete runners) ──
NEXT_PUBLIC_AWS_COGNITO_USER_POOL_ID: ${{ secrets.AWS_COGNITO_USER_POOL_ID }}
NEXT_PUBLIC_AWS_COGNITO_CLIENT_ID: ${{ vars.NEXT_PUBLIC_AWS_COGNITO_CLIENT_ID }}
PLAYWRIGHT_NGROK_AUTH_TOKEN: ${{ secrets.PLAYWRIGHT_NGROK_AUTH_TOKEN }}
AWS_COGNITO_USER_POOL_ID: ${{ secrets.AWS_COGNITO_USER_POOL_ID }}
AWS_COGNITO_CLIENT_ID: ${{ secrets.AWS_COGNITO_CLIENT_ID }}
AWS_COGNITO_CLIENT_SECRET: ${{ secrets.AWS_COGNITO_CLIENT_SECRET }}
AWS_REGION: ${{ secrets.AWS_REGION }}
AWS_ACCESS_KEY_ID: ${{ secrets.COGNITO_AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.COGNITO_AWS_SECRET_ACCESS_KEY }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 24
- name: Cache node modules
id: cache-npm
uses: actions/cache@v4
env:
cache-name: cache-node-modules
with:
path: |
~/.npm
./node_modules
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}-force-1
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
${{ runner.os }}-build-
${{ runner.os }}-
- if: ${{ steps.cache-npm.outputs.cache-hit != 'true' }}
name: Install root dependencies
run: |
npm i
npm install lerna
npm list
- name: Build SDKs
run: |
npm run build
npm run build:bundler:local
- name: Get installed Playwright version
id: playwright-version
run: echo "version=$(yarn why --json @playwright/test | grep -h 'workspace:.' | jq --raw-output '.children[].locator' | sed -e 's/@playwright\/test@.*://')" >> "$GITHUB_OUTPUT"
- if: ${{ steps.cache-npm.outputs.cache-hit != 'true' }}
name: List the state of node modules
continue-on-error: true
working-directory: packages/tests-e2e
run: npm list
- name: Install dependencies
working-directory: packages/tests-e2e
run: |
npm install
sudo apt-get update
sudo apt-get install -y libxml2-utils
- uses: actions/cache@v4
id: playwright-cache
with:
path: '~/.cache/ms-playwright'
key: '${{ runner.os }}-playwright-${{ steps.playwright-version.outputs.version }}'
restore-keys: |
${{ runner.os }}-playwright-
- name: Install Playwright's dependencies
if: steps.playwright-cache.outputs.cache-hit != 'true'
working-directory: packages/tests-e2e
run: npx playwright install --with-deps
- name: Create CloudWatch log stream
env:
AWS_ACCESS_KEY_ID: ${{ vars.CLOUDWATCH_AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.CLOUDWATCH_AWS_SECRET_ACCESS_KEY }}
AWS_REGION: ${{ secrets.AWS_REGION }}
run: |
TIMESTAMP=$(date +%s000)
RANDOM_SUFFIX=$(head /dev/urandom | tr -dc 'a-z0-9' | head -c 6)
LOG_STREAM_NAME="javascript-${TIMESTAMP}-${RANDOM_SUFFIX}"
echo "LOG_STREAM_NAME=$LOG_STREAM_NAME" >> "$GITHUB_ENV"
aws logs create-log-stream --log-group-name "test-results-board" --log-stream-name "$LOG_STREAM_NAME"
- name: Run ${{ matrix.testType }} tests for ${{ matrix.platform }}
working-directory: packages/tests-e2e
env:
PLAYGROUND_TYPE: ${{ matrix.playgroundType || '' }}
run: npx playwright test --config=${{ matrix.configFile }}
continue-on-error: true
- uses: actions/upload-artifact@v4
if: always()
with:
name: playwright-report-${{ matrix.testType }}-${{ matrix.platform }}
path: packages/tests-e2e/playwright-report/
retention-days: 30
- name: Send results to CloudWatch
if: always()
env:
AWS_ACCESS_KEY_ID: ${{ vars.CLOUDWATCH_AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.CLOUDWATCH_AWS_SECRET_ACCESS_KEY }}
AWS_REGION: ${{ secrets.AWS_REGION }}
run: |
bash scripts/cloudwatch-log.sh \
"${{ matrix.testType }}" \
"${{ matrix.platform }}" \
"nightly"