-
v0.5.4 Stable
released this
2026-06-03 03:33:05 -04:00 | 22 commits to main since this releaseOpenPXE v0.5.4
Internal code-cleanup pass — the final tidy-up before real-world hardware
testing. No behaviour changes; 248 tests green, clippy clean, same static
x86_64-unknown-linux-muslbinary.docker pull gitea.milesward.dev/mward4/openpxe:0.5.4 # or :latestWhat changed (engineering only)
- Uniform HTTP errors. New
AppErrormapsopenpxe_core::Errorto one
consistent status/body; the clearly-safe handlers now?through it.
Handlers with intentional domain statuses (duplicate-share → 409, etc.)
were left explicit on purpose, so no API status changed. - Layered config via
figment.Config::loadmerges defaults → TOML →
OPENPXE_*env. The historical flat var names (OPENPXE_HTTP_PORT,
OPENPXE_ISO_DIR, …) keep working unchanged, plus a nested
OPENPXE_SECTION__FIELDform, and every field is now covered (the old
hand-rolled mapping silently skippedunattended_dirand the bind
addresses). Backed by hermeticfigment::Jailtests. - Typed
/api/status. The 25-key hand-built JSON blob is now a typed
StatusResponsestruct (compile-checked contract with the WebUI), guarded
by a test asserting every key the UI reads. - Dependency hygiene.
thiserror1 → 2; dropped unusedmime/
mime_guess/once_cell. - De-duplication.
pct_encode/xml_escapeconsolidated into
openpxe_core::encoding(were copy-pasted across the HTTP + SAML layers). - Concurrency tidy. The chunked-upload registry is now a
parking_lot::RwLock(sync, never held across.await); the per-session
lock stays atokio::Mutex. - Test coverage. Added an
instasnapshot of the rendered iPXE menu and
wiremockcoverage of the SAML metadata-URL fetch.
Notes
Duration::from_hours/from_minswere kept (they're stable on the pinned
Rust 1.95 toolchain and clippy prefers the readable form).- The
/api/docstyped-struct conversion was deliberately deferred (lowest
value, highest churn, no functional benefit).
Downloads
- Uniform HTTP errors. New