Skip to content

Remove SprigUI, add a BaseOS tab - #32

Merged
Sundownersport merged 1 commit into
mainfrom
add-baseos-tab
Aug 16, 2026
Merged

Remove SprigUI, add a BaseOS tab#32
Sundownersport merged 1 commit into
mainfrom
add-baseos-tab

Conversation

@Sundownersport

Copy link
Copy Markdown
Member

Summary

  • Removes SprigUI — the repo is archived now that spruceOS supports the Miyoo Mini Flip properly. Clean deletion; it was referenced nowhere outside config.rs.
  • Adds BaseOS (pvaibhav/BaseOS) as an install target — a third-party minimal OS for Anbernic RG XX devices, credited and linked as such in the tab's info text.
  • Bumps to 1.6.0 (Cargo.toml, Info.plist).

Tabs are now Stable / Nightlies / TwigUI / BaseOS.

Why this isn't just a config entry

BaseOS ships .img.zip — a raw disk image inside a zip container. The installer classified anything ending in .zip as an archive to extract onto a formatted card, so a BaseOS install would have formatted the SD card and copied a 1.4 GB .img file onto it instead of burning it: an unbootable card, with no error shown.

So this also teaches the burn path about .img.zip:

  • is_raw_image_asset() in logic.rs now matches .img.zip, replacing three drifting inline copies of the check in logic.rs and ui.rs.
  • burn.rs gains open_image_reader(), which streams .gz, .zip or a bare .img through one path — replacing four copy-pasted gzip blocks. A worker thread owns the ZipArchive and hands 1 MB chunks over a bounded channel, since by_index borrows the archive and can't escape into the Box<dyn Read> the burn paths expect.
  • Zip records its uncompressed size in the headers, so unlike .gz it needs no full-file pre-scan.
  • .img.zip is ordered before .zip in strip_extensions and the auto-select priority list, since every .img.zip name also ends with .zip.

Read is deliberately fully qualified in the new code. One of the existing per-function use std::io::Read; imports is cfg-gated and guards the statement that follows it — consolidating them silently breaks the Windows build.

Verification

All four workflows green on all platforms: beta-add-baseos-tab.

Selection logic dry-run against each tab's live release, using the mappings parsed out of the committed config.rs:

Stable     v4.3.4          assets= 1  auto-select  -> ARCHIVE (format+extract)
Nightlies  v4.3.5-20260816 assets= 1  auto-select  -> ARCHIVE (format+extract)
TwigUI     0.5.0           assets= 1  auto-select  -> BURN (raw image)
BaseOS     v1.1.0          assets=11  SELECTION UI -> BURN (raw image)

All 11 BaseOS devices map to friendly labels, none falling through to a raw filename.

⚠️ Not runtime tested

CI proves this compiles; nothing has actually burned a card. The zip reader, the header size lookup and the read-back verification have never executed against a real image. Because the shared burn path changed, TwigUI (.img.gz) should be smoke-tested alongside BaseOS before this is trusted in a release.

🤖 Generated with Claude Code

SprigUI is archived — spruceOS supports the Miyoo Mini Flip properly now, so
the tab pointed at a dead repo.

BaseOS (pvaibhav/BaseOS) is a third-party minimal OS for Anbernic RG XX
devices, added here as an install target. It ships .img.zip: a raw disk image
inside a zip container. The installer classified anything ending in .zip as an
archive to extract onto a formatted card, so a BaseOS install would have
formatted the card and copied a 1.4 GB .img onto it rather than burning it —
an unbootable card with no error. Raw-image detection now matches .img.zip,
and burn.rs gained a shared open_image_reader() that streams .gz, .zip or a
bare .img through one path, replacing four copy-pasted gzip blocks. A worker
thread owns the ZipArchive and hands chunks over a bounded channel, since
by_index borrows the archive and cannot escape into the Box<dyn Read> the
burn paths expect. Zip stores its uncompressed size in the headers, so unlike
.gz it needs no pre-scan.

Read is deliberately fully qualified in the new code: one of the existing
per-function imports is cfg-gated and guards the statement after it, so
consolidating them silently breaks the Windows build.

Version bumped to 1.6.0.
@Sundownersport
Sundownersport merged commit 0d0eea9 into main Aug 16, 2026
8 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.

1 participant