Deployments¶
A deployment is a first-class entity that says: "these devices should receive this artifact, at this percentage, with this rollout seed."
Anatomy¶
| Field | Notes |
|---|---|
artifact |
The firmware to deliver. Required. |
groups |
Zero or more device groups. Unioned. Empty means no constraint. |
channels |
Zero or more release channels. Unioned. Empty means no constraint. |
percentage |
Integer 0–100. Cohort cutoff. |
rollout_seed |
Auto-generated. Don't change mid-rollout. |
state |
draft, active, paused, completed, cancelled. |
created_at / created_by |
For audit. |
A device is eligible for a deployment when it matches the selected groups and channels, and its hardware is compatible with the artifact:
- Groups: membership in at least one selected group is enough.
- Channels: being on any selected channel is enough.
- Both lists filled: the device must match a named group and a named channel.
- Either list empty: skip that filter. Selecting only channels includes devices on those channels regardless of their groups, and selecting only groups includes their members regardless of channel.
- Both lists empty: the audience includes every device in the project. Only active devices can receive update offers.
For example, selecting groups Pilot sites and Internal, plus channels
stable and beta, includes a device in either group that is on either
channel. A device in Pilot sites on dev is excluded, as is a device on
stable that belongs to neither selected group.
In set terminology, selections within each list are a union (OR), and the two lists intersect (AND).
A device is offered the artifact when, additionally, its cohort
bucket falls below the deployment's percentage.
States¶
stateDiagram-v2
[*] --> draft: create
draft --> active: start
active --> paused: pause
paused --> active: resume
active --> completed: complete
paused --> completed: complete
active --> cancelled: cancel
paused --> cancelled: cancel
draft --> cancelled: cancel
completed --> [*]
cancelled --> [*]
A paused deployment is invisible to devices; checks return as if it
didn't exist. Resuming restores normal behavior; cohort decisions are
preserved because the seed and percentage are unchanged.
Multiple deployments at once¶
You can have many active deployments in a project. The engine simply picks the highest build number among artifacts the device is both eligible for and inside the cohort cutoff for. This naturally handles:
- A 100% deployment of build 41 (the floor) plus a 5% canary of build 42. Devices outside the canary cohort get 41; inside it they get 42.
- A
betachannel deployment of 42 alongside astablechannel deployment of 41. Devices on each channel get the right one.
See Cohorts and rollout math for details.