Skip to content

vinca-snapshot: skip packages whose package.xml can't be read - #174

Merged
traversaro merged 2 commits into
RoboStack:masterfrom
Tobias-Fischer:fix/snapshot-skip-unreadable-package-xml
Oct 16, 2026
Merged

traversaro merged 2 commits into
RoboStack:masterfrom
Tobias-Fischer:fix/snapshot-skip-unreadable-package-xml

Conversation

@Tobias-Fischer

@Tobias-Fischer Tobias-Fischer commented Oct 13, 2026 •

Copy link
Copy Markdown
Contributor

When a package's release repository has been deleted, the rosdistro cache has no package.xml for it, and vinca-snapshot crashed on parsing None:

TypeError: a bytes-like object is required, not 'NoneType'

This happened for humble's affordance_primitives in the humble/2026-10-12 sync (its release repository PickNikRobotics/affordance_primitives-release is gone), so no humble snapshot could be created at all.

Now vinca-snapshot checks for a missing package.xml before reading the dependencies and skips such a package with a warning, the same way packages without a version already are. Any other error still fails the snapshot.

Package 'affordance_primitives' has no package.xml, skipping...

Checked with vinca-snapshot -d humble --rosdistro-ref humble/2026-10-12 (only affordance_primitives is skipped) and a new test, vinca/test_snapshot_main.py.

🤖 Generated with Claude Code

@Tobias-Fischer
Tobias-Fischer marked this pull request as draft October 13, 2026 18:57
A release repository that was deleted (humble's affordance_primitives in the
2026-10-12 sync) leaves no package.xml in the rosdistro cache, and parsing None
crashed the whole snapshot. Warn and skip the package instead, like packages
without a version.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Tobias-Fischer
Tobias-Fischer force-pushed the fix/snapshot-skip-unreadable-package-xml branch from a4d02c7 to be1e132 Compare October 13, 2026 18:59
Tobias-Fischer added a commit to RoboStack/robostack 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>
…very exception

Only a package without package.xml in the rosdistro cache is skipped; any other
error while reading dependencies fails the snapshot again.

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:38
@Tobias-Fischer

Copy link
Copy Markdown
Contributor Author

This is ready for review @traversaro

@traversaro
traversaro merged commit 3624aff into RoboStack:master Oct 16, 2026
3 checks passed
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