Add `main_thread_forkserver` CI matrix rows
Add `capture` dimension to CI matrix so fork-based
backends run `--capture=sys` (fork-child × `--capture=fd`
is a known deadlock). Non-fork backends keep `fd`.
Deats,
- two `include:` rows for `main_thread_forkserver` on
linux py3.13: tcp + uds, both `capture: 'sys'`
- job name updated to show `capture=` mode
- timeout bumped 16 -> 20 min to accommodate the
additional matrix cells
- `--capture=${{ matrix.capture }}` replaces hardcoded
`--capture=fd`
(this patch was generated in some part by [`claude-code`][claude-code-gh])
[claude-code-gh]: https://github.com/anthropics/claude-code
subint_forkserver_backend
parent
92443dc4ef
commit
a24600f1a7
|
|
@ -83,10 +83,27 @@ jobs:
|
||||||
|
|
||||||
|
|
||||||
testing:
|
testing:
|
||||||
name: '${{ matrix.os }} Python${{ matrix.python-version }} spawn_backend=${{ matrix.spawn_backend }} tpt_proto=${{ matrix.tpt_proto }}'
|
name: '${{ matrix.os }} Python${{ matrix.python-version }} spawn_backend=${{ matrix.spawn_backend }} tpt_proto=${{ matrix.tpt_proto }} capture=${{ matrix.capture }}'
|
||||||
timeout-minutes: 16
|
timeout-minutes: 20
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
|
|
||||||
|
# NOTE on the matrix shape — the `capture=` mode follows
|
||||||
|
# `spawn_backend`:
|
||||||
|
#
|
||||||
|
# - `trio` / `mp_*` backends use `--capture=fd` (default)
|
||||||
|
# for per-test attribution of subactor *raw-fd* output
|
||||||
|
# in failure reports.
|
||||||
|
# - Fork-based backends (`main_thread_forkserver`,
|
||||||
|
# `subint_forkserver`) REQUIRE `--capture=sys` because
|
||||||
|
# fork-child × `--capture=fd` is a known deadlock
|
||||||
|
# pattern. See the long NOTE in `tractor._testing.pytest`'s
|
||||||
|
# `pytest_load_initial_conftests` for the mechanism +
|
||||||
|
# tradeoff write-up.
|
||||||
|
#
|
||||||
|
# If a future matrix row adds a fork-spawn backend
|
||||||
|
# WITHOUT setting `capture: 'sys'`, the
|
||||||
|
# `pytest_load_initial_conftests` hook fail-fasts on `CI=1`
|
||||||
|
# with a clear error msg. So the matrix is self-policing.
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
|
|
@ -113,6 +130,26 @@ jobs:
|
||||||
'tcp',
|
'tcp',
|
||||||
'uds',
|
'uds',
|
||||||
]
|
]
|
||||||
|
capture: [
|
||||||
|
'fd', # default for non-fork backends
|
||||||
|
]
|
||||||
|
|
||||||
|
# Fork-based backends — added via `include:` so each
|
||||||
|
# cell carries its REQUIRED `capture: 'sys'` mode.
|
||||||
|
# Linux-only for now; macOS coverage TBD pending
|
||||||
|
# local validation.
|
||||||
|
include:
|
||||||
|
- os: ubuntu-latest
|
||||||
|
python-version: '3.13'
|
||||||
|
spawn_backend: 'main_thread_forkserver'
|
||||||
|
tpt_proto: 'tcp'
|
||||||
|
capture: 'sys'
|
||||||
|
- os: ubuntu-latest
|
||||||
|
python-version: '3.13'
|
||||||
|
spawn_backend: 'main_thread_forkserver'
|
||||||
|
tpt_proto: 'uds'
|
||||||
|
capture: 'sys'
|
||||||
|
|
||||||
# https://github.com/orgs/community/discussions/26253#discussioncomment-3250989
|
# https://github.com/orgs/community/discussions/26253#discussioncomment-3250989
|
||||||
exclude:
|
exclude:
|
||||||
# don't do UDS run on macOS (for now)
|
# don't do UDS run on macOS (for now)
|
||||||
|
|
@ -153,8 +190,11 @@ jobs:
|
||||||
-rsx
|
-rsx
|
||||||
--spawn-backend=${{ matrix.spawn_backend }}
|
--spawn-backend=${{ matrix.spawn_backend }}
|
||||||
--tpt-proto=${{ matrix.tpt_proto }}
|
--tpt-proto=${{ matrix.tpt_proto }}
|
||||||
--capture=fd
|
--capture=${{ matrix.capture }}
|
||||||
# ^XXX^ can't work with --spawn-method=main_thread_forkserver
|
# NOTE: capture mode is matrix-driven — `fd` for
|
||||||
|
# non-fork backends (per-test fd attribution),
|
||||||
|
# `sys` for fork-based (avoids fork-child x
|
||||||
|
# capture-fd deadlock). See matrix-NOTE above.
|
||||||
|
|
||||||
# XXX legacy NOTE XXX
|
# XXX legacy NOTE XXX
|
||||||
#
|
#
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue