Repository navigation
Mutex: honour mutex_package.build_number; run_constraints optional - #169
Merged
traversaro merged 2 commits intoOct 10, 2026
Merged
Conversation
A new build of the mutex at the same version (mutex_package.build_number) was never generated: the skip-existing check compared the published mutex with the distribution's build_number, and write_recipe overwrote the recipe's build number with it too (build string lyrical_28, number 27). Both now use the mutex's own build number; other packages are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tobias-Fischer
added a commit
to Tobias-Fischer/robostack-distros
that referenced
this pull request
Oct 9, 2026
Without it the new mutex builds are never generated (RoboStack/vinca#169). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tobias-Fischer
added a commit
to Tobias-Fischer/robostack-distros
that referenced
this pull request
Oct 9, 2026
Without it the new mutex builds are never generated (RoboStack/vinca#169). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tobias-Fischer
added a commit
to Tobias-Fischer/robostack-distros
that referenced
this pull request
Oct 10, 2026
Without it the new mutex builds are never generated (RoboStack/vinca#169). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
4 of 17 tasks
A mutex only has to keep one distribution per environment; constraining other packages from it is optional, so mutex_package no longer requires the key, and the recipe lists run_constraints only when there are any. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tobias-Fischer
added a commit
to Tobias-Fischer/robostack-distros
that referenced
this pull request
Oct 10, 2026
* Drop the distro mutex's run_constraints The mutex only keeps one ROS distribution per environment. Its run_constraints applied to every user environment, also to libraries the user's packages don't use, and made solvers silently fall back to old ROS builds when another package needed a different version (ros-base + libprotobuf 6: jazzy resolved to mutex 0.15 / rclcpp 28.1.18 instead of 0.19 / 28.1.22). Library versions come from the packages' own dependencies; wrong metadata gets fixed in the package (patch, pkg_additional_info.yaml, conda-forge repodata patch). Checked by solving desktop + perception + ros_gz for every distribution on linux-64, osx-arm64 and win-64 with and without them: humble and lyrical resolve to identical environments, jazzy and rolling to newer openvino/opencv/ffmpeg builds (jazzy's smoke-tested on osx-arm64: OpenCV, cv_bridge, rclpy, talker/listener, gz). - shared/vinca.yaml: run_constraints: [] with the policy; distros: removed, and a new mutex build at the same version (mutex_package.build_number) - rs check / tools/tests: reject mutex run_constraints - pinning bot: no more mutex constraint sync or mutex rebuild - pixi run test: first unit tests of the tooling, run in PR CI Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Pin vinca f9d68bb: the mutex keeps its own build number Without it the new mutex builds are never generated (RoboStack/vinca#169). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Mutex: no run_constraints key at all (vinca cf6833a makes it optional) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
traversaro
approved these changes
Oct 10, 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.
Publishing a new build of the mutex at the same version (
mutex_package.build_number) didn't work. Two places used the distribution'sbuild_numberfor the mutex instead of its own:main.py): a published mutex counted as already built when its build number matched the distribution'sbuild_number. So no recipe was generated (Skipping ros2-distro-mutex).write_recipe(template.py): it overwrote every output's build number with the distribution's. The mutex recipe then hadstring: lyrical_28butnumber: 27.Fix:
expected_build_number()gives the mutex its own build number and leaves other packages unchanged (the distribution's, orpkg_additional_info.yaml's). The skip check now uses it.write_recipestarts from the output's own build number before applyingpkg_additional_info.yaml.For a whole distribution (RoboStack lyrical, linux-64), the only recipe that changes is the mutex's:
number: 27→28.Tests:
vinca/test_mutex_build_number.pycovers the expected build numbers and the written mutex recipe. Without thetemplate.pychange, the recipe test fails. The full suite passes.Also:
run_constraintsis optional. A mutex only has to keep one distribution per environment, somutex_packageno longer requires the key, and the recipe only listsrun_constraintswhen there are any. RoboStack drops all mutex constraints: they applied to every user environment and made solvers fall back to old builds; wrong dependencies are fixed in the packages themselves.Needed for RoboStack to publish the mutex again without
run_constraints, at the same version, so that no other package needs a rebuild.🤖 Generated with Claude Code