Release Progression with Lifecycles

A lifecycle is a small state machine over environments. Dev -> Staging -> Production is just one possible shape.

A lifecycle is an ordered set of phases. Each phase contains one or more environments. A release in a project pinned to a lifecycle can only be deployed to a phase once all previous phases have succeeded - unless a phase is marked optional, or a channel overrides the path.

What a lifecycle looks like

The default lifecycle has three phases: Dev, Staging, Production. Each phase has a single environment. A release enters Dev, then becomes eligible for Staging once Dev succeeds, then becomes eligible for Production once Staging succeeds.

Beyond the default

Lifecycles can encode more than the canonical three-stage path.

// Parallel phase

Multiple environments in one phase

A Pre-prod phase containing both Staging and UAT. The release must succeed in both before Production becomes eligible.

// Optional phase

Skippable when needed

A Smoke phase that's optional. Standard releases use it. Hotfix releases skip it - recorded as skipped, not as a gap in history.

Channels

A channel attaches a lifecycle to a project. The default channel uses the standard lifecycle. A hotfix channel can attach a shorter lifecycle that skips Dev. Releases pick which channel they're created under - same project, two paths.