# This action helps run Playwright tests within one of the build_* stages. on: workflow_call: inputs: runs-on: type: string required: true description: "The runner image to use" artifact: type: string required: true description: "The name of the artifact to download" project: type: string required: true description: "The Playwright project to use for testing" executable: type: string required: true description: "Path to the executable to test" prepare_cmd: type: string required: false description: "Command to run to prepare the executable or environment for testing" blob_report: type: boolean default: false description: "Whether to upload a blob report instead of the HTML report" args: type: string required: false description: "Additional arguments to pass to playwright, for e.g. skipping specific tests" permissions: {} jobs: test: name: Test ${{ inputs.project }} runs-on: ${{ inputs.runs-on }} steps: - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6 with: repository: ${{ github.repository == 'element-hq/element-web-pro' && 'element-hq/element-desktop' || github.repository }} - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6 with: node-version-file: .node-version cache: "yarn" - name: Install Deps run: "yarn install --frozen-lockfile" - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7 with: name: ${{ inputs.artifact }} path: dist - name: Prepare for tests run: ${{ inputs.prepare_cmd }} if: inputs.prepare_cmd - name: Expand executable path id: executable shell: bash env: EXECUTABLE: ${{ inputs.executable }} run: | FILES=($EXECUTABLE) echo "path=${FILES[0]}" >> $GITHUB_OUTPUT # We previously disabled the `EnableNodeCliInspectArguments` fuse, but Playwright requires # it to be enabled to test Electron apps, so turn it back on. - name: Set EnableNodeCliInspectArguments fuse enabled run: $RUN_AS npx @electron/fuses write --app "$EXECUTABLE" EnableNodeCliInspectArguments=on shell: bash env: # We need sudo on Linux as it is installed in /opt/ RUN_AS: ${{ runner.os == 'Linux' && 'sudo' || '' }} EXECUTABLE: ${{ steps.executable.outputs.path }} - name: Run tests uses: coactions/setup-xvfb@6b00cf1889f4e1d5a48635647013c0508128ee1a timeout-minutes: 20 with: run: yarn test --project=${{ inputs.project }} ${{ runner.os != 'Linux' && '--ignore-snapshots' || '' }} ${{ inputs.blob_report == false && '--reporter=html' || '' }} ${{ inputs.args }} env: ELEMENT_DESKTOP_EXECUTABLE: ${{ steps.executable.outputs.path }} - name: Upload blob report if: always() && inputs.blob_report uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6 with: name: blob-report-${{ inputs.artifact }} path: blob-report retention-days: 1 - name: Upload HTML report if: always() && inputs.blob_report == false uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6 with: name: ${{ inputs.artifact }}-test path: playwright-report retention-days: 14