@@ -153,7 +153,7 @@ jobs:
153153 # 0: PRs without special label
154154 # 1: PRs with `merge-ci` label, merge queue checks, master commits
155155 # 2: nightlies
156- # 2 : PRs with `release-ci` label, full releases
156+ # 3 : PRs with `release-ci` label, full releases
157157 - name : Set check level
158158 id : set-level
159159 # We do not use github.event.pull_request.labels.*.name here because
@@ -199,18 +199,154 @@ jobs:
199199 const isPr = "${{ github.event_name }}" == "pull_request";
200200 const isPushToMaster = "${{ github.event_name }}" == "push" && "${{ github.ref_name }}" == "master";
201201 let matrix = [
202+ /* TODO: to be updated to new LLVM
202203 {
203- "name": "Linux fsanitize",
204+ "name": "Linux LLVM",
205+ "os": "ubuntu-latest",
206+ "release": false,
207+ "enabled": level >= 2,
208+ "test": true,
209+ "shell": "nix develop .#oldGlibc -c bash -euxo pipefail {0}",
210+ "llvm-url": "https://github.com/leanprover/lean-llvm/releases/download/19.1.2/lean-llvm-x86_64-linux-gnu.tar.zst",
211+ "prepare-llvm": "../script/prepare-llvm-linux.sh lean-llvm*",
212+ "binary-check": "ldd -v",
213+ // foreign code may be linked against more recent glibc
214+ // reverse-ffi needs to be updated to link to LLVM libraries
215+ "CTEST_OPTIONS": "-E 'foreign|leanlaketest_reverse-ffi'",
216+ "CMAKE_OPTIONS": "-DLLVM=ON -DLLVM_CONFIG=${GITHUB_WORKSPACE}/build/llvm-host/bin/llvm-config"
217+ }, */
218+ {
219+ // portable release build: use channel with older glibc (2.26)
220+ "name": "Linux release",
221+ // usually not a bottleneck so make exclusive to `fast-ci`
204222 "os": large && fast ? "nscloud-ubuntu-22.04-amd64-8x16-with-cache" : "ubuntu-latest",
205- "enabled": true, //level >= 2,
206- // do not have nightly release wait for this
207- //"secondary": level <= 2,
223+ "release": true,
224+ // Special handling for release jobs. We want:
225+ // 1. To run it in PRs so developers get PR toolchains (so secondary without tests is sufficient)
226+ // 2. To skip it in merge queues as it takes longer than the
227+ // Linux lake build and adds little value in the merge queue
228+ // 3. To run it in release (obviously)
229+ // 4. To run it for pushes to master so that pushes to master have a Linux toolchain
230+ // available as an artifact for Grove to use.
231+ "enabled": isPr || level != 1 || isPushToMaster,
232+ "test": level >= 1,
233+ "secondary": level == 0,
234+ "shell": "nix develop .#oldGlibc -c bash -euxo pipefail {0}",
235+ "llvm-url": "https://github.com/leanprover/lean-llvm/releases/download/19.1.2/lean-llvm-x86_64-linux-gnu.tar.zst",
236+ "prepare-llvm": "../script/prepare-llvm-linux.sh lean-llvm*",
237+ "binary-check": "ldd -v",
238+ // foreign code may be linked against more recent glibc
239+ "CTEST_OPTIONS": "-E 'foreign'",
240+ },
241+ {
242+ "name": "Linux Lake",
243+ "os": large ? "nscloud-ubuntu-22.04-amd64-8x16-with-cache" : "ubuntu-latest",
244+ "enabled": true,
245+ "check-rebootstrap": level >= 1,
246+ "check-stage3": level >= 2,
247+ "test": true,
248+ // NOTE: `test-speedcenter` currently seems to be broken on `ubuntu-latest`
249+ "test-speedcenter": large && level >= 2,
250+ // We are not warning-free yet on all platforms, start here
251+ "CMAKE_OPTIONS": "-DLEAN_EXTRA_CXX_FLAGS=-Werror",
252+ },
253+ {
254+ "name": "Linux Reldebug",
255+ "os": "ubuntu-latest",
256+ "enabled": level >= 2,
257+ "test": true,
258+ "CMAKE_PRESET": "reldebug",
259+ },
260+ {
261+ "name": "Linux fsanitize",
262+ // Always run on large if available, more reliable regarding timeouts
263+ "os": large ? "nscloud-ubuntu-22.04-amd64-8x16-with-cache" : "ubuntu-latest",
264+ "enabled": level >= 2,
208265 "test": true,
209266 // turn off custom allocator & symbolic functions to make LSAN do its magic
210- "CMAKE_PRESET": "sanitize"
211- // exclude seriously slow/problematic tests (laketests crash, async_base_functions timeouts)
212- //"CTEST_OPTIONS": "-E '(interactive|pkg|lake|bench)/|treemap|StackOverflow|async_base_functions'"
213- }
267+ "CMAKE_PRESET": "sanitize",
268+ // `StackOverflow*` correctly triggers ubsan
269+ // `reverse-ffi` fails to link in sanitizers
270+ "CTEST_OPTIONS": "-E 'StackOverflow|reverse-ffi'"
271+ },
272+ {
273+ "name": "macOS",
274+ "os": "macos-15-intel",
275+ "release": true,
276+ "test": false, // Tier 2 platform
277+ "enabled": level >= 2,
278+ "shell": "bash -euxo pipefail {0}",
279+ "llvm-url": "https://github.com/leanprover/lean-llvm/releases/download/19.1.2/lean-llvm-x86_64-apple-darwin.tar.zst",
280+ "prepare-llvm": "../script/prepare-llvm-macos.sh lean-llvm*",
281+ "binary-check": "otool -L",
282+ "tar": "gtar", // https://github.com/actions/runner-images/issues/2619
283+ "CTEST_OPTIONS": "-E 'leanlaketest_hello'", // started failing from unpack
284+ },
285+ {
286+ "name": "macOS aarch64",
287+ // standard GH runner only comes with 7GB so use large runner if possible when running tests
288+ "os": large && (fast || level >= 1) ? "nscloud-macos-sequoia-arm64-6x14" : "macos-15",
289+ "CMAKE_OPTIONS": "-DLEAN_INSTALL_SUFFIX=-darwin_aarch64",
290+ "release": true,
291+ "shell": "bash -euxo pipefail {0}",
292+ "llvm-url": "https://github.com/leanprover/lean-llvm/releases/download/19.1.2/lean-llvm-aarch64-apple-darwin.tar.zst",
293+ "prepare-llvm": "../script/prepare-llvm-macos.sh lean-llvm*",
294+ "binary-check": "otool -L",
295+ "tar": "gtar", // https://github.com/actions/runner-images/issues/2619
296+ // See "Linux release" for release job levels; Grove is not a concern here
297+ "enabled": isPr || level != 1,
298+ "test": level >= 1,
299+ "secondary": level == 0,
300+ },
301+ {
302+ "name": "Windows",
303+ "os": large && (fast || level >= 2) ? "namespace-profile-windows-amd64-4x16" : "windows-2022",
304+ "release": true,
305+ "enabled": level >= 2,
306+ "test": true,
307+ "shell": "msys2 {0}",
308+ "CMAKE_OPTIONS": "-G \"Unix Makefiles\"",
309+ "llvm-url": "https://github.com/leanprover/lean-llvm/releases/download/19.1.2/lean-llvm-x86_64-w64-windows-gnu.tar.zst",
310+ "prepare-llvm": "../script/prepare-llvm-mingw.sh lean-llvm*",
311+ "binary-check": "ldd",
312+ },
313+ {
314+ "name": "Linux aarch64",
315+ "os": "nscloud-ubuntu-22.04-arm64-4x16",
316+ "CMAKE_OPTIONS": "-DLEAN_INSTALL_SUFFIX=-linux_aarch64",
317+ "release": true,
318+ "enabled": level >= 2,
319+ "test": true,
320+ "shell": "nix develop .#oldGlibcAArch -c bash -euxo pipefail {0}",
321+ "llvm-url": "https://github.com/leanprover/lean-llvm/releases/download/19.1.2/lean-llvm-aarch64-linux-gnu.tar.zst",
322+ "prepare-llvm": "../script/prepare-llvm-linux.sh lean-llvm*",
323+ },
324+ // Started running out of memory building expensive modules, a 2GB heap is just not that much even before fragmentation
325+ //{
326+ // "name": "Linux 32bit",
327+ // "os": "ubuntu-latest",
328+ // // Use 32bit on stage0 and stage1 to keep oleans compatible
329+ // "CMAKE_OPTIONS": "-DSTAGE0_USE_GMP=OFF -DSTAGE0_LEAN_EXTRA_CXX_FLAGS='-m32' -DSTAGE0_LEANC_OPTS='-m32' -DSTAGE0_MMAP=OFF -DUSE_GMP=OFF -DLEAN_EXTRA_CXX_FLAGS='-m32' -DLEANC_OPTS='-m32' -DMMAP=OFF -DLEAN_INSTALL_SUFFIX=-linux_x86 -DCMAKE_LIBRARY_PATH=/usr/lib/i386-linux-gnu/ -DSTAGE0_CMAKE_LIBRARY_PATH=/usr/lib/i386-linux-gnu/ -DPKG_CONFIG_EXECUTABLE=/usr/bin/i386-linux-gnu-pkg-config",
330+ // "cmultilib": true,
331+ // "release": true,
332+ // "enabled": level >= 2,
333+ // "cross": true,
334+ // "shell": "bash -euxo pipefail {0}"
335+ //}
336+ // {
337+ // "name": "Web Assembly",
338+ // "os": "ubuntu-latest",
339+ // // Build a native 32bit binary in stage0 and use it to compile the oleans and the wasm build
340+ // "CMAKE_OPTIONS": "-DCMAKE_C_COMPILER_WORKS=1 -DSTAGE0_USE_GMP=OFF -DSTAGE0_LEAN_EXTRA_CXX_FLAGS='-m32' -DSTAGE0_LEANC_OPTS='-m32' -DSTAGE0_CMAKE_CXX_COMPILER=clang++ -DSTAGE0_CMAKE_C_COMPILER=clang -DSTAGE0_CMAKE_EXECUTABLE_SUFFIX=\"\" -DUSE_GMP=OFF -DMMAP=OFF -DSTAGE0_MMAP=OFF -DCMAKE_AR=../emsdk/emsdk-main/upstream/emscripten/emar -DCMAKE_TOOLCHAIN_FILE=../emsdk/emsdk-main/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake -DLEAN_INSTALL_SUFFIX=-linux_wasm32 -DSTAGE0_CMAKE_LIBRARY_PATH=/usr/lib/i386-linux-gnu/",
341+ // "wasm": true,
342+ // "cmultilib": true,
343+ // "release": true,
344+ // "enabled": level >= 2,
345+ // "cross": true,
346+ // "shell": "bash -euxo pipefail {0}",
347+ // // Just a few selected tests because wasm is slow
348+ // "CTEST_OPTIONS": "-R \"leantest_1007\\.lean|leantest_Format\\.lean|leanruntest\\_1037.lean|leanruntest_ac_rfl\\.lean|leanruntest_tempfile.lean\\.|leanruntest_libuv\\.lean\""
349+ // }
214350 ];
215351 for (const job of matrix) {
216352 if (job["prepare-llvm"]) {
0 commit comments