name: Playwright Merge description: > Download all blob reports from shard jobs, merge them into a single HTML + JUnit report, upload the HTML report to S3, and upload the JUnit report as an artifact. Call this in a follow-up job after all playwright-run shard jobs complete. 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: "" role-arn: description: IAM role ARN for AWS authentication required: true aws-access-key-id: description: AWS access key ID required: true aws-secret-access-key: description: AWS secret access key required: true project-name: description: Project name used as the folder in the report bucket (e.g. hs-pricelist) required: true publish-test-reports: description: Whether to upload the report to S3 and print the URL at https://test-reports.schmalz.com. Set to false to skip upload entirely. required: false default: "true" runs: using: composite steps: - name: Install AWS CLI shell: bash run: | if ! command -v aws &>/dev/null; then curl -fsSL "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o /tmp/awscliv2.zip unzip -q /tmp/awscliv2.zip -d /tmp sudo /tmp/aws/install rm -rf /tmp/awscliv2.zip /tmp/aws fi - name: Configure AWS uses: https://schmalz-git.git.onstackit.cloud/schmalz/shared-actions/aws-configure@aws-configure-v1 with: role-arn: ${{ inputs.role-arn }} aws-access-key-id: ${{ inputs.aws-access-key-id }} aws-secret-access-key: ${{ inputs.aws-secret-access-key }} - 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: Download blob reports uses: https://schmalz-git.git.onstackit.cloud/schmalz/shared-actions/download-artifact@download-artifact-v1 with: path: ${{ inputs.working-directory }}/all-blob-reports/ merge-multiple: "true" - name: Merge blob reports shell: bash env: CI: "true" WORKING_DIR: ${{ inputs.working-directory }} PLAYWRIGHT_JUNIT_OUTPUT_NAME: test-results/junit.xml run: | cd "${WORKING_DIR}" pnpm exec playwright merge-reports \ --reporter=html,junit \ all-blob-reports/ - name: Upload report to S3 if: ${{ inputs.publish-test-reports == 'true' }} shell: bash env: WORKING_DIR: ${{ inputs.working-directory }} PROJECT_NAME: ${{ inputs.project-name }} run: | TIMESTAMP=$(date +%s) S3_BUCKET=com.schmalz.db.stage.test-reports S3_PATH="s3://${S3_BUCKET}/reports/${PROJECT_NAME}/${TIMESTAMP}" aws s3 sync "${WORKING_DIR}/playwright-report/" "${S3_PATH}/" if [ -f "${WORKING_DIR}/test-results/junit.xml" ]; then aws s3 cp "${WORKING_DIR}/test-results/junit.xml" "${S3_PATH}/junit.xml" fi echo "Report URL: https://test-reports.schmalz.com/reports/${PROJECT_NAME}/${TIMESTAMP}/index.html"