feat: experimental cross-platform Pixi support#266
Merged
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
Adds an experimental Pixi-based, lockfile-driven development environment to make ros2_medkit builds reproducible across Linux/macOS/Windows (RoboStack/conda-forge), while keeping colcon as the build system.
Changes:
- Introduces
pixi.tomlwith Jazzy/Humble environments and platform-specificpixi runtasks (symlink install on Unix, merge install on Windows). - Adds helper scripts for Pixi activation, cpp-httplib source install into the Pixi prefix, and a smoke test for the gateway health endpoint.
- Adds non-blocking Pixi CI jobs and updates docs/README plus repo hygiene (
.gitattributes,.gitignore, pre-commit exclude).
Reviewed changes
Copilot reviewed 11 out of 13 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| src/ros2_medkit_integration_tests/demo_nodes/long_calibration_action.cpp | Adds POSIX include for _exit() used in a terminate handler (portability impact). |
| scripts/pixi-smoke-test.sh | Smoke test script to launch the gateway and poll /api/v1/health. |
| scripts/pixi-install-cpp-httplib.sh | Builds/installs cpp-httplib into $CONDA_PREFIX for Pixi envs. |
| scripts/pixi-activate.sh | Unix activation hook to source install/setup.bash if present. |
| scripts/pixi-activate.bat | Windows activation hook to call install\\setup.bat if present. |
| pixi.toml | Defines Pixi workspace, Jazzy/Humble features, and build/test/smoke tasks by platform. |
| docs/installation.rst | Documents Pixi usage, tasks, and limitations. |
| README.md | Adds a short “Experimental: Pixi” quickstart and link to installation docs. |
| .pre-commit-config.yaml | Excludes pixi.lock from large-file checks. |
| .gitignore | Ignores .pixi/ directory. |
| .github/workflows/ci.yml | Adds experimental, non-blocking Pixi CI matrix (OS × distro). |
| .gitattributes | Marks pixi.lock as generated for GitHub diff collapsing. |
src/ros2_medkit_integration_tests/demo_nodes/long_calibration_action.cpp
Show resolved
Hide resolved
e302c90 to
4e5962c
Compare
This was referenced Mar 14, 2026
Contributor
There was a problem hiding this comment.
Pull request overview
Adds an experimental Pixi-based (RoboStack/conda-forge) workflow to create reproducible ROS 2 Jazzy/Humble development environments on Linux x86_64, plus CI smoke/unit coverage and accompanying docs.
Changes:
- Introduce
pixi.tomlwith Jazzy/Humble environments and Pixi tasks (build/test/smoke) plus activation/install helper scripts. - Add a non-blocking GitHub Actions job to build + smoke test + run unit tests under Pixi.
- Document the Pixi workflow and limitations in
docs/installation.rstandREADME.md.
Reviewed changes
Copilot reviewed 10 out of 12 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
src/ros2_medkit_integration_tests/demo_nodes/long_calibration_action.cpp |
Add POSIX header for _exit() portability in stricter toolchains. |
scripts/pixi-smoke-test.sh |
New smoke-test script to start gateway and probe /api/v1/health. |
scripts/pixi-install-cpp-httplib.sh |
New helper to build/install cpp-httplib into the Pixi prefix. |
scripts/pixi-activate.sh |
New Pixi activation hook to source colcon overlay when present. |
pixi.toml |
Define Pixi workspace, Jazzy/Humble features, and build/test tasks. |
docs/installation.rst |
Add “Experimental: Pixi” installation and task documentation. |
README.md |
Add top-level Pixi quick-start snippet and link to docs/issues. |
.pre-commit-config.yaml |
Exclude pixi.lock from large-file pre-commit check. |
.gitignore |
Ignore Pixi working directory (.pixi/). |
.github/workflows/ci.yml |
Add non-blocking Pixi CI job (Jazzy/Humble) to build/smoke/test. |
.gitattributes |
Mark pixi.lock as generated to collapse GitHub diffs. |
src/ros2_medkit_integration_tests/demo_nodes/long_calibration_action.cpp
Show resolved
Hide resolved
569da62 to
1a2ac2b
Compare
mfaferek93
reviewed
Mar 15, 2026
mfaferek93
reviewed
Mar 15, 2026
mfaferek93
reviewed
Mar 15, 2026
mfaferek93
reviewed
Mar 15, 2026
mfaferek93
reviewed
Mar 15, 2026
Add Pixi-based dependency management as an alternative to apt/rosdep. Pixi provides a lockfile-based reproducible environment using RoboStack packages from conda-forge. colcon remains the build system. - pixi.toml with Jazzy and Humble environments (linux-64) - Helper scripts with full Apache 2.0 headers: - pixi-activate.sh: conditional colcon workspace sourcing - pixi-install-cpp-httplib.sh: build from source with SHA verification - pixi-smoke-test.sh: gateway health check (configurable port) - pixi.lock for reproducible dependency resolution - .gitattributes to collapse lockfile in GitHub diffs - Exclude pixi.lock from large-file pre-commit check - Use std::_Exit() instead of _exit() for portability (conda gcc) Ref #265
2 non-blocking jobs (Jazzy + Humble) on ubuntu-latest using Pixi. continue-on-error: true - does not gate merges. Runs in parallel with existing CI.
bburda
added a commit
that referenced
this pull request
Mar 16, 2026
- Pin core ROS packages (ros-base, rclcpp, rclcpp-action) to major version ranges in pixi.toml to guard against breaking pixi updates - Add process liveness check (kill -0) in pixi-smoke-test.sh to detect gateway crashes immediately instead of waiting full timeout - Extract Pixi CI into separate pixi.yml workflow so failures show as red instead of being silently swallowed by continue-on-error - Swap smoke/test order in CI: run unit tests first, smoke test after - Replace internal "dynmsg" name with "yaml-cpp build issues" in docs
1a2ac2b to
00e33bf
Compare
bburda
added a commit
that referenced
this pull request
Mar 16, 2026
- Pin core ROS packages (ros-base, rclcpp, rclcpp-action) to major version ranges in pixi.toml to guard against breaking pixi updates - Add process liveness check (kill -0) in pixi-smoke-test.sh to detect gateway crashes immediately instead of waiting full timeout - Extract Pixi CI into separate pixi.yml workflow so failures show as red instead of being silently swallowed by continue-on-error - Swap smoke/test order in CI: run unit tests first, smoke test after - Replace internal "dynmsg" name with "yaml-cpp build issues" in docs
00e33bf to
5f79243
Compare
- Pin core ROS packages (ros-base, rclcpp, rclcpp-action) to major version ranges in pixi.toml to guard against breaking pixi updates - Add process liveness check (kill -0) in pixi-smoke-test.sh to detect gateway crashes immediately instead of waiting full timeout - Extract Pixi CI into separate pixi.yml workflow so failures show as red instead of being silently swallowed by continue-on-error - Swap smoke/test order in CI: run unit tests first, smoke test after - Replace internal "dynmsg" name with "yaml-cpp build issues" in docs
5f79243 to
5494209
Compare
mfaferek93
approved these changes
Mar 16, 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.
Pull Request
Summary
Add experimental Pixi support for dependency management on Linux x86_64. Pixi replaces
apt install ros-*+rosdep installwith a lockfile-based reproducible environment from RoboStack/conda-forge. colcon remains the build system.Two Pixi environments: Jazzy and Humble.
macOS and Windows support deferred to follow-up issues (#267, #268) due to cross-platform build failures discovered during CI testing.
Issue
Type
Testing
Verified locally (Jazzy on Linux):
pixi install -e jazzy/pixi install -e humble- both resolvepixi run -e jazzy build- all 7 packages buildpixi run -e jazzy test- 1271 unit tests pass, 0 failurespixi run -e jazzy smoke- gateway starts and responds to health checkCI: 2 non-blocking Pixi jobs (Jazzy + Humble on ubuntu-latest) with
continue-on-error: true.Issues found and fixed during implementation:
brotlidep (cpp-httplib auto-enables brotli in Pixi env)numpydep (Humble's FindPython needs it)#include <unistd.h>for_exit()portability (conda gcc stricter)set -uvsCOLCON_TRACEin smoke testChecklist
Known Limitations (documented in installation.rst)