Builds
What a deployment produced: the artifacts, and what identifies them. Immutable, and only ever the result of an attempt that got there.
A build is an output
A build carries no status and no failure. How the attempt went belongs to the deployment that ran it — its stages, its toolchain output, and the reason it stopped. A deployment that failed before producing artifacts has no build at all, so the presence of one is itself the statement that it worked.
What a build contains
A code layer always, and an install layer when the source has a non-empty requirements.txt. Both are artifacts, addressed by digest. Alongside them the build records what runs them: the runtime, the entrypoint, and the digest of the source it was made from.
{
"id": "bld_9F3AC41",
"runtime": "python",
"entrypoint": "main.py:handler",
"source_sha256": "9f3a…c41",
"artifacts": [
{"kind": "code_layer"},
{"kind": "install_layer"}
]
}Executions pin to one
An execution names the build it ran against and keeps it. Deploying again produces a new deployment with a new build; nothing an older execution was pinned to ever changes underneath it.