Skip to content

Add completion spec: podman - #407

Draft
warp-factories[bot] wants to merge 2 commits into
mainfrom
factory/command-spec-podman
Draft

Add completion spec: podman#407
warp-factories[bot] wants to merge 2 commits into
mainfrom
factory/command-spec-podman

Conversation

@warp-factories

@warp-factories warp-factories Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Fixes #406.

What this adds

A completion spec for podman (command-signatures/json/podman.json) plus dynamic generators (command-signatures/src/generators/podman.rs) for containers, images, pods, volumes, networks, secrets, and machines.

Covered

  • Container lifecycle: run, create, start, stop, restart, kill, rm, ps, exec, logs, attach, inspect, cp, top, stats, pause/unpause, plus init, wait, rename, port, update, commit, diff, export, mount/unmount.
  • Images: build, pull, push, images, rmi, tag, save/load, history, search, and the image/manifest groups.
  • Podman-specific surface: pod (create/start/stop/ps/kill/rm/...), machine (init/start/stop/ssh/list (aliased ls)/...), generate, kube, auto-update, farm, and compose (delegated to the existing docker-compose spec via loadSpec, matching how podman compose itself delegates to an external docker-compose/podman-compose provider).
  • Resources: network, volume, secret, system (info/df/prune/connection), login/logout.
  • Global persistent flags: --remote, -c/--connection, --url, --identity, --root/--runroot/--runtime, etc.
  • Every real top-level subcommand from podman --help is represented (at minimum with a description), including thin groups (artifact, healthcheck, container, image) whose members mirror top-level commands.

Deliberately omitted

  • podman quadlet — verified this is not a real subcommand (falls through to top-level --help with no match); Quadlet files are generated via systemd generators, not a podman subcommand.
  • Docker's Swarm-only surface (swarm, service, node, stack) — podman has no swarm mode.
  • The long tail of rarely-used flags on run/create/build — a curated, high-value subset is included; every flag present was verified against real --help output (podman 5.4.2), none invented.

Generators

running_podman_containers, all_podman_containers, paused_podman_containers, podman_images, podman_pods, podman_volumes, podman_networks, podman_secrets, podman_machines — each parses the real, field-verified JSON (or pipe-delimited Go-template) output of the corresponding podman ... ls/ps command. Field names and casing quirks (e.g. podman images mixes repository/tag lower-case with PascalCase Id/Size; podman network ls is all snake_case) were confirmed by actually running podman 5.4.2 and inspecting raw output.

