[CI] Temporarily run all workflows on GitHub-hosted runners

This commit is contained in:
2026-10-05 11:32:08 -04:00
parent d409731632
commit 1d1cfa6603
+31 -128
View File
@@ -31,101 +31,7 @@ defaults:
shell: bash
jobs:
select-integration-runner:
name: Select GPU runner (integration)
needs: [build-linux]
runs-on: ubuntu-latest
permissions:
contents: read
outputs:
runner: ${{ steps.select.outputs.runner }}
pool: ${{ steps.select.outputs.pool }}
steps:
- uses: actions/checkout@v6
- name: Test runner selection
run: python3 scripts/ci/test_select_test_runner.py
- name: Check preferred runner availability
id: select
env:
RUNNER_STATUS_TOKEN: ${{ secrets.RUNNER_STATUS_TOKEN }}
run: python3 scripts/ci/select_test_runner.py
select-verify-runner:
name: Select GPU runner (verify)
needs: [build-linux-verify]
runs-on: ubuntu-latest
permissions:
contents: read
outputs:
runner: ${{ steps.select.outputs.runner }}
pool: ${{ steps.select.outputs.pool }}
steps:
- uses: actions/checkout@v6
- name: Test runner selection
run: python3 scripts/ci/test_select_test_runner.py
- name: Check preferred runner availability
id: select
env:
RUNNER_STATUS_TOKEN: ${{ secrets.RUNNER_STATUS_TOKEN }}
run: python3 scripts/ci/select_test_runner.py
select-verify-split-runner:
name: Select GPU runner (verify-split)
needs: [build-linux-verify-split]
runs-on: ubuntu-latest
permissions:
contents: read
outputs:
runner: ${{ steps.select.outputs.runner }}
pool: ${{ steps.select.outputs.pool }}
steps:
- uses: actions/checkout@v6
- name: Test runner selection
run: python3 scripts/ci/test_select_test_runner.py
- name: Check preferred runner availability
id: select
env:
RUNNER_STATUS_TOKEN: ${{ secrets.RUNNER_STATUS_TOKEN }}
run: python3 scripts/ci/select_test_runner.py
select-split-runner:
name: Select GPU runner (split)
needs: [build-linux-split]
runs-on: ubuntu-latest
permissions:
contents: read
outputs:
runner: ${{ steps.select.outputs.runner }}
pool: ${{ steps.select.outputs.pool }}
steps:
- uses: actions/checkout@v6
- name: Test runner selection
run: python3 scripts/ci/test_select_test_runner.py
- name: Check preferred runner availability
id: select
env:
RUNNER_STATUS_TOKEN: ${{ secrets.RUNNER_STATUS_TOKEN }}
run: python3 scripts/ci/select_test_runner.py
select-retrace-runner:
name: Select GPU runner (retrace)
needs: [build-retrace, trace-fixtures]
runs-on: ubuntu-latest
permissions:
contents: read
outputs:
runner: ${{ steps.select.outputs.runner }}
pool: ${{ steps.select.outputs.pool }}
steps:
- uses: actions/checkout@v6
- name: Test runner selection
run: python3 scripts/ci/test_select_test_runner.py
- name: Check preferred runner availability
id: select
env:
RUNNER_STATUS_TOKEN: ${{ secrets.RUNNER_STATUS_TOKEN }}
run: python3 scripts/ci/select_test_runner.py
# Temporarily keep all CI on GitHub-hosted runners while WSL D3D12 readback hangs are investigated.
build-linux:
runs-on: ubuntu-latest
permissions:
@@ -424,8 +330,8 @@ jobs:
integration:
name: integration (${{ matrix.transport }})
runs-on: ${{ fromJSON(needs.select-integration-runner.outputs.runner) }}
needs: [select-integration-runner, build-linux]
runs-on: ubuntu-latest
needs: [build-linux]
strategy:
fail-fast: false
matrix:
@@ -533,7 +439,7 @@ jobs:
run: python3 scripts/ci/junit_annotate.py "${RUNNER_TEMP}"
- name: Upload integration lane evidence
if: ${{ always() && needs.select-integration-runner.result == 'success' }}
if: ${{ always() }}
uses: actions/upload-artifact@v7
with:
name: integration-evidence-${{ matrix.lane }}-${{ matrix.transport }}
@@ -737,9 +643,9 @@ jobs:
# are ALWAYS-ON steps, not a manual exercise: a gate that can only be shown to work by someone
# remembering to break it on purpose is a gate that has already stopped working.
integration-verify:
runs-on: ${{ fromJSON(needs.select-verify-runner.outputs.runner) }}
runs-on: ubuntu-latest
timeout-minutes: 180
needs: [select-verify-runner, build-linux-verify]
needs: [build-linux-verify]
steps:
- name: Checkout repo
@@ -979,7 +885,7 @@ jobs:
echo "the omitted fill point turned the lane red, as it must"
- name: Upload verify lane logs
if: ${{ always() && needs.select-verify-runner.result == 'success' }}
if: ${{ always() }}
uses: actions/upload-artifact@v7
with:
name: integration-verify-logs
@@ -1009,8 +915,8 @@ jobs:
# gPipeInputs and the frontend GLContext) are co-resident only when both roles share a process.
# MG_IntegrationTest/CMakeLists.txt's verify-split block records the spawn measurement.
integration-verify-split:
runs-on: ${{ fromJSON(needs.select-verify-split-runner.outputs.runner) }}
needs: [select-verify-split-runner, build-linux-verify-split]
runs-on: ubuntu-latest
needs: [build-linux-verify-split]
timeout-minutes: 180
steps:
- name: Checkout repo
@@ -1104,7 +1010,7 @@ jobs:
# upload made that worse rather than better, because a failure investigation is exactly
# when the overwritten half is the half somebody needs.
- name: Keep lane logs before controls
if: ${{ always() && needs.select-verify-split-runner.result == 'success' }}
if: ${{ always() }}
working-directory: build-verify-split/MobileGL/MG_IntegrationTest
run: |
rm -rf verify-split-logs-lane
@@ -1221,7 +1127,7 @@ jobs:
run: python3 scripts/ci/junit_annotate.py "${RUNNER_TEMP}"
- name: Upload verify-split lane logs
if: ${{ always() && needs.select-verify-split-runner.result == 'success' }}
if: ${{ always() }}
uses: actions/upload-artifact@v7
with:
name: integration-verify-split-logs
@@ -1469,9 +1375,9 @@ jobs:
# The split lane itself: the three-arm shape ARCHITECTURE.md:521 asks for verbatim, plus the
# first real run of the five MG_Test/Wire suites, plus P5's two exit-gate negative controls.
integration-split:
runs-on: ${{ fromJSON(needs.select-split-runner.outputs.runner) }}
runs-on: ubuntu-latest
timeout-minutes: 120
needs: [select-split-runner, build-linux-split]
needs: [build-linux-split]
steps:
- name: Checkout repo
@@ -1707,7 +1613,7 @@ jobs:
run: python3 scripts/ci/junit_annotate.py "${RUNNER_TEMP}"
- name: Upload split lane logs
if: ${{ always() && needs.select-split-runner.result == 'success' }}
if: ${{ always() }}
uses: actions/upload-artifact@v7
with:
name: integration-split-logs
@@ -1732,9 +1638,9 @@ jobs:
# Configured controls must pass without skips. Capability gaps and known
# limitations are reported separately and accepted only by exact name/reason.
integration-split-strict:
runs-on: ${{ fromJSON(needs.select-split-runner.outputs.runner) }}
runs-on: ubuntu-latest
timeout-minutes: 60
needs: [select-split-runner, build-linux-split]
needs: [build-linux-split]
steps:
- name: Checkout repo
@@ -2241,7 +2147,7 @@ jobs:
--out "${RUNNER_TEMP}/magma-cache-syncval" --execute
- name: Upload Magma run-ahead and cache evidence
if: ${{ always() && needs.select-split-runner.result == 'success' }}
if: ${{ always() }}
uses: actions/upload-artifact@v7
with:
name: magma-runahead-checks
@@ -2310,7 +2216,7 @@ jobs:
run: python3 scripts/ci/junit_annotate.py "${RUNNER_TEMP}"
- name: Upload strict lane logs
if: ${{ always() && needs.select-split-runner.result == 'success' }}
if: ${{ always() }}
uses: actions/upload-artifact@v7
with:
name: integration-split-strict-logs
@@ -2407,8 +2313,8 @@ jobs:
run: python3 scripts/check_include_closure.py --mode both --compiler "${MOBILEGL_CI_CXX}" --self-test --require-all --expect-probes 4
benchmark:
runs-on: ${{ fromJSON(needs.select-integration-runner.outputs.runner) }}
needs: [select-integration-runner, build-linux]
runs-on: ubuntu-latest
needs: [build-linux]
steps:
- name: Checkout repo
@@ -2744,19 +2650,18 @@ jobs:
retrace:
name: retrace (${{ matrix.backend }} / ${{ matrix.transport || 'monolith' }}, ${{ matrix.case }})
runs-on: ${{ fromJSON(needs.select-retrace-runner.outputs.runner) }}
runs-on: ubuntu-latest
env:
MOBILEGL_TRANSPORT: ${{ matrix.transport || 'monolith' }}
MOBILEGL_IPC_ROLE_SPLIT_STATE: "1"
MOBILEGL_IPC_STRICT_ERRORS: "1"
MOBILEGL_IPC_RUN_AHEAD: "1"
needs:
- select-retrace-runner
- build-linux
- build-retrace
- trace-cases
- trace-fixtures
if: ${{ always() && needs.select-retrace-runner.result == 'success' && needs.build-linux.result == 'success' && needs.build-retrace.result == 'success' && needs.trace-cases.result == 'success' }}
if: ${{ always() && needs.build-linux.result == 'success' && needs.build-retrace.result == 'success' && needs.trace-cases.result == 'success' }}
strategy:
fail-fast: false
max-parallel: 4
@@ -2864,7 +2769,7 @@ jobs:
if-no-files-found: ignore
- name: Upload actual image
if: ${{ always() && needs.select-retrace-runner.result == 'success' }}
if: ${{ always() }}
uses: actions/upload-artifact@v7
with:
name: retrace-result-${{ matrix.lane || 'monolith-control' }}-${{ matrix.transport || 'monolith' }}-${{ matrix.backend }}-${{ matrix.case }}
@@ -2953,15 +2858,14 @@ jobs:
# is budgeted at 5-10x, and the full sweep is a phase-exit / workflow_dispatch run.
retrace-verify:
name: retrace verify (${{ matrix.backend }}, ${{ matrix.case }})
runs-on: ${{ fromJSON(needs.select-retrace-runner.outputs.runner) }}
runs-on: ubuntu-latest
timeout-minutes: 240
needs:
- select-retrace-runner
- build-linux-verify
- build-retrace
- trace-cases
- trace-fixtures
if: ${{ always() && needs.select-retrace-runner.result == 'success' && needs.build-linux-verify.result == 'success' && needs.build-retrace.result == 'success' && needs.trace-cases.result == 'success' }}
if: ${{ always() && needs.build-linux-verify.result == 'success' && needs.build-retrace.result == 'success' && needs.trace-cases.result == 'success' }}
strategy:
fail-fast: false
max-parallel: 4
@@ -3112,7 +3016,7 @@ jobs:
if-no-files-found: ignore
- name: Upload actual image
if: ${{ always() && needs.select-retrace-runner.result == 'success' }}
if: ${{ always() }}
uses: actions/upload-artifact@v7
with:
name: retrace-verify-result-${{ matrix.backend }}-${{ matrix.case }}
@@ -3146,11 +3050,10 @@ jobs:
# transport-resolution line in the library's own log (this PROCESS resolved inproc).
retrace-split:
name: retrace split (${{ matrix.backend }} / ${{ matrix.transport }}, ${{ matrix.case }})
runs-on: ${{ fromJSON(needs.select-retrace-runner.outputs.runner) }}
runs-on: ubuntu-latest
timeout-minutes: 240
# The setup action selects Dozen on Arch WSL or lavapipe on GitHub.
# The setup action selects lavapipe on GitHub-hosted runners.
needs:
- select-retrace-runner
- build-linux-monolith-control
- build-linux-split
- build-retrace
@@ -3158,7 +3061,7 @@ jobs:
- trace-fixtures
# The separate OFF/pull artifact is for the negative control ONLY: its library is what the control
# swaps in to prove the transport-resolution assertion is load-bearing.
if: ${{ always() && needs.select-retrace-runner.result == 'success' && needs.build-linux-monolith-control.result == 'success' && needs.build-linux-split.result == 'success' && needs.build-retrace.result == 'success' && needs.trace-cases.result == 'success' }}
if: ${{ always() && needs.build-linux-monolith-control.result == 'success' && needs.build-linux-split.result == 'success' && needs.build-retrace.result == 'success' && needs.trace-cases.result == 'success' }}
strategy:
fail-fast: false
max-parallel: 4
@@ -3408,7 +3311,7 @@ jobs:
# slot names are what MEASUREMENTS wants from every split run, and reading them out of the
# library's own log is the only way to get them (ctest -V's transcript is a false zero).
- name: Refusal census from the library log
if: ${{ always() && needs.select-retrace-runner.result == 'success' }}
if: ${{ always() }}
working-directory: build-retrace/tools/trace_replay
run: |
# BOTH ROLES, because under spawn every applier refusal is raised in the SERVER's
@@ -3438,7 +3341,7 @@ jobs:
if-no-files-found: ignore
- name: Upload actual image
if: ${{ always() && needs.select-retrace-runner.result == 'success' }}
if: ${{ always() }}
uses: actions/upload-artifact@v7
with:
name: retrace-split-result-${{ matrix.transport }}-${{ matrix.backend }}-${{ matrix.case }}