# Builds

One build per commit. Its release rolls the same images out to each environment, through fixed stages in each.

A build is one commit's images plus the rollouts they ran in each environment. Parity makes one build for every commit pushed to the project's branch and starts its [release](/concepts/promote), which rolls it out to your [environments](/manifest/environments) step by step.

## From push to rollout [#from-push-to-rollout]

1. **Push.** The GitHub App sees a push to the project's branch.
2. **Image.** BuildKit builds each service's image once for the commit, tagged by its SHA. Every environment runs the same image; none rebuilds.
3. **Rollout.** The release's first promote rolls the build out through the stages below. Services whose trigger paths didn't change keep their current build.
4. **Release.** The rest of the [release steps](/concepts/promote) move the same images on: blocks for approval, soaks, jobs against an environment, and promotes.

Builds run without secrets and without network access beyond package registries, base-image registries and the hosts a service lists in `build.externals`. A build that reaches another host fails, naming the host.

## Rollout stages [#rollout-stages]

Every rollout, in every environment, runs the same fixed stages. Your own work runs inside them as [steps](/concepts/steps): jobs with `on: deploy`, ordered by `depends_on`, and block steps that wait for a person.

| Stage | What runs | If it fails |
| --- | --- | --- |
| **Image** | BuildKit, once per commit | Nothing rolls out. |
| **Deploy steps** | `on: deploy` jobs on the new image, in parallel unless `depends_on` orders them: migrations, asset uploads, block steps | The current revision keeps serving. A rejected block fails the rollout the same way. |
| **Start** | New pods next to the current ones, health checks within 5 minutes | The new revision is removed. The current one never stopped. |
| **Switch traffic** | Parity moves traffic to the new revision | The current revision keeps serving. |

After a switch the previous revision stays warm for 10 minutes, so [Rollback](/concepts/promote#rollback) is a traffic change. A job can run on its own image, with build tools the app doesn't ship, through a [runner](/manifest/jobs#runners).

## Where to see it [#where-to-see-it]

The console's build page shows each build per service and environment: its commit, stages, the graph of its steps, logs and timing. A waiting block step is shown there with its prompt.

```text title="Build 7f3a9c2 · web · staging"
image          41s   web:7f3a9c2
deploy steps   12s   init-db → migrate, assets
start          38s   3/3 healthy
switch          1s
```

In a sandbox, the same steps run on `parity up`; `parity status` lists each one with its label, state and what it runs after.
