Skip to content

Add vinca-rebuild-plan: rebuild only what a pinning change affects - #168

Merged
Tobias-Fischer merged 1 commit into
RoboStack:masterfrom
Tobias-Fischer:feat/rebuild-plan
Oct 10, 2026
Merged

Tobias-Fischer merged 1 commit into
RoboStack:masterfrom
Tobias-Fischer:feat/rebuild-plan

Conversation

@Tobias-Fischer

Copy link
Copy Markdown
Contributor

So far a change of conda_build_config.yaml (a new conda-forge-pinning version or migration) means a full rebuild. vinca-rebuild-plan works out which packages actually need one:

vinca-rebuild-plan --old old/conda_build_config.yaml --new conda_build_config.yaml [--platform ...] [--json plan.json]
  • changed pins: keys of conda_build_config.yaml whose values differ (a changed pin_run_as_build entry counts too); zip_keys etc. are ignored.
  • direct: selected packages with a changed pin among their build or host requirements (the same names that pick the variant).
  • transitive: everything that depends on a rebuilt package (host or run), since ROS packages compile against each other's headers and an ABI change propagates.

It reads the requirements vinca generates (generate_output(..., dependencies_only=True)) for every selected package on the given platforms, so no recipes have to be written and skip_existing doesn't hide anything. The platform/config loop of dependencies_from_vinca is now shared as _platform_configurations.

Example (humble, linux-64, a hypothetical pcl bump): 50 of 1118 packages (18 use pcl directly, 32 depend on those) instead of all of them. Together with a new build of the mutex at the same version (mutex_package.build_number), every other published package stays installable.

The approach is different from #64: instead of editing vinca.yaml to mark rebuilds, it only produces the plan; the caller sets per-package build numbers (e.g. in pkg_additional_info.yaml).

Tests for the pin diff, the closure and the CLI added.

🤖 Generated with Claude Code

Packages that use a changed conda_build_config.yaml pin in their build or host
requirements, plus everything that depends on them (host or run,
transitively), instead of a full rebuild. The platform loop of
dependencies_from_vinca is shared as _platform_configurations.

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 8, 2026
… changed pins affect

- rs <distro> update-pinning moves the distribution's pinning (its distro.yaml
  version, or shared/pinning for distributions that follow it) to the latest
  conda-forge-pinning with the migrations done for its dependencies
- vinca-rebuild-plan (RoboStack/vinca#168) decides what to rebuild: packages
  using a changed pin and everything depending on them get a per-package build
  number, the mutex a new build at the same version; more than half affected
  means a full rebuild
- the PR lists the packages and why, the migrations used / waiting for our
  dependencies' feedstocks / not concerning the distribution, and the conflicts
  the new pins add (labelled dependency-conflict)
- bot: one pinning job per distribution every day
- check_dependency_compat.py: requirements of every selected package from vinca
  (--source recipes for the old behaviour), retries, --stale handles ros2-*
  names and -devel pins

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
… changed pins affect

- rs <distro> update-pinning moves the distribution's pinning (its distro.yaml
  version, or shared/pinning for distributions that follow it) to the latest
  conda-forge-pinning with the migrations done for its dependencies
- vinca-rebuild-plan (RoboStack/vinca#168) decides what to rebuild: packages
  using a changed pin and everything depending on them get a per-package build
  number, the mutex a new build at the same version; more than half affected
  means a full rebuild
- the PR lists the packages and why, the migrations used / waiting for our
  dependencies' feedstocks / not concerning the distribution, and the conflicts
  the new pins add (labelled dependency-conflict)
- bot: one pinning job per distribution every day
- check_dependency_compat.py: requirements of every selected package from vinca
  (--source recipes for the old behaviour), retries, --stale handles ros2-*
  names and -devel pins

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

Copy link
Copy Markdown
Member

Not directly related to this, but I wonder if it ever made sense at all to set explicit build numbers in pkg_additional_info.yaml. in the end we want always to specify an rebuild number that should we add to the base buils number specified in vinca.yaml

@Tobias-Fischer

Copy link
Copy Markdown
Contributor Author

Not directly related to this, but I wonder if it ever made sense at all to set explicit build numbers in pkg_additional_info.yaml. in the end we want always to specify an rebuild number that should we add to the base buils number specified in vinca.yaml

I opened an issue #173 to follow this up

@Tobias-Fischer
Tobias-Fischer merged commit 2cf366b into RoboStack:master Oct 10, 2026
3 checks passed
@Tobias-Fischer
Tobias-Fischer deleted the feat/rebuild-plan branch October 10, 2026 23:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants