Autobahn compliance
The autobahn GitHub Actions workflow tests the WebSocket client and echo server
using Docker. Add the autobahn label to a pull request to run it. New commits
rerun the check while the label remains; removing the label skips it. It also
runs on merges to master and can be started manually from the Actions tab,
including against a release branch or tag.
The workflow calls one make target:
make -f makefile.dev test_autobahn
For a live local progress display, run:
make -f makefile.dev test_autobahn_interactive
The display shows the current case ID, cases started, and elapsed time for each role, followed by a validated PASS/FAIL summary and the report directory. Case progress is not a pass count: results are checked after each role finishes. A terminal updates one line in place; redirected output uses plain progress lines. Ctrl-C stops the run and cleans up its containers.
To select a smaller run through make:
make -f makefile.dev test_autobahn_interactive AUTOBAHN_ARGS="--cases 6.4.* --role client"
Docker and Python 3 are required. The library is built from the current checkout with C++11 and zlib enabled. This checks WebSocket framing, closing, UTF-8, and compression in both directions over plain WebSocket connections; it does not test TLS backends. The pinned Autobahn image is amd64, so Docker Desktop uses emulation on Apple Silicon.
Both roles run every case in the pinned suite, without exclusions. The runner
checks the exact case IDs against a manifest generated by that suite, then
checks both behavior and behaviorClose. Only OK and INFORMATIONAL pass;
missing cases, malformed reports, unknown statuses, non-strict results, and
closing failures fail the check. Process success alone is insufficient.
Reports are recreated under build/autobahn/reports/client and
build/autobahn/reports/server. Open each index.html for detailed results.
Container logs and the selected suite/image IDs are also saved under
build/autobahn. CI uploads these as the autobahn-reports artifact even when
tests fail. Each role has a 30-minute limit; the whole CI job has a 75-minute
limit including the build.
For a faster local investigation, select cases or a role:
python3 tools/run_autobahn.py --role client --cases '1.*,2.*' --output build/autobahn-debug
CI always uses the full case selection. Generated containers and their private Docker network are removed after the run. A lock prevents simultaneous runs from overwriting the same output directory.
To block merging labelled PRs on compliance failures, make the autobahn check
required in the repository's branch protection or ruleset. Unlabelled PRs skip
that job, which GitHub treats as successful even for a required check. A failure
on master happens after merging and cannot prevent that merge. See
GitHub's job condition documentation.