Pluggable CI execution backends for hm run.
Design
The pluggable boundary is the whole build, not a single step.
[ExecutionBackend::start] accepts a [RunRequest] and returns a
[BackendHandle]. Calling [BackendHandle::into_parts] splits the handle
into:
- An [
EventStream] of [hm_plugin_protocol::events::BuildEvent]s — hand this tohm-renderfor terminal output. - A [
Control] struct withcancel()(Ctrl-C) andwait()(terminal outcome).
Backends
- [
LocalBackend] — runs the build in-process using a DAG scheduler that executes each step inside a lightweight VM via thehm-vmsubsystem (a [hm_vm::VmBackend] + snapshot registry; Docker is one such backend). - [
CloudBackend] — submits the build to the Harmont cloud and watches it over the REST SDK, emitting the sameBuildEventstream.
Auth
This crate never reads credentials from disk. The caller constructs a
HarmontClient and injects it; hm owns credential loading.