Skip to content

Skip-existing: only count packages built for this distribution - #175

Open
Tobias-Fischer wants to merge 1 commit into
RoboStack:masterfrom
Tobias-Fischer:fix/skip-existing-per-distro
Open

Tobias-Fischer wants to merge 1 commit into
RoboStack:masterfrom
Tobias-Fischer:fix/skip-existing-per-distro

Conversation

@Tobias-Fischer

Copy link
Copy Markdown
Contributor

The skip-existing check (skip_existing channels, and the additional-recipes check in vinca-gha) treats a package as already built when its name and build number match. ROS 2 packages share their names across distributions (ros2-*), so a channel that holds builds of several distributions — e.g. a common test upload channel — makes one distribution skip packages that only another one has built.

We hit this in a lyrical full rebuild: rolling's ros2-plotjuggler build 30 was on the shared channel, so lyrical's plotjuggler (also build 30) was never built, and plotjuggler_ros then failed to resolve.

Now a repodata record only counts if it was built for this distribution:

  • its mutex dependency names the distribution (ros2-distro-mutex 0.22.* lyrical_*), or
  • for the mutex itself, its build string starts with <distro>_.

Records without a mutex dependency are counted as before. built_for_distro() lives in vinca/utils.py and has tests.

🤖 Generated with Claude Code

@Tobias-Fischer
Tobias-Fischer marked this pull request as draft October 13, 2026 18:57
ROS 2 packages share their names across distributions (ros2-*), and the skip check
matched name and build number only, so a channel holding several distributions
(e.g. one test upload channel) made lyrical skip plotjuggler because rolling's build
30 was there. A record counts only if its mutex dependency (or, for the mutex, its
build string) names the distribution; records without a mutex dependency as before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Tobias-Fischer
Tobias-Fischer force-pushed the fix/skip-existing-per-distro branch from 96a6551 to 120d967 Compare October 13, 2026 18:59
Tobias-Fischer added a commit to Tobias-Fischer/robostack-distros that referenced this pull request Oct 14, 2026
…rk retries, vinca fixes (#92)

* robostack-bot: one conda-forge pinning update for the shared pinning

With every distribution on shared/pinning/conda_forge.yaml, the daily
per-distribution update-conda-forge-pinning jobs would each rewrite that file
(from their own dependencies) in competing pull requests. A distribution on the
shared pinning now moves together with the others: the migrations are chosen
for all of their dependencies, the file is written once, and each
distribution's pins are re-rendered with its own rebuild plan, in one pull
request (bot/update-conda-forge-pinning). A distribution with its own pinning
in distro.yaml is still updated on its own.

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

* shared/ci.yaml build_distros: choose which distributions a PR builds

A PR builds every distribution as soon as it touches anything outside distros/<d>/,
e.g. a one-distribution rebuild that also changes shared/ or tools/. build_distros
lists the ones to build instead (reset to [] before merging, like evict_cache); read
by `rs changed-distros`, which the PR build's plan step already uses.

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

* PR builds retry network failures, like the staged builds retry index lag

GitHub or prefix.dev being unreachable for a moment (git fetch, package download)
ended multi-hour full-rebuild jobs four times in a day. `rs build` now goes through
run_build, which retries such failures (at most twice); packages built before stay
in the output folder, so a retry continues where it stopped.

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

* vinca 63469ba: skip packages without package.xml in snapshots; skip-existing per distribution

- vinca-snapshot skips packages whose package.xml can't be read (humble's
  affordance_primitives in the 2026-10-12 sync crashed it), RoboStack/vinca#174
- skip-existing only counts packages built for this distribution (a channel shared
  by several distributions made lyrical skip plotjuggler), RoboStack/vinca#175
- qt6-main is a cross-compiling build dependency too, like qt-main

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

* Build only rolling in this pull request (TEMPORARY, reset before merging)

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

* Network retries: up to 4, waiting 1, 2, 4 and 8 minutes; also on 'connection error'

The Intel macOS runners lost their connection to prefix.dev for several minutes at a
time, longer than two one-minute retries.

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

* build:<distro> PR labels instead of shared/ci.yaml build_distros

A file setting had to be reset before merging, and the reset itself changed a shared
file, so the last run of the pull request built every distribution anyway. Labels
aren't part of the commit: nothing to reset. The plan step reads them at run time, so
a re-run sees labels added after the push; adding one doesn't start a build (a
labeled trigger would cancel the running build on any label, e.g. automerge).

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
@Tobias-Fischer
Tobias-Fischer marked this pull request as ready for review October 15, 2026 20:39
@Tobias-Fischer

Copy link
Copy Markdown
Contributor Author

This is ready for review @traversaro

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.

1 participant