Сhangelog: slots and tags update
Motivation
When we initially built the original deployment flow versions felt appropriate. A simple number you could increment on each deployment if necessary. This worked well in simple scenarios, but over time this gradually became more difficult to manage for those of you with any kind of deployment complexity. At the same time it became clear that our solution to endpoint management, allowing you to mark a squid as production and create a permalink, was equally powerful in basic scenarios but limited as requirements grew. It became clear that was lacking here was the ability for larger teams to collaborate effectively. Our goal with these changes is to provide the power and flexibility that more complex deployment flows need.Concepts
| Concepts | Before | After |
|---|---|---|
| Version | Existed | Removed (replaced with slots) |
| Slot | Did not exist | Introduced (unique identifier for configs) |
| Production alias | Existed | Deprecated (use tags) |
| Tag | Did not exist | Introduced (user-defined labels for deployments) |
| Reference | Existed | Exists, but the format has changed |
Format changes
| Value | Before | After |
|---|---|---|
| Version | Must be a number | Deprecated |
| Slot | Did not exist | A string of up to six lower case alphanumeric characters, dashes allowed |
| Tag | Did not exist | A string of lowercase alphanumeric characters, dashes allowed |
| Reference | <name>@v<version> | [<org>/]<name>(@<slot>|:<tag>) |
| Canonical URL | https://<org>.squids.live/<name>/v/v<version>/graphql | https://<org>.squids.live/<name>@<slot>/api/graphql |
| Production URL | https://<org>.squids.live/<name>/graphql | Deprecated. See also backwards compatibility. |
| Tag URL | Did not exist | https://<org>.squids.live/<name>:<tag>/api/graphql |
Manifest changes
| Field | Before | After |
|---|---|---|
| name | Present | Present |
| version | Present | Deprecated (mapped to slot) |
| slot | Absent | New field (unique identifier) |
| tag | Absent | New field (user-defined label) |
CLI changes
Changes to CLI behavior are rather extensive:- New flags
--name/-n,--tag/-t,--slot/-s,--reference/-rhave been added to nearly all commands.- For
sqd deploythey now can override their corresponding manifest fields. Heterogenous overrides also work:-tin CLI overridesslot:in manifest, and-soverridestag:. - For other commands (
sqd logs,sqd restartetc) they allow for flexible specification of deployment.
- For
- New commands
sqd tags addandsqd tags removehave been added. - The
sqd prodcommand has been removed.
| Action | Before | After |
|---|---|---|
| Deploying prod version | sqd deploy . && sqd prod my-squid@v1 | sqd deploy . --add-tag prod |
| Promoting to prod | sqd prod my-squid@v1 | sqd tags add prod -n my-squid -s v1 |
| Marking a deployment as a “dev” version | Was not possible | sqd tags add dev -n my-squid -s v1 |
| Updating the “dev” version | Was not possible | sqd deploy . -t dev |
| Fetching logs | sqd logs my-squid@v1 | sqd logs -n my-squid -s v1 |
Cheatsheet
Add tagtesttag to the deployment of my-squid running in slot v1
testtag to the deployment
- The squid will be redeployed if one of the
tag:,slot:orversion:fields are defined in the manifest and the Cloud already has a deployment that matches the reference. - If the fields are undefined or there’s no matching squid in the Cloud, a new deployment will be created in a new slot.
- Tag
testtagwill be assigned to the slot of the (possibly new) deployment.
dev
- If there’s a deployment tagged
dev, it will be updated. - Otherwise, the command will exit with an error.
my-squid tagged prod
Backwards compatibility
Here are the measures we’ve taken to make the migration smoother:- Existing deployments lose their versions; instead, they are assigned to the corresponding
v<version>slots. New deployments that specifyversion:in the manifest will be assigned to thev<version>slot, too. Hence, for the time being the linesandin the manifest file are equivalent. - Tag
prodhas a special meaning for the duration of the transition period: deployments that have it are made available via old-style production URLs. - Tag
prodis assigned to all existing deployments with production aliases. - You can, for the time being, add an old-style production URL to any deployment - just assign the
prodtag to it.

