Builds & Artifacts

Build execution, ArtifactSets, content-addressed storage, and caching

Builds & Artifacts

Builds are attempts, artifacts are results

A build records an execution attempt: its logs, status, and runner. A build can fail; that doesn't produce anything.

A successful build (or an external image pull) produces an ArtifactSet — the immutable output that deployments reference. ArtifactSets are stored content-addressed:

cas/sha256/{prefix}/{hash}

The same bytes always have the same key. If two builds produce identical output, Parslinks stores it once and both ArtifactSets reference the same objects. Immutable means immutable: existing keys are never overwritten with different bytes.

Per-service build configuration

Build settings live on the service, not the project or environment: source type, branch/deploy branch, build commands, output handling, and image references. Every instance of that service shares this configuration; what differs per environment is variables and the deployed revision — not how the artifact is produced.

Apply & Deploy

Deploying a git/image service runs a single orchestrated Apply-and-Deploy flow:

  1. Resolve current build config for the service
  2. Execute the build (or resolve the external image)
  3. Register the resulting ArtifactSet
  4. Create the deployment in the target environment
  5. Hand off to runtime for rollout (see Deployments)

Caching

Build caches are stored per service alongside artifacts. Cache entries can be evicted independently; they never affect already-registered ArtifactSets.

Storage guarantees

  • Artifact bytes live in S3-compatible object storage under parslinks-artifacts, keyed by SHA-256. Object storage is the authoritative byte store; any local disk copy is a disposable cache.
  • Database rows store only object keys and hashes — never presigned URLs.
  • Deletion is refcount-based: cas/* objects are deleted only when no ArtifactSet references them anymore.

Retention

Artifact retention is computed from retained deployments: Alias → Deployment → ArtifactSet. When you delete (or purge) deployments, their ArtifactSets lose their retainers. After the retention window passes, garbage collection reclaims the unreferenced objects. Until then, even deleted deployments keep their artifacts restorable.