Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
3c1bca7
build: fetch dependencies with CPM instead of FetchContent
christianparpart Sep 24, 2026
46efa24
core: TimeoutScheduler is one implementation over core-cpp's event-lo…
christianparpart Sep 24, 2026
64b86c4
net: base64 and the wakeup pipe come from core-cpp
christianparpart Sep 24, 2026
c3b6f2a
docs(spec): coroutines on core::async, specified before they exist
christianparpart Sep 24, 2026
45daa1c
core: coroutines on core::async: awaitable completions and Task-retur…
christianparpart Sep 24, 2026
0109e05
examples: a Task handler in the bank, and a coroutine flow in the pas…
christianparpart Sep 24, 2026
e649f67
tests: assertions fail the run on Windows instead of opening a dialog
christianparpart Sep 24, 2026
2d20ec4
core: a handler attached after its Completion settled is isolated too
christianparpart Sep 25, 2026
a175b4b
ci: valgrind schedules spinning threads fairly
christianparpart Sep 25, 2026
b025760
core: morph's strands and resume context are core-cpp 0.4.0's
christianparpart Sep 25, 2026
9da54d3
core: a Task handler's resumer keeps a detached chain's claim
christianparpart Sep 25, 2026
a9f9a64
core: teardown seals the strands before it drains them (core-cpp 0.4.1)
christianparpart Sep 25, 2026
521d451
ci: backend.hpp's allowlisted partial line is at 1373 after the rebase
christianparpart Sep 25, 2026
48b9f9b
core: the threaded teardown drains before it seals (N1)
christianparpart Sep 25, 2026
45cf3b3
core: the teardown's docs follow the new order; one seal probe at a time
christianparpart Sep 25, 2026
e0f278d
build: core-cpp v0.4.2
christianparpart Sep 26, 2026
d65f0d5
build: core-cpp v0.4.3
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
147 changes: 143 additions & 4 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 @@ -3397,7 +3525,7 @@ jobs:
# the one clang-tidy will ask.
python3 /tmp/filter-unbuilt-sources.py \
build/clang-debug/compile_commands.json /tmp/changed.diff /tmp/analysed.diff \
/tmp/tidy-db -std=c++23 -Wno-missing-include-dirs
/tmp/tidy-db -std=c++23 -Wno-missing-include-dirs -Wno-pragma-once-outside-header

# -path /tmp/tidy-db, not build/clang-debug: that is the augmented
# database, and pointing clang-tidy at it is the whole fix for
Expand All @@ -3412,6 +3540,7 @@ jobs:
-j "$(nproc)" \
-extra-arg=-std=c++23 \
-extra-arg=-Wno-missing-include-dirs \
-extra-arg=-Wno-pragma-once-outside-header \
-quiet \
< /tmp/analysed.diff \
2>&1 | tee clang-tidy-report.txt; then
Expand All @@ -3434,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