v0.4.4: Settings tab, API reference, ISO category, branding, disk space

Settings:
- New top-level Settings tab. Carries a placeholder for the planned
  LDAP / OIDC / user-management work, the new branding controls, and
  the API reference at the bottom.
- Custom logo upload (PNG/SVG/JPEG/WebP/GIF up to 2 MB) replaces the
  bundled brand mark via /assets/logo.svg; bytes live at
  <work_dir>/branding/ and survive restart. The original "OpenPXE
  v<x.y.z>" pins to the sidebar footer for support.
- API reference rendered from a new GET /api/docs into a per-method
  coloured pill list grouped by area.

ISO category (Storage):
- New IsoCategory { Os, Tools } on IsoMeta with PUT
  /api/isos/:id/category. Storage table's Type cell becomes a
  dropdown; selecting Tools moves the ISO into the Tools submenu next
  to memtest / shell / NIC info and removes it from the OS Installers
  family submenu. Family detection still drives BIOS/UEFI / kernel
  args; only the menu placement changes.

Storage telemetry:
- New IsoStore::disk_usage (libc::statvfs, lives in iso-store so the
  http-api crate stays #![forbid(unsafe_code)]) and GET
  /api/storage/disk. The Storage tab now shows free/used/total for
  the volume hosting the ISO directory with an 80%/95% colour ramp.

UI polish:
- Brand block in the sidebar now matches the topbar height exactly,
  so the divider runs straight across the top of the app rather than
  stepping; version label moved out of the brand and pinned to the
  sidebar footer ("OpenPXE v0.4.4").
- Light-mode terminal: --terminal-bg + per-level text colours track
  the active theme rather than being hard-coded dark.
- About: lead paragraph spans the full content width; new Docs row
  links to https://openpxe.com/.

106 tests passing (was 89 in v0.4.1, +17 across branding unit tests
and new integration coverage for category / disk / docs / branding).
cargo clippy --workspace --all-targets clean.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
This commit is contained in:
Miles Ward
2026-05-25 17:46:52 -04:00
co-authored by Claude Opus 4.7
parent aa178cee93
commit 55d74662c2
14 changed files with 1385 additions and 45 deletions
Generated
+8 -8
View File
@@ -1015,7 +1015,7 @@ checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe"
[[package]]
name = "openpxe"
version = "0.4.1"
version = "0.4.4"
dependencies = [
"anyhow",
"axum",
@@ -1037,7 +1037,7 @@ dependencies = [
[[package]]
name = "openpxe-core"
version = "0.4.1"
version = "0.4.4"
dependencies = [
"anyhow",
"parking_lot",
@@ -1055,7 +1055,7 @@ dependencies = [
[[package]]
name = "openpxe-dhcp-proxy"
version = "0.4.1"
version = "0.4.4"
dependencies = [
"anyhow",
"bytes",
@@ -1069,7 +1069,7 @@ dependencies = [
[[package]]
name = "openpxe-http-api"
version = "0.4.1"
version = "0.4.4"
dependencies = [
"anyhow",
"axum",
@@ -1098,7 +1098,7 @@ dependencies = [
[[package]]
name = "openpxe-ipxe-assets"
version = "0.4.1"
version = "0.4.4"
dependencies = [
"openpxe-core",
"rust-embed",
@@ -1108,7 +1108,7 @@ dependencies = [
[[package]]
name = "openpxe-iso-store"
version = "0.4.1"
version = "0.4.4"
dependencies = [
"anyhow",
"bcrypt",
@@ -1131,7 +1131,7 @@ dependencies = [
[[package]]
name = "openpxe-tftp"
version = "0.4.1"
version = "0.4.4"
dependencies = [
"anyhow",
"bytes",
@@ -1145,7 +1145,7 @@ dependencies = [
[[package]]
name = "openpxe-webui"
version = "0.4.1"
version = "0.4.4"
[[package]]
name = "parking_lot"