# 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" 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" permissions: {} jobs: test: runs-on: ${{ inputs.runs-on }} steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 with: node-version-file: .node-version cache: "yarn" - name: Install Deps run: "yarn install --frozen-lockfile" - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 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.artifact }} ${{ runner.os != 'Linux' && '--ignore-snapshots' || '' }} ${{ inputs.blob_report == false && '--reporter=html' || '' }} env: ELEMENT_DESKTOP_EXECUTABLE: ${{ steps.executable.outputs.path }} - name: Upload blob report if: always() && inputs.blob_report uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 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@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: ${{ inputs.artifact }}-test path: playwright-report retention-days: 14