feat(quic-interop): add run-matrix.sh wrapper for the per-run loop

One-shot wrapper that clones quic-interop-runner alongside this repo if
missing, sets up its venv, merges our implementations.json snippet, builds
the endpoint image, then invokes run.py with passed-through args. Every
step is idempotent so repeated invocations just iterate.

Designed to script only the per-run loop, not first-time tooling install
(Docker Desktop, Homebrew, Wireshark prefs) — those are GUI / one-time
steps where a script either fails awkwardly or hides what the user is
consenting to.

Cross-platform install hints (apt-get on Linux, brew on macOS) on missing
prereqs. Daemon liveness check (docker info) catches the common macOS
"Docker Desktop installed but not running" trap. SKIP_BUILD=1 escape
hatch for tight image-unchanged inner loops.

Plan doc updated: run-matrix.sh is now the documented happy path; the
manual jq-merge sequence is kept as a fallback.

https://claude.ai/code/session_01HcvfQq1ttPV9PkRoJb4nyT
This commit is contained in:
Claude
2026-05-06 22:06:06 +00:00
parent 093a39a3ee
commit 86192312ca
2 changed files with 120 additions and 6 deletions
@@ -26,16 +26,32 @@ reorder / migration scenarios that are awkward to reproduce in unit tests.
## Local iteration loop
```
# In our repo:
make -C quic/interop build
The fast path: `quic/interop/run-matrix.sh` clones the runner alongside
this repo, sets up a venv, merges our `implementations.json` snippet,
builds the endpoint image, and invokes `run.py`. All steps are
idempotent so repeated invocations just iterate.
# In a sibling clone of quic-interop-runner, merge our entry into
# implementations.json (snippet checked in at quic/interop/quic-interop-runner-snippet.json):
```
# Single test against the most permissive peer:
quic/interop/run-matrix.sh -s aioquic -t handshake
# A focused triangulation:
quic/interop/run-matrix.sh -s aioquic -t handshake,chacha20
quic/interop/run-matrix.sh -s quic-go -t handshake,chacha20
quic/interop/run-matrix.sh -s picoquic -t handshake,chacha20
# Tight inner loop — skip the image rebuild between test selections:
SKIP_BUILD=1 quic/interop/run-matrix.sh -s aioquic -t transfer
```
Manual flow (if `run-matrix.sh` doesn't fit):
```
make -C quic/interop build
# Then in a sibling clone of quic-interop-runner, merge our snippet:
jq -s '.[0] * .[1]' implementations.json \
../amethyst/quic/interop/quic-interop-runner-snippet.json \
> implementations.json.new && mv implementations.json.new implementations.json
python run.py -d -i amethyst -s aioquic -t handshake,chacha20 --log-dir ./logs
```