From 48e4bce28e46b0161dbc8ca6b9dd2a3c2867d0d6 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Fri, 12 Jun 2026 11:18:52 +0100 Subject: [PATCH] Use PR labels to request additional CI to run (#33829) * Run all desktop platform tests on PR with `A-Electron` label * Run modules tests on PR with `A-Modules` label * Fix matrix configuration * Iterate --- .github/workflows/build-and-test.yaml | 52 ++++++++++++++------------- 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/.github/workflows/build-and-test.yaml b/.github/workflows/build-and-test.yaml index e367a64450..b348ea6739 100644 --- a/.github/workflows/build-and-test.yaml +++ b/.github/workflows/build-and-test.yaml @@ -47,7 +47,7 @@ env: permissions: {} # No permissions required jobs: - build_ew: + prepare: name: "Build Element Web" runs-on: ubuntu-24.04 if: inputs.skip != true @@ -56,6 +56,10 @@ jobs: runners-matrix: ${{ steps.runner-vars.outputs.matrix }} # Skip pull_request runs on renovate PRs to speed up CI time, delegating to the full run in merge queue skip: ${{ inputs.skip || (github.event_name == 'pull_request' && startsWith(github.head_ref, 'renovate/')) }} + # If the A-Electron label is present on a PR, build & test all desktop platforms. + run-all-desktop: ${{ github.event_name != 'pull_request' || contains(github.event.pull_request.labels.*.name, 'A-Electron') }} + # If the A-Modules label is present on a PR, run the modules tests. + run-modules: ${{ github.event_name != 'pull_request' || contains(github.event.pull_request.labels.*.name, 'A-Modules') }} steps: - name: Checkout code uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 @@ -102,9 +106,9 @@ jobs: core.setOutput("matrix", JSON.stringify(matrix)); playwright_ew: - name: "Run Tests [${{ matrix.project }}] ${{ matrix.runner }}/${{ needs.build_ew.outputs.num-runners }}" - needs: build_ew - if: needs.build_ew.outputs.skip == 'false' + name: "Run Tests [${{ matrix.project }}] ${{ matrix.runner }}/${{ needs.prepare.outputs.num-runners }}" + needs: prepare + if: needs.prepare.outputs.skip == 'false' runs-on: ubuntu-24.04 permissions: actions: read @@ -114,7 +118,7 @@ jobs: fail-fast: false matrix: # Run multiple instances in parallel to speed up the tests - runner: ${{ fromJSON(needs.build_ew.outputs.runners-matrix) }} + runner: ${{ fromJSON(needs.prepare.outputs.runners-matrix) }} project: - Chrome - Firefox @@ -170,7 +174,7 @@ jobs: --project="${{ matrix.project }}" \ ${{ (github.event_name == 'pull_request' && matrix.runAllTests == false ) && '--grep-invert @mergequeue' || '' }} env: - SHARD: ${{ format('{0}/{1}', matrix.runner, needs.build_ew.outputs.num-runners) }} + SHARD: ${{ format('{0}/{1}', matrix.runner, needs.prepare.outputs.num-runners) }} - name: Upload blob report to GitHub Actions Artifacts if: always() @@ -183,8 +187,8 @@ jobs: modules: name: Modules Playwright tests - needs: build_ew - if: needs.build_ew.outputs.skip == 'false' && github.event_name == 'merge_group' + needs: prepare + if: needs.prepare.outputs.skip == 'false' && needs.prepare.outputs.run-modules == 'true' runs-on: ubuntu-24.04-arm steps: - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 @@ -232,8 +236,8 @@ jobs: prepare_ed: name: "Prepare Element Desktop" uses: ./.github/workflows/build_desktop_prepare.yaml - needs: build_ew - if: needs.build_ew.outputs.skip == 'false' + needs: prepare + if: needs.prepare.outputs.skip == 'false' permissions: contents: read with: @@ -242,11 +246,11 @@ jobs: webapp-artifact: webapp build_ed_windows: - needs: prepare_ed + needs: [prepare, prepare_ed] name: "Desktop Windows" uses: ./.github/workflows/build_desktop_windows.yaml # Skip Windows builds on PRs, as the Linux amd64 build is enough of a smoke test and includes the screenshot tests - if: github.event_name != 'pull_request' || contains(github.event.pull_request.labels.*.name, 'X-Run-All-Tests') + if: needs.prepare.outputs.run-all-desktop == 'true' strategy: matrix: arch: [x64, ia32, arm64] @@ -255,7 +259,7 @@ jobs: blob_report: true build_ed_linux: - needs: prepare_ed + needs: [prepare, prepare_ed] name: "Desktop Linux" uses: ./.github/workflows/build_desktop_linux.yaml strategy: @@ -263,7 +267,7 @@ jobs: sqlcipher: [system, static] arch: [amd64, arm64] runAllTests: - - ${{ github.event_name != 'pull_request' || contains(github.event.pull_request.labels.*.name, 'X-Run-All-Tests') }} + - ${{ needs.prepare.outputs.run-all-desktop == 'true' }} exclude: # We ship static sqlcipher builds, so delegate testing the system builds to the merge queue - runAllTests: false @@ -277,19 +281,19 @@ jobs: blob_report: true build_ed_macos: - needs: prepare_ed + needs: [prepare, prepare_ed] name: "Desktop macOS" uses: ./.github/workflows/build_desktop_macos.yaml # Skip macOS builds on PRs, as the Linux amd64 build is enough of a smoke test and includes the screenshot tests # and we have a very low limit of concurrent macos runners (5) across the Github org. - if: github.event_name != 'pull_request' || contains(github.event.pull_request.labels.*.name, 'X-Run-All-Tests') + if: needs.prepare.outputs.run-all-desktop == 'true' with: blob_report: true complete: name: end-to-end-tests needs: - - build_ew + - prepare - playwright_ew - modules - prepare_ed @@ -300,25 +304,25 @@ jobs: runs-on: ubuntu-24.04 steps: - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - if: needs.build_ew.outputs.skip == 'false' + if: needs.prepare.outputs.skip == 'false' with: persist-credentials: false repository: element-hq/element-web - uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8 - if: needs.build_ew.outputs.skip == 'false' + if: needs.prepare.outputs.skip == 'false' - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 - if: needs.build_ew.outputs.skip == 'false' + if: needs.prepare.outputs.skip == 'false' with: cache: "pnpm" node-version: "lts/*" - name: Install dependencies - if: needs.build_ew.outputs.skip == 'false' + if: needs.prepare.outputs.skip == 'false' run: pnpm install --frozen-lockfile - name: Download blob reports from GitHub Actions Artifacts - if: needs.build_ew.outputs.skip == 'false' + if: needs.prepare.outputs.skip == 'false' uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 with: pattern: blob-report-* @@ -326,7 +330,7 @@ jobs: merge-multiple: true - name: Merge into HTML Report - if: needs.build_ew.outputs.skip == 'false' + if: needs.prepare.outputs.skip == 'false' run: | pnpm playwright merge-reports \ --config=playwright-merge.config.ts \ @@ -338,7 +342,7 @@ jobs: # Upload the HTML report even if one of our reporters fails, this can happen when stale screenshots are detected - name: Upload HTML report - if: always() && needs.build_ew.outputs.skip == 'false' + if: always() && needs.prepare.outputs.skip == 'false' uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: html-report