Skip to content

Commit 36e76a2

Browse files
committed
Merge branch 'main' into multiple-terminologies
2 parents b0bf766 + 0831046 commit 36e76a2

12 files changed

Lines changed: 88 additions & 52 deletions

File tree

src/lib/helpers/buildTimeout.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,24 @@ function isBuildTimedOut(createdAt: string, status: string, timeoutSeconds: numb
2222
* Gets the effective status for a build, considering timeout
2323
*/
2424
export function getEffectiveBuildStatus(
25-
originalStatus: string,
26-
createdAt: string,
25+
deployment: Models.Deployment,
2726
consoleVariables: Models.ConsoleVariables | undefined
2827
): string {
28+
const originalStatus = deployment.status;
29+
const createdAt = deployment.$createdAt;
30+
2931
const timeoutSeconds = getBuildTimeoutSeconds(consoleVariables);
3032
if (isBuildTimedOut(createdAt, originalStatus, timeoutSeconds)) {
3133
return 'failed';
3234
}
35+
36+
const isReady = originalStatus === 'ready';
37+
const hasScreenshot = deployment.screenshotLight && deployment.screenshotDark;
38+
39+
if (isReady && !hasScreenshot) {
40+
return 'finalizing';
41+
}
42+
3343
return originalStatus;
3444
}
3545

src/routes/(console)/project-[region]-[project]/functions/function-[function]/(components)/deploymentCard.svelte

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,7 @@
3838
footer?: Snippet;
3939
} = $props();
4040
41-
let effectiveStatus = $derived(
42-
getEffectiveBuildStatus(deployment.status, deployment.$createdAt, $regionalConsoleVariables)
43-
);
41+
let effectiveStatus = $derived(getEffectiveBuildStatus(deployment, $regionalConsoleVariables));
4442
let totalSize = $derived(humanFileSize(deployment?.totalSize ?? 0));
4543
</script>
4644

src/routes/(console)/project-[region]-[project]/functions/function-[function]/deployment-[deployment]/+page.svelte

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,7 @@
4141
let { data } = $props();
4242
4343
let effectiveStatus = $derived(
44-
getEffectiveBuildStatus(
45-
data.deployment.status,
46-
data.deployment.$createdAt,
47-
$regionalConsoleVariables
48-
)
44+
getEffectiveBuildStatus(data.deployment, $regionalConsoleVariables)
4945
);
5046
let showDelete = $state(false);
5147
let showCancel = $state(false);

