Skip to content

feat(build): render environment image bindings and update Go builder - #217

Merged
antoinetoussaint-byte merged 3 commits into
mainfrom
feat/environment-image-bindings
Oct 29, 2026
Merged

antoinetoussaint-byte merged 3 commits into
mainfrom
feat/environment-image-bindings

Conversation

@antoinetoussaint-byte

@antoinetoussaint-byte antoinetoussaint-byte commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

Go service bases are hardcoded in the emitted Dockerfile, so an environment cannot select approved replacement content. Implement Core's optional base-image-bindings/v1 contract: advertise frontend, builder and runtime roles from loaded settings; validate immutable bindings; render the selected references through the existing template.

Static and native services expose the same runtime image input, so one type-wide default covers both. Static services use that input for assembly and keep scratch final stages. CGO or runtime packages retain the Alpine/musl final recipe. Unsupported roles/variants refuse. The default Go builder pin moves from 895e5fea to current upstream 8a504649; runtime Alpine remains pinned 3.23.7/ff7f0c. No owner release, service pin, installed agent or deployed image changes.

Fix at the owner: reuses live BuildCapabilities, Core binding validation, the template, Build RPC and maintained packaging test. Core source dependency is normally pinned from codefly-dev/core#874 using codefly agent deps --pin, including owned factory/base locks. CLI support is codefly-dev/cli#1232. Related existing plan: obin-ai/infra-base#1485.

Docs: templates/agent/README.md.tmpl explains roles, precedence, native compatibility and qualification limits; docs/service-protocol.md records the gateway dependency compatibility change.

Validation: focused template/recipe/binding race tests and real Build gRPC test pass; vet and factory-lock check pass. Maintained packaging CI adds selected-static and selected-native cases to the existing four-case native amd64/arm64 matrix; these execute digest-only bindings through the production Build RPC, retain archives and Syft inventory, and preserve strict runtime/temp/home/native checks and exact owned cleanup. Both native packaging jobs pass at final 520c8bc in run 40905091378 (six cases each); artifact IDs 12912075288 (arm64) and 12910677836 (amd64) retain archives/inventories. Real CLI consumer builds also pass with type and service overrides, runtime execution, cache invalidation/reuse and incompatible-variant refusal. All five final agent checks pass, including the full general suite.

The Core dependency update selects grpc-gateway 2.33, whose secure default no longer forwards arbitrary Grpc-Metadata-* headers. The proxy regression initially failed against that default; its fixture now explicitly maps only X-Caller through the existing ServeMuxOptions seam. The same generated-service adapter suite passes without restoring legacy header matching. Native candidate scan retains two unpatched Docker HIGH findings; no release or universal CVE clearance claim.

@antoinetoussaint-byte
antoinetoussaint-byte marked this pull request as ready for review October 29, 2026 15:58
@antoinetoussaint-byte
antoinetoussaint-byte merged commit 378ec7d into main Oct 29, 2026
5 checks passed
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