diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 149a1e99..30c93a35 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -96,6 +96,12 @@ jobs: # are hard signals. Promote the test step to required once the # suite is green. + # 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: @@ -122,6 +128,7 @@ jobs: tpt_proto: [ 'tcp', 'uds', + 'tipc', ] exclude: # UDS is POSIX-only; Windows has no `AF_UNIX` so the @@ -129,6 +136,14 @@ jobs: - os: windows-latest tpt_proto: 'uds' + # `AF_TIPC` is a Linux-kernel protocol; exclude every + # non-Linux runner. + - os: macos-latest + tpt_proto: 'tipc' + + - os: windows-latest + tpt_proto: 'tipc' + steps: - uses: actions/checkout@v4 @@ -161,6 +176,20 @@ jobs: - name: 'Smoke: import tractor' run: uv run python -c "import sys; import tractor; from tractor.ipc._uds import HAS_UDS; assert sys.platform != 'win32' or not HAS_UDS; print('import tractor OK | HAS_UDS=', HAS_UDS)" + # 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 # Actor/PTY scheduling on macOS can fail a different # timing-sensitive node between otherwise-green runs. Retry