| name: Linux WPT Tests |
| on: |
| workflow_call: |
| inputs: |
| profile: |
| required: true |
| type: string |
| wpt-args: |
| default: "" |
| required: false |
| type: string |
| wpt-sync-from-upstream: |
| default: false |
| required: false |
| type: boolean |
| number-of-wpt-chunks: |
| default: 20 |
| required: false |
| type: number |
| |
| env: |
| RUST_BACKTRACE: 1 |
| SHELL: /bin/bash |
| GST_PLUGIN_FEATURE_RANK: pulsesink:NONE,alsasink:NONE,jacksink:NONE,fakesink:MAX |
| INTERMITTENT_TRACKER_DASHBOARD_SECRET: ${{ !inputs.wpt-sync-from-upstream && secrets.INTERMITTENT_TRACKER_DASHBOARD_SECRET || '' }} |
| INTERMITTENT_TRACKER_DASHBOARD_SECRET_PROD: ${{ !inputs.wpt-sync-from-upstream && secrets.INTERMITTENT_TRACKER_DASHBOARD_SECRET_PROD || '' }} |
| INTERMITTENT_TRACKER_DASHBOARD_SECRET_STAGING: ${{ !inputs.wpt-sync-from-upstream && secrets.INTERMITTENT_TRACKER_DASHBOARD_SECRET_STAGING || '' }} |
| WPT_ALWAYS_SUCCEED_ARG: "${{ inputs.wpt-sync-from-upstream && '--always-succeed' || '' }}" |
| |
| jobs: |
| chunks: |
| name: Generate chunks array |
| runs-on: ubuntu-22.04 |
| outputs: |
| chunks-array: ${{ steps.generate-chunks-array.outputs.result }} |
| steps: |
| - uses: actions/github-script@v7 |
| id: generate-chunks-array |
| with: |
| script: | |
| return Array.from({length: ${{ inputs.number-of-wpt-chunks }}}, (_, i) => i + 1) |
| linux-wpt: |
| name: WPT |
| runs-on: ubuntu-22.04 |
| needs: chunks |
| strategy: |
| fail-fast: false |
| matrix: |
| chunk_id: ${{ fromJson(needs.chunks.outputs.chunks-array) }} |
| steps: |
| - uses: actions/checkout@v4 |
| if: github.event_name != 'pull_request_target' |
| # This is necessary to checkout the pull request if this run was triggered via a |
| # `pull_request_target` event. |
| - uses: actions/checkout@v4 |
| if: github.event_name == 'pull_request_target' |
| with: |
| ref: refs/pull/${{ github.event.number }}/head |
| - uses: actions/download-artifact@v4 |
| with: |
| name: ${{ inputs.profile }}-binary-linux |
| path: ${{ inputs.profile }}-binary-linux |
| - name: unPackage binary |
| run: tar -xzf ${{ inputs.profile }}-binary-linux/target.tar.gz |
| - name: Setup Python |
| uses: ./.github/actions/setup-python |
| - name: Change Mirror Priorities |
| uses: ./.github/actions/apt-mirrors |
| - name: Bootstrap dependencies |
| timeout-minutes: 10 |
| run: | |
| sudo apt update |
| sudo apt install -qy --no-install-recommends mesa-vulkan-drivers fonts-noto-cjk |
| ./mach bootstrap --skip-lints |
| - name: Sync from upstream WPT |
| if: ${{ inputs.wpt-sync-from-upstream }} |
| run: | |
| ./mach update-wpt --sync --patch |
| - name: Run tests |
| run: | |
| mkdir -p wpt-filtered-logs/linux |
| mkdir -p wpt-full-logs/linux |
| ./mach test-wpt \ |
| $WPT_ALWAYS_SUCCEED_ARG \ |
| --${{ inputs.profile }} --processes $(nproc) --timeout-multiplier 2 \ |
| --total-chunks ${{ inputs.number-of-wpt-chunks }} --this-chunk ${{ matrix.chunk_id }} \ |
| --log-raw wpt-full-logs/linux/raw/${{ matrix.chunk_id }}.log \ |
| --log-wptreport wpt-full-logs/linux/wptreport/${{ matrix.chunk_id }}.json \ |
| --log-raw-unexpected wpt-filtered-logs/linux/${{ matrix.chunk_id }}.log \ |
| --filter-intermittents wpt-filtered-logs/linux/${{ matrix.chunk_id }}.json \ |
| ${{ inputs.wpt-args }} |
| env: |
| GITHUB_CONTEXT: ${{ toJson(github) }} |
| - name: Archive results (filtered) |
| uses: actions/upload-artifact@v4 |
| if: ${{ always() }} |
| with: |
| name: wpt-filtered-logs-linux-${{ matrix.chunk_id }} |
| path: wpt-filtered-logs/*/ |
| - name: Archive results (full) |
| uses: actions/upload-artifact@v4 |
| if: ${{ always() }} |
| with: |
| name: wpt-full-logs-linux-${{ matrix.chunk_id }} |
| path: wpt-full-logs/*/ |
| |
| report-test-results: |
| name: Process WPT Results |
| runs-on: ubuntu-latest |
| if: ${{ always() }} |
| needs: linux-wpt |
| steps: |
| - name: Merge logs (full) |
| uses: actions/upload-artifact/merge@v4 |
| with: |
| name: wpt-full-logs-linux |
| pattern: wpt-full-logs-linux-* |
| delete-merged: true |
| # This job needs to be last. If no filtered results were uploaded, it will fail, but we want to merge other archives in that case. |
| - name: Merge logs (filtered) |
| uses: actions/upload-artifact/merge@v4 |
| with: |
| name: wpt-filtered-logs-linux |
| pattern: wpt-filtered-logs-linux-* |
| delete-merged: true |
| - uses: actions/checkout@v4 |
| if: ${{ !cancelled() && !inputs.wpt-sync-from-upstream }} |
| - uses: actions/download-artifact@v4 |
| if: ${{ !cancelled() && !inputs.wpt-sync-from-upstream }} |
| with: |
| name: wpt-filtered-logs-linux |
| path: results |
| - name: Report results |
| if: ${{ !cancelled() && !inputs.wpt-sync-from-upstream }} |
| run: | |
| etc/ci/report_aggregated_expected_results.py \ |
| --tag="linux-wpt" \ |
| results/linux/*.json |
| env: |
| GITHUB_CONTEXT: ${{ toJson(github) }} |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
| RESULTS: ${{ toJson(needs.*.result) }} |