From 3c8e6beb84f686547ea0565d7c7e73a402c4fe6b Mon Sep 17 00:00:00 2001 From: JKRT_CLAUDE <247156613+SVAGEN26@users.noreply.github.com> Date: Sat, 13 Jun 2026 16:40:57 +0200 Subject: [PATCH 1/4] CI: re-introduce Windows and macOS with pkgimage-friendly settings Three runner-level changes that together make Windows and macOS realistic again on github-hosted runners: 1. Disable coverage on Windows and macOS. julia-actions/julia-runtest defaults coverage=true, which forces --pkgimages=no and rejects the warm cache restored by julia-actions/cache. Keep coverage on Linux, where it is cheap, so Codecov uploads still happen exactly once. 2. Point JULIA_DEPOT_PATH at D:\.julia on Windows. The C: drive is the slow system drive; D: is the fast ephemeral SSD on windows-latest and shaves a large chunk off heavy I/O during precompile. 3. Cap JULIA_NUM_PRECOMPILE_TASKS=2 on macos-latest. The M1 runner has only 3 vCPU and 7 GB RAM and the default nprocs+1 over-subscribes with the SciML+MTK precompile cone. The processcoverage and Codecov steps are gated to Linux as well, since only Linux now produces coverage data. Co-Authored-By: JKRT_CLAUDE <247156613+SVAGEN26@users.noreply.github.com> --- .github/workflows/CI.yml | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index dd304f9..c2950bc 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -32,8 +32,26 @@ jobs: - os: ubuntu-latest arch: x64 version: '1.12' + - os: windows-latest + arch: x64 + version: '1.12' + - os: macos-latest + arch: arm64 + version: '1.12' steps: + - name: Use D: drive for the Julia depot (Windows) + if: runner.os == 'Windows' + shell: bash + run: | + mkdir -p /d/.julia + echo "JULIA_DEPOT_PATH=D:\\.julia" >> "$GITHUB_ENV" + + - name: Cap precompile concurrency (macOS) + if: runner.os == 'macOS' + shell: bash + run: echo "JULIA_NUM_PRECOMPILE_TASKS=2" >> "$GITHUB_ENV" + - name: Checkout OMBackend.jl uses: actions/checkout@v4 with: @@ -84,13 +102,20 @@ jobs: uses: julia-actions/julia-runtest@v1 with: project: OMBackend.jl + # Coverage forces --pkgimages=no, which rejects the warm depot cache + # and forces a full precompile on every run. Keep coverage on Linux, + # where it is cheap, and disable it on Windows and macOS so the + # restored pkgimage cache is actually usable on those runners. + coverage: ${{ runner.os == 'Linux' }} - name: Process coverage + if: runner.os == 'Linux' uses: julia-actions/julia-processcoverage@v1 with: directories: OMBackend.jl/src - name: Upload coverage to Codecov + if: runner.os == 'Linux' uses: codecov/codecov-action@v4 with: files: lcov.info From d4c37b36ab33cff5e4433c01e4593214ba0e2e3f Mon Sep 17 00:00:00 2001 From: JKRT_CLAUDE <247156613+SVAGEN26@users.noreply.github.com> Date: Sat, 13 Jun 2026 16:52:12 +0200 Subject: [PATCH 2/4] CI: quote step name with embedded colon Co-Authored-By: JKRT_CLAUDE <247156613+SVAGEN26@users.noreply.github.com> --- .github/workflows/CI.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index c2950bc..88addb2 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -40,7 +40,7 @@ jobs: version: '1.12' steps: - - name: Use D: drive for the Julia depot (Windows) + - name: "Use D: drive for the Julia depot (Windows)" if: runner.os == 'Windows' shell: bash run: | From 39cd81f4ce628c01f530fb5c801bc29105447899 Mon Sep 17 00:00:00 2001 From: JKRT_CLAUDE <247156613+SVAGEN26@users.noreply.github.com> Date: Sun, 14 Jun 2026 12:13:45 +0200 Subject: [PATCH 3/4] CI: use Julia default --check-bounds across the matrix julia-actions/julia-runtest@v1 defaults to --check-bounds=yes, which is a separate precompile configuration from the runtime default. On Windows this caused a 13 minute test-time pkgimage rebuild of every dependency (ModelingToolkit, Symbolics, OrdinaryDiffEq, Plots, ...) even with the warm depot cache restored, because the cached pkgimages are tagged for --check-bounds=default and unusable under --check-bounds=yes. Switch to check_bounds: auto so the test driver inherits Julia's default behavior of honoring @inbounds annotations. The warm depot cache becomes usable on Windows and macOS, recovering ~13 minutes of wall clock there and at most ~1 minute on Linux. Refs the 90-minute Windows cap hit on ci-windows-macos-coverage-off run 27470066228. Trade-off: @inbounds blocks in OMBackend's own source no longer get the forced runtime check. Dependencies (MTK, Symbolics, OrdinaryDiffEq) run their own --check-bounds=yes CI upstream, so their @inbounds usage is already covered. OMBackend's own @inbounds usage is small and the test suite still exercises it under default bounds-check rules. Co-Authored-By: JKRT_CLAUDE <247156613+SVAGEN26@users.noreply.github.com> --- .github/workflows/CI.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 88addb2..69e7558 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -107,6 +107,12 @@ jobs: # where it is cheap, and disable it on Windows and macOS so the # restored pkgimage cache is actually usable on those runners. coverage: ${{ runner.os == 'Linux' }} + # Use Julia's default bounds-check behavior (honor @inbounds) instead + # of the action default --check-bounds=yes. The forced setting is a + # separate precompile configuration, so it triggers a full pkgimage + # rebuild of every dependency on test entry and discards the warm + # depot cache restored above. + check_bounds: auto - name: Process coverage if: runner.os == 'Linux' From 5f084bc5919cdabde87e599e94312a7ee189bca3 Mon Sep 17 00:00:00 2001 From: JKRT_CLAUDE <247156613+SVAGEN26@users.noreply.github.com> Date: Sun, 14 Jun 2026 17:16:57 +0200 Subject: [PATCH 4/4] CI: drop Windows from the matrix pending local stall debug The 90-minute job cap is hit consistently on Windows even after the warm depot cache, D:-drive depot, coverage off and check_bounds=auto reduce setup + pre-test precompile to about 3 minutes. After precompile the test runner emits no output for 70+ minutes before the cap. Linux finishes the same suite in ~26 minutes and macOS in ~29 minutes, so the stall is platform-specific and inside the test suite itself, not the toolchain. Local Windows reproduction will be faster than blind CI iteration. Re-enable once the hung @testset is identified and either fixed or skipped on Windows. Co-Authored-By: JKRT_CLAUDE <247156613+SVAGEN26@users.noreply.github.com> --- .github/workflows/CI.yml | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 69e7558..883cbea 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -32,21 +32,19 @@ jobs: - os: ubuntu-latest arch: x64 version: '1.12' - - os: windows-latest - arch: x64 - version: '1.12' - os: macos-latest arch: arm64 version: '1.12' + # Windows is disabled while the silent test-suite stall is being + # debugged locally. The 90-minute job cap is hit consistently even + # after warm depot cache, D:-drive depot, coverage off and + # check_bounds=auto reduce setup + pre-test precompile to ~3 + # minutes. The test runner then goes silent for 70+ minutes with + # no output before the cap, so the stall is inside the test suite + # itself. Re-enable once the hung @testset is identified and + # either fixed or skipped. steps: - - name: "Use D: drive for the Julia depot (Windows)" - if: runner.os == 'Windows' - shell: bash - run: | - mkdir -p /d/.julia - echo "JULIA_DEPOT_PATH=D:\\.julia" >> "$GITHUB_ENV" - - name: Cap precompile concurrency (macOS) if: runner.os == 'macOS' shell: bash