src/routes/(console)/project-[region]-[project]/functions/function-[function]/table.svelte

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,7 @@
9595
{#snippet children(root)}
9696
{#each data.deploymentList.deployments as deployment (deployment.$id)}
9797
{@const effectiveStatus = getEffectiveBuildStatus(
98-
deployment.status,
99-
deployment.$createdAt,
98+
deployment,
10099
$regionalConsoleVariables
101100
)}
102101
<Table.Row.Link

src/routes/(console)/project-[region]-[project]/sites/(components)/deploymentActionMenu.svelte

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,7 @@
5454
<svelte:fragment slot="menu" let:toggle>
5555
<ActionMenu.Root>
5656
{@const effectiveStatus = getEffectiveBuildStatus(
57-
deployment.status,
58-
deployment.$createdAt,
57+
deployment,
5958
$regionalConsoleVariables
6059
)}
6160
{#if !inCard}

src/routes/(console)/project-[region]-[project]/sites/(components)/logs.svelte

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
case 'ready':
77
return 'success';
88
case 'building':
9+
case 'finalizing':
910
return 'warning';
1011
case 'processing':
1112
return undefined;
@@ -40,9 +41,7 @@
4041
emptyCopy?: string;
4142
} = $props();
4243
43-
let effectiveStatus = $derived(
44-
getEffectiveBuildStatus(deployment.status, deployment.$createdAt, $regionalConsoleVariables)
45-
);
44+
let effectiveStatus = $derived(getEffectiveBuildStatus(deployment, $regionalConsoleVariables));
4645
4746
function setCopy() {
4847
if (effectiveStatus === 'failed') {
@@ -73,7 +72,7 @@
7372
variant="secondary"
7473
type={badgeTypeDeployment(effectiveStatus)} />
7574
</Layout.Stack>
76-
<LogsTimer status={effectiveStatus} {deployment} />
75+
<LogsTimer {deployment} />
7776
</Layout.Stack>
7877
{/if}
7978

src/routes/(console)/project-[region]-[project]/sites/(components)/logsTimer.svelte

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,13 @@
77
88
import { Layout, Spinner, Typography } from '@appwrite.io/pink-svelte';
99
10-
let { status, deployment }: { status: string; deployment: Models.Deployment } = $props();
10+
let { deployment }: { deployment: Models.Deployment } = $props();
1111
12-
let effectiveStatus = $derived(
13-
getEffectiveBuildStatus(status, deployment.$createdAt, $regionalConsoleVariables)
14-
);
12+
let effectiveStatus = $derived(getEffectiveBuildStatus(deployment, $regionalConsoleVariables));
1513
</script>
1614

1715
<Layout.Stack direction="row" alignItems="center" inline>
18-
{#if ['processing', 'building'].includes(effectiveStatus)}
16+
{#if ['processing', 'building', 'finalizing'].includes(effectiveStatus)}
1917
<Typography.Code color="--fgcolor-neutral-secondary">
2018
<Layout.Stack direction="row" alignItems="center" inline>
2119
<p use:timer={{ start: deployment.$createdAt }}></p>

src/routes/(console)/project-[region]-[project]/sites/(components)/siteCard.svelte

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,7 @@
4242
footer?: Snippet;
4343
} = $props();
4444
45-
let effectiveStatus = $derived(
46-
getEffectiveBuildStatus(deployment.status, deployment.$createdAt, $regionalConsoleVariables)
47-
);
45+
let effectiveStatus = $derived(getEffectiveBuildStatus(deployment, $regionalConsoleVariables));
4846
let show = $state(false);
4947
5048
const totalSize = $derived(humanFileSize(deployment?.totalSize ?? 0));

src/routes/(console)/project-[region]-[project]/sites/create-site/deploying/+page.svelte

Lines changed: 61 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -12,32 +12,76 @@
1212
import { onMount } from 'svelte';
1313
import { getFrameworkIcon } from '$lib/stores/sites';
1414
import type { Models } from '@appwrite.io/console';
15+
import { getEffectiveBuildStatus } from '$lib/helpers/buildTimeout';
16+
import { regionalConsoleVariables } from '$routes/(console)/project-[region]-[project]/store';
1517
1618
let { data } = $props();
1719
1820
let deployment = $state(data.deployment);
21+
let skipScreenshotTimeout: ReturnType<typeof setTimeout> | null = $state(null);
22+
23+
let effectiveStatus = $derived(getEffectiveBuildStatus(deployment, $regionalConsoleVariables));
1924
2025
onMount(() => {
21-
return realtime.forConsole(page.params.region, 'console', async (response) => {
22-
if (
23-
response.events.includes(
24-
`sites.${data.site.$id}.deployments.${data.deployment.$id}.update`
25-
)
26-
) {
27-
deployment = response.payload as Models.Deployment;
28-
if (deployment.status === 'ready') {
29-
const resolvedUrl = resolve(
30-
'/(console)/project-[region]-[project]/sites/create-site/finish',
31-
{
32-
region: page.params.region,
33-
project: page.params.project
26+
const timeoutCleanup = () => {
27+
if (skipScreenshotTimeout) {
28+
clearTimeout(skipScreenshotTimeout);
29+
skipScreenshotTimeout = null;
30+
}
31+
};
32+
33+
const realtimeUnsubscribe = realtime.forConsole(
34+
page.params.region,
35+
'console',
36+
async (response) => {
37+
if (
38+
response.events.includes(
39+
`sites.${data.site.$id}.deployments.${data.deployment.$id}.update`
40+
)
41+
) {
42+
deployment = response.payload as Models.Deployment;
43+
44+
const isReady = deployment.status === 'ready';
45+
46+
const isFinished =
47+
isReady && deployment.screenshotLight && deployment.screenshotDark;
48+
49+
// Fallback mechanism
50+
// If ready but not finished for over 30 seconds, go anyway
51+
if (isReady && !skipScreenshotTimeout) {
52+
skipScreenshotTimeout = setTimeout(async () => {
53+
goToFinishScreen();
54+
}, 30000);
55+
}
56+
57+
if (isReady && isFinished) {
58+
if (skipScreenshotTimeout) {
59+
clearTimeout(skipScreenshotTimeout);
60+
skipScreenshotTimeout = null;
3461
}
35-
);
36-
await goto(`${resolvedUrl}?site=${data.site.$id}`);
62+
63+
goToFinishScreen();
64+
}
3765
}
3866
}
39-
});
67+
);
68+
69+
return () => {
70+
realtimeUnsubscribe();
71+
timeoutCleanup();
72+
};
4073
});
74+
75+
async function goToFinishScreen() {
76+
const resolvedUrl = resolve(
77+
'/(console)/project-[region]-[project]/sites/create-site/finish',
78+
{
79+
region: page.params.region,
80+
project: page.params.project
81+
}
82+
);
83+
await goto(`${resolvedUrl}?site=${data.site.$id}`);
84+
}
4185
</script>
4286

4387
<Wizard
@@ -77,7 +121,7 @@
77121
</svelte:fragment>
78122
<svelte:fragment slot="footer">
79123
<Layout.Stack direction="row" alignItems="center" justifyContent="flex-end">
80-
{#if ['processing', 'building'].includes(data.deployment.status)}
124+
{#if ['processing', 'building', 'finalizing'].includes(effectiveStatus)}
81125
<Typography.Text variant="m-400" color="--fgcolor-neutral-tertiary">
82126
Deployment will continue in the background
83127
</Typography.Text>

src/routes/(console)/project-[region]-[project]/sites/site-[site]/deployments/deployment-[deployment]/+page.svelte

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,7 @@
2626
let { data }: PageProps = $props();
2727
2828
let deployment = $derived(data.deployment);
29-
let effectiveStatus = $derived(
30-
getEffectiveBuildStatus(deployment.status, deployment.$createdAt, $regionalConsoleVariables)
31-
);
29+
let effectiveStatus = $derived(getEffectiveBuildStatus(deployment, $regionalConsoleVariables));
3230
3331
let showRedeploy = $state(false);
3432
let showActivate = $state(false);
@@ -90,7 +88,7 @@
9088
hideDivider>
9189
<Logs {deployment} hideTitle fullHeight />
9290
<svelte:fragment slot="end">
93-
<LogsTimer status={effectiveStatus} {deployment} />
91+
<LogsTimer {deployment} />
9492
</svelte:fragment>
9593
</Accordion>
9694
</Card>

0 commit comments

Comments
 (0)