mirror of
https://github.com/suitenumerique/docs.git
synced 2026-08-17 21:25:43 +02:00
We don't maintain the test-e2e-other-browser job, and it often fails due to various reasons. To avoid unnecessary noise in our CI pipeline, we will remove this job. We are adding workflow_dispatch trigger to the e2e-tests workflow, so that we can still run e2e tests on other browsers when needed from the Github actions UI.
179 lines
6.0 KiB
YAML
179 lines
6.0 KiB
YAML
name: E2E Tests
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
browser-name:
|
|
description: "Name used for cache keys and artifact names (e.g. chromium, other-browser)"
|
|
required: false
|
|
default: "other-browser"
|
|
type: string
|
|
projects:
|
|
description: "Playwright --project flags (e.g. --project=firefox --project=webkit)"
|
|
required: false
|
|
default: "--project=firefox --project=webkit"
|
|
type: string
|
|
timeout-minutes:
|
|
description: "Job timeout in minutes"
|
|
required: false
|
|
default: "30"
|
|
type: string
|
|
workflow_call:
|
|
inputs:
|
|
browser-name:
|
|
description: "Name used for cache keys and artifact names (e.g. chromium, other-browser)"
|
|
required: true
|
|
type: string
|
|
projects:
|
|
description: "Playwright --project flags (e.g. --project=chromium)"
|
|
required: true
|
|
type: string
|
|
timeout-minutes:
|
|
description: "Job timeout in minutes"
|
|
required: false
|
|
type: number
|
|
default: 30
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
install-dependencies:
|
|
uses: ./.github/workflows/dependencies.yml
|
|
with:
|
|
node_version: "22.x"
|
|
with-front-dependencies-installation: true
|
|
|
|
prepare-e2e:
|
|
runs-on: ubuntu-latest
|
|
needs: install-dependencies
|
|
timeout-minutes: 10
|
|
permissions:
|
|
contents: read
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
|
|
- name: Setup Node.js
|
|
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6
|
|
with:
|
|
node-version: "22.x"
|
|
|
|
- name: Restore the frontend cache
|
|
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5
|
|
with:
|
|
path: "src/frontend/**/node_modules"
|
|
key: front-node_modules-${{ hashFiles('src/frontend/**/yarn.lock') }}
|
|
fail-on-cache-miss: true
|
|
|
|
- name: Restore Playwright browsers cache
|
|
id: playwright-cache
|
|
uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5
|
|
with:
|
|
path: ~/.cache/ms-playwright
|
|
key: playwright-${{ runner.os }}-${{ hashFiles('src/frontend/yarn.lock', 'src/frontend/apps/e2e/yarn.lock') }}
|
|
restore-keys: |
|
|
playwright-${{ runner.os }}-
|
|
|
|
- name: Install Playwright browsers
|
|
if: steps.playwright-cache.outputs.cache-hit != 'true'
|
|
run: |
|
|
cd src/frontend/apps/e2e
|
|
yarn install-playwright chromium firefox webkit
|
|
|
|
- name: Save Playwright browsers cache
|
|
if: steps.playwright-cache.outputs.cache-hit != 'true'
|
|
uses: actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5
|
|
with:
|
|
path: ~/.cache/ms-playwright
|
|
key: ${{ steps.playwright-cache.outputs.cache-primary-key }}
|
|
|
|
test-e2e:
|
|
needs: prepare-e2e
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: ${{ inputs.timeout-minutes }}
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
|
|
- name: Setup Node.js
|
|
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6
|
|
with:
|
|
node-version: "22.x"
|
|
|
|
- name: Restore the frontend cache
|
|
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5
|
|
with:
|
|
path: "src/frontend/**/node_modules"
|
|
key: front-node_modules-${{ hashFiles('src/frontend/**/yarn.lock') }}
|
|
fail-on-cache-miss: true
|
|
|
|
- name: Set e2e env variables
|
|
run: cat env.d/development/common.e2e >> env.d/development/common.local
|
|
|
|
- name: Restore Playwright browsers cache
|
|
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5
|
|
with:
|
|
path: ~/.cache/ms-playwright
|
|
key: playwright-${{ runner.os }}-${{ hashFiles('src/frontend/yarn.lock', 'src/frontend/apps/e2e/yarn.lock') }}
|
|
fail-on-cache-miss: true
|
|
|
|
- name: Free disk space before Docker
|
|
uses: ./.github/actions/free-disk-space
|
|
|
|
- name: Start Docker services
|
|
run: make bootstrap-e2e FLUSH_ARGS='--no-input'
|
|
|
|
- name: Restore last-run cache
|
|
if: ${{ github.run_attempt > 1 }}
|
|
id: restore-last-run
|
|
uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5
|
|
with:
|
|
path: src/frontend/apps/e2e/test-results/.last-run.json
|
|
key: playwright-last-run-${{ github.run_id }}-${{ inputs.browser-name }}
|
|
|
|
- name: Run e2e tests
|
|
env:
|
|
PLAYWRIGHT_LIST_PRINT_STEPS: true
|
|
FORCE_COLOR: true
|
|
run: |
|
|
cd src/frontend/
|
|
|
|
LAST_FAILED_FLAG=""
|
|
if [ "${{ github.run_attempt }}" != "1" ]; then
|
|
LAST_RUN_FILE="apps/e2e/test-results/.last-run.json"
|
|
if [ -f "$LAST_RUN_FILE" ]; then
|
|
FAILED_COUNT=$(jq '.failedTests | length' "$LAST_RUN_FILE" 2>/dev/null || echo "0")
|
|
if [ "${FAILED_COUNT:-0}" -gt "0" ]; then
|
|
LAST_FAILED_FLAG="--last-failed"
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
yarn e2e:test ${{ inputs.projects }} $LAST_FAILED_FLAG
|
|
|
|
- name: Save last-run cache
|
|
if: always()
|
|
uses: actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5
|
|
with:
|
|
path: src/frontend/apps/e2e/test-results/.last-run.json
|
|
key: playwright-last-run-${{ github.run_id }}-${{ inputs.browser-name }}
|
|
|
|
- name: Upload last-run artifact
|
|
if: always()
|
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
with:
|
|
name: playwright-instance-last-run-${{ inputs.browser-name }}
|
|
path: src/frontend/apps/e2e/test-results/.last-run.json
|
|
include-hidden-files: true
|
|
if-no-files-found: warn
|
|
retention-days: 7
|
|
|
|
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
if: always()
|
|
with:
|
|
name: playwright-${{ inputs.browser-name }}-report
|
|
path: src/frontend/apps/e2e/report/
|
|
retention-days: 7
|