diff --git a/src/lib/helpers/buildTimeout.ts b/src/lib/helpers/buildTimeout.ts index 3915811c2..08e2707da 100644 --- a/src/lib/helpers/buildTimeout.ts +++ b/src/lib/helpers/buildTimeout.ts @@ -24,12 +24,30 @@ function isBuildTimedOut(createdAt: string, status: string, timeoutSeconds: numb export function getEffectiveBuildStatus( originalStatus: string, createdAt: string, + screenshots: Array, consoleVariables: Models.ConsoleVariables | undefined ): string { const timeoutSeconds = getBuildTimeoutSeconds(consoleVariables); if (isBuildTimedOut(createdAt, originalStatus, timeoutSeconds)) { return 'failed'; } + + const isReady = originalStatus === 'ready'; + let hasScreenshot = true; + if (screenshots.length === 0) { + hasScreenshot = false; + } + for (const screenshot of screenshots) { + if (!screenshot) { + hasScreenshot = false; + break; + } + } + + if (isReady && !hasScreenshot) { + return 'finalizing'; + } + return originalStatus; } diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/(components)/deploymentCard.svelte b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/(components)/deploymentCard.svelte index 237610720..1d18ee85b 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/(components)/deploymentCard.svelte +++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/(components)/deploymentCard.svelte @@ -39,7 +39,12 @@ } = $props(); let effectiveStatus = $derived( - getEffectiveBuildStatus(deployment.status, deployment.$createdAt, $regionalConsoleVariables) + getEffectiveBuildStatus( + deployment.status, + deployment.$createdAt, + [deployment.screenshotLight, deployment.screenshotDark], + $regionalConsoleVariables + ) ); let totalSize = $derived(humanFileSize(deployment?.totalSize ?? 0)); diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/deployment-[deployment]/+page.svelte b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/deployment-[deployment]/+page.svelte index 9a9b47b2e..9676c3302 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/deployment-[deployment]/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/deployment-[deployment]/+page.svelte @@ -44,6 +44,7 @@ getEffectiveBuildStatus( data.deployment.status, data.deployment.$createdAt, + [data.deployment.screenshotLight, data.deployment.screenshotDark], $regionalConsoleVariables ) ); diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/table.svelte b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/table.svelte index 94672a8d6..a6355710d 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/table.svelte +++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/table.svelte @@ -97,6 +97,7 @@ {@const effectiveStatus = getEffectiveBuildStatus( deployment.status, deployment.$createdAt, + [deployment.screenshotLight, deployment.screenshotDark], $regionalConsoleVariables )} - {#if ['processing', 'building'].includes(effectiveStatus)} + {#if ['processing', 'building', 'finalizing'].includes(effectiveStatus)}

diff --git a/src/routes/(console)/project-[region]-[project]/sites/(components)/siteCard.svelte b/src/routes/(console)/project-[region]-[project]/sites/(components)/siteCard.svelte index 78ad644f4..93696adb7 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/(components)/siteCard.svelte +++ b/src/routes/(console)/project-[region]-[project]/sites/(components)/siteCard.svelte @@ -43,7 +43,12 @@ } = $props(); let effectiveStatus = $derived( - getEffectiveBuildStatus(deployment.status, deployment.$createdAt, $regionalConsoleVariables) + getEffectiveBuildStatus( + deployment.status, + deployment.$createdAt, + [deployment.screenshotLight, deployment.screenshotDark], + $regionalConsoleVariables + ) ); let show = $state(false); diff --git a/src/routes/(console)/project-[region]-[project]/sites/create-site/deploying/+page.svelte b/src/routes/(console)/project-[region]-[project]/sites/create-site/deploying/+page.svelte index c2a6b960c..ec8fddf06 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/create-site/deploying/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/sites/create-site/deploying/+page.svelte @@ -16,6 +16,7 @@ let { data } = $props(); let deployment = $state(data.deployment); + let skipScreenshotInterval = $state(null); onMount(() => { return realtime.forConsole(page.params.region, 'console', async (response) => { @@ -26,24 +27,35 @@ ) { deployment = response.payload as Models.Deployment; - const isReady = - deployment.status === 'ready' && - deployment.screenshotLight && - deployment.screenshotDark; + const isReady = deployment.status === 'ready'; - if (isReady) { - const resolvedUrl = resolve( - '/(console)/project-[region]-[project]/sites/create-site/finish', - { - region: page.params.region, - project: page.params.project - } - ); - await goto(`${resolvedUrl}?site=${data.site.$id}`); + const isFinished = + isReady && deployment.screenshotLight && deployment.screenshotDark; + + // Fallback mechanism + // If ready but not finished for over 30 seconds, go anyway + if (isReady && isFinished) { + clearInterval(skipScreenshotInterval); + goToFinishScreen(); + } else if (isReady) { + skipScreenshotInterval = setInterval(async () => { + goToFinishScreen(); + }, 30000); } } }); }); + + async function goToFinishScreen() { + const resolvedUrl = resolve( + '/(console)/project-[region]-[project]/sites/create-site/finish', + { + region: page.params.region, + project: page.params.project + } + ); + await goto(`${resolvedUrl}?site=${data.site.$id}`); + } - {#if ['processing', 'building'].includes(data.deployment.status)} + {#if ['processing', 'building', 'finalizing'].includes(data.deployment.status)} Deployment will continue in the background diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deployments/deployment-[deployment]/+page.svelte b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deployments/deployment-[deployment]/+page.svelte index 1d418842f..3f95bd737 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deployments/deployment-[deployment]/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deployments/deployment-[deployment]/+page.svelte @@ -27,7 +27,12 @@ let deployment = $derived(data.deployment); let effectiveStatus = $derived( - getEffectiveBuildStatus(deployment.status, deployment.$createdAt, $regionalConsoleVariables) + getEffectiveBuildStatus( + deployment.status, + deployment.$createdAt, + [deployment.screenshotLight, deployment.screenshotDark], + $regionalConsoleVariables + ) ); let showRedeploy = $state(false); diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deployments/table.svelte b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deployments/table.svelte index d135498a6..1752e31c3 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deployments/table.svelte +++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/deployments/table.svelte @@ -84,6 +84,7 @@ {@const effectiveStatus = getEffectiveBuildStatus( deployment.status, deployment.$createdAt, + [deployment.screenshotLight, deployment.screenshotDark], $regionalConsoleVariables )}