Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
18fe141
build: fetch dependencies with CPM instead of FetchContent
christianparpart Sep 24, 2026
da5a09b
core: TimeoutScheduler is one implementation over core-cpp's event-lo…
christianparpart Sep 24, 2026
37bd459
net: base64 and the wakeup pipe come from core-cpp
christianparpart Sep 24, 2026
970af90
docs(spec): coroutines on core::async, specified before they exist
christianparpart Sep 24, 2026
35e4865
core: coroutines on core::async: awaitable completions and Task-retur…
christianparpart Sep 24, 2026
4f3040e
examples: a Task handler in the bank, and a coroutine flow in the pas…
christianparpart Sep 24, 2026
5a810ab
tests: assertions fail the run on Windows instead of opening a dialog
christianparpart Sep 24, 2026
ec7ab48
ci: valgrind schedules spinning threads fairly
christianparpart Sep 25, 2026
a0a629b
core: morph's strands and resume context are core-cpp 0.4.0's
christianparpart Sep 25, 2026
e74d527
core: a Task handler's resumer keeps a detached chain's claim
christianparpart Sep 25, 2026
e9c4741
core: teardown seals the strands before it drains them (core-cpp 0.4.1)
christianparpart Sep 25, 2026
02ef77a
ci: backend.hpp's allowlisted partial line is at 1373 after the rebase
christianparpart Sep 25, 2026
6ddc656
core: the threaded teardown drains before it seals (N1)
christianparpart Sep 25, 2026
a4372a5
core: the teardown's docs follow the new order; one seal probe at a time
christianparpart Sep 25, 2026
6b97e0d
build: core-cpp v0.4.2
christianparpart Sep 26, 2026
cbddd26
build: core-cpp v0.4.3
christianparpart Sep 26, 2026
5dde1cb
build: core-cpp v0.5.0
christianparpart Sep 26, 2026
478d4f8
core: a suspended handler's session reaches its resumptions only (cor…
christianparpart Sep 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .clang-tidy
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,12 @@ CheckOptions:
value: CamelCase
- key: readability-identifier-naming.FunctionCase
value: camelBack
# The C++ coroutine protocol: names the compiler looks up, which no naming
# convention can change.
- key: readability-identifier-naming.FunctionIgnoredRegexp
value: "^(await_ready|await_suspend|await_resume|get_return_object|initial_suspend|final_suspend|return_void|return_value|yield_value|unhandled_exception)$"
- key: readability-identifier-naming.ClassIgnoredRegexp
value: "^promise_type$"
- key: readability-identifier-naming.VariableCase
value: camelBack
- key: readability-identifier-naming.MemberPrefix
Expand Down
9 changes: 5 additions & 4 deletions .github/self-hosted-runner/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -465,10 +465,11 @@ needed for that case.

## Dependency clones and HTTP/2

`CMakeLists.txt` falls back to `FetchContent` for glaze when no installed
copy is found, so every Linux configure step does one anonymous
`git clone https://github.com/stephenberry/glaze.git` — the only
unauthenticated clone in the build. Inside this image that clone fails
`CMakeLists.txt` fetches glaze through CPM when no installed copy is
found, so a Linux configure whose CPM source cache (`.cache/cpm`, restored
by `actions/cache`) misses does one anonymous
`git clone https://github.com/stephenberry/glaze.git` — an unauthenticated
clone. Inside this image that clone fails
most of the time: GitHub answers the `info/refs` GET with 200 and then
the `git-upload-pack` POST on the same reused HTTP/2 connection with a
spurious `401` and `www-authenticate: Basic realm="GitHub"`, which
Expand Down
144 changes: 141 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -136,10 +136,10 @@ env:
#
# Which artefact this names, checked rather than assumed:
# ubuntu-24.04's package is 3.4.0-1build1 and it ships /usr/lib/cmake/Catch2,
# so `find_package(Catch2 CONFIG QUIET)` at CMakeLists.txt:557 SUCCEEDS on
# this runner and the FetchContent v3.8.1 fallback never runs -- reproduced
# so the root CMakeLists.txt's `find_package(Catch2 CONFIG QUIET)` SUCCEEDS on
# this runner and the CPM v3.8.1 fallback never runs -- reproduced
# in a clean ubuntu:24.04 container, and corroborated by this job's own log
# (no `_deps/catch2-*`, no dep-cache line for Catch2) and by the report above
# (no Catch2 fetched by CPM) and by the report above
# naming /usr/include. The pin therefore guards the installation this job
# really analyses against. Catch2 reaches the translation units through the
# compiler's implicit /usr/include with no include flag at all: over the 751
Expand Down Expand Up @@ -167,6 +167,16 @@ jobs:
steps:
- uses: actions/checkout@v4

