6060 directives : pool_memalign
6161 - image : ghcr.io/ponylang/ponyc-ci-ubuntu26.04-builder:20260425
6262 debugger : lldb
63- directives : pool_retain
63+ directives : pool_classic
64+ - image : ghcr.io/ponylang/ponyc-ci-ubuntu26.04-builder:20260425
65+ debugger : lldb
66+ directives : pool_classic,pool_retain
6467 - image : ghcr.io/ponylang/ponyc-ci-ubuntu26.04-builder:20260425
6568 debugger : lldb
6669 directives : runtimestats
@@ -130,10 +133,8 @@ jobs:
130133 # the Linux directive checks pass -- the slower Windows runner isn't spent on a
131134 # directive that's already broken on Linux. That dependency also carries the
132135 # no-changes gate for free: when there are no changes use_directives is skipped,
133- # which skips this job too, so it needs no check-for-changes `if` of its own. The
134- # matrix has one entry today (runtime_tracing, the only use= option with
135- # Windows-specific runtime code); add rows as more Windows-supported options
136- # become worth checking here.
136+ # which skips this job too, so it needs no check-for-changes `if` of its own. Add
137+ # rows as more Windows-supported options become worth checking here.
137138 use_directives_windows :
138139 needs : use_directives
139140 runs-on : windows-2025-vs2026
@@ -148,6 +149,10 @@ jobs:
148149 # runtime_tracing's format specifiers for the runtimestats-gated fields
149150 # only compile in this combined build, so cover it explicitly.
150151 - directives : runtime_tracing,runtimestats
152+ # Windows defaults to the arena allocator, so this row builds the
153+ # classic pool there, as PonyUses.cmake requires for every entry in
154+ # its Windows allowlist.
155+ - directives : pool_classic
151156 name : ' use ${{ matrix.directives }} (Windows)'
152157 steps :
153158 - name : Checkout
@@ -288,6 +293,61 @@ jobs:
288293 topic : ${{ github.repository }} scheduled job failure
289294 content : ${{ github.server_url}}/${{ github.repository }}/actions/runs/${{ github.run_id }} failed.
290295
296+ always_assert :
297+ needs : check-for-changes
298+ if : needs.check-for-changes.outputs.has-changes == 'true'
299+ runs-on : ubuntu-latest
300+
301+ # Builds the runtime optimized (release) with its asserts and the arena
302+ # allocator's integrity checks kept in, via -DPONY_ALWAYS_ASSERT=ON. A plain
303+ # release compiles those checks out; the debug suites run them but
304+ # unoptimized. This is the only lane that runs them against optimized code,
305+ # where the compiler can expose ordering or undefined behavior the checks
306+ # then catch.
307+ strategy :
308+ fail-fast : false
309+ matrix :
310+ include :
311+ - image : ghcr.io/ponylang/ponyc-ci-ubuntu26.04-builder:20260425
312+ debugger : lldb
313+
314+ name : release with always-assert
315+ container :
316+ image : ${{ matrix.image }}
317+ options : --user pony --cap-add=SYS_PTRACE --security-opt seccomp=unconfined
318+ steps :
319+ - name : Checkout
320+ uses : actions/checkout@v6.0.2
321+ with :
322+ ref : ${{ inputs.ref || github.sha }}
323+ - name : Build libs
324+ env :
325+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
326+ LIBS_IMAGE : ${{ matrix.image }}
327+ LIBS_TAG : ${{ hashFiles('lib/CMakePresets.json', 'CMakeLists.txt', 'lib/CMakeLists.txt', 'lib/build-libs.cmake', 'lib/llvm/patches/*') }}
328+ run : python3 .ci-scripts/libs-cache/resolve_libs_cache.py --branch-cache --image "$LIBS_IMAGE" --tag "$LIBS_TAG" -- cmake -DJOBS=4 -P lib/build-libs.cmake
329+ - name : Build Release Runtime with always-assert
330+ run : |
331+ cmake --preset x86-64-release -DPONY_ALWAYS_ASSERT=ON
332+ cmake --build --preset x86-64-release
333+ - name : Test with Release Runtime
334+ run : |
335+ PONY_TEST_DEBUGGER="$(.ci-scripts/test-debugger.sh ${{ matrix.debugger }})"
336+ export PONY_TEST_DEBUGGER
337+ export PONY_FULL_PROGRAM_TIMEOUT=120
338+ ctest --preset x86-64-release -L ci-core
339+ - name : Send alert on failure
340+ if : ${{ failure() }}
341+ uses : zulip/github-actions-zulip/send-message@bd8ec52de371d139ae8313661b7d8318c19266aa
342+ with :
343+ api-key : ${{ secrets.ZULIP_SCHEDULED_JOB_FAILURE_API_KEY }}
344+ email : ${{ secrets.ZULIP_SCHEDULED_JOB_FAILURE_EMAIL }}
345+ organization-url : ' https://ponylang.zulipchat.com/'
346+ to : notifications
347+ type : stream
348+ topic : ${{ github.repository }} scheduled job failure
349+ content : ${{ github.server_url}}/${{ github.repository }}/actions/runs/${{ github.run_id }} failed.
350+
291351 with_sanitizers :
292352 needs : check-for-changes
293353 if : needs.check-for-changes.outputs.has-changes == 'true'
0 commit comments