Skip to content

ci: ros2:// interop against Jazzy and Lyrical (design 053 s12) - #314

Merged
lxsaah merged 1 commit into
feat/aimdb-zenoh-connectorfrom
feat/053-s12-interop-ci
Oct 9, 2026
Merged

lxsaah merged 1 commit into
feat/aimdb-zenoh-connectorfrom
feat/053-s12-interop-ci

Conversation

@lxsaah

@lxsaah lxsaah commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

Stage s12 of docs/design/053-implementation-plan.md, the checkpoint: ros2:// interop against real ROS 2 in CI. Meets criterion 2. Criterion 1, golden values captured from real rmw_zenoh, was already met in s07.

What it adds

  • aimdb-zenoh-connector/tests/interop/Dockerfile: ros:<distro> with rmw_zenoh_cpp installed.
  • tests/interop/ros2_interop.sh <distro>: starts rmw_zenohd in Docker with host networking, then runs the ros2_talker and ros2_listener examples as AimDB.
    • Publisher:
      • ros2 node list shows /aimdb/talker;
      • ros2 topic info -v /aimdb_chatter shows the type, node name and namespace, the type hash, PUBLISHER, a GID, RELIABLE, KEEP_LAST (10) and VOLATILE;
      • ros2 topic echo --once receives data: aimdb N.
    • Subscription:
      • ros2 topic info -v /aimdb_cmd shows it;
      • all 3 of 3 messages from ros2 topic pub --times 3 reach the record.
    • Robustness: it retries while ROS discovery settles (the CLI containers need about 20 s to start), reads container output through docker logs so it works on any Docker setup, and cleans up its containers on success and on failure. IMAGE and EXAMPLES can override the image and the binaries' directory.
  • CI job ros2-interop, a matrix over jazzy and lyrical with fail-fast: false. It runs make ros2-interop DISTRO=<distro>, which builds the examples and runs the script.
  • Makefile target ros2-interop (default DISTRO=lyrical), so you can run it locally.

Verified locally

  • ros2_interop.sh lyrical: PASS
  • ros2_interop.sh jazzy: PASS
  • make ros2-interop DISTRO=lyrical: PASS
  • Negative control: a copy of the script that expects KEEP_LAST (7) fails with FAIL (lyrical): ros2 topic info -v lacks 'History (Depth): KEEP_LAST (7)', exit code 1, and still cleans up.

The GID is checked for presence here. Its value is checked against captured rmw_zenoh attachments in s07, and against the hash of our own publisher token in s09's tests.

Checkpoint

With s12, the native ROS feature is complete: zenoh:// (s08), ros2:// outbound and inbound (s09, s10), the shared gateway session (s11), and now interop in CI. The remaining stages are the embedded backend (s13–s15), blocked on a zenoh-nostd release (Q7), and docs (s16). Following the Q7 answer, the feature branch could merge into main with the native backend only once s16's native-facing docs are written.

Checks

The full matrix runs in CI, now including the two ros2-interop jobs.

🤖 Generated with Claude Code

`tests/interop/ros2_interop.sh <distro>` starts rmw_zenohd in Docker,
runs the ros2_talker and ros2_listener examples, and checks them with
the ros2 CLI: `node list` shows the node, `topic info -v` the type,
hash, QoS and a GID, `topic echo` a value, and every message of
`topic pub` arrives. It retries while discovery settles and reads
container output through `docker logs`.

CI runs it as `ros2-interop` for jazzy and lyrical; locally it is
`make ros2-interop DISTRO=...`.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@lxsaah
lxsaah merged commit d3ecad8 into feat/aimdb-zenoh-connector Oct 9, 2026
9 checks passed
@lxsaah
lxsaah deleted the feat/053-s12-interop-ci branch October 9, 2026 20:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant