Skip to content

CI: re-introduce Windows and macOS with pkgimage-friendly settings#73

Merged
JKRT merged 4 commits into
OpenModelica:masterfrom
SVAGEN26:ci-windows-macos-coverage-off
Jun 14, 2026
Merged

CI: re-introduce Windows and macOS with pkgimage-friendly settings#73
JKRT merged 4 commits into
OpenModelica:masterfrom
SVAGEN26:ci-windows-macos-coverage-off

Conversation

@SVAGEN26

Copy link
Copy Markdown
Contributor

Reintroduces Windows and macOS to the CI matrix with three targeted changes that address why earlier attempts timed out.

1. Disable coverage on non-Linux

julia-actions/julia-runtest@v1 defaults to coverage: true. Coverage forces --pkgimages=no, which rejects the warm pkgimage cache restored by julia-actions/cache@v2 and forces a full precompile on every run. That is why Windows kept burning 25 minutes precompiling even when the cache action succeeded.

Coverage stays on for Linux (cheap there); Codecov upload is gated to Linux as well, so we still upload exactly one coverage report per push.

2. JULIA_DEPOT_PATH=D:\.julia on Windows

On windows-latest, C: is the slow system disk and D: is a fast ephemeral SSD. Moving the depot to D: is independently reported to drop heavy-I/O CI wall-time by ~30% (pip benchmark). julia-actions/cache@v2 honours JULIA_DEPOT_PATH so caching still works.

3. JULIA_NUM_PRECOMPILE_TASKS=2 on macOS

macos-latest is M1 with only 3 vCPU and 7 GB RAM. The default nprocs+1 over-subscribes the SciML+MTK precompile cone. Capping at 2 avoids RAM swapping.

Expected behaviour

  • First run on each OS will still hit a cold cache and may be slow (Windows could still flirt with the timeout).
  • Subsequent runs should restore the depot, find the pkgimages usable (because coverage is off), and run in a small fraction of the cold time.

SVAGEN26 added 2 commits June 13, 2026 16:40
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>
Co-Authored-By: JKRT_CLAUDE <247156613+SVAGEN26@users.noreply.github.com>
SVAGEN26 added 2 commits June 14, 2026 12:13
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>
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>
@JKRT JKRT marked this pull request as ready for review June 14, 2026 15:46
@JKRT JKRT merged commit 7c1d3aa into OpenModelica:master Jun 14, 2026
2 checks passed
SVAGEN26 referenced this pull request in SVAGEN26/OM.jl Jun 15, 2026
Same situation as JKRT/OMBackend.jl#73. The Windows job hits the
90-minute cap with no test output for the last 70+ minutes, and the
stall reproduces under the same conditions in the OMBackend test
suite that this PR exercises through the integration tests. Linux
runs the same suite in well under 50 minutes.

Local Windows reproduction is 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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants