feat(ci): unified image repo with shared builder and tag-based variants#1175
Merged
Conversation
Consolidate all Docker images into ghcr.io/openabdev/openab with tag-based variants (<version>-<agent>). - Add Dockerfile.unified with shared builder stage (compile once, unified mode) and per-agent targets as thin runtime layers - Add build-images.yml workflow: - Job 1: build-core (shared builder, 1x per arch) - Job 2: build-agents (14x parallel, thin layers) - Job 3: merge-manifests (multi-arch per variant) - Tag strategy: <version>-<agent>, <version> (default=kiro), latest Agents: kiro, claude, codex, copilot, cursor, gemini, grok, hermes, mimocode, opencode, antigravity, pi, native, agentcore Estimated build time: ~12 min total (vs ~140 min today) Closes #1174
added 4 commits
June 22, 2026 18:26
- Dockerfile.unified: add BUILDER_IMAGE ARG for registry-based builder reuse - Dockerfile.unified: move openab-agent/agy-acp COPY after main build (cache-bust fix) - Dockerfile.unified: fix .gemini → .agy dir in antigravity target - build-images.yml: push builder to GHCR, pass via BUILDER_IMAGE build-arg - build-images.yml: remove artifact upload/download flow (no longer needed) - build-images.yml: add branch guard — only push :latest from main - build-images.yml: add concurrency group to prevent tag race conditions - build-images.yml: add input validation (tag format + variant allowlist) - build-images.yml: remove agent cache-to (thin layers don't need caching) - build-images.yml: add digest count/format validation in merge-manifests
- Fix script injection: pass inputs via env vars instead of direct interpolation - Use arch names (amd64/arm64) in builder tags instead of runner names - Add cache-from type=registry for builder reuse (ensures no recompilation even on GHA cache miss) - Use env vars for branch checks in merge-manifests (injection hardening)
Covers all 14 unified targets with: - docker build --target <variant> validation - openab binary existence check - agent CLI existence check Triggered on PRs that touch Dockerfile.unified, src/, crates/, or the openab-agent/agy-acp directories.
Collaborator
Author
|
LGTM ✅ — Unified image build is architecturally sound, security-hardened, and ready to merge. What This PR DoesConsolidates 14+ separate Docker images ( How It Works
Findings
Follow-up Items (non-blocking)
What's Good (🟢)
|
added 3 commits
June 22, 2026 18:43
Build the shared builder stage once and cache it via GHA cache. Agent target smoke tests pull cached builder layers instead of recompiling the Rust workspace independently.
Cargo walks up to find /build/Cargo.toml workspace root and errors because openab-agent/agy-acp are not workspace members. Adding an empty [workspace] table makes each sub-crate its own workspace root, matching how Dockerfile.native handles this.
thepagent
approved these changes
Jun 22, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Consolidate all Docker images into a single repo (
ghcr.io/openabdev/openab) with tag-based variants.Closes #1174
Changes
Dockerfile.unifiedopenabbinary once in unified mode (superset)openab-agent(for native) andagy-acp(for antigravity) in the builder.github/workflows/build-images.ymlNew workflow replacing the per-variant approach in
snapshot-build.yml:build-core): shared Rust builder, 1× per arch (~8-10 min)build-agents): 14 agent variants in parallel, thin layers (~2 min each)merge-manifests): multi-arch manifest per variant (~1 min)Tag strategy
Agents
kiro, claude, codex, copilot, cursor, gemini, grok, hermes, mimocode, opencode, antigravity, pi, native, agentcore
Performance
~12 min total build time (vs ~140 min today with 14 independent builds)
What's NOT in this PR (follow-ups)
snapshot-build.yml(after validation)Dockerfile.<agent>files (after migration period)_helpers.tplto use<tag>-<agent>format