Phase 2 of supa-charge-akeyless-ci: the intercept/resolve/fall-through
wrapper around plain docker build.
Given a Dockerfile path + build context + build-arg map, this crate:
- computes the [
sui_spec::dockerfile] content-addressedDockerfileGraph; - checks every node's
content_hashagainst a [sui_cache::storage::StorageBackend] (the same traitsui cache serveruns — see [cache]); - on a full cache hit, materializes the already-built image via
docker pullinstead of rebuilding — [WrapperOutcome::CacheHit]; - on any miss (partial or full), shells out to a real
docker buildfor the entire Dockerfile — never a partial cache splice, an explicit non-goal per thesupa-charge-akeyless-ciplan — then back-fills the cache with every node's hash → image reference for next time — [WrapperOutcome::CacheMiss]; - on a failing
docker build, returns [WrapperOutcome::BuildFailed] — never a panic.
I/O is behind two injectable seams: [command::CommandRunner] (the
docker subprocess) and [sui_cache::storage::StorageBackend] (the
cache). Both are mocked in this crate's tests; production wires the
real [command::RealCommandRunner] and a real backend built via
[sui_cache::storage::build_backend].