@@ -27,11 +27,11 @@ concurrency:
2727 cancel-in-progress : true
2828
2929jobs :
30- # On every push/PR: smoke matrix (912 cells, ubuntu, no real MLX
31- # training — backend just verifies). Quick gate, ~10 min .
30+ # On every push/PR: smoke matrix (912 cells). The backend imports MLX, so
31+ # this runs on the repository's persistent Apple Silicon runner .
3232 preset-matrix :
33- name : Preset matrix (smoke, ubuntu )
34- runs-on : ubuntu-latest
33+ name : Preset matrix (smoke, self-hosted macOS )
34+ runs-on : [self-hosted, macOS, ARM64, cppmega-mlx-macos]
3535 timeout-minutes : 25
3636 strategy :
3737 fail-fast : false
@@ -44,16 +44,19 @@ jobs:
4444 node-version : " 22"
4545 cache : " npm"
4646 cache-dependency-path : vbgui/package-lock.json
47- - uses : actions/setup-python@v5
48- with :
49- python-version : " 3.13"
47+ - name : Bind repository MLX Python
48+ run : |
49+ python_bin=/Volumes/external/sources/cppmega.mlx/.venv/bin/python
50+ test -x "$python_bin"
51+ echo "VBGUI_E2E_PYTHON=$python_bin" >> "$GITHUB_ENV"
5052 - name : Python deps
5153 run : |
52- python -m pip install --upgrade pip
53- pip install -e ".[gui,parquet,widget]"
54- pip install jsonschema pyarrow tokenizers anywidget
54+ "$VBGUI_E2E_PYTHON" -m pip install --upgrade pip
55+ "$VBGUI_E2E_PYTHON" -m pip install -e ".[gui,parquet,widget]"
56+ "$VBGUI_E2E_PYTHON" -m pip install jsonschema pyarrow tokenizers anywidget
5557 - name : Generate fixtures
56- run : python tests/fixtures/build_e2e_matrix.py
58+ run : |
59+ "$VBGUI_E2E_PYTHON" tests/fixtures/build_e2e_matrix.py
5760 - name : Vbgui install + typecheck
5861 working-directory : vbgui
5962 env :
6366 npm run typecheck
6467 - name : Playwright browsers
6568 working-directory : vbgui
66- run : npx playwright install --with-deps chromium
69+ run : npx playwright install chromium
6770 - name : Run preset matrix shard ${{ matrix.shard }}/4
6871 working-directory : vbgui
6972 env :
@@ -87,27 +90,31 @@ jobs:
8790 # Specialised + canvas smoke scenarios — run on every push (lightweight).
8891 specialised :
8992 name : Specialised + canvas smoke
90- runs-on : ubuntu-latest
93+ runs-on : [self-hosted, macOS, ARM64, cppmega-mlx-macos]
9194 timeout-minutes : 15
9295 steps :
9396 - uses : actions/checkout@v4
9497 - uses : actions/setup-node@v4
9598 with : { node-version: "22", cache: "npm",
9699 cache-dependency-path : vbgui/package-lock.json }
97- - uses : actions/setup-python@v5
98- with : { python-version: "3.13" }
100+ - name : Bind repository MLX Python
101+ run : |
102+ python_bin=/Volumes/external/sources/cppmega.mlx/.venv/bin/python
103+ test -x "$python_bin"
104+ echo "VBGUI_E2E_PYTHON=$python_bin" >> "$GITHUB_ENV"
105+ - run : |
106+ "$VBGUI_E2E_PYTHON" -m pip install --upgrade pip
107+ "$VBGUI_E2E_PYTHON" -m pip install -e ".[gui,parquet,widget]"
108+ "$VBGUI_E2E_PYTHON" -m pip install jsonschema pyarrow tokenizers anywidget
99109 - run : |
100- python -m pip install --upgrade pip
101- pip install -e ".[gui,parquet,widget]"
102- pip install jsonschema pyarrow tokenizers anywidget
103- - run : python tests/fixtures/build_e2e_matrix.py
110+ "$VBGUI_E2E_PYTHON" tests/fixtures/build_e2e_matrix.py
104111 - working-directory : vbgui
105112 env : { NODE_ENV: development }
106113 run : |
107114 npm ci
108115 npm run typecheck
109116 - working-directory : vbgui
110- run : npx playwright install --with-deps chromium
117+ run : npx playwright install chromium
111118 - working-directory : vbgui
112119 env : { NODE_ENV: development, CI: "1" }
113120 run : |
@@ -131,27 +138,31 @@ jobs:
131138 mini-train-matrix :
132139 name : Mini-train matrix (macOS, nightly)
133140 if : github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
134- runs-on : macos-latest
141+ runs-on : [self-hosted, macOS, ARM64, cppmega-mlx-macos]
135142 timeout-minutes : 60
136143 steps :
137144 - uses : actions/checkout@v4
138145 - uses : actions/setup-node@v4
139146 with : { node-version: "22", cache: "npm",
140147 cache-dependency-path : vbgui/package-lock.json }
141- - uses : actions/setup-python@v5
142- with : { python-version: "3.13" }
148+ - name : Bind repository MLX Python
149+ run : |
150+ python_bin=/Volumes/external/sources/cppmega.mlx/.venv/bin/python
151+ test -x "$python_bin"
152+ echo "VBGUI_E2E_PYTHON=$python_bin" >> "$GITHUB_ENV"
153+ - run : |
154+ "$VBGUI_E2E_PYTHON" -m pip install --upgrade pip
155+ "$VBGUI_E2E_PYTHON" -m pip install -e ".[gui,parquet,widget]"
156+ "$VBGUI_E2E_PYTHON" -m pip install jsonschema pyarrow tokenizers anywidget mlx mlx-lm
143157 - run : |
144- python -m pip install --upgrade pip
145- pip install -e ".[gui,parquet,widget]"
146- pip install jsonschema pyarrow tokenizers anywidget mlx mlx-lm
147- - run : python tests/fixtures/build_e2e_matrix.py
158+ "$VBGUI_E2E_PYTHON" tests/fixtures/build_e2e_matrix.py
148159 - working-directory : vbgui
149160 env : { NODE_ENV: development }
150161 run : |
151162 npm ci
152163 npm run typecheck
153164 - working-directory : vbgui
154- run : npx playwright install --with-deps chromium
165+ run : npx playwright install chromium
155166 - working-directory : vbgui
156167 env : { NODE_ENV: development, CI: "1" }
157168 run : |
@@ -172,7 +183,7 @@ jobs:
172183 matrix-report :
173184 name : Matrix report
174185 needs : [preset-matrix, specialised]
175- runs-on : ubuntu-latest
186+ runs-on : [self-hosted, Linux, X64, cppmega-mlx]
176187 if : always()
177188 steps :
178189 - uses : actions/checkout@v4
0 commit comments