The reference build-time plugin-execution builder (builder:examplebuilder)
— a plugin that runs while charly generates an image and splices a multi-stage
block into the Containerfile.
At image build, charly's build-path connect seam host-builds and connects this
plugin out-of-process, then invokes its OpResolve. The returned
BuilderResolveReply — a multi-stage FROM … AS … stage plus a COPY --from
artifact — is spliced into the generated Containerfile, so a built artifact
proves the plugin executed at build. A candy selects it with
external_builder: examplebuilder.
| Capability | Surface |
|---|---|
builder:examplebuilder |
the OpResolve build-time hook — returns the Containerfile stage + copy artifacts |
The plugin is a standalone Go module (importable provider package plus a
cmd/serve shim) served over go-plugin gRPC via the charly plugin SDK. It is the
builder-leg counterpart of the verb/step example plugins.
Compose the plugin candy in a box or check bed's candy: list:
- '@github.com/opencharly/plugin-example-builder/candy/plugin-example-builder:<tag>'Then select it as a candy's external builder:
# in the consuming candy:
external_builder: examplebuildercandy/plugin-example-builder/— the plugin module:plugin.go(the providerNewProvider()/NewMeta()+ theOpResolveBuilderResolveReply),schema/examplebuilder.cue(the self-contained#ExamplebuilderInput),cmd/serve/main.go.
charly.yml— the root project manifest (discover: candy)..github/workflows/tag-on-merge.yml— CalVer tag +CHANGELOG/on merge.
- Owning skill:
/charly-internals:plugin— the plugin/provider model and the build-time plugin-execution mechanism. This candy carries noskill:entity of its own; the gap is tracked in opencharly/opencharly#291. /charly-build:build— the image build + Containerfile generation surface.opencharly/charly— the charly CLI.