• v0.4.6 55f4765a20

    mward4 released this 2026-05-26 00:02:25 -04:00 | 41 commits to main since this release

    OpenPXE v0.4.6

    UI polish + iVentoy-inspired PXE-menu chrome. No backend behaviour
    changes other than the new idp_logo_url SSO field; existing
    deployments upgrade in place.

    PXE boot menu (iVentoy-style)

    The top-level iPXE menu now opens with a polished centered "OpenPXE"
    wordmark and closes with a single-line footer carrying the version +
    the booting client's arch. Concretely:

    
       ------------------------- Default -------------------------
       Boot from Local HDD
       ----------------------- Installers -----------------------
       Linux Installers >
       Windows Installers >
       -------------------------- Tools --------------------------
       Tools >
       --------------------- Queued Deployment ---------------------
       Queued Deployment (join queue)
    
                     OpenPXE v0.4.6  -  x86_64 UEFI
    
    • ASCII wordmark lives in item --gap lines so every iPXE build
      paints it, even the minimal snponly / undionly variants without
      a graphics console. Always visible regardless of firmware capability.
    • Best-effort PNG overlay. A console --picture <base>/branding/pxe-logo || console line at the top of the script lets iPXE builds with
      PNG support paint the operator's uploaded raster logo as the
      background. The || console resets to plain text on any iPXE that
      doesn't speak PNGs, so the menu always renders cleanly.
    • New endpoint: GET /branding/pxe-logo serves the operator's
      raster logo (PNG / JPEG / WebP / GIF) as-is. SVG uploads return 404
      — iPXE can't rasterize SVG. Endpoint stays public after admin setup
      because iPXE clients have no way to send a session cookie.
    • Footer line OpenPXE v0.4.6 - <arch> mapped from iPXE's
      ${buildarch} × ${platform} to a friendly form:
      x86 BIOS (i386 + pcbios), x86_64 UEFI (x86_64 + efi), arm64 UEFI (arm64 + efi). No website URL per the design brief.

    To get your custom logo painted in the PXE environment: upload a PNG
    (or JPEG / WebP / GIF) on Settings → Branding. SVG continues to drive
    the WebUI's top-left logo as before; the ASCII wordmark stands in on
    the PXE side.

    Top-right user menu

    The "signed in as X / Sign out" row moved out of the sidebar footer
    and into a small person-icon button next to the theme toggle.
    Click opens a popover with three rows:

    • Name — the operator's display username (read-only).
    • Edit account — jumps to Settings, which has the Account card at
      the top.
    • Sign out — revokes the session and bounces to the login screen.

    Esc + click-outside close it. The sidebar footer is back to the clean
    "Service status / Advertised PXE URL / OpenPXE v0.4.6" trio.

    Settings touchups

    • Account card form chrome is now consistent across all four
      inputs (Current password / New username / New password / Confirm).
      The previous CSS selector only styled type=text and type=number
      inputs, leaving password fields with default browser chrome —
      visually misaligned next to the styled username input. The new
      rule covers every input type we use, normalizes Safari's password-
      field metrics, and adds a 1-pixel teal focus ring that works in
      both light and dark mode.
    • SSO card header is now a single 3-column row: IdP display
      name
      , IdP logo URL (new field, FleetDM-style), Metadata
      source
      . All three controls baseline-align because the select
      inherits the same chrome as the text inputs. Below the row, the
      active source field (Metadata URL or pasted XML) spans full width.
    • SsoConfig.idp_logo_url persisted to sso.json alongside the
      existing fields. Length-capped at 2048 chars, must be http:// or
      https://. Used by the future SAML sign-in flow to brand the
      "Sign in with X" button. Empty/missing falls back to a generic
      badge.

    Container image

    • gitea.milesward.dev/mward4/openpxe:0.4.6
    • gitea.milesward.dev/mward4/openpxe:latest

    linux/amd64; static-musl binary; Debian 12-slim runtime (unchanged
    from v0.4.5). Non-root UID 10001 with setcap NET_BIND_SERVICE.

    Quality

    • 138 tests passing (was 132 in v0.4.5). Net +6: +1 IdP-logo-URL
      validation in the SSO config unit tests, +1 regression guard for the
      PXE-menu polish (asserts console --picture, the ASCII banner, the
      footer interpolation, and the three arch labels), +4 integration
      tests for /branding/pxe-logo covering the missing-config / SVG-
      fallback / raster-serve / post-auth-public-allowlist cases.
    • cargo clippy --workspace --all-targets clean.

    Compatibility

    • Existing sso.json files keep working — the new idp_logo_url
      field defaults to the empty string when missing.
    • Existing deployments upgrade in place; the WebUI bumps from v0.4.5
      to v0.4.6 on next launch, picks up the new menu chrome, and the
      user menu's reposition is purely cosmetic.
    Downloads