# CPM's source cache (CMakeLists.txt defaults CPM_SOURCE_CACHE to
# .cache/cpm): restored, a configure clones nothing; missed, it clones
# and this step saves the result for the next run.
- name: Cache CPM sources
uses: actions/cache@v4
with:
path: .cache/cpm
key: cpm-${{ runner.os }}-${{ hashFiles('cmake/CPM.cmake', '**/CMakeLists.txt') }}
restore-keys: cpm-${{ runner.os }}-

- name: Setup MSVC environment
uses: ilammy/msvc-dev-cmd@v1

Expand Down Expand Up @@ -294,6 +304,16 @@ jobs:
steps:
- uses: actions/checkout@v4

# CPM's source cache (CMakeLists.txt defaults CPM_SOURCE_CACHE to
# .cache/cpm): restored, a configure clones nothing; missed, it clones
# and this step saves the result for the next run.
- name: Cache CPM sources
uses: actions/cache@v4
with:
path: .cache/cpm
key: cpm-${{ runner.os }}-${{ hashFiles('cmake/CPM.cmake', '**/CMakeLists.txt') }}
restore-keys: cpm-${{ runner.os }}-

- name: Cache apt packages
uses: actions/cache@v4
with:
Expand Down Expand Up @@ -518,6 +538,16 @@ jobs:
steps:
- uses: actions/checkout@v4

# CPM's source cache (CMakeLists.txt defaults CPM_SOURCE_CACHE to
# .cache/cpm): restored, a configure clones nothing; missed, it clones
# and this step saves the result for the next run.
- name: Cache CPM sources
uses: actions/cache@v4
with:
path: .cache/cpm
key: cpm-${{ runner.os }}-${{ hashFiles('cmake/CPM.cmake', '**/CMakeLists.txt') }}
restore-keys: cpm-${{ runner.os }}-

- name: Cache apt packages
uses: actions/cache@v4
with:
Expand Down Expand Up @@ -730,6 +760,16 @@ jobs:
steps:
- uses: actions/checkout@v4

# CPM's source cache (CMakeLists.txt defaults CPM_SOURCE_CACHE to
# .cache/cpm): restored, a configure clones nothing; missed, it clones
# and this step saves the result for the next run.
- name: Cache CPM sources
uses: actions/cache@v4
with:
path: .cache/cpm
key: cpm-${{ runner.os }}-${{ hashFiles('cmake/CPM.cmake', '**/CMakeLists.txt') }}
restore-keys: cpm-${{ runner.os }}-

- name: Cache apt packages
uses: actions/cache@v4
with:
Expand Down Expand Up @@ -931,6 +971,16 @@ jobs:
steps:
- uses: actions/checkout@v4

# CPM's source cache (CMakeLists.txt defaults CPM_SOURCE_CACHE to
# .cache/cpm): restored, a configure clones nothing; missed, it clones
# and this step saves the result for the next run.
- name: Cache CPM sources
uses: actions/cache@v4
with:
path: .cache/cpm
key: cpm-${{ runner.os }}-${{ hashFiles('cmake/CPM.cmake', '**/CMakeLists.txt') }}
restore-keys: cpm-${{ runner.os }}-

