depot/third_party/tvl/tvix/docs/component-flow.puml

75 lines
2.3 KiB
Text
Raw Normal View History

@startuml
title Tvix build flow
actor User
participant CLI
participant "Coordinator" as Coord
participant "Evaluator" as Eval
database Store
participant "Builder" as Build
note over CLI,Eval
Typically runs locally on the invoking machine
end note
/ note over Store, Build
Can be either local or remote
end note
User-->CLI: User initiates build of `hello` (analogous to `nix-build -f '<nixpkgs>' -A hello`)
CLI-->Coord: CLI invokes coordinator
Coord-->Eval: Sends message to start evaluation of `<nixpkgs>` (path lookup) with attribute `hello`
note right: The paths to the evaluator are local file system paths
Coord<--Eval: Yields derivations to be built
note right
Immediately starts streaming derivations as they are instantiated across
the dependency graph so they can be built while the evaluation is still running.
There are two types of build requests: One for regular "fire and forget" builds
and another for IFD (import from derivation).
These are distinct because IFD needs to be fed back into the evaluator for
further processing while a regular build does not.
end note
loop while has more derivations
Coord-->Store: Check if desired paths are in store
alt Store has path
Coord<--Store: Success response
else Store does not have path
Coord-->Build: Request derivation to be built
note left
The build request optionally includes a desired store.
If a builder is aware of how to push to the store it will do so
directly when the build is finished.
If the store is not known by the builder results will be streamed
back to the coordinator for store addition.
end note
alt Build failure
Coord<--Build: Fail response
note left: It's up to the coordinator whether to exit on build failure
else Build success
alt Known store
Build-->Store: Push outputs to store
Build<--Coord: Send success & pushed response
else Unknown store
Build<--Coord: Send success & not pushed response
Coord<--Build: Stream build outputs
Coord-->Store: Push outputs to store
end
end
end
end
CLI<--Coord: Respond success/fail
User<--CLI: Exit success/fail
@enduml