diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index dd304f9..883cbea 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -32,8 +32,24 @@ jobs: - os: ubuntu-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: 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 +100,26 @@ 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' }} + # 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' 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