Skip to content

fix(deploy): prefix vendor image tag options with the GHCR repo - #144

Merged
brettchien merged 1 commit into
mainfrom
fix/vendor-image-tag-full-ref
Sep 6, 2026
Merged

fix(deploy): prefix vendor image tag options with the GHCR repo#144
brettchien merged 1 commit into
mainfrom
fix/vendor-image-tag-full-ref

Conversation

@brettchien

Copy link
Copy Markdown
Contributor

Summary

  • resolve_vendor_image_tags (vendor_images.rs) resolves and returns bare GHCR tags (e.g. 0.9.0-claude) — it only confirms a tag exists, it has no concept of registry/repo.
  • The New Fleet wizard's Stable/Beta <select> (console/src/deploy.ts) used that bare tag directly as the option value, which flows unchanged into deploy_provision_agentprovision_agent_k8s/AWS path → build_default_k8s_manifest's spec.image (or the ECS task def) — nothing along that chain ever prefixes a registry.
  • Result: picking Stable/Beta (anything but "Custom…") deployed a pod/task with image: 0.9.0-claude, which the container runtime resolves against Docker Hub's library/<tag> instead of GHCR → ImagePullBackOff / "repository does not exist or may require 'docker login': denied". Reproduced live on a k8s fleet (Hephaestus, orbstack context) stuck in Pending/ImagePullBackOff.
  • Fix: build the full ghcr.io/openabdev/openab:<tag> ref once in deploy.ts when populating the Stable/Beta options; the dropdown label still shows the short tag for readability. The Custom field is unaffected — it already expects a full ref from the user.

Test plan

  • npm run typecheck (console) — passes
  • npm test (console, vitest) — 103/103 passing
  • Manual: redeploy a k8s fleet via the wizard's Stable/Beta option and confirm the pod pulls successfully instead of ImagePullBackOff

resolve_vendor_image_tags only resolves bare tags (e.g. "0.9.0-claude") —
it just confirms a tag exists on GHCR, it has no opinion on registry/repo.
The Stable/Beta <select> in deploy.ts used that bare tag directly as its
option value, and deploy_provision_agent/build_default_k8s_manifest write
whatever `image` the panel sends straight into the ECS task def / pod spec
with no normalization. So picking Stable/Beta (anything but Custom) sent a
bare tag as the image, which kubelet/ECS resolve against Docker Hub's
`library/<tag>` instead of GHCR — ImagePullBackOff, "repository does not
exist or may require 'docker login'".

Build the full `ghcr.io/openabdev/openab:<tag>` ref once in deploy.ts
before it ever leaves the panel; labels keep showing the short tag.

Co-authored-by: Orca (ecs-claude) <orca@openab.dev>
@brettchien
brettchien merged commit bf5cd8f into main Sep 6, 2026
2 checks passed
@brettchien
brettchien deleted the fix/vendor-image-tag-full-ref branch September 6, 2026 01:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant