{#if initialLoading}

Loading releases...

{:else if error}

{error}

{:else if timeline.length === 0}

No releases yet.

Create a release with forest release create

{:else}
{#each lanes as lane (lane.name)} {@const bar = laneBarData[lane.name]} {@const [barColor, lightColor] = bar?.color || [lane.color, "#e5e7eb"]}
{#if bar} {#if bar.hasHatch}
{/if} {#if bar.solidH > 0}
{/if} {#each bar.dots as dotY, di (di)}
{/each} {/if}
{/each}
{#each timeline as item (itemKey(item))} {#if item.kind === "release" && item.release} {@const release = item.release}
{#if release.branch} {release.branch} {/if} {#if release.commit_sha} {release.commit_sha.slice(0, 7)} {/if} {#if release.source_user} {release.source_user} {/if} {#if release.project_name && release.project_name !== project} {release.project_name} {/if}
{#if release.has_pipeline && !pipelineSummary(release.pipeline_stages)} {@const envAllDone = release.env_groups && release.env_groups.length > 0 && release.env_groups.every(g => g.status === "SUCCEEDED")} {#if envAllDone} Deployed {:else} Queued {/if} {:else if release.has_pipeline && pipelineSummary(release.pipeline_stages)} {@const summary = pipelineSummary(release.pipeline_stages)} {#if summary.icon === "pulse"} {:else if summary.icon === "check-circle"} {:else if summary.icon === "x-circle"} {:else if summary.icon === "clock"} {:else} {/if} {summary.label} {#each release.pipeline_stages as stage (stage.id || stage.environment || stage.stage_type)} {#if stage.stage_type === "deploy" && summaryShowsStage(summary, stage.status)} {@const badge = envBadgeClasses(stage.environment || "")} {@const dot = statusDotColor(stage.status) || badge.dot} {stage.environment} {/if} {/each} {summary.done}/{summary.total} {:else if release.env_groups && release.env_groups.length > 0} {@const allSucceeded = release.env_groups.every(g => g.status === "SUCCEEDED")} {#if allSucceeded} Deployed {:else} {#each release.env_groups as group, gi (gi)} {#if group.status !== "SUCCEEDED"} {@const cfg = STATUS_CONFIG[group.status] || STATUS_CONFIG.SUCCEEDED} {#if cfg.icon === "pulse"} {:else if cfg.icon === "check-circle"} {:else} {/if} {cfg.label} {#each group.envs as env (env)} {@const badge = envBadgeClasses(env)} {env} {/each} {/if} {/each} {/if} {:else} Pending {/if}
{#if release.description}

{release.description}

{/if}
{release.slug} {#if release.version} {release.version} {/if}
{#if release.has_pipeline}
{#each release.pipeline_stages as stage, i (stage.id || `${stage.stage_type}-${stage.environment}-${i}`)}
{#if stage.status === "SUCCEEDED"} {:else if stage.status === "RUNNING"} {:else if stage.status === "QUEUED"} {:else if stage.status === "FAILED"} {:else} {/if} {#if stage.stage_type === "deploy"} {deployStageLabel(stage.status)} {@const badge = envBadgeClasses(stage.environment || "")} {stage.environment} {:else if stage.stage_type === "wait"} {waitStageLabel(stage.status)} {stage.duration_seconds}s {/if} {#if stage.started_at && (stage.status === "RUNNING" || stage.status === "QUEUED" || stage.completed_at)} {elapsedStr(stage.started_at, stage.completed_at, stage.status)} {/if} pipeline
{/each}
{/if} {#each release.destinations as dest, i (dest.name)} {@const destBadge = envBadgeClasses(dest.environment || "")}
{#if dest.status === "SUCCEEDED"} {:else if dest.status === "RUNNING" || dest.status === "ASSIGNED"} {:else if dest.status === "QUEUED"} {:else if dest.status === "FAILED"} {:else} {/if} {dest.environment} {dest.name} {#if dest.status === "SUCCEEDED"} Deployed {:else if dest.status === "RUNNING"} Deploying {:else if dest.status === "QUEUED"} Queued{dest.queue_position ? ` #${dest.queue_position}` : ""} {:else if dest.status === "FAILED"} Failed {/if} {#if dest.completed_at} {/if}
{/each}
{:else if item.kind === "hidden"}
{item.count} hidden commit{item.count !== 1 ? "s" : ""} · Show commit{item.count !== 1 ? "s" : ""}
{#each item.releases || [] as release (release.slug)}
{#if release.commit_sha} {release.commit_sha.slice(0, 7)} {/if}
{/each}
{/if} {/each}
{#each lanes as lane (lane.name)}
{lane.name}
{/each}
{/if}