Add completion spec: podman - #407
Conversation
|
This PR was generated with Warp. Comment |
There was a problem hiding this comment.
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, andpodman_machines— have dropdown screenshots showing only the flags-only empty state, not real generated candidates.review-pr-localrequires 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 bareunshare --user --pid --mount-proc;podman machine initfails atepoll_ctl(...) = -1 EPERMduring 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;
quadletwas confirmed not to be a real subcommand;composedelegates vialoadSpecto the existingdocker-composespec; 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



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
run,create,start,stop,restart,kill,rm,ps,exec,logs,attach,inspect,cp,top,stats,pause/unpause, plusinit,wait,rename,port,update,commit,diff,export,mount/unmount.build,pull,push,images,rmi,tag,save/load,history,search, and theimage/manifestgroups.pod(create/start/stop/ps/kill/rm/...),machine(init/start/stop/ssh/list (aliasedls)/...),generate,kube,auto-update,farm, andcompose(delegated to the existingdocker-composespec vialoadSpec, matching howpodman composeitself delegates to an externaldocker-compose/podman-composeprovider).network,volume,secret,system(info/df/prune/connection),login/logout.--remote,-c/--connection,--url,--identity,--root/--runroot/--runtime, etc.podman --helpis 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--helpwith no match); Quadlet files are generated via systemd generators, not a podman subcommand.swarm,service,node,stack) — podman has no swarm mode.run/create/build— a curated, high-value subset is included; every flag present was verified against real--helpoutput (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 correspondingpodman ... ls/pscommand. Field names and casing quirks (e.g.podman imagesmixesrepository/taglower-case with PascalCaseId/Size;podman network lsis 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.rsexercises every generator's post-processing function against real captured podman 5.4.2 output.test-local-warpend-to-end verification (performed): clonedwarpdotdev/warp, patchedCargo.tomlto pointwarp-command-signaturesat 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+ ImageMagickimport), 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, andpodman_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 thevfsstorage driver (works around the sandbox's missing/dev/fuse) and disabling the defaultkeyring/ping_group_rangecontainer settings that also failed here, container/pod creation now works fully (seepodman_podsabove — a real pod exists). But actually starting a container consistently fails atcrun: pivot_root: Operation not permitted(and, via a different code path,mount proc to proc: Operation not permitted) — confirmed with a bareunshare --user --pid --mount-procoutside 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 initgot substantially further after installingqemu-system-x86_64and the previously-missinggvproxypackage (both now present,/dev/kvmis accessible), but now fails atepoll_ctl(...) = -1 EPERM(traced viastrace) while podman shells out totimedatectlduring 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_containerspodman rmi+ Tab ->podman_imagespodman volume rm+ Tab ->podman_volumespodman network rm+ Tab ->podman_networkspodman secret rm+ Tab ->podman_secretspodman pod rm+ Tab ->podman_pods(real podpodman-vfs-pod, state "Created")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)podman unpause+ Tab ->paused_podman_containers(no paused containers possible in this sandbox)podman machine start+ Tab ->podman_machines(no machine could be initialized in this sandbox)