Make the package tables mutex-aware and render them from JSON - #142
Merged
Merged
Conversation
Everything on a channel is built against one version of the ROS distro mutex, and builds for different mutex versions cannot be installed together. The tables ignored that, so a package built only for an older mutex read as available. On humble that is 74 packages. Availability is now relative to a mutex. Pick one and the marks, versions, coverage and every count follow it. The newest is the default, because that is what a fresh install resolves to. The tables also stopped being static Markdown. Each distro page was 2.2 MB of HTML with roughly 13,700 img tags pointing at a CDN, one per check mark. They are generated as JSON now and rendered in the browser, which makes search, filtering and per-package detail possible at all.
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.
The tables claimed more than the channels deliver. Everything is built against a version of the ROS distro mutex, and builds for different mutex versions cannot be installed together, so a package built only for an older mutex is not installable today. It still got a green check. On humble that is 74 packages.
Availability is now relative to a mutex. Pick one from the dropdown and the marks, versions, coverage and every filter count follow it. The newest is the default, because that is what a fresh install resolves to. Humble reads 43% instead of 46%, and the difference is the part that was never true.
Which mutex an artifact targets comes from matching its dependency spec with
py-rattlerrather than parsing the version out of the string. The specs already appear in two forms and I would rather not guess at the third.Switching to an older mutex recomputes everything. Coverage drops to 32%, and
ackermann-steering-controllershows 2.40.0 with a note that 2.53.1 is one mutex away.Why the tables are JSON now
Each distro page was 2.2 MB of HTML holding roughly 13,700
<img>tags pointed at a jsDelivr CDN, one per check mark. That is a lot to ship for a grid of ticks, and it made the useful things impossible: you cannot search 2,297 rows of static Markdown, or filter them, or say anything per package.The pages are stubs now and the data is generated as JSON. A page is around 18 KB, the site build went from 14.5s to 0.3s, and the search index dropped from 537 KB to 46 KB. Nothing renders from a CDN anymore.
That opened up the parts people actually asked for:
package.xmlin rosdistro's distribution cachedistribution.yamlfor 99% of packagesWorth knowing before you review
The sidebar has one Distributions entry instead of eight. Switching distros happens in the tab strip on the page, which is written into the page rather than rendered by JS so the other seven stay linked and crawlable.
Foxy and Galactic were frozen at April 2025 because their steps in the workflow are commented out. They are regenerated once here and still left off the schedule, so the snapshot is current without putting EOL distros back in CI.
Noetic reached end of life in May 2025 but had no notice on the page. It has one now, phrased about upstream rather than about our rebuilds, since we do still rebuild it.
Distro artwork comes from
ros2_documentation(CC BY 4.0) and the ROS wiki (CC BY 3.0), interface icons from the sets Zensical already bundles. Both are vendored with attribution files rather than hotlinked.docs/data/*.jsonis 2.5 MB committed. It replaces 13.6 MB of generated HTML, and the workflow rewrites it on the same six-hourly schedule as before.