name: Playwright Run description: > Run Playwright E2E tests for one shard and upload the blob report as an artifact. Call this from a matrix job. Use the playwright-merge action in a follow-up job to produce the final HTML + JUnit report. inputs: working-directory: description: Directory containing package.json and playwright.config.ts required: false default: "." node-version: description: Node.js version required: false default: "24" pnpm-version: description: pnpm version required: false default: "10.33" jfrog-token: description: JFrog npm auth token required: false default: "" shard-index: description: Current shard index (1-based). Set to 1 when not sharding. required: false default: "1" shard-total: description: Total number of shards. Set to 1 to disable sharding. required: false default: "1" artifact-retention-days: description: Number of days to retain the blob report artifact required: false default: "3" runs: using: composite steps: - name: Install dependencies uses: https://schmalz-git.git.onstackit.cloud/schmalz/shared-actions/pnpm-build@pnpm-build-v1 with: working-directory: ${{ inputs.working-directory }} node-version: ${{ inputs.node-version }} pnpm-version: ${{ inputs.pnpm-version }} jfrog-token: ${{ inputs.jfrog-token }} run-scripts: "" frozen-lockfile: "true" check-dedupe: "false" - name: Cache Playwright browsers id: playwright-cache uses: https://schmalz-git.git.onstackit.cloud/schmalz/shared-actions/cache@cache-v1 with: path: ~/.cache/ms-playwright key: ${{ runner.os }}-playwright-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: ${{ runner.os }}-playwright- - name: Install Playwright browsers if: ${{ steps.playwright-cache.outputs.cache-hit != 'true' }} shell: bash env: WORKING_DIR: ${{ inputs.working-directory }} run: pnpm --prefix="${WORKING_DIR}" exec playwright install --with-deps - name: Run Playwright tests shell: bash env: CI: "true" WORKING_DIR: ${{ inputs.working-directory }} SHARD_INDEX: ${{ inputs.shard-index }} SHARD_TOTAL: ${{ inputs.shard-total }} run: | SHARD_ARG="" if [ "${SHARD_TOTAL}" != "1" ]; then SHARD_ARG="--shard=${SHARD_INDEX}/${SHARD_TOTAL}" fi pnpm --prefix="${WORKING_DIR}" exec playwright test ${SHARD_ARG} --reporter=blob,dot - name: Upload blob report if: ${{ !cancelled() }} uses: https://schmalz-git.git.onstackit.cloud/schmalz/shared-actions/upload-artifact@upload-artifact-v1 with: name: blob-report-${{ inputs.shard-index }} path: ${{ inputs.working-directory }}/blob-report/ retention-days: ${{ inputs.artifact-retention-days }} if-no-files-found: ignore