Skip to content

feat: experimental cross-platform Pixi support#266

Merged
bburda merged 4 commits intomainfrom
feature/experimental-pixi-support
Mar 16, 2026
Merged

feat: experimental cross-platform Pixi support#266
bburda merged 4 commits intomainfrom
feature/experimental-pixi-support

Conversation

@bburda
Copy link
Collaborator

@bburda bburda commented Mar 14, 2026

Pull Request

Summary

Add experimental Pixi support for dependency management on Linux x86_64. Pixi replaces apt install ros-* + rosdep install with 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

  • Bug fix
  • New feature or tests
  • Breaking change
  • Documentation only

Testing

Verified locally (Jazzy on Linux):

  • pixi install -e jazzy / pixi install -e humble - both resolve
  • pixi run -e jazzy build - all 7 packages build
  • pixi run -e jazzy test - 1271 unit tests pass, 0 failures
  • pixi run -e jazzy smoke - gateway starts and responds to health check

CI: 2 non-blocking Pixi jobs (Jazzy + Humble on ubuntu-latest) with continue-on-error: true.

Issues found and fixed during implementation:

  • Added brotli dep (cpp-httplib auto-enables brotli in Pixi env)
  • Added numpy dep (Humble's FindPython needs it)
  • Added #include <unistd.h> for _exit() portability (conda gcc stricter)
  • Fixed set -u vs COLCON_TRACE in smoke test

Checklist

  • Breaking changes are clearly described (and announced in docs / changelog if needed)
  • Tests were added or updated if needed
  • Docs were updated if behavior or public API changed

Known Limitations (documented in installation.rst)

Copilot AI review requested due to automatic review settings March 14, 2026 16:27
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.toml with Jazzy/Humble environments and platform-specific pixi run tasks (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.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.toml with 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.rst and README.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.

@bburda bburda force-pushed the feature/experimental-pixi-support branch 2 times, most recently from 569da62 to 1a2ac2b Compare March 14, 2026 19:46
@bburda bburda requested a review from mfaferek93 March 15, 2026 08:24
@bburda bburda added the enhancement New feature or request label Mar 15, 2026
bburda added 3 commits March 16, 2026 08:17
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.
README: brief Pixi section under Quick Start.
installation.rst: full section with environments, tasks, and known
limitations. References follow-up issues #267/#268 for macOS/Windows.
conf.py: exclude GitHub issue URLs from linkcheck (no auth in 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
@bburda bburda force-pushed the feature/experimental-pixi-support branch from 1a2ac2b to 00e33bf Compare March 16, 2026 07:21
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
@bburda bburda force-pushed the feature/experimental-pixi-support branch from 00e33bf to 5f79243 Compare March 16, 2026 07:27
- 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
@bburda bburda force-pushed the feature/experimental-pixi-support branch from 5f79243 to 5494209 Compare March 16, 2026 07:41
@mfaferek93 mfaferek93 self-requested a review March 16, 2026 14:54
@bburda bburda merged commit 0cfac1b into main Mar 16, 2026
11 checks passed
@bburda bburda deleted the feature/experimental-pixi-support branch March 16, 2026 17:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Experimental Pixi support for dependency management

3 participants