Conda buildfarm for the BAR low-level control stack. Builds every bar_ros2
package (and its non-RoboStack source deps) into ros-jazzy-* conda packages
and publishes them to a prefix.dev channel, so end users
install prebuilt binaries instead of running colcon build.
Backend: pixi-build-ros
→ rattler-build → .conda. This is the conda-world translation of the
qiayuanl/{unitree,legged}_buildfarm apt/.deb pattern — same orchestration
(thin repo, nightly cron, arch matrix, tag-driven release), conda backend.
Full design: ../BUILDFARM_PLAN.md.
bar.reposlists the sources (first-partybar_ros2+ the 4 deps missing from RoboStack:ethercat_driver_ros2,mujoco_ament,mujoco_sim_ros2,mujoco_ros2_control).pixi run importclones them intosrc/(gitignored).pixi run overlaydrops a conda build manifest into each third-party tree (overlays/mirrorssrc/). First-partybar_ros2packages already carry their ownpixi.toml.pixi run build-all [platform]builds every path inpackages.txtintooutput/*.condaviapixi build --path.pixi run publishuploadsoutput/to the prefix.dev channel.
packages.txt is the buildable set; packages-blocked.txt is the not-yet set
(see Long poles).
pixi run import
pixi run overlay
pixi run build-all # → output/*.conda (linux-64)Prove the full producer→consumer flow with no prefix.dev account:
# build into a channel layout, then index it
mkdir -p local-channel/linux-64 && cp output/*.conda local-channel/linux-64/
pixi exec --spec conda-index -- python -m conda_index local-channel
# consume it from a throwaway workspace
pixi init /tmp/consume -c "file://$PWD/local-channel" \
-c https://prefix.dev/robostack-jazzy \
-c https://prefix.dev/conda-forge
cd /tmp/consume && pixi add ros-jazzy-bar-controllers # pulls bar_msgs, bar_common, onnxruntime….github/workflows/build_jazzy.yml: nightly cron (skips if RoboStack-jazzy is
unchanged), workflow_dispatch, and push on tags v* / build-input changes.
Matrix builds linux-64 (ubuntu-24.04) + linux-aarch64 (ubuntu-24.04-arm,
native — conda cross-compile is avoided). On a version tag it publishes to
the channel; nightlies build + upload artifacts for verification.
- prefix.dev channel — create the
bar-roboticschannel at prefix.dev and configure trusted publishing (OIDC): orgBerkeley-Humanoids, repobar_buildfarm, workflow filenamebuild_jazzy.yml. (The workflow already requestsid-token: write;rattler-build >=0.31.1uses the OIDC token, no API key. Alternatively add aPREFIX_API_KEYsecret.) GH_PATsecret (required —bar_ros2is private). The buildfarm (Berkeley-Humanoids) clones the privateT-K-233/bar_ros2cross-account, soGITHUB_TOKENcan't read it. Create a fine-grained PAT scoped toT-K-233/bar_ros2with Contents: Read-only, and add it as the repo secretGH_PATinBerkeley-Humanoids/bar_buildfarm(Settings → Secrets and variables → Actions). TheConfigure git authstep injects it for the clone.- Commit the manifests in
bar_ros2— the 12 per-packagepixi.tomlfiles live underbar_ros2/; CI clonesbar_ros2fresh, so they must be on the remotebar.repospoints to (T-K-233/bar_ros2@main).
ethercat_driver_ros2→ IgH EtherLablibethercat. No conda-forge package exists. Build a conda package for the EtherLab userspace lib (or vendor a prebuilt) first; then move theethercat_*paths frompackages-blocked.txtintopackages.txt. Also unblocksbar_bringup_prime.mujoco_amentnetwork build. FetchContents the MuJoCo tarball at configure time → needs network during build (rattler-build allows it; non-hermetic). If flaky, repackage the MuJoCo binary as its own conda dep.
- ✅ Verified locally:
bar_msgs,bar_common,bar_controllers(with ONNX) build to.condaand install as binaries from afile://channel. - ⏳
mujoco_*overlays present; not yet build-verified (network build). - ⛔
ethercat_*+bar_bringup_primeblocked onlibethercat.