{deployment ? (deployment.action === 'destroy' ? 'Destroy ' : 'Create ') + deployment.server : 'Deployment'} | Electric Cherry
{#snippet crumbs()}{/snippet} {#if error}{/if} {#if detail?.collection}← Back to {detail.collection.name} collection{/if} {#if deployment}
{#if deployment.server_exists}View server{/if}

{deployment.state === 'done' ? (deployment.action === 'destroy' ? 'Server destroyed' : 'Server creation completed') : deployment.stage}

{explanation}

Total time {duration(deployment.started_at, deployment.finished_at ? new Date(deployment.finished_at).getTime() : now)}{#if active && stageStarted}This step {duration(stageStarted, now)}{/if}
{#if detail?.canResumeVerification}
{/if} {#if detail?.canResumeCleanup}
{/if} {#if detail?.canCancelRemoval}

Available until removal begins. Cancelling keeps the server and its files.

{/if} {#if deployment.server_exists && deployment.state !== 'done' && deployment.state !== 'cancelled'}{/if} {#if deployment.error}{/if} {#each warnings as warning}

{warning}

{/each} {#if deployment.expected_map}

Expected map: {deployment.expected_map}

{/if}
Started
{fmt(deployment.started_at)}
Finished
{deployment.finished_at ? fmt(deployment.finished_at) : 'In progress'}
Requested by
{deployment.triggered_by}
{#if detail?.recipe}

{detail.blueprintName ? `Launched from ${detail.blueprintName}` : 'Recorded launch files'}

Launch this map with the latest promoted files using a fresh server ID and port. This does not repair the existing server.

{/if} ({label,state:deployment.state === 'cancelled' ? 'pending' : index < currentStep ? 'done' : index === currentStep ? (!active && ['failed','interrupted'].includes(deployment.state) ? 'failed' : 'current') : 'pending'}))} events={detail?.events ?? []} {active} /> {:else if !error}

Loading deployment...

{/if}