mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-11-07 01:53:24 +09:00
[CI] (.github/actions, .github/workflows): run serial lanes at -j, retrace on the library alone
- unit, integration and integration-verify ctest run at -j nproc; the same labels already run at -j in the split lanes, with the same names and results - build-linux, -split and -verify also publish the library (and the server image) alone; the retrace legs load nothing else, yet downloaded and unpacked the 0.5-0.8 GB test runtime - build-retrace no longer waits for build-linux: it fetched the runtime only to test -f a path configure does not read - every branch saves its own rolling ccache entry, deleting only its own old one (--ref); only dev saved, and dev has not run since the key rename, so every build was cold - !cancelled() replaces job-level always() on the retrace, summary and skip-census jobs: a superseded run kept starting its pending legs and held the next run in the concurrency group for up to 154 minutes - retrace and retrace-split run 8 legs at a time, not 4; the cap dates from per-leg LFS checkouts - apt requests time out after 30 s and retry 3 times; install steps time out at 15 minutes, not 45 - the APK trace case matrix no longer waits for the build, which it does not read - retrace-split prepares its metadata once, after the split library is unpacked
This commit is contained in:
@@ -38,4 +38,10 @@ runs:
|
||||
echo 'VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/lvp_icd.json'
|
||||
echo 'VK_DRIVER_FILES=/usr/share/vulkan/icd.d/lvp_icd.json'
|
||||
} >> "$GITHUB_ENV"
|
||||
# A stalled mirror must fail a request and retry it, not hold the install step until
|
||||
# its timeout.
|
||||
if [ -d /etc/apt/apt.conf.d ] && command -v sudo > /dev/null; then
|
||||
printf 'Acquire::Retries "3";\nAcquire::http::Timeout "30";\nAcquire::https::Timeout "30";\n' |
|
||||
sudo tee /etc/apt/apt.conf.d/80-mobilegl-ci-network > /dev/null
|
||||
fi
|
||||
fi
|
||||
|
||||
+11
-16
@@ -77,10 +77,10 @@ jobs:
|
||||
${{ runner.os }}-apk-${{ github.job }}-ccache-
|
||||
|
||||
- name: Install ccache
|
||||
timeout-minutes: 45
|
||||
timeout-minutes: 15
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y ccache
|
||||
sudo apt-get -o Acquire::Retries=3 -o Acquire::http::Timeout=30 update
|
||||
sudo apt-get -o Acquire::Retries=3 -o Acquire::http::Timeout=30 install -y ccache
|
||||
ccache --version
|
||||
|
||||
- name: Setup Android SDK
|
||||
@@ -183,22 +183,18 @@ jobs:
|
||||
if: always()
|
||||
run: ccache --show-stats
|
||||
|
||||
# Rewrite one rolling entry per job on the default branch. The upload stays
|
||||
# cumulative - it carries every object restored at the top of this run plus
|
||||
# the few TUs that actually changed - but Actions cache keys are immutable,
|
||||
# so the superseded blob has to be released before the same key can be
|
||||
# re-uploaded. Running after the build means a failed build leaves the
|
||||
# existing entry untouched. The other trigger branches restore this entry
|
||||
# rather than each writing a ~4 GB one of their own.
|
||||
# Rewrite one rolling entry per job and branch. The upload stays cumulative - it
|
||||
# carries every object restored at the top of this run plus the few TUs that
|
||||
# changed - but Actions cache keys are immutable, so this branch's superseded
|
||||
# blob is released first; --ref keeps the delete off other branches' entries.
|
||||
# Running after the build means a failed build leaves the entry untouched.
|
||||
- name: Release superseded ccache entry
|
||||
if: github.ref_name == github.event.repository.default_branch
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
CACHE_KEY: ${{ runner.os }}-apk-${{ github.job }}-ccache-v1
|
||||
run: gh cache delete "${CACHE_KEY}" || true
|
||||
run: gh cache delete "${CACHE_KEY}" --ref "${GITHUB_REF}" || true
|
||||
|
||||
- name: Save ccache
|
||||
if: github.ref_name == github.event.repository.default_branch
|
||||
continue-on-error: true
|
||||
uses: actions/cache/save@v5
|
||||
with:
|
||||
@@ -254,7 +250,6 @@ jobs:
|
||||
trace-cases:
|
||||
name: trace case matrix
|
||||
runs-on: ubuntu-latest
|
||||
needs: build
|
||||
env:
|
||||
MOBILEGL_CI_DISAGGREGATED: ${{ (github.ref_name == 'feat/disaggregated' || github.ref_name == 'codex/fix-github-ci' || github.ref_name == 'cleanup') && 'ON' || 'OFF' }}
|
||||
outputs:
|
||||
@@ -404,7 +399,7 @@ jobs:
|
||||
- android-avd
|
||||
- trace-cases
|
||||
- trace-fixtures
|
||||
if: ${{ always() && needs.build.result == 'success' && needs.android-avd.result == 'success' && needs.trace-cases.result == 'success' }}
|
||||
if: ${{ !cancelled() && needs.build.result == 'success' && needs.android-avd.result == 'success' && needs.trace-cases.result == 'success' }}
|
||||
timeout-minutes: 75
|
||||
env:
|
||||
MOBILEGL_CI_TRANSPORT: ${{ matrix.transport || 'monolith' }}
|
||||
@@ -675,7 +670,7 @@ jobs:
|
||||
name: retrace summary
|
||||
runs-on: ubuntu-latest
|
||||
needs: retrace
|
||||
if: always()
|
||||
if: ${{ !cancelled() }}
|
||||
env:
|
||||
MOBILEGL_CI_DISAGGREGATED: ${{ (github.ref_name == 'feat/disaggregated' || github.ref_name == 'codex/fix-github-ci' || github.ref_name == 'cleanup') && 'ON' || 'OFF' }}
|
||||
|
||||
|
||||
+102
-88
@@ -101,7 +101,7 @@ jobs:
|
||||
run: python3 update_glslang_sources.py
|
||||
|
||||
- name: Install build dependencies
|
||||
timeout-minutes: 45
|
||||
timeout-minutes: 15
|
||||
if: env.MOBILEGL_CI_NATIVE_GPU != '1'
|
||||
run: |
|
||||
sudo apt-get update
|
||||
@@ -158,22 +158,18 @@ jobs:
|
||||
if: ${{ always() }}
|
||||
run: ccache --show-stats
|
||||
|
||||
# Rewrite one rolling entry per job on the default branch. The upload stays
|
||||
# cumulative - it carries every object restored at the top of this run plus
|
||||
# the few TUs that actually changed - but Actions cache keys are immutable,
|
||||
# so the superseded blob has to be released before the same key can be
|
||||
# re-uploaded. Running after the build means a failed build leaves the
|
||||
# existing entry untouched. The other trigger branches restore this entry
|
||||
# rather than each writing one of their own.
|
||||
# Rewrite one rolling entry per job and branch. The upload stays cumulative - it
|
||||
# carries every object restored at the top of this run plus the few TUs that
|
||||
# changed - but Actions cache keys are immutable, so this branch's superseded
|
||||
# blob is released first; --ref keeps the delete off other branches' entries.
|
||||
# Running after the build means a failed build leaves the entry untouched.
|
||||
- name: Release superseded ccache entry
|
||||
if: github.ref_name == github.event.repository.default_branch
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
CACHE_KEY: ${{ runner.os }}-ubuntu24-cpu-test-${{ github.job }}-ccache-v1
|
||||
run: gh cache delete "${CACHE_KEY}" || true
|
||||
run: gh cache delete "${CACHE_KEY}" --ref "${GITHUB_REF}" || true
|
||||
|
||||
- name: Save ccache
|
||||
if: github.ref_name == github.event.repository.default_branch
|
||||
continue-on-error: true
|
||||
uses: actions/cache/save@v5
|
||||
with:
|
||||
@@ -209,6 +205,21 @@ jobs:
|
||||
path: ci-artifacts/mobilegl-linux-runtime.tgz
|
||||
if-no-files-found: error
|
||||
|
||||
# The retrace legs load only the library, and the server image on the spawn arm, so they
|
||||
# take this instead of the whole test runtime.
|
||||
- name: Package retrace library
|
||||
run: |
|
||||
files=("${BUILD_DIR}/.ci-source-root" "${BUILD_DIR}/libMobileGL.so")
|
||||
if [ -f "${BUILD_DIR}/libMobileGLServer.so" ]; then files+=("${BUILD_DIR}/libMobileGLServer.so"); fi
|
||||
tar -czf ci-artifacts/mobilegl-linux-lib.tgz "${files[@]}"
|
||||
|
||||
- name: Upload retrace library
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: mobilegl-linux-lib
|
||||
path: ci-artifacts/mobilegl-linux-lib.tgz
|
||||
if-no-files-found: error
|
||||
|
||||
# The pull-library negative control must not consume the primary artifact:
|
||||
# on disaggregation branches that artifact now contains the real transport.
|
||||
build-linux-monolith-control:
|
||||
@@ -266,7 +277,7 @@ jobs:
|
||||
working-directory: 3rdparty/glslang
|
||||
run: python3 update_glslang_sources.py
|
||||
- name: Install build dependencies
|
||||
timeout-minutes: 45
|
||||
timeout-minutes: 15
|
||||
if: env.MOBILEGL_CI_NATIVE_GPU != '1'
|
||||
run: |
|
||||
sudo apt-get update
|
||||
@@ -324,7 +335,7 @@ jobs:
|
||||
cmakeVersion: 3.31.10
|
||||
|
||||
- name: Install runtime dependencies
|
||||
timeout-minutes: 45
|
||||
timeout-minutes: 15
|
||||
if: env.MOBILEGL_CI_NATIVE_GPU != '1'
|
||||
run: |
|
||||
sudo apt-get update
|
||||
@@ -351,9 +362,9 @@ jobs:
|
||||
ulimit -c unlimited
|
||||
if [ "$MOBILEGL_CI_NATIVE_GPU" != 1 ] && [ ! -f /.dockerenv ]; then sudo sysctl -w kernel.core_pattern='/tmp/core.%e.%p'; fi
|
||||
if [ "${{ secrets.ACTIONS_STEP_DEBUG }}" = "true" ]; then
|
||||
ctest -V -L unit --no-tests=error --output-junit "${RUNNER_TEMP}/unit.xml"
|
||||
ctest -V -L unit --no-tests=error -j "$(nproc)" --output-junit "${RUNNER_TEMP}/unit.xml"
|
||||
else
|
||||
ctest --output-on-failure -L unit --no-tests=error --output-junit "${RUNNER_TEMP}/unit.xml"
|
||||
ctest --output-on-failure -L unit --no-tests=error -j "$(nproc)" --output-junit "${RUNNER_TEMP}/unit.xml"
|
||||
fi
|
||||
|
||||
# P13 W1: every JUnit this job wrote, for the skip census (scripts/ci/skip_census.py).
|
||||
@@ -403,7 +414,7 @@ jobs:
|
||||
cmakeVersion: 3.31.10
|
||||
|
||||
- name: Install runtime dependencies
|
||||
timeout-minutes: 45
|
||||
timeout-minutes: 15
|
||||
if: env.MOBILEGL_CI_NATIVE_GPU != '1'
|
||||
# Same set as the benchmark job, for the same reason: the scenarios bring
|
||||
# up real headless EGL (llvmpipe) and Vulkan (lavapipe) contexts, and
|
||||
@@ -456,12 +467,12 @@ jobs:
|
||||
# coverage. The flag is NOT baked into the ctest ENVIRONMENT properties,
|
||||
# so an inline env reaches the test processes (unlike the ICD pin above).
|
||||
if [ "${{ secrets.ACTIONS_STEP_DEBUG }}" = "true" ]; then
|
||||
ctest -V -L integration-gpu --no-tests=error --output-junit "${RUNNER_TEMP}/integration.xml"
|
||||
MOBILEGL_ESPRYT_DISABLE_INVALIDATE_FLUSH=1 ctest -V -L integration-gpu \
|
||||
ctest -V -L integration-gpu --no-tests=error -j "$(nproc)" --output-junit "${RUNNER_TEMP}/integration.xml"
|
||||
MOBILEGL_ESPRYT_DISABLE_INVALIDATE_FLUSH=1 ctest -V -L integration-gpu -j "$(nproc)" \
|
||||
-R 'Buffer|Readback|Atomic|Ssbo|Arena' --no-tests=error --output-junit "${RUNNER_TEMP}/integration-staged-copy.xml"
|
||||
else
|
||||
ctest --output-on-failure -L integration-gpu --no-tests=error --output-junit "${RUNNER_TEMP}/integration.xml"
|
||||
MOBILEGL_ESPRYT_DISABLE_INVALIDATE_FLUSH=1 ctest --output-on-failure -L integration-gpu \
|
||||
ctest --output-on-failure -L integration-gpu --no-tests=error -j "$(nproc)" --output-junit "${RUNNER_TEMP}/integration.xml"
|
||||
MOBILEGL_ESPRYT_DISABLE_INVALIDATE_FLUSH=1 ctest --output-on-failure -L integration-gpu -j "$(nproc)" \
|
||||
-R 'Buffer|Readback|Atomic|Ssbo|Arena' --no-tests=error --output-junit "${RUNNER_TEMP}/integration-staged-copy.xml"
|
||||
fi
|
||||
|
||||
@@ -584,7 +595,7 @@ jobs:
|
||||
run: python3 update_glslang_sources.py
|
||||
|
||||
- name: Install build dependencies
|
||||
timeout-minutes: 45
|
||||
timeout-minutes: 15
|
||||
if: env.MOBILEGL_CI_NATIVE_GPU != '1'
|
||||
run: |
|
||||
sudo apt-get update
|
||||
@@ -666,14 +677,12 @@ jobs:
|
||||
run: ccache --show-stats
|
||||
|
||||
- name: Release superseded ccache entry
|
||||
if: github.ref_name == github.event.repository.default_branch
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
CACHE_KEY: ${{ runner.os }}-ubuntu24-cpu-test-${{ github.job }}-ccache-v1
|
||||
run: gh cache delete "${CACHE_KEY}" || true
|
||||
run: gh cache delete "${CACHE_KEY}" --ref "${GITHUB_REF}" || true
|
||||
|
||||
- name: Save ccache
|
||||
if: github.ref_name == github.event.repository.default_branch
|
||||
continue-on-error: true
|
||||
uses: actions/cache/save@v5
|
||||
with:
|
||||
@@ -707,6 +716,21 @@ jobs:
|
||||
path: ci-artifacts/mobilegl-linux-runtime-verify.tgz
|
||||
if-no-files-found: error
|
||||
|
||||
# The retrace legs load only the library, and the server image on the spawn arm, so they
|
||||
# take this instead of the whole test runtime.
|
||||
- name: Package retrace library
|
||||
run: |
|
||||
files=("${BUILD_DIR}/.ci-source-root" "${BUILD_DIR}/libMobileGL.so")
|
||||
if [ -f "${BUILD_DIR}/libMobileGLServer.so" ]; then files+=("${BUILD_DIR}/libMobileGLServer.so"); fi
|
||||
tar -czf ci-artifacts/mobilegl-linux-lib-verify.tgz "${files[@]}"
|
||||
|
||||
- name: Upload retrace library
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: mobilegl-linux-lib-verify
|
||||
path: ci-artifacts/mobilegl-linux-lib-verify.tgz
|
||||
if-no-files-found: error
|
||||
|
||||
# The verify lane itself, plus the two negative controls that keep it falsifiable. The controls
|
||||
# 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.
|
||||
@@ -731,7 +755,7 @@ jobs:
|
||||
cmakeVersion: 3.31.10
|
||||
|
||||
- name: Install runtime dependencies
|
||||
timeout-minutes: 45
|
||||
timeout-minutes: 15
|
||||
if: env.MOBILEGL_CI_NATIVE_GPU != '1'
|
||||
run: |
|
||||
sudo apt-get update
|
||||
@@ -775,9 +799,9 @@ jobs:
|
||||
ulimit -c unlimited
|
||||
if [ "$MOBILEGL_CI_NATIVE_GPU" != 1 ] && [ ! -f /.dockerenv ]; then sudo sysctl -w kernel.core_pattern='/tmp/core.%e.%p'; fi
|
||||
if [ "${{ secrets.ACTIONS_STEP_DEBUG }}" = "true" ]; then
|
||||
ctest -V -L integration-verify --no-tests=error --output-junit "${RUNNER_TEMP}/verify.xml"
|
||||
ctest -V -L integration-verify --no-tests=error -j "$(nproc)" --output-junit "${RUNNER_TEMP}/verify.xml"
|
||||
else
|
||||
ctest --output-on-failure -L integration-verify --no-tests=error --output-junit "${RUNNER_TEMP}/verify.xml"
|
||||
ctest --output-on-failure -L integration-verify --no-tests=error -j "$(nproc)" --output-junit "${RUNNER_TEMP}/verify.xml"
|
||||
fi
|
||||
|
||||
# The unit suite again, on the verify library: cases compiled only under MOBILEGL_PIPE_VERIFY
|
||||
@@ -975,7 +999,7 @@ jobs:
|
||||
with:
|
||||
cmakeVersion: 3.31.10
|
||||
- name: Install runtime dependencies
|
||||
timeout-minutes: 45
|
||||
timeout-minutes: 15
|
||||
if: env.MOBILEGL_CI_NATIVE_GPU != '1'
|
||||
run: |
|
||||
sudo apt-get update
|
||||
@@ -1266,7 +1290,7 @@ jobs:
|
||||
run: python3 update_glslang_sources.py
|
||||
|
||||
- name: Install build dependencies
|
||||
timeout-minutes: 45
|
||||
timeout-minutes: 15
|
||||
if: env.MOBILEGL_CI_NATIVE_GPU != '1'
|
||||
run: |
|
||||
sudo apt-get update
|
||||
@@ -1366,14 +1390,12 @@ jobs:
|
||||
run: ccache --show-stats
|
||||
|
||||
- name: Release superseded ccache entry
|
||||
if: github.ref_name == github.event.repository.default_branch
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
CACHE_KEY: ${{ runner.os }}-ubuntu24-cpu-test-${{ github.job }}-ccache-v1
|
||||
run: gh cache delete "${CACHE_KEY}" || true
|
||||
run: gh cache delete "${CACHE_KEY}" --ref "${GITHUB_REF}" || true
|
||||
|
||||
- name: Save ccache
|
||||
if: github.ref_name == github.event.repository.default_branch
|
||||
continue-on-error: true
|
||||
uses: actions/cache/save@v5
|
||||
with:
|
||||
@@ -1407,6 +1429,21 @@ jobs:
|
||||
path: ci-artifacts/mobilegl-linux-runtime-split.tgz
|
||||
if-no-files-found: error
|
||||
|
||||
# The retrace legs load only the library, and the server image on the spawn arm, so they
|
||||
# take this instead of the whole test runtime.
|
||||
- name: Package retrace library
|
||||
run: |
|
||||
files=("${BUILD_DIR}/.ci-source-root" "${BUILD_DIR}/libMobileGL.so")
|
||||
if [ -f "${BUILD_DIR}/libMobileGLServer.so" ]; then files+=("${BUILD_DIR}/libMobileGLServer.so"); fi
|
||||
tar -czf ci-artifacts/mobilegl-linux-lib-split.tgz "${files[@]}"
|
||||
|
||||
- name: Upload retrace library
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: mobilegl-linux-lib-split
|
||||
path: ci-artifacts/mobilegl-linux-lib-split.tgz
|
||||
if-no-files-found: error
|
||||
|
||||
# The split lane itself: the three-arm shape ARCHITECTURE.md §13.2 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:
|
||||
@@ -1430,7 +1467,7 @@ jobs:
|
||||
cmakeVersion: 3.31.10
|
||||
|
||||
- name: Install runtime dependencies
|
||||
timeout-minutes: 45
|
||||
timeout-minutes: 15
|
||||
if: env.MOBILEGL_CI_NATIVE_GPU != '1'
|
||||
run: |
|
||||
sudo apt-get update
|
||||
@@ -1666,7 +1703,7 @@ jobs:
|
||||
cmakeVersion: 3.31.10
|
||||
|
||||
- name: Install runtime dependencies
|
||||
timeout-minutes: 45
|
||||
timeout-minutes: 15
|
||||
if: env.MOBILEGL_CI_NATIVE_GPU != '1'
|
||||
run: |
|
||||
sudo apt-get update
|
||||
@@ -2254,7 +2291,7 @@ jobs:
|
||||
run: git submodule update --init include/ska 3rdparty/xxHash 3rdparty/Vulkan-Headers
|
||||
|
||||
- name: Install clang and X11 headers
|
||||
timeout-minutes: 45
|
||||
timeout-minutes: 15
|
||||
if: env.MOBILEGL_CI_NATIVE_GPU != '1'
|
||||
# Includes.h defines VK_USE_PLATFORM_XLIB_KHR before <vulkan/vulkan.h>, which then
|
||||
# includes <X11/Xlib.h>; without libx11-dev every clang-mode probe dies in the
|
||||
@@ -2290,7 +2327,7 @@ jobs:
|
||||
cmakeVersion: 3.31.10
|
||||
|
||||
- name: Install runtime dependencies
|
||||
timeout-minutes: 45
|
||||
timeout-minutes: 15
|
||||
if: env.MOBILEGL_CI_NATIVE_GPU != '1'
|
||||
# libegl-mesa0 is the EGL vendor library itself: DriverBench brings up a
|
||||
# real GL context, and libegl1 is only glvnd's dispatch. It normally
|
||||
@@ -2332,8 +2369,6 @@ jobs:
|
||||
|
||||
build-retrace:
|
||||
runs-on: ubuntu-latest
|
||||
needs:
|
||||
- build-linux
|
||||
permissions:
|
||||
actions: write
|
||||
contents: read
|
||||
@@ -2399,7 +2434,7 @@ jobs:
|
||||
run: python3 update_glslang_sources.py
|
||||
|
||||
- name: Install dependencies
|
||||
timeout-minutes: 45
|
||||
timeout-minutes: 15
|
||||
if: env.MOBILEGL_CI_NATIVE_GPU != '1'
|
||||
run: |
|
||||
sudo apt-get update
|
||||
@@ -2413,17 +2448,6 @@ jobs:
|
||||
"${MOBILEGL_CI_LLD}" --version
|
||||
dpkg -l 'libc++*' 'libegl*' 'libgles*' 'mesa*' 'vulkan*' || true
|
||||
|
||||
- name: Download Linux runtime
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
name: mobilegl-linux-runtime
|
||||
path: .
|
||||
|
||||
- name: Unpack Linux runtime
|
||||
run: |
|
||||
tar -xzf mobilegl-linux-runtime.tgz
|
||||
test -f "${MOBILEGL_LIBRARY}"
|
||||
|
||||
- name: Prepare downloaded test metadata
|
||||
run: |
|
||||
for root in build-linux build-verify build-split build-verify-split build-retrace control-runtime/build-push-control; do
|
||||
@@ -2460,14 +2484,12 @@ jobs:
|
||||
run: ccache --show-stats
|
||||
|
||||
- name: Release superseded ccache entry
|
||||
if: github.ref_name == github.event.repository.default_branch
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
CACHE_KEY: ${{ runner.os }}-ubuntu24-cpu-test-${{ github.job }}-ccache-v1
|
||||
run: gh cache delete "${CACHE_KEY}" || true
|
||||
run: gh cache delete "${CACHE_KEY}" --ref "${GITHUB_REF}" || true
|
||||
|
||||
- name: Save ccache
|
||||
if: github.ref_name == github.event.repository.default_branch
|
||||
continue-on-error: true
|
||||
uses: actions/cache/save@v5
|
||||
with:
|
||||
@@ -2635,10 +2657,10 @@ jobs:
|
||||
- build-retrace
|
||||
- trace-cases
|
||||
- trace-fixtures
|
||||
if: ${{ always() && needs.build-linux.result == 'success' && needs.build-retrace.result == 'success' && needs.trace-cases.result == 'success' }}
|
||||
if: ${{ !cancelled() && needs.build-linux.result == 'success' && needs.build-retrace.result == 'success' && needs.trace-cases.result == 'success' }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
max-parallel: 4
|
||||
max-parallel: 8
|
||||
matrix: ${{ fromJSON(needs.trace-cases.outputs.matrix) }}
|
||||
|
||||
steps:
|
||||
@@ -2674,7 +2696,7 @@ jobs:
|
||||
cmakeVersion: 3.31.10
|
||||
|
||||
- name: Install runtime dependencies
|
||||
timeout-minutes: 45
|
||||
timeout-minutes: 15
|
||||
if: env.MOBILEGL_CI_NATIVE_GPU != '1'
|
||||
run: |
|
||||
sudo apt-get update
|
||||
@@ -2682,10 +2704,10 @@ jobs:
|
||||
test -e /usr/lib/x86_64-linux-gnu/libEGL.so
|
||||
test -e /usr/lib/x86_64-linux-gnu/libGLESv2.so
|
||||
|
||||
- name: Download Linux runtime
|
||||
- name: Download Linux library
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
name: mobilegl-linux-runtime
|
||||
name: mobilegl-linux-lib
|
||||
path: .
|
||||
|
||||
- name: Download trace replay
|
||||
@@ -2696,7 +2718,7 @@ jobs:
|
||||
|
||||
- name: Unpack retrace runtime
|
||||
run: |
|
||||
tar -xzf mobilegl-linux-runtime.tgz
|
||||
tar -xzf mobilegl-linux-lib.tgz
|
||||
tar -xzf mobilegl-trace-replay.tgz
|
||||
test -f build-linux/libMobileGL.so
|
||||
test -f build-retrace/tools/trace_replay/mobilegl_trace_replay
|
||||
@@ -2756,7 +2778,7 @@ jobs:
|
||||
name: retrace summary
|
||||
runs-on: ubuntu-latest
|
||||
needs: [retrace]
|
||||
if: ${{ always() && needs.retrace.result != 'skipped' }}
|
||||
if: ${{ !cancelled() && needs.retrace.result != 'skipped' }}
|
||||
env:
|
||||
MOBILEGL_CI_DISAGGREGATED: ${{ (github.ref_name == 'feat/disaggregated' || github.ref_name == 'codex/fix-github-ci' || github.ref_name == 'cleanup') && 'ON' || 'OFF' }}
|
||||
|
||||
@@ -2839,7 +2861,7 @@ jobs:
|
||||
- build-retrace
|
||||
- trace-cases
|
||||
- trace-fixtures
|
||||
if: ${{ always() && needs.build-linux-verify.result == 'success' && needs.build-retrace.result == 'success' && needs.trace-cases.result == 'success' }}
|
||||
if: ${{ !cancelled() && needs.build-linux-verify.result == 'success' && needs.build-retrace.result == 'success' && needs.trace-cases.result == 'success' }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
max-parallel: 4
|
||||
@@ -2878,7 +2900,7 @@ jobs:
|
||||
cmakeVersion: 3.31.10
|
||||
|
||||
- name: Install runtime dependencies
|
||||
timeout-minutes: 45
|
||||
timeout-minutes: 15
|
||||
if: env.MOBILEGL_CI_NATIVE_GPU != '1'
|
||||
run: |
|
||||
sudo apt-get update
|
||||
@@ -2886,10 +2908,10 @@ jobs:
|
||||
test -e /usr/lib/x86_64-linux-gnu/libEGL.so
|
||||
test -e /usr/lib/x86_64-linux-gnu/libGLESv2.so
|
||||
|
||||
- name: Download Linux verify runtime
|
||||
- name: Download Linux verify library
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
name: mobilegl-linux-runtime-verify
|
||||
name: mobilegl-linux-lib-verify
|
||||
path: .
|
||||
|
||||
- name: Download trace replay
|
||||
@@ -2908,7 +2930,7 @@ jobs:
|
||||
# `nm`, not `nm -D`, for the reason spelled out in build-linux-verify: everything MGPipe is
|
||||
# hidden-visibility in a Release build and the dynamic table has none of it.
|
||||
run: |
|
||||
tar -xzf mobilegl-linux-runtime-verify.tgz
|
||||
tar -xzf mobilegl-linux-lib-verify.tgz
|
||||
tar -xzf mobilegl-trace-replay.tgz
|
||||
test -f build-verify/libMobileGL.so
|
||||
test -f build-retrace/tools/trace_replay/mobilegl_trace_replay
|
||||
@@ -3024,10 +3046,10 @@ jobs:
|
||||
# legs no longer require that build to have SUCCEEDED - gating on it skipped the whole split
|
||||
# matrix (grey, not red) whenever the control build failed (PLAN-P13 §0-7). The control steps
|
||||
# below download its artifact, and a missing one is a red step on every leg instead.
|
||||
if: ${{ always() && needs.build-linux-split.result == 'success' && needs.build-retrace.result == 'success' && needs.trace-cases.result == 'success' }}
|
||||
if: ${{ !cancelled() && needs.build-linux-split.result == 'success' && needs.build-retrace.result == 'success' && needs.trace-cases.result == 'success' }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
max-parallel: 4
|
||||
max-parallel: 8
|
||||
matrix: ${{ fromJSON(needs.trace-cases.outputs.split-matrix) }}
|
||||
|
||||
steps:
|
||||
@@ -3063,7 +3085,7 @@ jobs:
|
||||
cmakeVersion: 3.31.10
|
||||
|
||||
- name: Install runtime dependencies
|
||||
timeout-minutes: 45
|
||||
timeout-minutes: 15
|
||||
if: env.MOBILEGL_CI_NATIVE_GPU != '1'
|
||||
run: |
|
||||
sudo apt-get update
|
||||
@@ -3071,10 +3093,10 @@ jobs:
|
||||
test -e /usr/lib/x86_64-linux-gnu/libEGL.so
|
||||
test -e /usr/lib/x86_64-linux-gnu/libGLESv2.so
|
||||
|
||||
- name: Download Linux split runtime
|
||||
- name: Download Linux split library
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
name: mobilegl-linux-runtime-split
|
||||
name: mobilegl-linux-lib-split
|
||||
path: .
|
||||
|
||||
- name: Download trace replay
|
||||
@@ -3096,18 +3118,12 @@ jobs:
|
||||
tar -xzf control-runtime/mobilegl-linux-monolith-control.tgz -C control-runtime
|
||||
test -f control-runtime/build-push-control/libMobileGL.so
|
||||
|
||||
- name: Prepare downloaded test metadata
|
||||
run: |
|
||||
for root in build-linux build-verify build-split build-verify-split build-retrace control-runtime/build-push-control; do
|
||||
if [ -d "$root" ]; then python3 scripts/ci/prepare_test_runtime.py "$root"; fi
|
||||
done
|
||||
|
||||
- name: Unpack split runtime (library under test)
|
||||
# build-retrace's CTestTestfile.cmake has the absolute path
|
||||
# <workspace>/build-linux/libMobileGL.so frozen into every case, so the swap happens here
|
||||
# rather than through a variable, exactly as in retrace-verify. `nm`, not `nm -D`.
|
||||
run: |
|
||||
tar -xzf mobilegl-linux-runtime-split.tgz
|
||||
tar -xzf mobilegl-linux-lib-split.tgz
|
||||
tar -xzf mobilegl-trace-replay.tgz
|
||||
test -f build-split/libMobileGL.so
|
||||
test -f build-retrace/tools/trace_replay/mobilegl_trace_replay
|
||||
@@ -3119,18 +3135,18 @@ jobs:
|
||||
fi
|
||||
echo "the library at build-linux/libMobileGL.so is the split build"
|
||||
|
||||
# THE SPAWN ARM NEEDS A SECOND BINARY and the inproc arm needs none, which is the whole
|
||||
# difference between the two at this level: inproc's server role is a thread in the replay
|
||||
# process, spawn's is a PROCESS the client launches from this image. It is packaged by
|
||||
# build-linux-split's `find -name '*.so'` sweep - libMobileGLServer.so is an executable that
|
||||
# wears a .so name so an APK will install it somewhere exec-able - and a missing one must be
|
||||
# a NAMED failure here rather than a LaunchServer refusal 78 jobs deep.
|
||||
- name: Prepare downloaded test metadata
|
||||
run: |
|
||||
for root in build-linux build-verify build-split build-verify-split build-retrace control-runtime/build-push-control; do
|
||||
if [ -d "$root" ]; then python3 scripts/ci/prepare_test_runtime.py "$root"; fi
|
||||
done
|
||||
|
||||
# THE SPAWN ARM NEEDS A SECOND BINARY and the inproc arm needs none, which is the whole
|
||||
# difference between the two at this level: inproc's server role is a thread in the replay
|
||||
# process, spawn's is a PROCESS the client launches from this image. It ships in
|
||||
# build-linux-split's retrace library - libMobileGLServer.so is an executable that wears a
|
||||
# .so name so an APK will install it somewhere exec-able - and a missing one must be a NAMED
|
||||
# failure here rather than a LaunchServer refusal 78 jobs deep.
|
||||
- name: Place the server image (spawn arm only)
|
||||
if: ${{ matrix.transport == 'spawn' }}
|
||||
run: |
|
||||
@@ -3555,7 +3571,7 @@ jobs:
|
||||
run: python3 update_glslang_sources.py
|
||||
|
||||
- name: Install build and runtime dependencies
|
||||
timeout-minutes: 45
|
||||
timeout-minutes: 15
|
||||
if: env.MOBILEGL_CI_NATIVE_GPU != '1'
|
||||
run: |
|
||||
sudo apt-get update
|
||||
@@ -3612,14 +3628,12 @@ jobs:
|
||||
run: ccache --show-stats
|
||||
|
||||
- name: Release superseded ccache entry
|
||||
if: github.ref_name == github.event.repository.default_branch
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
CACHE_KEY: ${{ runner.os }}-ubuntu24-cpu-test-${{ github.job }}-ccache-v1
|
||||
run: gh cache delete "${CACHE_KEY}" || true
|
||||
run: gh cache delete "${CACHE_KEY}" --ref "${GITHUB_REF}" || true
|
||||
|
||||
- name: Save ccache
|
||||
if: github.ref_name == github.event.repository.default_branch
|
||||
continue-on-error: true
|
||||
uses: actions/cache/save@v5
|
||||
with:
|
||||
@@ -3661,7 +3675,7 @@ jobs:
|
||||
- integration-verify-split
|
||||
- integration-split
|
||||
- integration-split-strict
|
||||
if: ${{ always() }}
|
||||
if: ${{ !cancelled() }}
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@v6
|
||||
|
||||
Reference in New Issue
Block a user