Skip to content

Releases: blairham/dockmaster

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 15 Oct 21:23
v0.1.0
08f8615

Added

  • A local registry (#120): :registry up (or u in :registries) runs
    registry:2 as dockmaster-registry on 127.0.0.1:5000
    (localRegistry.name / .port), its images in a named volume that
    survives the container, deletes enabled — or starts the kind or k3d
    registry already on the daemon instead of a second one. :registries
    lists the registry containers first; enter on any registry, local or
    one you are logged in to, lists its repositories (:catalog [registry]),
    and enter on one its tags with digest, size, platforms and age. ctrl-d
    on a tag deletes it by digest and P garbage-collects the registry
    container, both after a confirm. x stops a registry container and
    ctrl-d removes dockmaster's own (its volume stays). In :registries,
    logging in again to a row moved from enter to l. Everything but
    browsing is refused under --readonly.
  • Pushing to the local registry (#120): p's confirm takes L to push to
    the local registry instead — the image is tagged
    localhost:5000/<name>:<tag> and that is pushed; the build form's "push
    local" pushes the built tag there once the build succeeds; u on a tag
    in a registry pulls it and opens the run form on it. A push or pull that
    finds no registry listening says to :registry up.
  • :builds (also :build-history, :bh) is the build history, as Docker
    Desktop's Builds tab (#118): every record the builder keeps (docker buildx history, buildx v0.20.0 or later) — name, status, steps, cache
    hits, duration, age and a failed build's error — newest first, with
    dockmaster's own running builds on top. enter replays a build's log
    (enter on a running one reopens its output), o inspects it, R opens
    the build form on the same context, Dockerfile, target and args, ctrl-d
    removes a record (confirms; works on marked rows), ctrl-z lists failed
    builds only. config.yaml's builder picks the buildx builder.
  • ctrl-n in the volumes and networks views creates one, through a form
    (#106): a volume's name, driver, driver opts and labels; a network's name,
    driver (overlay offered only on a swarm manager), subnet, gateway,
    internal, attachable and labels. :create volume and :create network
    open the same forms from any view, :create the one for the view on
    screen. Refused under --readonly.
  • Snapshot and move images and containers (#108): M on a container (or
    :commit) commits it to an image — repo[:tag], a message, paused while
    it is read unless you say otherwise; E exports a container's filesystem
    (:export) or saves an image, or every marked one, to a tar (:save),
    by default under ~/.local/state/dockmaster/exports/, confirming before
    it replaces a file; :load <path> loads images from a tar. Commit and load
    are refused under --readonly.
  • N on a container connects it to a network or disconnects it (#107): a
    picker lists every network with the ones it is on marked; choosing another
    connects it, with optional aliases and a fixed IP, and choosing one it is
    on disconnects it after a confirm. With rows marked it acts on all of them.
    In a network's used-by list (U), ctrl-d disconnects the container from
    that network (confirms) instead of removing it. --readonly refuses both.
  • :build [path] builds an image (#104): a form for tag, Dockerfile, target
    and build args, then docker buildx build — or docker build where buildx
    is not installed — against the daemon on screen, its output streamed into a
    log-style view (autoscroll, wrap, copy, ctrl-s save). A failure leaves the
    output on screen; esc stops a build still running. b on a Dockerfile or
    a directory in :dir opens the same form. Refused under --readonly.
  • :registries (:reg) lists the registries in the docker config, where
    each credential is stored and whether it resolves, never the secret.
    :login [registry] (or n there) checks a username and password with
    the daemon and stores them as docker login does, in the credential
    helper; ctrl-d logs out after a confirm. Both are refused under
    --readonly.
  • Alerts: a container turning unhealthy, being OOM-killed, exiting
    non-zero or restart-looping is flashed in whatever view is on screen
    ([web] OOM-killed), written to the log file, and listed by :alerts
    for the session, where enter jumps to the container. A stop, kill or
    restart you asked for is not a crash, and each transition is reported
    once. alerts.enabled (on), alerts.bell and alerts.restartLoop
    (count 3 in window 5m), overridable per context. (#109)
  • Tag and push images (#102): t on an image (or :tag <ref>) tags it
    repo[:tag]; p (or :push [ref]) pushes its tag after a confirm, with
    the credential the docker config holds for the registry (:registries),
    progress streaming to the flash line. Both are refused under --readonly.
  • Projects build and show their config (#105): b runs compose build —
    every service or one, picked in a form — streamed into the same output view
    as :build, and optionally compose up -d once it succeeds; y shows
    compose config, the merged YAML of every compose file, .env and
    interpolation, in the inspect view. A build is refused under --readonly
    and when the compose files are not on this machine; the config is allowed
    under --readonly.
  • :builders (:buildx) lists the buildx builders (#119): driver, endpoint,
    status, BuildKit version and platforms, the current one marked, and why a
    broken one is broken. u / x start and stop one, U makes it the
    default (buildx use), P prunes its build cache, ctrl-n creates one
    (name, driver, platforms, a remote driver's endpoint) and ctrl-d removes
    one (both prune and remove confirm; a docker context's own builder is
    refused); enter / o show buildx inspect. Changes are refused under
    --readonly.

Changed

  • Builds run in the background (#121): esc in a build's output leaves it
    running and only closes the view; :builds lists it on top, and enter
    reopens it with everything it printed meanwhile. x stops a
    build (confirms). A project shows building… while its compose build
    runs, and "then up" runs when it finishes wherever you are. A build that
    ends while its output is closed says so — [app:dev] build finished, or
    failed (exit N) — and is written to the log. Quitting with a build
    running asks first (:q! does not).
  • Releases are built and signed by the shared go-release.yml in
    blairham/.github, which release.yml now calls. checksums.txt's
    signature and the provenance name that workflow, with this repository and
    the tag; SECURITY.md has the new verify commands, and how to check v0.0.16
    and earlier.
  • Built with Go 1.26.9.

Full Changelog: v0.0.16...v0.1.0

v0.0.16

Choose a tag to compare

@github-actions github-actions released this 08 Oct 01:22
v0.0.16
6e500b4

Changed

  • The : palette suggests the shortest command that extends what is
    typed, as k9s does: q suggests q! and qu suggests quit, where q
    used to suggest only itself. A command that begins a longer one now
    suggests the longer one (logo → logoless); enter still runs what was
    typed.

Full Changelog: v0.0.15...v0.0.16

v0.0.15

Choose a tag to compare

@github-actions github-actions released this 08 Oct 00:32
v0.0.15
a2781d4

Added

  • :delete all deletes every image in the images view, or every volume in
    the volumes view (:delete all images / :delete all volumes from
    anywhere). Nothing is forced: whatever a container uses, or the daemon
    refuses, is skipped and counted. It confirms first, and --readonly
    refuses it.

Full Changelog: v0.0.14...v0.0.15

v0.0.14

Choose a tag to compare

@github-actions github-actions released this 06 Oct 12:40
v0.0.14
c49ee2f

Fixed

  • The confirm dialog's buttons are k9s's colors: the focused one black on
    dodgerblue, the other cadetblue, and a skin's dialog: block recolors
    them.
  • k9s's stock skins load: a skin color that does not parse (the stock
    skins name linegreen) is drawn in the terminal's own color, as k9s
    draws it, instead of stopping startup.

Full Changelog: v0.0.13...v0.0.14

v0.0.13

Choose a tag to compare

@github-actions github-actions released this 05 Oct 22:46
v0.0.13
1863076

Changed

  • Confirmations are k9s's popup dialog instead of a bar above the table:
    the question floats over the table, which keeps its rows, and is headed
    by the action (<Remove>, <Kill>, <Prune>, …). Focus starts on
    Cancel
    , so enter alone now declines — press y, or tab / → to OK and
    enter, to go ahead. n and esc still decline.

Full Changelog: v0.0.12...v0.0.13

v0.0.12

Choose a tag to compare

@github-actions github-actions released this 05 Oct 02:51
v0.0.12
aa9b0cb

Added

  • Plugins can live one or more to a file in plugins/ beside
    plugins.yaml, k9s's snippet directory: every *.yaml there is merged
    with plugins.yaml and checked with it, and a name defined in two files
    is an error naming both. ui.reactive reloads a change inside it. (#64)

  • jumps.yaml, k9s's custom jumps: enter in a view opens another view
    filtered by the selected row — labelSelector: com.docker.compose.project=$PROJECT
    on containers opens that project's volumes. Values are filled in once and
    matched as text; a variable the view's rows do not give is refused at
    startup. (#64)

  • :xray net, :xray vol and :xray img root the xray tree at networks,
    volumes or images, as k9s's :xray <resource>; container nodes keep every
    container key. (#64)

  • The header's CPU/MEM line: the daemon host's CPU and memory in use, from
    the CPU/MEM poll's samples and the host's size — no extra daemon call —
    colored by thresholds, and n/a with the poll off. (#64)

  • Container labels that preset or skip the shift-f port-forward prompt,
    k9s's FastForwards annotations: dockmaster.port-forwards=8080:80
    prefills the prompt and dockmaster.auto-port-forwards=8080:80 replaces
    it with a yes/no confirm. The value is what the prompt takes, optionally
    after a k9s-style service::. A label that does not parse is reported in
    the prompt, and no label starts a forward without a yes (#64).

  • The shift-f prompt takes several forwards, comma-separated
    (8080:80,8443:443).

  • f on a container opens :pf narrowed to that container's forwards,
    as k9s's f (#64).

  • portForwardAddress in config.yaml (k9s's): the address a forward
    listens on, an IP or localhost, default 127.0.0.1. When it is not
    loopback the shift-f prompt and confirm warn that the forward is
    reachable from the network, and :pf shows the address (#64).

  • ctrl-a opens k9s's aliases view (#64): every : command with its other
    spellings, and your aliases.yaml entries, marked alias, as a table you
    can filter and sort; enter runs the selected one as if typed at the
    palette. :aliases opens the same view (it was a plain-text list of your
    aliases). In the : and / bars ctrl-a is still start of line.

  • ctrl-d in the contexts view runs docker context rm <name> after a
    confirm (#64). default, the context dockmaster is connected through and
    the docker CLI's current context are refused with the reason; --readonly
    refuses it.

  • ctrl-d on a compose file in :dir runs compose -f <file> down after a
    confirm (#64); --readonly refuses it.

  • keepHistory in hotkeys.yaml now does what it does in k9s (#64): the
    view the hotkey opens goes on top of the current one, so esc comes back.

  • overwriteOutput in plugins.yaml now does what it does in k9s (#64): a
    background plugin's first line of output replaces the "done" flash.

  • A root shell on the daemon's host, k9s's node shell (#59): :hostshell
    for the daemon on screen — remote contexts and a plain dockerd included —
    and s on a Docker Desktop, OrbStack or Rancher Desktop row in the
    runtimes view. It runs a privileged, --pid=host, --rm helper that
    nsenters PID 1 and starts the host's sh. The image is
    hostShell.image in config.yaml (default alpine:3, pulled if the
    daemon lacks it). It always confirms, naming the daemon and the image;
    --readonly and a context's readOnly refuse it, and so does a
    rootless daemon, where it cannot work. Colima and Podman rows keep
    their ssh.

  • A VULN column in the images and containers views: each image's last
    vulnerability scan, by severity (C2 H5, with medium and low when there
    is room), read from a cache of scan results kept by image ID under the
    state directory (scans/). Every v scan is cached; a result older than
    imageScans.ttl (a week) is marked with a trailing ~, and sorting on
    the column orders by severity. Off by default — imageScans.enable turns
    it on, or views.yaml can name VULN — and imageScans.background scans
    images with no fresh result one at a time while the images view is open.

Changed

  • i inspects the selected row, as o, d and y do; copying the full
    ID moved from i to I.
  • enter on a ⎈ kind/k3d node opens the pods' containers inside it, as
    enter on a node does in k9s; l is still the node's logs and n still
    works. The header's <enter> reads Pods on a node row.
  • ctrl-a is now a dockmaster key: a hotkey or plugin on Ctrl-A is
    refused at startup.
  • A hotkey, -c, defaultView or an alias may name a command by any
    spelling the palette takes (x, log, h, dumps, screendumps, ?);
    those were refused as "not a command".

Fixed

  • ? no longer runs off the bottom of a 40-row terminal: it lists keys,
    and points at ctrl-a for the : commands, which that list already
    holds with every spelling. A test now fails when the help frame is
    taller than the screen.
  • With plugins or hotkeys configured, their help columns stack under the
    shortest columns instead of widening help past a 120-column screen and
    cutting every description (tuikit v0.0.23's help overlay). (#84)

Full Changelog: v0.0.11...v0.0.12

v0.0.11

Choose a tag to compare

@github-actions github-actions released this 05 Oct 00:52
v0.0.11
6802ecc

Fixed

  • The table's border is k9s's frame.border.focusColor (light sky blue)
    only while the table has the keyboard; with the : or / bar or a
    confirm open it is frame.border.fgColor (dodger blue), as k9s draws it.
    It was the focus color all the time.

Full Changelog: v0.0.10...v0.0.11

v0.0.10

Choose a tag to compare

@github-actions github-actions released this 05 Oct 00:11
v0.0.10
fda93bd

Added

  • Per-docker-context settings: a contexts: block in config.yaml gives a
    context its own skin, readOnly and defaultView, applied at startup
    and on every context switch, and a switch with no landing of its own opens
    the view last open on that context (kept in <state>/contexts.json).
    --readonly still forces read-only everywhere. (#55)
  • Expression columns in views.yaml, k9s's TITLE:<path>|<attributes>:
    a column of a label (SVC:.Labels.com\.docker\.compose\.service) or a
    field (.Command, .Created, .Mountpoint, .Scope, …) of the row,
    read from the list the view already has, in the containers, images,
    volumes and networks views. They sort, survive wide mode and reloads,
    and take the attributes R, L, W (containers' wide mode), T (an
    age) and N (sort as numbers); any other attribute, an unknown field or
    a title that clashes is refused at load. (#61)
  • s in the projects view scales a compose service, as k9s scales a
    deployment: a form picks the service and its container count (prefilled
    with the current one), then docker compose up -d --scale svc=N --no-recreate svc runs against the project's files. Fewer containers
    confirms; files not on this machine refuse it; --readonly refuses it.
    s on an :xray project or service node opens the same form. (#62)

Full Changelog: v0.0.9...v0.0.10

v0.0.9

Choose a tag to compare

@github-actions github-actions released this 04 Oct 21:32
v0.0.9
8c66229

Added

  • docs/commands.md: every : command, its spellings, what -c takes and
    each view's keys, kept complete by a test.
  • -c and defaultView take any : command or alias, not only a table
    view (-c xray, -c pg), and @context goes with any command that opens
    a view (:xray @prod). (#57)
  • Hotkeys take k9s's override, asked before the view's own keys; a k9s
    hotkeys.yaml using it failed to load. (#58)
  • :xray acts on the container under the cursor with the containers view's
    keys: s shell, A attach, u start, x stop, R restart, K kill
    and ctrl-d remove (both confirm), p pause / unpause, c / i copy its
    name and ID; v scans an image node's image. --readonly refuses the
    mutating ones, and the tree keeps its place as it refreshes after. (#56)
  • dockmaster info prints where dockmaster reads its config and skins and
    writes its dumps, saved logs, log file and history, and the docker
    context and endpoint it would use and how it chose them — without dialing
    the daemon. (#60)
  • A log file, <state>/dockmaster.log (--log-file moves it,
    --log-level sets debug / info / warn / error, default warn): every error
    that is flashed, plugin and hotkey runs, and context switches. Never env
    values, a plugin's arguments or output, or what was typed into its inputs
    form — only the inputs' names. Rotated once to .1 at 5 MB. (#60)

Fixed

  • P in the containers view prunes the stopped containers, as help and the
    README said it did; it did nothing.
  • :pull keeps the reference's case: :pull app:RC1 pulled app:rc1. (#52)
  • ? lists every : command, shift-f, and, over the projects view, the
    project keys; a test now fails when a command is added without one. (#53)
  • The README's key table renders whole again, and -c names all eleven
    views it opens, in its usage, its error and the README. (#54)

Full Changelog: v0.0.8...v0.0.9

v0.0.8

Choose a tag to compare

@github-actions github-actions released this 04 Oct 17:31
v0.0.8
c8af856

Added

  • Plugins take k9s's inputs and pipes. Inputs open a form before the
    plugin runs (string, number, bool and dropdown fields, required ones
    enforced), and each value reaches the command as $INPUT_<NAME> in its
    args and environment; a plugin with inputs confirms by default. Pipes run
    the command's output through further commands, as a pipeline dockmaster
    builds itself, so no shell parses a value. A pipe of one word, background
    with pipes, and inputs that k9s would accept but run differently are
    refused when plugins.yaml loads. (#18)
  • :<view> @context, k9s's: switch to a docker context and open a view in
    one command, with an optional filter — :containers @prod /web. (#18)

Full Changelog: v0.0.7...v0.0.8