Bundle the fault bridges in the image; docker-first quick start#470
Merged
Conversation
log_bridge and action_status_bridge were never COPYed into the image, so bringup.launch.py errored on the missing packages. Bundle both. The published apt/ghcr artifacts do not carry the bridges yet, so lead Run it with the docker one-liner that works today and frame apt as rolling out to the ROS index.
03bb90f to
93d0888
Compare
Contributor
There was a problem hiding this comment.
Pull request overview
This PR updates the Docker build context and top-level documentation so the “bringup” stack (gateway + fault manager + generic fault bridges) is usable out-of-the-box, especially for Docker-first users attaching to an existing ROS 2 graph.
Changes:
- Dockerfile: include
ros2_medkit_log_bridgeandros2_medkit_action_status_bridgein the image build context so they’re installed into the runtime image. - README: change the Quick Start to run
bringup.launch.pyand describe attaching the container to the user’s DDS domain/RMW implementation.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| README.md | Reworks Quick Start to emphasize Docker attach flow and to use bringup.launch.py instead of gateway.launch.py. |
| Dockerfile | Copies additional bridge packages into the builder workspace so they’re present in the built/install tree. |
Comments suppressed due to low confidence (3)
README.md:34
- The quick-start text says the bringup stack will turn
/diagnosticsinto faults, butbringup.launch.pydefaultsenable_diagnostic_bridgetofalse, so/diagnosticswill not be bridged unless the user opts in. This is likely to confuse first-time users trying diagnostic_updater-based stacks.
**README.md:41**
* The quick-start `docker run ... ros2 launch ...` command won’t actually run `ros2 launch` with the current image because the Dockerfile sets `ENTRYPOINT ["/entrypoint.sh"]`, and `entrypoint.sh` always execs `ros2 run ros2_medkit_gateway gateway_node "$@"`. As written, `ros2 launch ...` becomes extra args to `gateway_node` rather than executing the launch file.
ros2_medkit's action bridge turns that into a structured fault on the bt_navigator entity -
no instrumentation, no callbacks added to Nav2.
[!TIP]
Nothing was added to Nav2. The bridge reads the action status your stack already publishes,
**README.md:46**
* The phrase “Rolling out to the ROS index now” is time-sensitive and will become stale quickly (either after the release is done, or if the release gets delayed). Consider phrasing this as a stable install path without “now”.
</details>
The entrypoint only ever exec'd gateway_node, so `ros2 launch ... bringup` was swallowed as args and the launch never ran; dispatch a full command through instead. The fault_manager also could not create its default /var/lib/ros2_medkit DB dir as the non-root user, so bringup crashed on start; create and chown it. Default ROS_DOMAIN_ID/RMW in the quick-start.
bburda
reviewed
Jun 23, 2026
The bringup launch starts the log and action-status bridges by default but leaves enable_diagnostic_bridge false; call that out so diagnostic_updater stacks know to pass enable_diagnostic_bridge:=true.
bburda
approved these changes
Jun 23, 2026
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.
What
The documented install paths did not deliver the headline value:
log_bridgeandaction_status_bridgewere neverCOPYed into the Docker image (onlydiagnostic_bridgewas), soros2 launch ros2_medkit_gateway bringup.launch.pyerrored on the missing bridge packages.gateway.launch.py(gateway only, no fault_manager, no bridges), so a first-time user saw the entity tree but zero faults.Change
COPYros2_medkit_log_bridgeandros2_medkit_action_status_bridgeinto the builder so the runtime image ships all the generic bridges. Verified end to end: with the bridges present,bringup.launch.pystarts gateway + fault_manager + log_bridge + action_status_bridge cleanly, and a/rosoutERROR becomes a structured fault (GET /faults).docker runthat attaches to a running graph (forwardingROS_DOMAIN_ID/RMW_IMPLEMENTATIONso it matches the user's DDS; the image already ships both Fast DDS and CycloneDDS). Frameapt installas rolling out to the ROS index, and fix the source-build snippet to usebringup.launch.py.Pushing to main rebuilds the jazzy/humble/lyrical images via the docker-publish workflow.