Add a `--tpt-proto=tipc` CI matrix leg

Plan 01 §7.3's last item. The module ships w/ the standard
ubuntu kernel package but is NOT loaded by default, so the leg
gets a gated `sudo modprobe tipc` step plus a verify that
asserts `TIPCAddress.is_available()` before the suite runs —
i.e. a missing module fails w/ an actionable line instead of a
few hundred connect timeouts.

Deats,
- `tipc` added to the `tpt_proto` matrix axis, and excluded on
  `macos-latest` bc `AF_TIPC` is a linux-kernel proto that
  doesn't exist on darwin at all.
- `continue-on-error` is scoped to just this leg via
  `${{ matrix.tpt_proto == 'tipc' }}` — GH's runners have never
  been asked to `modprobe` for us, so it lands NON-blocking
  until it's had a few green runs. Drop the gate then.
- if the runners do refuse, the documented fallback is a
  container job w/ `--cap-add NET_ADMIN`.

Cross-node (bearer) TIPC still can't be CI'd; that stays the
manual smoke test in `examples/multihost/tipc_cluster/README.md`.

Partially addresses #420.

(this patch was generated in some part by `claude-code` using `claude-opus-5` (`anthropic`))
wkt/pr493_review
Gud Boi 2026-08-17 14:24:44 -04:00
parent 1526372e37
commit 2d082373bd
1 changed files with 26 additions and 0 deletions

View File

@ -92,6 +92,12 @@ jobs:
timeout-minutes: 16
runs-on: ${{ matrix.os }}
# XXX the `tipc` leg stays NON-blocking until the `modprobe`
# step below is proven stable on GH's runners; flip this off
# once it's had a few green runs. See plan 01 §7.3 in
# `ai/tpt-backends/01_tipc_backend.md`.
continue-on-error: ${{ matrix.tpt_proto == 'tipc' }}
strategy:
fail-fast: false
matrix:
@ -117,6 +123,7 @@ jobs:
tpt_proto: [
'tcp',
'uds',
'tipc',
]
# https://github.com/orgs/community/discussions/26253#discussioncomment-3250989
exclude:
@ -124,6 +131,11 @@ jobs:
- os: macos-latest
tpt_proto: 'uds'
# XXX `AF_TIPC` is a linux-kernel protocol; the address
# family doesn't exist on darwin at all.
- os: macos-latest
tpt_proto: 'tipc'
steps:
- uses: actions/checkout@v4
@ -150,6 +162,20 @@ jobs:
- name: List deps tree
run: uv tree
# XXX `AF_TIPC` needs its kernel module loaded! It ships
# with the standard ubuntu kernel package but is NOT loaded
# by default, so a bare `--tpt-proto=tipc` run would
# otherwise fail at the first `.bind()`.
#
# If GH's runners ever refuse the `modprobe`, the fallback
# is a container job w/ `--cap-add NET_ADMIN`.
- name: 'Load the `tipc` kernel module'
if: matrix.tpt_proto == 'tipc'
run: |
sudo modprobe tipc
tipc node get address
uv run python -c "from tractor.ipc._tipc import TIPCAddress; ok, why = TIPCAddress.is_available(); assert ok, why; print('AF_TIPC available')"
- name: Run tests
run: >
uv run