3535 VSCMD_SKIP_SENDTELEMETRY : 1
3636 # Cache details about available MSVC tooling for subsequent SCons invocations to the provided file.
3737 SCONS_CACHE_MSVC_CONFIG : " .scons_msvc_cache.json"
38+ defaultRunner : ' windows-2025'
39+ supportedRunners : ' ["windows-2025"]'
3840 defaultArch : x86
3941 supportedArchitectures : ' ["x86"]'
4042 defaultPythonVersion : ' 3.13.6'
@@ -45,18 +47,22 @@ jobs:
4547 name : Set up matrix
4648 runs-on : ubuntu-latest
4749 outputs :
50+ defaultRunner : ${{ steps.setMatrix.outputs.defaultRunner }}
51+ supportedRunners : ${{ steps.setMatrix.outputs.supportedRunners }}
4852 supportedArchitectures : ${{ steps.setMatrix.outputs.supportedArchitectures }}
4953 supportedPythonVersions : ${{ steps.setMatrix.outputs.supportedPythonVersions }}
5054 steps :
5155 - name : Set architecture and python version
5256 id : setMatrix
5357 run : |
58+ echo "defaultRunner=${{ env.defaultRunner }}" >> "$GITHUB_OUTPUT"
59+ echo "supportedRunners=$(jq -c <<< '${{ env.supportedRunners }}')" >> "$GITHUB_OUTPUT"
5460 echo "supportedArchitectures=$(jq -c <<< '${{ env.supportedArchitectures }}')" >> "$GITHUB_OUTPUT"
5561 echo "supportedPythonVersions=$(jq -c <<< '${{ env.supportedPythonVersions }}')" >> "$GITHUB_OUTPUT"
5662 buildNVDA :
5763 name : Build NVDA
5864 needs : matrix
59- runs-on : windows-2025
65+ runs-on : ${{ needs.matrix.outputs.defaultRunner }}
6066 strategy :
6167 fail-fast : false
6268 matrix :
@@ -108,7 +114,7 @@ jobs:
108114 - name : Cache scons build
109115 uses : actions/cache/save@v4
110116 with :
111- path : ${{ github.workspace }}
117+ path : .
112118 key : ${{ github.ref }}-${{ github.run_id }}-${{ matrix.pythonVersion }}-${{ matrix.arch }}
113119 - name : Store release metadata information
114120 id : releaseInfo
@@ -120,13 +126,13 @@ jobs:
120126
121127 typeCheck :
122128 name : Check types with Pyright
123- runs-on : windows-2025
124- needs : buildNVDA
129+ runs-on : ${{ needs.matrix.outputs.defaultRunner }}
130+ needs : [matrix, buildNVDA]
125131 steps :
126132 - name : Checkout cached build
127133 uses : actions/cache/restore@v4
128134 with :
129- path : ${{ github.workspace }}
135+ path : .
130136 key : ${{ github.ref }}-${{ github.run_id }}-${{ env.defaultPythonVersion }}-${{ env.defaultArch }}
131137 fail-on-cache-miss : true
132138 - name : Install Python
@@ -141,7 +147,8 @@ jobs:
141147
142148 checkPo :
143149 name : Check po files for errors
144- runs-on : windows-2025
150+ runs-on : ${{ needs.matrix.outputs.defaultRunner }}
151+ needs : matrix
145152 steps :
146153 - name : Checkout repository
147154 uses : actions/checkout@v4
@@ -153,20 +160,16 @@ jobs:
153160 with :
154161 python-version : ${{ env.defaultPythonVersion }}
155162 architecture : ${{ env.defaultArch }}
156- - name : Install pre-commit
157- run : |
158- python -m pip install --upgrade pip
159- pip install pre-commit
160163 - name : Install the latest version of uv
161164 uses : astral-sh/setup-uv@v6
162165 - name : Run pre-commit
163166 run : |
164167 # Ensure uv environment is up to date.
165168 # If the uv environment is outdated, running pre-commit will trigger uv to generate a uv.lock file,
166169 # which causes checkPo to fail without clear errors because pre-commit fails when files are changed during its run.
167- pre-commit run uv-lock --all-files
170+ uv run pre-commit run uv-lock --all-files
168171 # Run pre-commit on the translations
169- pre-commit run checkPo --all-files
172+ uv run pre-commit run checkPo --all-files
170173 - name : Add job summary
171174 if : ${{ failure() }}
172175 shell : bash
@@ -175,13 +178,13 @@ jobs:
175178
176179 checkPot :
177180 name : Check translator comments
178- runs-on : windows-2025
179- needs : buildNVDA
181+ runs-on : ${{ needs.matrix.outputs.defaultRunner }}
182+ needs : [matrix, buildNVDA]
180183 steps :
181184 - name : Checkout cached build
182185 uses : actions/cache/restore@v4
183186 with :
184- path : ${{ github.workspace }}
187+ path : .
185188 key : ${{ github.ref }}-${{ github.run_id }}-${{ env.defaultPythonVersion }}-${{ env.defaultArch }}
186189 fail-on-cache-miss : true
187190 - name : Install Python
@@ -204,13 +207,13 @@ jobs:
204207
205208 licenseCheck :
206209 name : Check license compatibility of dependencies
207- runs-on : windows-2025
208- needs : buildNVDA
210+ runs-on : ${{ needs.matrix.outputs.defaultRunner }}
211+ needs : [matrix, buildNVDA]
209212 steps :
210213 - name : Checkout cached build
211214 uses : actions/cache/restore@v4
212215 with :
213- path : ${{ github.workspace }}
216+ path : .
214217 key : ${{ github.ref }}-${{ github.run_id }}-${{ env.defaultPythonVersion }}-${{ env.defaultArch }}
215218 fail-on-cache-miss : true
216219 - name : Install Python
@@ -225,7 +228,7 @@ jobs:
225228
226229 unitTests :
227230 name : Run unit tests
228- runs-on : windows-2025
231+ runs-on : ${{ needs.matrix.outputs.defaultRunner }}
229232 needs : [matrix, buildNVDA]
230233 strategy :
231234 fail-fast : false
@@ -238,7 +241,7 @@ jobs:
238241 - name : Checkout cached build
239242 uses : actions/cache/restore@v4
240243 with :
241- path : ${{ github.workspace }}
244+ path : .
242245 key : ${{ github.ref }}-${{ github.run_id }}-${{ matrix.pythonVersion }}-${{ matrix.arch }}
243246 fail-on-cache-miss : true
244247 - name : Install Python
@@ -274,14 +277,14 @@ jobs:
274277
275278 crowdinUpload :
276279 name : Upload translations to Crowdin
277- runs-on : windows-2025
278- needs : [buildNVDA, checkPot]
280+ runs-on : ${{ needs.matrix.outputs.defaultRunner }}
281+ needs : [matrix, buildNVDA, checkPot]
279282 if : ${{ github.event_name == 'push' && github.ref == 'refs/heads/beta' && vars.CROWDIN_PROJECT_ID }}
280283 steps :
281284 - name : Checkout cached build
282285 uses : actions/cache/restore@v4
283286 with :
284- path : ${{ github.workspace }}
287+ path : .
285288 key : ${{ github.ref }}-${{ github.run_id }}-${{ env.defaultPythonVersion }}-${{ env.defaultArch }}
286289 fail-on-cache-miss : true
287290 - name : Get makePot results
@@ -304,7 +307,7 @@ jobs:
304307
305308 createLauncher :
306309 name : Create launcher
307- runs-on : windows-2025
310+ runs-on : ${{ needs.matrix.outputs.defaultRunner }}
308311 needs : [matrix, buildNVDA]
309312 strategy :
310313 fail-fast : false
@@ -322,7 +325,7 @@ jobs:
322325 - name : Checkout cached build
323326 uses : actions/cache/restore@v4
324327 with :
325- path : ${{ github.workspace }}
328+ path : .
326329 key : ${{ github.ref }}-${{ github.run_id }}-${{ matrix.pythonVersion }}-${{ matrix.arch }}
327330 fail-on-cache-miss : true
328331 - name : Install Python
@@ -384,13 +387,14 @@ jobs:
384387
385388 systemTests :
386389 name : Run system tests
387- runs-on : windows-2025
390+ runs-on : ${{ matrix.runner }}
388391 needs : [matrix, createLauncher]
389392 strategy :
390393 fail-fast : false
391394 matrix :
392395 # To skip tests, and just run install, replace with [excluded_from_build]
393396 testSuite : [chrome, installer, startupShutdown, symbols]
397+ runner : ${{ fromJson(needs.matrix.outputs.supportedRunners) }}
394398 arch : ${{ fromJson(needs.matrix.outputs.supportedArchitectures) }}
395399 pythonVersion : ${{ fromJson(needs.matrix.outputs.supportedPythonVersions) }}
396400 env :
@@ -399,7 +403,7 @@ jobs:
399403 - name : Checkout cached build
400404 uses : actions/cache/restore@v4
401405 with :
402- path : ${{ github.workspace }}
406+ path : .
403407 key : ${{ github.ref }}-${{ github.run_id }}-${{ matrix.pythonVersion }}-${{ matrix.arch }}
404408 fail-on-cache-miss : true
405409 - name : Install Python
@@ -430,7 +434,7 @@ jobs:
430434 if : ${{ failure() }}
431435 uses : actions/upload-artifact@v4
432436 with :
433- name : " System tests results (${{ matrix.testSuite }}) (${{ matrix.pythonVersion }}, ${{ matrix.arch }})"
437+ name : " System tests results (${{ matrix.testSuite }}) (${{ matrix.runner }}, ${{ matrix. pythonVersion }}, ${{ matrix.arch }})"
434438 path : |
435439 testOutput/system
436440 testOutput/install
@@ -439,14 +443,14 @@ jobs:
439443 uses : mikepenz/action-junit-report@v5
440444 if : ${{ failure() }}
441445 with :
442- check_name : " System tests (${{ matrix.testSuite }}) (${{ matrix.pythonVersion }}, ${{ matrix.arch }})"
446+ check_name : " System tests (${{ matrix.testSuite }}) (${{ matrix.runner }}, ${{ matrix. pythonVersion }}, ${{ matrix.arch }})"
443447 detailed_summary : true
444448 annotate_only : true
445449 report_paths : testOutput/system/systemTests.xml
446450
447451 createSymbols :
448452 name : Create symbols
449- runs-on : windows-2025
453+ runs-on : ${{ needs.matrix.outputs.defaultRunner }}
450454 needs : [matrix, buildNVDA]
451455 strategy :
452456 fail-fast : false
@@ -461,7 +465,7 @@ jobs:
461465 - name : Checkout cached build
462466 uses : actions/cache/restore@v4
463467 with :
464- path : ${{ github.workspace }}
468+ path : .
465469 key : ${{ github.ref }}-${{ github.run_id }}-${{ matrix.pythonVersion }}-${{ matrix.arch }}
466470 fail-on-cache-miss : true
467471 - name : Install Windows SDK
@@ -496,14 +500,14 @@ jobs:
496500
497501 uploadSymbols :
498502 name : Upload symbols
499- runs-on : windows-2025
500- needs : createSymbols
503+ runs-on : ${{ needs.matrix.outputs.defaultRunner }}
504+ needs : [matrix, createSymbols]
501505 if : ${{ github.event_name == 'push' && vars.feature_uploadSymbolsToMozilla }}
502506 steps :
503507 - name : Checkout cached build
504508 uses : actions/cache/restore@v4
505509 with :
506- path : ${{ github.workspace }}
510+ path : .
507511 key : ${{ github.ref }}-${{ github.run_id }}-${{ env.defaultPythonVersion }}-${{ env.defaultArch }}
508512 fail-on-cache-miss : true
509513 - name : Install Python
0 commit comments