- name: Cache apt packages
uses: actions/cache@v4
with:
Expand Down Expand Up @@ -1150,6 +1200,16 @@ jobs:
steps:
- uses: actions/checkout@v4

# CPM's source cache (CMakeLists.txt defaults CPM_SOURCE_CACHE to
# .cache/cpm): restored, a configure clones nothing; missed, it clones
# and this step saves the result for the next run.
- name: Cache CPM sources
uses: actions/cache@v4
with:
path: .cache/cpm
key: cpm-${{ runner.os }}-${{ hashFiles('cmake/CPM.cmake', '**/CMakeLists.txt') }}
restore-keys: cpm-${{ runner.os }}-

- name: Cache apt packages
uses: actions/cache@v4
with:
Expand Down Expand Up @@ -1341,6 +1401,16 @@ jobs:
steps:
- uses: actions/checkout@v4

# CPM's source cache (CMakeLists.txt defaults CPM_SOURCE_CACHE to
# .cache/cpm): restored, a configure clones nothing; missed, it clones
# and this step saves the result for the next run.
- name: Cache CPM sources
uses: actions/cache@v4
with:
path: .cache/cpm
key: cpm-${{ runner.os }}-${{ hashFiles('cmake/CPM.cmake', '**/CMakeLists.txt') }}
restore-keys: cpm-${{ runner.os }}-

- name: Cache apt packages
uses: actions/cache@v4
with:
Expand Down Expand Up @@ -1446,6 +1516,16 @@ jobs:
with:
fetch-depth: 0 # need history for the changed-paths diff below

# CPM's source cache (CMakeLists.txt defaults CPM_SOURCE_CACHE to
# .cache/cpm): restored, a configure clones nothing; missed, it clones
# and this step saves the result for the next run.
- name: Cache CPM sources
uses: actions/cache@v4
with:
path: .cache/cpm
key: cpm-${{ runner.os }}-${{ hashFiles('cmake/CPM.cmake', '**/CMakeLists.txt') }}
restore-keys: cpm-${{ runner.os }}-

- name: Determine whether the ladder needs to run
id: filter
run: |
Expand Down Expand Up @@ -1916,6 +1996,16 @@ jobs:
with:
fetch-depth: 0 # need history for the changed-paths diff below

# CPM's source cache (CMakeLists.txt defaults CPM_SOURCE_CACHE to
# .cache/cpm): restored, a configure clones nothing; missed, it clones
# and this step saves the result for the next run.
- name: Cache CPM sources
uses: actions/cache@v4
with:
path: .cache/cpm
key: cpm-${{ runner.os }}-${{ hashFiles('cmake/CPM.cmake', '**/CMakeLists.txt') }}
restore-keys: cpm-${{ runner.os }}-

# Same filter as ladder-tests, and now literally the same generator
# rather than a second hand-copy of the same list: the two jobs build the
# identical tree and differ only in instrumentation, so a change that
Expand Down Expand Up @@ -2220,6 +2310,16 @@ jobs:
steps:
- uses: actions/checkout@v4

# CPM's source cache (CMakeLists.txt defaults CPM_SOURCE_CACHE to
# .cache/cpm): restored, a configure clones nothing; missed, it clones
# and this step saves the result for the next run.
- name: Cache CPM sources
uses: actions/cache@v4
with:
path: .cache/cpm
key: cpm-${{ runner.os }}-${{ hashFiles('cmake/CPM.cmake', '**/CMakeLists.txt') }}
restore-keys: cpm-${{ runner.os }}-

- name: Cache apt packages
uses: actions/cache@v4
with:
Expand Down Expand Up @@ -2528,6 +2628,16 @@ jobs:
steps:
- uses: actions/checkout@v4

# CPM's source cache (CMakeLists.txt defaults CPM_SOURCE_CACHE to
# .cache/cpm): restored, a configure clones nothing; missed, it clones
# and this step saves the result for the next run.
- name: Cache CPM sources
uses: actions/cache@v4
with:
path: .cache/cpm
key: cpm-${{ runner.os }}-${{ hashFiles('cmake/CPM.cmake', '**/CMakeLists.txt') }}
restore-keys: cpm-${{ runner.os }}-

