Add image tag command - #65
Conversation
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.
There are 2 total unresolved issues (including 1 from previous review).
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 61d1aca. Configure here.
136deca to
be0c5be
Compare
|
note on the raw |
75a9121 to
bc8de0d
Compare
sjmiller609
left a comment
There was a problem hiding this comment.
bug
pkg/cmd/pushcmd.go:88-101 — when the same tag exists in Docker and Hypeman, the CLI can upload the Docker image but immediately reuse Hypeman’s old ready record. Smoke testing confirmed that the queued push used the old Hypeman digest instead of the newer Docker image.
reproduction: tag image A in Hypeman, assign the same tag to different image B in Docker, then run hypeman push --detach TAG. Inspect the push: its digest matches image A rather than image B.
inconsistent behavior
pkg/cmd/tag.go:30-34 — top-level hypeman tag accepts a tagless target and adds :latest, while hypeman image tag rejects the same input. Both commands should share one validation policy and implementation.
|
switched it to require explicit tags across the board |
sjmiller609
left a comment
There was a problem hiding this comment.
digest-staged push hangs
I reproduced this against the updated code:
hypeman tag image-a:latest registry.example.com/app:v1
docker tag image-b:latest registry.example.com/app:v1
hypeman push registry.example.com/app:v1Expected:
upload image B → wait until ready → retag → push image B
Actual:
Staging local image registry.example.com/app:v1 in Hypeman...
Then the command hangs.
The upload succeeds, and Hypeman lists the temporary digest-named image as ready. However, Images.Get(stagedName) returns 404 Not Found. waitForImageRecord treats that as temporary and retries indefinitely, so the command never retags or pushes image B. My smoke test timed out after 120 seconds.
|
steven — re-requesting review for The edge cases that were failing and are now fixed:
I reproduced the same-tag update, cached-image fallback, tagless-target validation, and staging cleanup; all passed. |

summary
Adds
hypeman tag SOURCE TARGETfor the local image-tag API inkernel/hypeman#453.hypeman-goImages.Tagmethod for the tag request.hypeman-gotov0.28.0.hypeman push TARGETuse a matching local Docker image when present, then fall back to a ready Hypeman image or Docker staging.hypeman push SOURCE TARGETfor pushing a cached image to a different remote reference.new UX
The tag operation does not pull or reconvert image content. It creates a local alias through the server-side API.
--format,--transform, and--debugcontinue to work with the command.When
push TARGETstages a local Docker image, the CLI waits for the server-side image record and readiness. It does not compare the Docker manifest digest with the Hypeman image digest because Hypeman conversion changes the manifest digest.validation
go test ./...Depends on the image tag API in
kernel/hypeman#453.