This workspace's {devLabelNoun(pairedDev.label)} is {pairedDev.name}
({pairedDev.id}). Edits to this workspace are redirected there.
{@render protectionsPanel({
title: 'Protections in force on this workspace',
rules: ownRules,
onOpen: openRulesets,
editLabel: 'Edit',
manageLabel: 'Manage in Rulesets'
})}
{#if pairedDev.isMember || $superadmin}
{/if}
{:else if availableAttachLabels.length === 0}
Every environment label is already taken by a dev workspace in this chain, and two carrying
the same label would deploy to the same branch. Promote through the existing chain instead.
{:else}
Pair this workspace with a dev workspace: the same code with a different environment
(resource and variable values). Edits are made in the dev workspace and promoted here.
Attaching an existing workspace copies nothing: it keeps its own resources and variables.
Creating a new dev workspace copies this workspace's resources and variables, credentials
included; point them at staging before developers use it.
{#if $devWorkspaceTagSuffix}
Either way, its jobs then run on dev workers (tags suffixed with
{$devWorkspaceTagSuffix}).
{/if}
Attach an existing workspace as dev
{#if candidateClash}
{candidateClash} comes with the selected workspace and already deploys to a branch this
chain would then use twice. Pick a different label, or another workspace.
{/if}
Protect this workspace on attach
Nothing is enforced until you attach: these add protection rules to this workspace so
changes are made in the dev workspace and promoted here.
{#if ownRules.deployLocked}
{#if ownRules.alreadyBlocksDeploy}
Already enforced by an existing protection rule
{/if}
{:else}
{/if}
{#if ownRules.forkingLocked}
{#if ownRules.alreadyBlocksForking}
Already enforced by an existing protection rule
{/if}
Jobs in this workspace run on dev workers (tags suffixed with
{$devWorkspaceTagSuffix}, e.g.
{withDevSuffix('python3', $devWorkspaceTagSuffix)}), set by the instance's dev
workspace isolation.
{/if}
{/snippet}
{#if isThrowawayFork}
Dev workspace pairing is not available on a throwaway fork. This workspace is a fork of
{parentId}.
{@render devWorkersNotice()}
{@render deployTarget?.()}
{:else if isDev && parentId}
This is a {devLabelNoun(currentWs?.dev_workspace_label)} paired with
{parentWs?.is_dev_workspace ? devLabelNoun(parentWs.dev_workspace_label) : 'root workspace'}
{parentId}. Promote changes from the home page banner or the Compare & Deploy page.
Environment:
Set when the workspace is created or attached. Git sync deploys to the
{currentLabel} branch.
{@render devWorkersNotice()}
{@render deployTarget?.()}
{#if !parentRules.readFailed}
{@render protectionsPanel({
title: `Protections in force on ${parentId}`,
rules: parentRules,
onOpen: canEditParentRules ? openRulesetsInParent : undefined,
editLabel: `Edit in ${parentId}`,
manageLabel: `Manage in ${parentId}`
})}
{/if}
This workspace's own dev workspace
A dev workspace can itself be paired with one, giving a longer promotion chain (for example
dev into staging into prod). It is not the recommended shape — each extra level is another
promotion to run — but nothing prevents it.