From ccef621c94012694bd0f2fe6055dc9c4f0235d76 Mon Sep 17 00:00:00 2001 From: harsh mahajan Date: Wed, 22 Apr 2026 12:44:20 +0530 Subject: [PATCH 1/9] feat:add SSR start command support for sites --- .../sites/create-site/configuration.svelte | 34 +++++++++++-- .../sites/create-site/deploy/+page.svelte | 11 +++- .../sites/create-site/finish/+page.svelte | 1 + .../sites/create-site/manual/+page.svelte | 9 +++- .../repository-[repository]/+page.svelte | 12 ++++- .../site-[site]/deployments/+page.svelte | 1 + .../createGitDeploymentModal.svelte | 1 + .../domains/add-domain/+page.svelte | 1 + .../settings/disconnectRepo.svelte | 1 + .../settings/updateBuildSettings.svelte | 50 ++++++++++++++++--- .../site-[site]/settings/updateLogging.svelte | 1 + .../site-[site]/settings/updateName.svelte | 1 + .../settings/updateRepository.svelte | 2 + .../settings/updateResourceLimits.svelte | 1 + .../settings/updateRuntimeSettings.svelte | 1 + .../site-[site]/settings/updateTimeout.svelte | 1 + src/routes/(public)/sites/deploy/+page.svelte | 2 + 17 files changed, 114 insertions(+), 16 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/sites/create-site/configuration.svelte b/src/routes/(console)/project-[region]-[project]/sites/create-site/configuration.svelte index 8b1a9ad3f6..4b9d3a7912 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/create-site/configuration.svelte +++ b/src/routes/(console)/project-[region]-[project]/sites/create-site/configuration.svelte @@ -6,30 +6,38 @@ import { getFrameworkIcon } from '$lib/stores/sites'; import { EnvironmentVariables } from '$lib/components/variables'; + type FrameworkAdapterWithStartCommand = Models.FrameworkAdapter & { + startCommand?: string; + }; + export let frameworks: Models.Framework[]; export let selectedFramework: Models.Framework; $: frameworkData = frameworks.find((framework) => framework.key === selectedFramework?.key); - $: adapterData = - frameworkData?.adapters.find((adapter) => adapter.key === 'ssr') ?? - frameworkData?.adapters.find((adapter) => adapter.key === 'static'); + $: adapterData = (frameworkData?.adapters.find((adapter) => adapter.key === 'ssr') ?? + frameworkData?.adapters.find( + (adapter) => adapter.key === 'static' + )) as FrameworkAdapterWithStartCommand; export let variables: Partial[] = []; export let isLoading = false; export let installCommand = ''; export let buildCommand = ''; + export let startCommand = ''; export let outputDirectory = ''; let frameworkId = selectedFramework.key; - $: if (!installCommand || !buildCommand || !outputDirectory) { + $: if (!installCommand || !buildCommand || !startCommand || !outputDirectory) { installCommand ||= adapterData?.installCommand; buildCommand ||= adapterData?.buildCommand; + startCommand ||= adapterData?.startCommand; outputDirectory ||= adapterData?.outputDirectory; } $: if (frameworkData) { installCommand = adapterData?.installCommand; buildCommand = adapterData?.buildCommand; + startCommand = adapterData?.startCommand; outputDirectory = adapterData?.outputDirectory; } @@ -84,6 +92,24 @@ Reset + {#if adapterData?.key === 'ssr'} + + + + + {/if} + f.key === 'other') ?? data.frameworks.frameworks?.[0]; - let adapter = framework?.adapters[0]; + let adapter = framework?.adapters[0] as FrameworkAdapterWithStartCommand; let installCommand = adapter?.installCommand; let buildCommand = adapter?.buildCommand; + let startCommand = adapter?.startCommand; let outputDirectory = adapter?.outputDirectory; let variables: Partial[] = []; let files: FileList; @@ -73,6 +78,7 @@ buildRuntime, installCommand: installCommand || undefined, buildCommand: buildCommand || undefined, + startCommand: startCommand || undefined, outputDirectory: outputDirectory || undefined }); @@ -243,6 +249,7 @@ f.key === 'other'); - let adapter = framework?.adapters[0]; + let adapter = framework?.adapters[0] as FrameworkAdapterWithStartCommand; let branch: string; let rootDir = './'; let installCommand = adapter?.installCommand; let buildCommand = adapter?.buildCommand; + let startCommand = adapter?.startCommand; let outputDirectory = adapter?.outputDirectory; let variables: Partial[] = []; let silentMode = false; @@ -81,9 +86,10 @@ if (!framework) { framework = data.frameworks.frameworks.find((f) => f.key === 'other'); } - adapter = framework?.adapters[0]; + adapter = framework?.adapters[0] as FrameworkAdapterWithStartCommand; installCommand = adapter?.installCommand; buildCommand = adapter?.buildCommand; + startCommand = adapter?.startCommand; outputDirectory = adapter?.outputDirectory; const detectedVariables = normalizeDetectedVariables(response?.variables); if (detectedVariables.length) { @@ -121,6 +127,7 @@ buildRuntime, installCommand, buildCommand, + startCommand, outputDirectory, installationId: data.installation.$id, providerRepositoryId: data.repository.id, @@ -218,6 +225,7 @@ a.key === adapter) ?? selectedFramework.adapters[0] + let frameworkAdapterData: FrameworkAdapterWithStartCommand = $derived( + (selectedFramework.adapters.find((a) => a.key === adapter) ?? + selectedFramework.adapters[0]) as FrameworkAdapterWithStartCommand ); $effect(() => { if (adapter) { - const data = selectedFramework.adapters.find((a) => a.key === adapter); + const data = selectedFramework.adapters.find( + (a) => a.key === adapter + ) as FrameworkAdapterWithStartCommand; if (data) { installCommand = data.installCommand; buildCommand = data.buildCommand; + startCommand = data.startCommand; outputDirectory = data.outputDirectory; fallback = data.fallbackFile; } @@ -78,11 +88,11 @@ } //Update values - const data = - selectedFramework.adapters.find((a) => a.key === adapter) ?? - selectedFramework.adapters[0]; + const data = (selectedFramework.adapters.find((a) => a.key === adapter) ?? + selectedFramework.adapters[0]) as FrameworkAdapterWithStartCommand; installCommand = data.installCommand; buildCommand = data.buildCommand; + startCommand = data.startCommand; outputDirectory = data.outputDirectory; adapter = data.key as Adapter; fallback = data.fallbackFile; @@ -90,6 +100,7 @@ adapter = site.adapter as Adapter; installCommand = site?.installCommand ?? frameworkAdapterData.installCommand; buildCommand = site?.buildCommand ?? frameworkAdapterData.buildCommand; + startCommand = site?.startCommand ?? frameworkAdapterData.startCommand; outputDirectory = site?.outputDirectory ?? frameworkAdapterData.outputDirectory; fallback = site?.fallbackFile ?? frameworkAdapterData.fallbackFile; } @@ -149,6 +160,7 @@ timeout: site.timeout || undefined, installCommand: installCommand || undefined, buildCommand: buildCommand || undefined, + startCommand: startCommand || undefined, outputDirectory: outputDirectory || undefined, buildRuntime: (site?.buildRuntime as BuildRuntime) || undefined, adapter: (adptr?.key as Adapter) || undefined, @@ -178,13 +190,17 @@ } } - function reset(type: 'installCommand' | 'buildCommand' | 'outputDirectory') { - const data = selectedFramework.adapters.find((a) => a.key === adapter); + function reset(type: 'installCommand' | 'buildCommand' | 'startCommand' | 'outputDirectory') { + const data = selectedFramework.adapters.find( + (a) => a.key === adapter + ) as FrameworkAdapterWithStartCommand; if (type === 'installCommand') { installCommand = data.installCommand; } else if (type === 'buildCommand') { buildCommand = data.buildCommand; + } else if (type === 'startCommand') { + startCommand = data.startCommand; } else if (type === 'outputDirectory') { outputDirectory = data.outputDirectory; } @@ -311,6 +327,24 @@ Reset + {#if adapter === Adapter.Ssr} + + + + + {/if} Date: Wed, 22 Apr 2026 13:12:05 +0530 Subject: [PATCH 2/9] addressed comments --- src/lib/stores/sites.ts | 6 ++++++ .../settings/updateProtocols.svelte | 13 ++++++++----- .../sites/create-site/configuration.svelte | 12 +++++------- .../sites/create-site/deploy/+page.svelte | 5 +++-- .../sites/create-site/manual/+page.svelte | 5 +---- .../repository-[repository]/+page.svelte | 5 +---- .../site-[site]/settings/updateBuildSettings.svelte | 12 +++++------- 7 files changed, 29 insertions(+), 29 deletions(-) diff --git a/src/lib/stores/sites.ts b/src/lib/stores/sites.ts index 29d8113323..ef39511ee2 100644 --- a/src/lib/stores/sites.ts +++ b/src/lib/stores/sites.ts @@ -1,3 +1,9 @@ +import type { Models } from '@appwrite.io/console'; + +export type FrameworkAdapterWithStartCommand = Models.FrameworkAdapter & { + startCommand?: string; +}; + export function getFrameworkIcon(framework: string) { switch (true) { case framework.toLocaleLowerCase().includes('sveltekit'): diff --git a/src/routes/(console)/project-[region]-[project]/settings/updateProtocols.svelte b/src/routes/(console)/project-[region]-[project]/settings/updateProtocols.svelte index 8492bb66c9..c5b0b4ddea 100644 --- a/src/routes/(console)/project-[region]-[project]/settings/updateProtocols.svelte +++ b/src/routes/(console)/project-[region]-[project]/settings/updateProtocols.svelte @@ -155,7 +155,9 @@ disabled={shouldDisableDisableAllButton}>Disable all - +
+ +
{#each $protocols.list as protocol, index} @@ -207,7 +209,12 @@