fix(installer): declare Imager device metadata so the documented flow reaches FTW - #906
Open
HuggeK wants to merge 2 commits into
Open
fix(installer): declare Imager device metadata so the documented flow reaches FTW#906HuggeK wants to merge 2 commits into
HuggeK wants to merge 2 commits into
Conversation
… reaches FTW Raspberry Pi Imager 2.x opens on a device chooser built solely from imager.devices in the manifest it was pointed at; a custom repository replaces the stock manifest rather than extending it. FTW published neither an imager object nor per-entry devices tags, so HWListModel bailed with "missing imager", the device list stayed empty and Next stayed disabled — the OS list had loaded, so the offline escape hatch did not apply. The entry was also untagged, and Imager keeps a devices-less entry only under an inclusive match, so a Pi 5 (exclusive) would have filtered FTW out even once a device was selectable. Ship imager.devices (Pi 5, Pi 4, No filtering) and tag the entry pi5-64bit/pi4-64bit, matching the arm64 image actually built. The install doc also pointed at the wrong control: Use custom file is a local file picker with no field for a web address. The hosted manifest belongs in Use custom URL. Its closing note had the devices rationale backwards — the absence of the filter is what breaks the chooser. rpi-image-build.yml now asserts both lists exist and agree, so an entry tagged for a device the chooser never offers fails CI. release-assets.yml warns rather than fails: the installer image is independent of application releases and must not block one. Co-authored-by: HuggeK <48095810+HuggeK@users.noreply.github.com>
HuggeK
marked this pull request as ready for review
August 12, 2026 14:07
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 install flow in
docs/rpi-image.mddoes not work with Raspberry Pi Imager. Three separate things go wrong, in the order a user hits them.1. The doc points at the wrong control. Imager 2.x's Content Repository dialog has three radio options:
Raspberry Pi (default),Use custom file, andUse custom URL. The doc says Use custom file and then supplies a URL — but that option opens a file picker for a manifest already on your computer, with no field to paste a web address into. The hosted FTW manifest belongs in Use custom URL.2. The device chooser is empty and Next is disabled. Imager 2.x opens on "Select your Raspberry Pi device" and builds that list solely from
imager.devicesin whichever manifest it was pointed at — a custom repository replaces the stock manifest rather than extending it. FTW's manifest had noimagerobject at all, soHWListModel::reload()bailed withmissing imagerand the list stayed empty.Nextis gated onhasDeviceSelected || (osListUnavailable && hwlist.count === 0); the OS list had loaded, so the offline escape hatch did not apply. The wizard dead-ends before FTW is ever reachable.3. The entry claims no hardware.
os_list[].deviceswas absent. Imager keeps adevices-less entry only when the selected device matches inclusively — Raspberry Pi 5 matches exclusively, so FTW would have been filtered out even once a device was selectable. The field is also required by Imager's published schema.Where each behaviour lives in rpi-imager
src/wizard/dialogs/RepositoryDialog.qml—Use custom file= "Load operating system list from a JSON file on your computer";Use custom URL= "Download operating system list from a custom web address"imager.devicessrc/hwlistmodel.cpp—reload()returns early onmissing imagersrc/wizard/DeviceSelectionStep.qml—nextButtonEnabled: hasDeviceSelected || (osListUnavailable && hwlist.count === 0)devices-less entries droppedsrc/imagewriter.cpp—filterOsListWithHWTags()keeps them onlyif (inclusive)src/hwlistmodel.h—isInclusive()is true only formatching_type == "inclusive"; upstream ships Pi 5 asexclusivedevicesrequireddoc/json-schema/os-list-schema.jsonWhat this changes
deploy/imager/os_list.json— addsimager.devices(Pi 5, Pi 4, and "No filtering", using Imager's own tag names and icons) and tags the FTW entrypi5-64bit/pi4-64bit, matching the arm64 image actually built.docs/rpi-image.md— Use custom URL instead of Use custom file, with a note on why they differ; adds the device-selection step; rewrites the closing rationale, which had it backwards.rpi-image-build.ymlasserts both lists exist and agree;release-assets.ymlwarns rather than fails.Why the release-assets check warns instead of failing
That step mirrors the already-published
os_list.jsonfrom therpi-installerrelease onto a version tag. Until a new installer image is built, that published file still lacks the new fields. The installer image is explicitly independent of application releases, so failing there would block an unrelated version release on a stale artifact. It emits a::warning::naming the fix (rerunrpi-image-build.yml) instead.The old rationale, and why it was backwards
The doc previously read:
The first sentence is right about the mechanism — a custom repository genuinely does not inherit the stock hardware list — but draws the opposite conclusion. Because the stock list is not inherited, the manifest must supply one; omitting it doesn't widen compatibility, it removes the chooser entirely. And an untagged entry is less reachable, not more, since exclusive matching drops it.
Verification
imagerdeleted,os_list[].devicesdeleted, and a tag (pi3-64bit) the chooser never offers.imager.devices, drops all placeholders, and passes both guards.init_formatenum contract (cloudinit-rpiis valid and was never the problem). Checked directly rather than withjsonschema, which isn't installed locally.release-assets.ymlwarning branch was exercised both ways: silent on the fixed manifest, warns and still exits 0 on a stale one.Not verified: no Raspberry Pi Imager run against the published manifest — that needs a rebuilt installer release, since the live
os_list.jsononly picks up these fields oncerpi-image-build.ymlrepublishes it.🤖 Generated with Claude Code