From ca981a8fc198367341bd00fa1c1befb5cd3bf5ea Mon Sep 17 00:00:00 2001 From: Swung0x48 Date: Mon, 5 Oct 2026 08:56:27 -0400 Subject: [PATCH 1/2] [CI] Add Arch WSL GPU runner smoke workflow and configuration --- .github/workflows/wsl-gpu-smoke.yml | 31 ++++++++ docs/ci/arch-wsl-gpu-runner.md | 110 ++++++++++++++++++++++++++++ 2 files changed, 141 insertions(+) create mode 100644 .github/workflows/wsl-gpu-smoke.yml create mode 100644 docs/ci/arch-wsl-gpu-runner.md diff --git a/.github/workflows/wsl-gpu-smoke.yml b/.github/workflows/wsl-gpu-smoke.yml new file mode 100644 index 00000000..ef87aef0 --- /dev/null +++ b/.github/workflows/wsl-gpu-smoke.yml @@ -0,0 +1,31 @@ +name: Arch WSL GPU smoke + +on: + workflow_dispatch: + push: + branches: + - ci/arch-wsl-gpu-runner + paths: + - .github/workflows/wsl-gpu-smoke.yml + - docs/ci/arch-wsl-gpu-runner.md + +permissions: {} + +concurrency: + group: arch-wsl-gpu-smoke + cancel-in-progress: false + +jobs: + gpu-smoke: + runs-on: [self-hosted, Linux, X64, arch, wsl, gpu, gles, vulkan] + timeout-minutes: 5 + steps: + - name: Report runner identity + shell: bash + run: | + printf 'Runner: %s\n' "$RUNNER_NAME" + hostname + uname -a + - name: Verify hardware GLES and Vulkan + shell: bash + run: /usr/local/libexec/mobilegl-runner/gpu-smoke diff --git a/docs/ci/arch-wsl-gpu-runner.md b/docs/ci/arch-wsl-gpu-runner.md new file mode 100644 index 00000000..5103f8af --- /dev/null +++ b/docs/ci/arch-wsl-gpu-runner.md @@ -0,0 +1,110 @@ +# MiniPC-8845 Arch WSL GPU Runner + +Configuration recorded on 2026-10-05. + +## Host + +| Component | Configuration | +| --- | --- | +| Hostname | `MiniPC-8845` | +| Windows build | `10.0.26200.9445` | +| GPU | AMD Radeon 780M Graphics | +| Windows GPU driver | `32.0.12033.1030` | +| WSL version | `2.7.3.0` | +| Distribution | `archlinux`, Arch Linux on WSL 2 | +| Linux kernel | `6.6.114.1-microsoft-standard-WSL2` | +| Init system | systemd | +| WSL networking | Mirrored | +| GPU access | `/dev/dxg` and `/usr/lib/wsl/lib` | + +## GitHub Actions Runner + +| Setting | Value | +| --- | --- | +| Repository | `MobileGL-Dev/MobileGL` | +| Runner name | `minipc-8845-arch-wsl-gpu` | +| Runner version | `2.337.0`, automatic updates enabled | +| Labels | `self-hosted`, `Linux`, `X64`, `arch`, `wsl`, `gpu`, `gles`, `vulkan`, `d3d12` | +| Concurrent jobs | 1 | +| Linux account | `github-runner`, UID 1001, no sudo configuration | +| Installation directory | `/opt/actions-runner/mobilegl` | +| Work directory | `/opt/actions-runner/mobilegl/_work` | +| Environment file | `/etc/mobilegl-runner/gpu.env` | + +Workflow runner selector: + +```yaml +runs-on: [self-hosted, Linux, X64, arch, wsl, gpu, gles, vulkan] +``` + +## Graphics + +| Component | Configuration | +| --- | --- | +| Mesa | `26.2.1-arch1.1` | +| OpenGL / GLES driver | Mesa D3D12 | +| Renderer | `D3D12 (AMD Radeon 780M Graphics)` | +| EGL | 1.5 | +| OpenGL | 4.6 | +| OpenGL ES | 3.1 | +| Vulkan driver | Mesa Dozen, translating Vulkan to D3D12 | +| Vulkan device API | 1.2.354 | +| Vulkan ICD | `/usr/share/vulkan/icd.d/dzn_icd.json` | +| Default EGL platform | Surfaceless | + +Dozen reports a non-conformant Vulkan implementation. The exposed capabilities +are GLES 3.1 and Vulkan 1.2; GLES 3.2 and full Vulkan conformance are not available. + +The runner service selects the Radeon GPU with these environment variables: + +```sh +DISPLAY=:0 +WAYLAND_DISPLAY=wayland-0 +XDG_RUNTIME_DIR=/mnt/wslg/runtime-dir +LD_LIBRARY_PATH=/usr/lib/wsl/lib +MESA_LOADER_DRIVER_OVERRIDE=d3d12 +GALLIUM_DRIVER=d3d12 +MESA_D3D12_DEFAULT_ADAPTER_NAME="AMD Radeon 780M Graphics" +VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/dzn_icd.json +EGL_PLATFORM=surfaceless +PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin +``` + +The installed GPU probe is `/usr/local/libexec/mobilegl-runner/gpu-smoke`. +Its GLES source is `/usr/local/libexec/mobilegl-runner/gles-smoke.c`, and the +recorded verification log is `/var/log/mobilegl-runner/gpu-smoke.log`. + +## Build Tools + +Installed tools include GCC, Clang 22, CMake, Ninja, ccache, LLD, libc++, Git LFS, +GitHub CLI, and EGL/GLES/Vulkan development headers. + +## Service and Startup + +| Setting | Value | +| --- | --- | +| systemd unit | `actions.runner.MobileGL-Dev-MobileGL.minipc-8845-arch-wsl-gpu.service` | +| Service drop-in | `/etc/systemd/system/actions.runner.MobileGL-Dev-MobileGL.minipc-8845-arch-wsl-gpu.service.d/gpu.conf` | +| Service startup | Enabled at WSL systemd boot | +| Restart policy | `Restart=always`, `RestartSec=15` | +| Startup checks | GPU device access and WSLg X11/Wayland sockets | +| Windows scheduled task | `MobileGL Arch WSL Runner` | +| Task trigger | Windows login by `Swung0x48` | +| Task behavior | Starts WSL in a hidden window and keeps it running | +| Task execution limit | Unlimited | +| Task retry policy | Every minute, up to 999 retries | + +Automatic startup requires the Windows user to log in. The runner cannot execute +jobs while the host is asleep. + +## Network + +The runner uses the Windows Clash proxy through WSL mirrored networking: + +```sh +http_proxy=http://127.0.0.1:7897 +https_proxy=http://127.0.0.1:7897 +no_proxy=localhost,127.0.0.1,::1 +``` + +Clash must be running for the runner's configured GitHub connection to work. From 5331106e90d440779ce5238ec519e71cca385895 Mon Sep 17 00:00:00 2001 From: Swung0x48 Date: Mon, 5 Oct 2026 08:57:17 -0400 Subject: [PATCH 2/2] [CI] Use uname for Arch runner hostname --- .github/workflows/wsl-gpu-smoke.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/wsl-gpu-smoke.yml b/.github/workflows/wsl-gpu-smoke.yml index ef87aef0..19ddccc3 100644 --- a/.github/workflows/wsl-gpu-smoke.yml +++ b/.github/workflows/wsl-gpu-smoke.yml @@ -24,7 +24,7 @@ jobs: shell: bash run: | printf 'Runner: %s\n' "$RUNNER_NAME" - hostname + uname -n uname -a - name: Verify hardware GLES and Vulkan shell: bash