@@ -116,6 +116,7 @@ jobs:
116116 # rerun the workflow run after setting the `release-ci`/`merge-ci` labels.
117117 run : |
118118 check_level=0
119+ fast=false
119120
120121 if [[ -n "${{ steps.set-nightly.outputs.nightly }}" || -n "${{ steps.set-release.outputs.RELEASE_TAG }}" || -n "${{ steps.set-release-custom.outputs.RELEASE_TAG }}" ]]; then
121122 check_level=2
@@ -128,9 +129,13 @@ jobs:
128129 elif echo "$labels" | grep -q "merge-ci"; then
129130 check_level=1
130131 fi
132+ if echo "$labels" | grep -q "fast-ci"; then
133+ fast=true
134+ fi
131135 fi
132136
133137 echo "check-level=$check_level" >> "$GITHUB_OUTPUT"
138+ echo "fast=$fast" >> "$GITHUB_OUTPUT"
134139 env :
135140 GH_TOKEN : ${{ github.token }}
136141
@@ -140,7 +145,8 @@ jobs:
140145 with :
141146 script : |
142147 const level = ${{ steps.set-level.outputs.check-level }};
143- console.log(`level: ${level}`);
148+ const fast = ${{ steps.set-level.outputs.fast }};
149+ console.log(`level: ${level}, fast: ${fast}`);
144150 // use large runners where available (original repo)
145151 let large = ${{ github.repository == 'leanprover/lean4' }};
146152 const isPr = "${{ github.event_name }}" == "pull_request";
@@ -165,7 +171,8 @@ jobs:
165171 {
166172 // portable release build: use channel with older glibc (2.26)
167173 "name": "Linux release",
168- "os": "ubuntu-latest",
174+ // usually not a bottleneck so make exclusive to `fast-ci`
175+ "os": large && fast ? "nscloud-ubuntu-22.04-amd64-8x16-with-cache" : "ubuntu-latest",
169176 "release": true,
170177 // Special handling for release jobs. We want:
171178 // 1. To run it in PRs so developers get PR toolchains (so secondary without tests is sufficient)
@@ -230,22 +237,22 @@ jobs:
230237 {
231238 "name": "macOS aarch64",
232239 // standard GH runner only comes with 7GB so use large runner if possible when running tests
233- "os": large && level >= 1 ? "nscloud-macos-sequoia-arm64-6x14" : "macos-15",
240+ "os": large && (fast || level >= 1) ? "nscloud-macos-sequoia-arm64-6x14" : "macos-15",
234241 "CMAKE_OPTIONS": "-DLEAN_INSTALL_SUFFIX=-darwin_aarch64",
235242 "release": true,
236- "test": true,
237243 "shell": "bash -euxo pipefail {0}",
238244 "llvm-url": "https://github.com/leanprover/lean-llvm/releases/download/19.1.2/lean-llvm-aarch64-apple-darwin.tar.zst",
239245 "prepare-llvm": "../script/prepare-llvm-macos.sh lean-llvm*",
240246 "binary-check": "otool -L",
241247 "tar": "gtar", // https://github.com/actions/runner-images/issues/2619
242248 // See "Linux release" for release job levels; Grove is not a concern here
243249 "enabled": isPr || level != 1,
250+ "test": level >= 1,
244251 "secondary": level == 0,
245252 },
246253 {
247254 "name": "Windows",
248- "os": large && level == 2 ? "namespace-profile-windows-amd64-4x16" : "windows-2022",
255+ "os": large && (fast || level == 2) ? "namespace-profile-windows-amd64-4x16" : "windows-2022",
249256 "release": true,
250257 "enabled": level >= 2,
251258 "test": true,
0 commit comments