Validation

  • npm run format / npm run format:check — pass.
  • cargo fmt -p warp-command-signatures -p warp-completion-metadata --check — pass.
  • cargo clippy -p warp-command-signatures -p warp-completion-metadata --all-targets --all-features -- -D warnings — pass, no warnings.
  • cargo test — 188 passed (176 pre-existing + 12 new), 0 failed. podman_tests.rs exercises every generator's post-processing function against real captured podman 5.4.2 output.
  • test-local-warp end-to-end verification (performed): cloned warpdotdev/warp, patched Cargo.toml to point warp-command-signatures at this branch's local checkout, and built+ran a real local Warp instance (./script/run --features fast_dev). Populated real podman state and drove Tab-completion directly in the running app via X11 automation (xdotool + ImageMagick import), capturing screenshots straight off the shared X display so they don't depend on any gated artifact viewer. 6 of the 9 generators show real, populated dropdowns: all_podman_containers, podman_images, podman_volumes, podman_networks, podman_secrets, and podman_pods. Screenshots are embedded below (hosted as public GitHub release assets on this repo, viewable by anyone without a Warp account — confirmed via an anonymous/logged-out browser check).
  • running_podman_containers / paused_podman_containers / podman_machines — still not populated, with root-caused syscall evidence, not just an environment shrug: after switching podman to the vfs storage driver (works around the sandbox's missing /dev/fuse) and disabling the default keyring/ping_group_range container settings that also failed here, container/pod creation now works fully (see podman_pods above — a real pod exists). But actually starting a container consistently fails at crun: pivot_root: Operation not permitted (and, via a different code path, mount proc to proc: Operation not permitted) — confirmed with a bare unshare --user --pid --mount-proc outside of podman entirely, which fails identically. This is a syscall-level restriction on this sandbox (most likely a seccomp profile or gVisor-style intercepted kernel, not a podman/storage config issue), and it blocks any OCI container from ever reaching a running or paused state here, regardless of storage driver. podman machine init got substantially further after installing qemu-system-x86_64 and the previously-missing gvproxy package (both now present, /dev/kvm is accessible), but now fails at epoll_ctl(...) = -1 EPERM (traced via strace) while podman shells out to timedatectl during ignition/VM setup — the same class of syscall restriction. I did not find a userspace workaround for either; both are reported here with exact commands/errors rather than retried further.

Screenshots

Populated (6 of 9):

podman start + Tab -> all_podman_containers
all_podman_containers

podman rmi + Tab -> podman_images
podman_images

podman volume rm + Tab -> podman_volumes
podman_volumes

podman network rm + Tab -> podman_networks
podman_networks

podman secret rm + Tab -> podman_secrets
podman_secrets

podman pod rm + Tab -> podman_pods (real pod podman-vfs-pod, state "Created")
podman_pods

Still-unpopulated generators (3 of 9) — flags-only fallback, no fake/stale entries

podman kill + Tab -> running_podman_containers (no running containers possible in this sandbox)
running_podman_containers_empty

podman unpause + Tab -> paused_podman_containers (no paused containers possible in this sandbox)
paused_podman_containers_empty

podman machine start + Tab -> podman_machines (no machine could be initialized in this sandbox)
podman_machines_empty

@warp-factories

warp-factories Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor Author

This PR was generated with Warp.

Comment @warp-factory on this PR to send it follow-up work.

View run View conversation View GitHub Issue

@warp-factories warp-factories Bot left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overview

Adds a podman completion spec (all 61 real top-level subcommands) plus nine dynamic generators with unit tests against captured podman 5.4.2 output. The spec and generator correctness review is clean across three passes; the change is blocked only on the repository's visual-proof rule, and closing that gap now needs a maintainer.

Concerns

  • Three of the nine generators — running_podman_containers, paused_podman_containers, and podman_machines — have dropdown screenshots showing only the flags-only empty state, not real generated candidates. review-pr-local requires an embedded screenshot with real generator-produced entries for every new generator, so this blocks acceptance. The correction is to re-run the verification on a host that permits OCI container startup and Podman machine init, and add populated dropdown images for those three contexts.
  • That gap is an environment ceiling, not a defect in the change, and it is not one this factory can close. Container startup fails at crun: pivot_root: Operation not permitted, independently reproduced below podman with a bare unshare --user --pid --mount-proc; podman machine init fails at epoll_ctl(...) = -1 EPERM during ignition even with QEMU, gvproxy, and an accessible /dev/kvm. Both available runner classes are the same container sandbox, so a maintainer needs to decide whether to verify these three locally or accept the change with the limitation documented.
  • Everything else verified. Six generators have populated dropdown screenshots taken through a real Warp build, confirmed to render for an anonymous reader; no invented flags surfaced in sampling against Podman 5.4 documentation; Docker's Swarm-only surface is correctly omitted; quadlet was confirmed not to be a real subcommand; compose delegates via loadSpec to the existing docker-compose spec; and no security finding was identified, as the generators run fixed commands with no user input interpolation.

Verdict

Checks: build pass, tests pass (188), CI green (8/8), visual proof partial — 6 of 9 generators

Found: 0 critical, 1 important, 0 suggestions, 0 nits

Recommendation: changes requested, pending a maintainer's call on the three generators that cannot be exercised in this environment. Note that the screenshots are hosted on a temporary pre-release tagged podman-407-screenshots, following the existing screenshots-pr-* convention in this repository; it is safe to delete once this PR is resolved.

Responding as Warp for OSS: Open session · View run

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Suggest some missing completions

0 participants