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.