- name: Cache apt packages
uses: actions/cache@v4
with:
Expand Down Expand Up @@ -2602,7 +2712,15 @@ jobs:
if [ "$suite" = "tests/morph_tests" ]; then
EXTRA_ARGS=("~[oom-injector]" "~[issue108]")
fi
# --fair-sched=yes: Valgrind runs one thread at a time, and by
# default a thread that yields can take the lock straight back.
# A test whose threads spin or yield while they wait for another
# thread then waits on luck. The strand drain-race case, removed
# with morph's own strand, did: 1982 s alone, 45 of master's 54
# minutes here, and past three hours on one run of #806; with a
# fair queue, 63 s. Kept for the next test that waits that way.
valgrind \
--fair-sched=yes \
--tool=memcheck \
--leak-check=full \
--show-leak-kinds=definite,indirect \
Expand Down Expand Up @@ -2712,6 +2830,16 @@ jobs:
with:
fetch-depth: 0 # need full history for git diff against base

# CPM's source cache (CMakeLists.txt defaults CPM_SOURCE_CACHE to
# .cache/cpm): restored, a configure clones nothing; missed, it clones
# and this step saves the result for the next run.
- name: Cache CPM sources
uses: actions/cache@v4
with:
path: .cache/cpm
key: cpm-${{ runner.os }}-${{ hashFiles('cmake/CPM.cmake', '**/CMakeLists.txt') }}
restore-keys: cpm-${{ runner.os }}-

- name: Cache apt packages
uses: actions/cache@v4
with:
Expand Down Expand Up @@ -3435,6 +3563,16 @@ jobs:
steps:
- uses: actions/checkout@v4

# CPM's source cache (CMakeLists.txt defaults CPM_SOURCE_CACHE to
# .cache/cpm): restored, a configure clones nothing; missed, it clones
# and this step saves the result for the next run.
- name: Cache CPM sources
uses: actions/cache@v4
with:
path: .cache/cpm
key: cpm-${{ runner.os }}-${{ hashFiles('cmake/CPM.cmake', '**/CMakeLists.txt') }}
restore-keys: cpm-${{ runner.os }}-

# GCC 15 for the same reason the gcc-* presets use it: the default
# logger needs a standard library with <print>, and ubuntu-24.04 ships
# GCC 13.
Expand Down
10 changes: 10 additions & 0 deletions .github/workflows/wasm-demo.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,16 @@ jobs:
- name: Checkout
uses: actions/checkout@v4

# CPM's source cache (CMakeLists.txt defaults CPM_SOURCE_CACHE to
# .cache/cpm): restored, a configure clones nothing; missed, it clones
# and this step saves the result for the next run.
- name: Cache CPM sources
uses: actions/cache@v4
with:
path: .cache/cpm
key: cpm-${{ runner.os }}-${{ hashFiles('cmake/CPM.cmake', '**/CMakeLists.txt') }}
restore-keys: cpm-${{ runner.os }}-

- name: Install build tools
run: |
sudo apt-get update -q
Expand Down
10 changes: 10 additions & 0 deletions .github/workflows/wasm-ladder.yml
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,16 @@ jobs:
- name: Checkout
uses: actions/checkout@v4

# CPM's source cache (CMakeLists.txt defaults CPM_SOURCE_CACHE to
# .cache/cpm): restored, a configure clones nothing; missed, it clones
# and this step saves the result for the next run.
- name: Cache CPM sources
uses: actions/cache@v4
with:
path: .cache/cpm
key: cpm-${{ runner.os }}-${{ hashFiles('cmake/CPM.cmake', '**/CMakeLists.txt') }}
restore-keys: cpm-${{ runner.os }}-

- name: Install build tools
run: |
sudo apt-get update -q
Expand Down
Loading
Loading