ci: add Lyrical to the build & test matrix - #17
Merged
Conversation
benaliabderrahmane
force-pushed
the
ci-add-lyrical
branch
from
August 19, 2026 09:48
a25c85e to
f650fad
Compare
benaliabderrahmane
force-pushed
the
ci-add-lyrical
branch
from
August 19, 2026 09:50
f650fad to
6be81a3
Compare
Contributor
There was a problem hiding this comment.
Pull request overview
This PR substantially changes core runtime behavior in rmw_unix_socket_cpp (wait/graph wakeups, TRANSIENT_LOCAL durability semantics, and transport edge-case handling) and adds extensive new tests to cover those behaviors. It also updates CI to include the next ROS 2 distro (“lyrical”) in the build/test matrix, but the PR metadata currently describes the change as CI-only, which doesn’t match the actual scope.
Changes:
- Add a pull-based TRANSIENT_LOCAL latched-cache design backed by per-publisher shared-memory rings (plus dedup watermarks and related test coverage).
- Rework
rmw_wait()to support doorbell-based cross-process wakeups for graph events, plus more selective draining and fd arming behavior. - Extend CI to build/test on
lyricaland update dependency handling forrosidl_buffer.
Reviewed changes
Copilot reviewed 1 out of 1 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
.github/workflows/ci.yml |
Adds lyrical to the CI build/test matrix and adjusts rosidl_buffer install logic. |
rmw_unix_socket_cpp/CMakeLists.txt |
Links registry implementation into graph tests for direct registry seeding. |
rmw_unix_socket_cpp/DESIGN.md |
Updates design documentation to reflect doorbell wakeups, pull-based TRANSIENT_LOCAL replay, and context-id semantics. |
rmw_unix_socket_cpp/src/registry.hpp |
Introduces ENTRY_DOORBELL registry entry type. |
rmw_unix_socket_cpp/src/registry.cpp |
Rings per-context doorbells after registry mutations; unlinks TL shm on slot teardown; adds doorbell-safe ringing logic. |
rmw_unix_socket_cpp/src/rmw_graph.cpp |
Throttles stale-entry cleanup to avoid GC work on every graph query. |
rmw_unix_socket_cpp/src/rmw_init.cpp |
Generates/stores per-context random context_id; binds doorbell socket; timestamps initial cleanup sweep; tears down doorbell on fini. |
rmw_unix_socket_cpp/src/rmw_node.cpp |
Publishes per-node graph guard conditions into a context list for rmw_wait triggering. |
rmw_unix_socket_cpp/src/rmw_wait.cpp |
Major rework: context-aware wait sets, lazy doorbell registration for graph consumers, fd→entity arming cache, selective drain/dispatch, timeout semantics. |
rmw_unix_socket_cpp/src/types.hpp |
Adds context identity + same-context detection, entity UID, wait-set arming bookkeeping, TL replay watermark storage, TL ring writer state. |
rmw_unix_socket_cpp/src/transport.cpp |
Makes recv_from() consume/skip zero-length and runt datagrams to avoid spinning and drain termination issues. |
rmw_unix_socket_cpp/src/shm_transport.hpp |
Defines TL ring layout/constants and public TL ring APIs (tl_ring_create/latch/pull/close). |
rmw_unix_socket_cpp/src/shm_transport.cpp |
Implements TL ring creation/latching/pulling; expands orphan shm cleanup to cover TL segments. |
rmw_unix_socket_cpp/src/rmw_publisher.cpp |
Creates/closes TL ring for TRANSIENT_LOCAL publishers; changes TL publish path to latch into TL ring and relies on subscriber pull + watermark dedup. |
rmw_unix_socket_cpp/src/rmw_subscription.cpp |
Copies ignore-local option, pulls TL history at subscription creation, and drops replay duplicates via watermarks. |
rmw_unix_socket_cpp/src/rmw_service.cpp |
Embeds context id into service GIDs. |
rmw_unix_socket_cpp/src/rmw_client.cpp |
Embeds context id into client GIDs. |
rmw_unix_socket_cpp/test/test_base.hpp |
Makes default test domain configurable per-fixture (enables private registry domains). |
rmw_unix_socket_cpp/test/test_transport.cpp |
Adds tests ensuring zero-length datagrams are consumed and don’t block real messages. |
rmw_unix_socket_cpp/test/test_shm_transport.cpp |
Adds extensive TL ring latch/pull tests, including poisoned-slot and overlap scenarios. |
rmw_unix_socket_cpp/test/test_rmw_wait.cpp |
Adds many wait/graph/timeout/ignored-local tests covering new rmw_wait behavior. |
rmw_unix_socket_cpp/test/test_rmw_service_client.cpp |
Adds a response-delivery-via-wait test for client readiness. |
rmw_unix_socket_cpp/test/test_rmw_qos.cpp |
Updates TRANSIENT_LOCAL behavior tests for pull-based replay and new degradation semantics when shm is unavailable. |
rmw_unix_socket_cpp/test/test_rmw_pub_sub.cpp |
Adds ignore_local_publications behavior test at pub/sub level. |
rmw_unix_socket_cpp/test/test_rmw_graph.cpp |
Adds a throttle test for stale cleanup behavior (private domain). |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Comment on lines
11
to
+17
| build-and-test: | ||
| name: build & test (${{ matrix.ros_distro }}) | ||
| runs-on: ubuntu-latest | ||
| strategy: | ||
| fail-fast: false | ||
| matrix: | ||
| ros_distro: [jazzy, kilted, rolling] | ||
| ros_distro: [jazzy, kilted, rolling, lyrical] |
Comment on lines
1
to
+17
| name: CI | ||
|
|
||
| on: | ||
| push: | ||
| branches: [main] | ||
| branches: [main, devel] | ||
| pull_request: | ||
| branches: [main] | ||
| branches: [main, devel] | ||
| workflow_dispatch: | ||
|
|
||
| jobs: | ||
| build-and-test: | ||
| name: build & test (${{ matrix.ros_distro }}) | ||
| runs-on: ubuntu-latest | ||
| strategy: | ||
| fail-fast: false | ||
| matrix: | ||
| ros_distro: [jazzy, kilted, rolling] | ||
| ros_distro: [jazzy, kilted, rolling, lyrical] |
Lyrical is no longer experimental: it joins the matrix as a regular entry, exactly like jazzy/kilted/rolling, and the experimental/continue-on-error scaffolding from the first draft is gone with it. Like Rolling it needs rosidl_buffer installed by name, since it branched from Rolling after that package landed.
benaliabderrahmane
pushed a commit
that referenced
this pull request
Aug 27, 2026
… 0.5.0 The repository had no changelog, so this adds one covering every tag, not just the new release. Entries are reconstructed from the commit bodies and tag annotations; 0.5.0 is the wait/wakeup release (doorbell wakeup, pull-based TRANSIENT_LOCAL replay, ignore_local_publications, graph guard conditions) and carries the upgrade notes, since a mixed-build fleet loses latched replay and registry wakeups during the rollout window. package.xml had said 0.1.0 since the first commit — it was never bumped for 0.2.0 through 0.4.1, so a built package reported a version five releases stale. README's Status block said 0.1.0 for the same reason, and still listed only Jazzy/Kilted/Rolling although Lyrical joined the CI matrix in #17. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds the next ROS 2 release Lyrical to the build-and-test CI matrix as a regular entry, alongside Jazzy / Kilted / Rolling.
How
ros_distro: [jazzy, kilted, rolling, lyrical]— one matrix list, no special-casing. Lyrical is no longer experimental, so the earlier draft'sexperimentalflag and job-levelcontinue-on-errorare gone: a Lyrical failure turns CI red exactly like any other distro.rosidl_bufferinstalled by name, since it branched from Rolling after that package landed.Scope / notes
ci.yml).release.ymlis unchanged.main; the branch is a single commit.