Skip to content

Add Pixi support for reproducible builds + fix ZSTD detection#2

Closed
Alvvalencia wants to merge 4 commits intoPlotJuggler:mainfrom
Alvvalencia:pixi-support
Closed

Add Pixi support for reproducible builds + fix ZSTD detection#2
Alvvalencia wants to merge 4 commits intoPlotJuggler:mainfrom
Alvvalencia:pixi-support

Conversation

@Alvvalencia
Copy link
Copy Markdown

This PR introduces Pixi support to enable fully reproducible, one-command builds:

pixi run install

Pixi manages ROS 2, toolchain, and dependencies inside an isolated environment,
removing the need for:

  • system ROS installation
  • rosdep
  • manual environment sourcing

Additionally, this PR fixes ZSTD detection in conda/Pixi environments by allowing
shared library fallback when the static library is not available. This improves
portability across different build systems.

Tested with ROS 2 Jazzy.

facontidavide and others added 4 commits February 11, 2026 13:23
Only create GitHub Releases when triggered by tag push.
Manual workflow_dispatch triggers will build packages but skip release creation.

Entire-Checkpoint: 84b09ae8a281
facontidavide added a commit that referenced this pull request Mar 2, 2026
Architecture: Extract backend-agnostic core into app/ with abstract
interfaces (TopicSourceInterface, SubscriptionManagerInterface).
ROS2 adapter in ros2/, RTI Connext DDS adapter in rti/. BridgeServer
takes interfaces via constructor injection; event loop externalized.

Bug fixes from code review:
- #1: Incremental session update during subscribe prevents ref-count
  leak if client disconnects mid-subscribe (add_subscription rollback)
- #2: Remove failed topics from session on resume to prevent ref-count
  underflow on disconnect
- #4: Unsubscribe now accepts object format [{"name": "/topic"}] in
  addition to string format ["/topic"]
- #6: Bound incoming WebSocket queue to 1024 messages to prevent
  unbounded memory growth under overload
- #7: Release clients_mutex_ before sending in WebSocket middleware
  (send_reply, send_binary, publish_data) to reduce lock contention
- #9: Validate publish_rate > 0 early in initialize(), before starting
  the middleware
- #15: Remove dead last_read_timestamp_ns_ field from MessageBuffer

Test improvements:
- Enhanced MockSubscriptionManager with ref-count tracking and
  underflow detection
- Fixed UnsubscribeRemovesTopics and SubscribeIsAdditive to use real
  mock topics (previously tested wrong thing)
- Added 7 new regression tests for each bug fix

317 tests pass (regular + TSAN + ASAN clean).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Entire-Checkpoint: 7cd20ad6de03
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.

3 participants