Skip to content

Generate recipes, snapshots and build workflows with vinca-rs - #217

Closed
Tobias-Fischer wants to merge 27 commits into
RoboStack:mainfrom
Tobias-Fischer:vinca-rs
Closed

Tobias-Fischer wants to merge 27 commits into
RoboStack:mainfrom
Tobias-Fischer:vinca-rs

Conversation

@Tobias-Fischer

Copy link
Copy Markdown
Collaborator

Recipes, snapshots and build workflows now come from vinca-rs, a Rust rewrite of vinca. It reuses pixi-build-ros for package.xml parsing and rattler-build's crates for rendering.

Changes

  • vinca-rs is a pixi source dependency (pixi-build-rust), pinned by commit.
  • rs <d> generate-recipes runs vinca-rs generate. Already-published recipes are matched by exact name, version and build string, which rattler-build's own renderer computes, so -n is gone from testpr.yaml.
  • rs <d> gha runs vinca-rs workflow from .github/build-template.yaml. That template carries what robostack.py used to patch into vinca-gha's output: run name, concurrency, per-distro token secret, contents: read, env. The job steps live in .github/actions/build-recipes, so a job is a few lines and many more jobs fit GitHub's 500 KiB limit.
  • rs <d> create-snapshot runs vinca-rs snapshot. The output is identical to vinca-snapshot (jazzy at jazzy/2026-10-05: 2469 packages), in 23 s instead of 6 min.
  • check-deps, pinning and rebuild planning read requirements from vinca-rs requirements. Python vinca stays for pinning render/update, the rebuild planner and the sort tools.
  • Additional recipes: vinca-rs requires an override: reason when an additional recipe replaces a released package (Raise an error if snapshot and additional_recipes are conflicting vinca#126).
    • The autoware packages that lyrical and rolling took from humble "until released" are released now, so they are dropped and come from the releases again.
    • Rolling's autoware_lanelet2_extension patches are refreshed for 1.1.0.
    • The remaining overrides got reasons: rplidar_ros, rtabmap, mujoco_vendor, and lyrical's newer autoware_lanelet2_extension.

What changes in the packages
vinca-rs was compared with vinca 74d1e85 (RoboStack/vinca#200) by meaning, for every distro and platform. It produces the same recipes (20/20: humble 2531/2467/2181/2181/1837, …), with the same sources, patches, build numbers, metadata and test files. The intended differences:

Tested

  • Build-branch-style runs of the new workflow from this branch, for humble with uploads off:
  • Locally on osx-arm64, generate-recipes → rs humble build built and tested the 20 recipes that skip-existing left.
  • pixi run rs check passes, and pytest tools/tests gives 81 passed.

Notes

🤖 Generated with Claude Code

Tobias-Fischer and others added 11 commits November 13, 2026 10:34
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- vinca-rs is a pixi source dependency (pixi-build-rust)
- check-deps, pinning and rebuild planning read requirements from vinca-rs
- create-snapshot runs vinca-rs snapshot
- generate-recipes without -n: skip-existing compares exact build strings

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…b4c2b

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ain the rest

vinca-rs requires an `override:` reason when an additional recipe replaces a
package of the rosdistro snapshot (RoboStack/vinca#126). The autoware packages
added to lyrical and rolling before their release there ("TODO: remove ... after
they are released") are released now: they come from the releases again (rolling's
autoware_lanelet2_extension patches refreshed for 1.1.0). The remaining ones get
their reason: rplidar_ros (jazzy, lyrical), rtabmap (rolling), mujoco_vendor
(humble), autoware_lanelet2_extension (lyrical: newer than its release).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…xtension includes; vinca-rs 839d695

- 276 jazzy snapshot entries had no dependencies, which vinca-rs requires: added
  from each entry's pinned release (`vinca-rs snapshot --fill-dependencies`),
  versions unchanged
- rolling autoware_lanelet2_extension 1.1.0 uses rclcpp's clock and logging
  without including them
- vinca-rs 839d695: published builds through pixi's repodata gateway

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… override reasons

humble's mujoco_vendor 0.1.1 and rolling's rtabmap 0.23.13 are released, so the
additional recipes (jazzy's 0.1.0 and 0.23.13) are no longer needed. rplidar_ros
keeps its override, without a comment repeating it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
humble (osx-arm64): 161 s -> 30 s, the same report. Falls back to rattler-build
per solve without vinca-rs. tools/pin_vinca_rs.py pins pixi.toml to the conda
packages of a vinca-rs release.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
pixi.toml pins each platform's conda package of the vinca-rs release
(tools/pin_vinca_rs.py), so no CI job compiles vinca-rs anymore (6-7 min each).
The pixi-build preview and the git source dependency go.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tobias-Fischer and others added 6 commits November 13, 2026 15:26
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ow's name

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…instead of per-platform release URLs

Drops tools/pin_vinca_rs.py.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…v, python3-dbus, python3-pygnssutils-pip, python3-tabulate, python3-types-pyyaml, rtklib

pixi-build-ros's robostack.yaml had these and the monorepo didn't; it will be
generated from this repository's mappings. Its cartographer entry is left out:
cartographer is a ROS package (removed from robostack.yaml on purpose, ros-humble
09bcd470).

Recipes that change: plotjuggler gains lua (all distros), launch and nav2_common
gain types-pyyaml (lyrical, rolling), orbbec_camera gains tabulate (rolling).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
plotjuggler (lua: all distributions), launch and nav2_common (types-pyyaml: lyrical,
rolling), orbbec_camera (tabulate: rolling). robostack-bot rebuild.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ild-ros

A daily PR on prefix-dev/pixi (crates/pixi_build_ros/robostack.yaml and
robostack_distros.yaml), pushed to the fork vars.PIXI_FORK with
secrets.PIXI_SYNC_TOKEN, once both are set: `pixi build` of ROS packages then maps
rosdep keys as RoboStack does, and mappings are only edited here.

distros/noetic/robostack.yaml: noetic's own mappings for pixi-build-ros (Qt 5, its
xtensor), from RoboStack/ros-noetic. noetic isn't built here (no vinca.yaml); the
sort and render-pinning tasks skip such folders.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Tobias-Fischer

Tobias-Fischer commented Nov 13, 2026 •

Copy link
Copy Markdown
Collaborator Author

Stacked three commits on this PR, so its CI is the end-to-end test of the shared rosdep mappings:

  • c93fb85: eight rosdep keys that only pixi-build-ros's copy of the mappings had (crypto++, iproute2, lua-dev, python3-dbus, python3-pygnssutils-pip, python3-tabulate, python3-types-pyyaml, rtklib). pixi's cartographer entry is left out: it's a ROS package, and its mapping was removed on purpose (ros-humble 09bcd470).

  • Rebuilds of the packages that gained dependencies from them:

    • plotjuggler gains lua in humble, jazzy, lyrical and rolling;
    • launch and nav2_common gain types-pyyaml in lyrical and rolling;
    • orbbec_camera gains tabulate in rolling.

    The build numbers come from robostack-bot rebuild. With the commits undone, generate-recipes drops exactly these packages and their ros-<distro>-* aliases, and nothing else changes. Built locally on osx-arm64: plotjuggler (humble), launch (rolling) and nav2_common (lyrical) all pass.

  • robostack-bot sync-pixi-mappings: a daily PR on prefix-dev/pixi that copies shared/robostack.yaml and distros/*/robostack.yaml to pixi-build-ros (feat(pixi-build-ros): RoboStack's rosdep mappings per distribution, one lookup shared with RoboStack prefix-dev/pixi#7533). It's off until vars.PIXI_FORK and secrets.PIXI_SYNC_TOKEN are set. distros/noetic/robostack.yaml holds noetic's Qt 5 mappings for pixi; it has no vinca.yaml, so it isn't built.

The lookup itself moves into pixi-build-ros (prefix-dev/pixi#7533); vinca-rs uses it in Tobias-Fischer/vinca-rs#3, which generates byte-identical recipes.

— Claude (AI assistant), on behalf of @Tobias-Fischer

…rors aren't conflicts

- rs check reports entries in vinca.yaml packages_select_by_deps,
  patch/dependencies.yaml and pkg_additional_info.yaml for packages that the
  distribution (or, for shared/, no distribution) has: typos and leftovers that
  vinca silently ignores.
- It found three in rolling, now removed: grid_map_octomap (add_host/add_run
  octomap), gz_launch_vendor (gz-launch 9.*, as lyrical), slam_toolbox (build:
  qt6-main when cross-compiling; host: libgl-devel and libopengl-devel on linux,
  blas-devel, ceres-solver * cpu*). None is in rolling's snapshot.
- check_dependency_compat: a vinca-rs solve failure that isn't the solver's answer
  (render, network; its `error` field) raises instead of counting as a conflict.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tobias-Fischer and others added 3 commits November 13, 2026 21:51
…ages

vinca-rs builds them as noarch: generic (Tobias-Fischer/vinca-rs#5, from
RoboStack/vinca#190 and RoboStack#212): every platform's jobs build and
upload them, the upload skips what's already there, and generate's skip_existing
reads the channel's noarch subdir. Takes effect with the vinca-rs release that has it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
vinca-rs 0.1.7: review fixes, the rosdep lookup, license, build scripts and
requirement rules from pixi-build-ros, skip-existing matching from rattler-build,
and ros-<distro>-* compatibility packages as noarch: generic.

Its recipes for this repository (4 distributions x 5 platforms) differ from 0.1.6's
only in:
- noarch: generic in the 22501 compatibility recipes (each built once, uploaded
  from every platform's jobs, see the noarch upload commit);
- humble tracetools: remove_host [pkg-config] now also removes the native-only
  host pkg-config (pkg-config stays in build), hence its rebuild (build_number 24).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Qt 5 / PyQt5 (kilted's rviz and rqt need Qt5) and xtensor 0.24.7, from
RoboStack/ros-kilted, over shared/robostack.yaml's Qt 6. Mapping-only like
noetic: kilted (EOL) isn't built here.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tobias-Fischer and others added 2 commits November 14, 2026 10:33
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…orkspace/)

vinca-rs copies files/<pkg>/ into that package's recipe directory
(Tobias-Fischer/vinca-rs#7); until then, 0.1.7 keeps using its embedded copy.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Tobias-Fischer Tobias-Fischer added build:humble PR build: build only humble (with other build:<distro> labels: only those) build:win PR build: only the win platforms (remove for a full build before merging) labels Nov 14, 2026
Tobias-Fischer and others added 3 commits November 14, 2026 12:13
Each layer's patch/dependencies.yaml is merged into its pkg_additional_info.yaml:
a package's add_*/remove_* keys sit next to its build_number and cmake args.
Both files were keyed, layered and merged per package the same way; vinca-rs
0.1.9 reads the fixes from there (Tobias-Fischer/vinca-rs#8). The merged files
hold exactly what the two did (compared per package and key). import_distro
merges an old repository's two files; the sort task, the unknown-entry check,
docs and skills follow. vinca-rs 0.1.8+ also takes ros_workspace's activation
scripts from shared/files/ and builds ament_cmake with Ninja on Windows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ges on Windows

Forces a rebuild of builtin_interfaces (where the long-path failure appeared in
RoboStack/ros-humble#229), control_msgs, nav2_msgs, rcl_interfaces and
rosbag2_interfaces, to check bld_ament_cmake.bat with Ninja and
CMAKE_INTERMEDIATE_DIR_STRATEGY=SHORT (prefix-dev/pixi#7540 review).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The check passed: with Ninja, all five built on win-64 (run 43545144727).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Tobias-Fischer Tobias-Fischer added build:humble PR build: build only humble (with other build:<distro> labels: only those) and removed build:humble PR build: build only humble (with other build:<distro> labels: only those) build:win PR build: only the win platforms (remove for a full build before merging) labels Nov 14, 2026
vinca-rs from its templates-check branch (pixi-build-ros at prefix-dev/pixi#7540's
unified ament_cmake/cmake templates, built from source), and rebuilds of
ros_workspace, ament_cmake_test, rcutils, builtin_interfaces, fastcdr and ruckig
on every platform.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Tobias-Fischer

Copy link
Copy Markdown
Collaborator Author

Superseded by a stack of four PRs, one per commit, so each part can be reviewed (and merged) on its own: #221 (vinca-rs) → #222 (package fixes) → #223 (rosdep mappings shared with pixi-build-ros) → #224 (per-package files and dependency fixes). Together they hold exactly this PR's changes, without the temporary test commits.

— Claude

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

build:humble PR build: build only humble (with other build:<distro> labels: only those)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant