Dashboard: - Plain-count stat tiles (Running/Stopped/Pods/Images/Volumes/Networks) separated from a single "Resource Usage" card (CPU/Memory/Swap/Storage meter rows) instead of forcing both into one tile grid, which produced awkward spanning-tile/dead-cell layouts. - Fixed CPU usage never changing (libpod's own cpuUtilization is computed once and never resampled) by computing it from /proc/stat deltas instead. - Fixed memory usage reading far too high by using /proc/meminfo's MemAvailable instead of libpod's raw (non-reclaimable-aware) memFree. - Added an Autostart Queue table reusing podman-autostart.sh's own failure-counter files. - Dashboard and Containers now auto-refresh every ~2s (paused when the tab is hidden or a modal is open). Toasts: - Real success/warn/error/info toast notifications replacing every alert() used for one-way feedback, across every panel. Container detail modal: - 5 new tabs: Resources, Logs, Console, Events, Healthcheck. Containers panel: - Folders to group containers (name + icon), stored in the plugin's own folders.json — a folder's header always shows an icon+name+status chip per member, matching Unraid's own Docker page folders. "Move to Folder" becomes "Remove from Folder" once a container is already grouped. - Containers can carry an icon URL and a WebUI URL (small button next to the name), both stored as container labels and auto-filled from templates where applicable. - Settings: an "Add container" control for the Autostart order table. Fixes: - Context menus now measure their own rendered size and flip above the anchor when there isn't room below, instead of running off-screen. - Containers table now uses table-layout:fixed with explicit column widths — auto layout was shifting every column (and the header) on every folder expand/collapse, and briefly again when a flex wrapper was mistakenly placed directly on a <td>. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
170 lines
9.8 KiB
Markdown
170 lines
9.8 KiB
Markdown
# Changelog
|
|
|
|
All notable changes to this project will be documented in this file.
|
|
|
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html)
|
|
for the plugin version (independent of the bundled Podman/upstream package versions,
|
|
see [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md#52-build-strategie)).
|
|
|
|
## [Unreleased]
|
|
|
|
### Added
|
|
- Containers panel: folders to group containers (name + optional icon
|
|
URL), purely cosmetic organizational metadata stored in the plugin's
|
|
own `folders.json` — podman itself has no such concept, same as
|
|
Unraid's own Docker page's folders. "+ New Folder", a "Move to Folder"
|
|
submenu on each container's row menu, and per-folder rename/delete
|
|
(deleting a folder only ungroups its containers, never touches them).
|
|
A folder with nothing assigned yet still shows up (so there's
|
|
somewhere to move a container into); one that's merely hidden by the
|
|
current search/filter does not. A folder's header always shows an
|
|
icon+name+status chip per member — collapsed or expanded, matching how
|
|
Unraid's own Docker page folders behave — rather than hiding everything
|
|
behind a bare count; clicking a chip opens the same row menu the "⋮"
|
|
button does (Details is now a menu item there too, alongside
|
|
Pause/Kill/Rename/Edit/Remove) rather than jumping straight to the
|
|
detail modal. "Move to Folder" only shows for a container that isn't
|
|
grouped yet — once it's in one, that item becomes a direct "Remove
|
|
from Folder" instead, since "move to a folder" reads as "add" and is
|
|
ambiguous/redundant once it's already in one. Containers can also
|
|
carry an icon URL (settable in the create/edit form, auto-filled when
|
|
creating from a template) shown in the table instead of the 2-letter
|
|
initials avatar.
|
|
- Containers can now carry a WebUI URL too (create/edit form, preserved
|
|
through Update/Update All the same way the icon URL is), shown as a
|
|
small open-in-new-tab button next to the name in the Containers table
|
|
when set. Both this and the icon are stored as the plugin's own
|
|
container labels (`podman-webui.weburl`/`.icon`), read straight off
|
|
the already-fetched container list — no extra per-container calls.
|
|
- Container detail modal: 5 new tabs (Resources, Logs, Console, Events,
|
|
Healthcheck), rounding it out from 6 to 11 of prompt.md's 12 requested
|
|
tabs (Volumes was left merged into the existing Mounts tab — same
|
|
underlying source/destination data, a separate tab would just repeat
|
|
it). Resources shows live CPU/memory alongside configured limits
|
|
(memory/swap/CPU/PIDs/block-I/O — a `0` in podman's own HostConfig
|
|
means "unlimited", not zero). Logs reuses the existing per-container
|
|
logs endpoint. Console opens a real ttyd/podman-exec session scoped to
|
|
the modal, cleaned up (killing the ttyd process server-side) on every
|
|
way of leaving — switching tabs, Close, backdrop click, or Escape —
|
|
not just on an explicit Disconnect, so peeking at a console doesn't
|
|
leak an orphaned ttyd process. Events and Healthcheck are both one-shot
|
|
historical queries (libpod's `/events?stream=false` for the last 7
|
|
days, and inspect's own `State.Health.Log`) rather than a live stream,
|
|
which stays out of scope (see dashboard.js's own note on why).
|
|
- A real toast notification system (success/warning/error/info, auto-
|
|
dismissing, stacked bottom-right, dismissible early) replacing every
|
|
`alert()` used for one-way feedback across Containers, Images, Volumes,
|
|
Networks, Pods, Templates, Compose, and Settings — confirmations stay
|
|
native `confirm()` (a decision, not a notice), and long command output
|
|
(`podman compose up/down`, previously also an `alert()`) now goes to
|
|
the existing scrolling log-modal instead, which fits it better than a
|
|
toast ever could.
|
|
- Dashboard reworked: a clean 6-tile row of plain counts (Running,
|
|
Stopped, Pods, Images, Volumes, Networks — colored green/red on
|
|
Running/Stopped so fleet health reads at a glance), a single "Resource
|
|
Usage" card with aligned CPU/Memory/Swap/Storage meter rows (bars shift
|
|
to warn/bad colors above 75%/90% instead of staying accent-colored at
|
|
any value), and an "Autostart Queue" table (reusing
|
|
`podman-autostart.sh`'s own per-container failure counters, so it shows
|
|
exactly what that script would decide, not a second tracked history).
|
|
Bar-and-percentage metrics were kept out of the plain-count tile grid
|
|
entirely after an earlier attempt at combining them (a tile spanning
|
|
multiple grid columns) left dead, empty cells in the layout.
|
|
- Dashboard and Containers now auto-refresh every ~2s (paused while the
|
|
tab is hidden or a modal is open) instead of requiring a manual
|
|
Refresh click to see current state.
|
|
- Settings: an "Add container" dropdown + button above the Autostart
|
|
order table — previously that table could only reorder/remove
|
|
containers already in the chain, with no way to add one in the first
|
|
place.
|
|
- Containers: "Update All" now also removes the old, now-unused image
|
|
version each updated container leaves behind (only when at least one
|
|
container actually updated), instead of leaving stale images to pile up
|
|
on disk after every update run.
|
|
|
|
### Fixed
|
|
- Dashboard memory usage was calculated from libpod's raw `memFree` (which
|
|
excludes reclaimable buffers/cache), showing usage far higher than
|
|
reality — e.g. 67% "used" where `free -h` reported 19%. Now reads
|
|
`/proc/meminfo`'s `MemAvailable` directly, matching what `free -h` and
|
|
most monitoring tools show.
|
|
- Dashboard CPU usage never changed — libpod's own `/info` computes
|
|
`cpuUtilization` once and never resamples it (confirmed live: three
|
|
calls seconds apart returned byte-identical numbers). Now computed from
|
|
`/proc/stat` deltas between successive requests, the same technique
|
|
`top`/`htop` use, which auto-refresh's ~2s cadence fits naturally.
|
|
- Context menus (a container's "⋮", a folder's "⋮") always dropped down
|
|
from the anchor at a fixed position — opened from a row near the
|
|
bottom of the viewport, the menu ran off-screen with its last items
|
|
unreachable. Now measures its own actual rendered size (which varies
|
|
with item count) after appending and flips above the anchor instead
|
|
when there isn't enough room below, clamped horizontally too.
|
|
- Expanding/collapsing a folder shifted every column (including the
|
|
header text) in the Containers table — its default `table-layout:
|
|
auto` sizes each column from the widest content among only the
|
|
currently-visible rows, so adding/removing a folder's rows changed
|
|
what counted as "widest" on every toggle. Columns now use explicit
|
|
fixed widths that don't depend on row content at all.
|
|
- The Name column's content (icon + name + WebUI button) was
|
|
misaligned with its own header, drifting further off with every row —
|
|
putting `display:flex` directly on the `<td>` (to keep the WebUI
|
|
button on the same line as the name) pulls that cell out of
|
|
table-cell layout entirely, so with `table-layout:fixed` it stopped
|
|
respecting the column width its `<th>` assigns. The flex layout now
|
|
lives on a `<div>` inside the `<td>` instead, so the `<td>` itself
|
|
stays a normal, fixed-width table cell.
|
|
|
|
## [0.1.3] - 2026-07-12
|
|
|
|
### Added
|
|
- Settings: a "Podman Service" card with live status plus Start/Stop/Restart,
|
|
each shown in a progress log modal — diagnosing and recovering a podman
|
|
that failed to start no longer needs SSH/terminal access at all.
|
|
- Settings: "Format a Disk for Podman Storage", for a single-disk system
|
|
with no cache pool. Only ever lists disks with no existing partition,
|
|
filesystem, or RAID/ZFS membership signature, and never the Unraid boot
|
|
flash — both excluded by multiple independent checks, not just one.
|
|
Formatted disks are remounted by UUID on every boot.
|
|
|
|
### Fixed
|
|
- `STORAGE_PATH` was never auto-created, even when its parent (a real,
|
|
already-mounted cache pool) existed — only failed if genuinely nothing
|
|
was mounted at all. Root cause of a real "cannot reach the Podman API
|
|
socket" report on a fresh install with a perfectly normal cache pool.
|
|
- Cache-busting for the WebUI's own JS/CSS never actually worked, at all,
|
|
the entire time — Unraid runs `.page` PHP through `eval()`, and
|
|
`__DIR__` inside `eval()`'d code resolves to the *eval() call site's*
|
|
directory, not the plugin's. Every "hard refresh" this project's own
|
|
docs/commits ever recommended only worked because Ctrl+Shift+R bypasses
|
|
the browser cache directly, independent of this (broken) mechanism.
|
|
- Settings' service status chip showed "Not running" immediately after a
|
|
successful Start, because the "is it running" check only recognized
|
|
`rc.podman status`'s own wording, not `start`/`stop`/`restart`'s.
|
|
- The Podman Service log showed `rc.podman`'s multi-line output as one
|
|
run-together paragraph (missing `white-space: pre-wrap` on the pane
|
|
itself, not just its per-line children).
|
|
|
|
## [0.1.1] - 2026-07-12
|
|
|
|
### Fixed
|
|
- `plugin/podman.plg`'s `<URL>`/`<MD5>` entity values were split across their
|
|
own lines (`<URL>\n&baseURL;/...\n</URL>`) — Unraid's plugin manager passes
|
|
that text straight into a `wget ... -O <name> <url>` shell command without
|
|
trimming it, so the leading newline broke the command in two: `wget` saw no
|
|
URL argument at all, and the URL text ran on the next line as its own
|
|
(failing) shell command. Every real Unraid plugin (verified against
|
|
`unassigned.devices.plg` on a live host) keeps `<URL>...</URL>` on one
|
|
line — found by running the plugin installer's own CLI (`scripts/plugin
|
|
install`) directly on a real Unraid host and reading its raw output,
|
|
rather than trusting the webGUI's summarized install log.
|
|
|
|
## [0.1.0] - 2026-07-12
|
|
|
|
### Added
|
|
- Initial repository scaffolding: directory structure, documentation skeleton,
|
|
CI workflow stubs, and community health files.
|
|
- Architecture documentation (`docs/ARCHITECTURE.md`).
|
|
|
|
[Unreleased]: https://github.com/OWNER/unraid-podman/compare/HEAD...HEAD
|