From a97be4aacd568a1878d94b3ff8c67f2eadf74980 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 8 Dec 2025 18:50:37 +0000 Subject: [PATCH 1/2] Initial plan From a1deff65c1d159c059fae641197df45560680bc4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 8 Dec 2025 19:26:40 +0000 Subject: [PATCH 2/2] Update Console to conditionally call listSpecifications only on Cloud - Modified functions layout loader to check isCloud before calling listSpecifications - Modified sites settings page loader to check isCloud before calling listSpecifications - Updated function create pages to handle empty specifications array safely - Updated updateResourceLimits components to handle empty specifications array safely - On self-hosted, specifications will be empty and not passed to backend, allowing default spec Co-authored-by: stnguyen90 <1477010+stnguyen90@users.noreply.github.com> --- .../project-[region]-[project]/functions/+layout.ts | 5 ++++- .../functions/create-function/manual/+page.svelte | 4 ++-- .../create-function/repository-[repository]/+page.svelte | 4 ++-- .../create-function/template-[template]/+page.svelte | 4 ++-- .../function-[function]/settings/updateResourceLimits.svelte | 2 +- .../sites/site-[site]/settings/+page.ts | 5 ++++- .../sites/site-[site]/settings/updateResourceLimits.svelte | 2 +- 7 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/routes/(console)/project-[region]-[project]/functions/+layout.ts b/src/routes/(console)/project-[region]-[project]/functions/+layout.ts index 1afe03dd33..b22ab7609f 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/+layout.ts +++ b/src/routes/(console)/project-[region]-[project]/functions/+layout.ts @@ -3,6 +3,7 @@ import Header from './header.svelte'; import { sdk } from '$lib/stores/sdk'; import { Query } from '@appwrite.io/console'; import { Dependencies } from '$lib/constants'; +import { isCloud } from '$lib/system'; import type { LayoutLoad } from './$types'; export const load: LayoutLoad = async ({ depends, params }) => { @@ -13,7 +14,9 @@ export const load: LayoutLoad = async ({ depends, params }) => { sdk .forProject(params.region, params.project) .vcs.listInstallations({ queries: [Query.limit(100)] }), - sdk.forProject(params.region, params.project).functions.listSpecifications() + isCloud + ? sdk.forProject(params.region, params.project).functions.listSpecifications() + : Promise.resolve({ specifications: [], total: 0 }) ]); return { diff --git a/src/routes/(console)/project-[region]-[project]/functions/create-function/manual/+page.svelte b/src/routes/(console)/project-[region]-[project]/functions/create-function/manual/+page.svelte index f84db9f7e0..e538374122 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/create-function/manual/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/functions/create-function/manual/+page.svelte @@ -38,7 +38,7 @@ return { value, label, leadingHtml }; }); - const specificationOptions = data.specificationsList.specifications.map((size) => ({ + const specificationOptions = (data.specificationsList?.specifications ?? []).map((size) => ({ label: `${size.cpus} CPU, ${size.memory} MB RAM` + (!size.enabled ? ` (Upgrade to use this)` : ''), @@ -58,7 +58,7 @@ let roles: string[] = []; let variables: Partial[] = []; let files: FileList; - let specification = specificationOptions[0].value; + let specification = specificationOptions[0]?.value || ''; async function create() { try { diff --git a/src/routes/(console)/project-[region]-[project]/functions/create-function/repository-[repository]/+page.svelte b/src/routes/(console)/project-[region]-[project]/functions/create-function/repository-[repository]/+page.svelte index 476b1d27ca..9a06f70dd6 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/create-function/repository-[repository]/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/functions/create-function/repository-[repository]/+page.svelte @@ -25,7 +25,7 @@ export let data; - const specificationOptions = data.specificationsList.specifications.map((size) => ({ + const specificationOptions = (data.specificationsList?.specifications ?? []).map((size) => ({ label: `${size.cpus} CPU, ${size.memory} MB RAM` + (!size.enabled ? ` (Upgrade to use this)` : ''), @@ -55,7 +55,7 @@ let rootDir = './'; let variables: Partial[] = []; let silentMode = false; - let specification = specificationOptions[0].value; + let specification = specificationOptions[0]?.value || ''; let detectingRuntime = true; diff --git a/src/routes/(console)/project-[region]-[project]/functions/create-function/template-[template]/+page.svelte b/src/routes/(console)/project-[region]-[project]/functions/create-function/template-[template]/+page.svelte index 3eb10a02f0..98c8bf7ea4 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/create-function/template-[template]/+page.svelte +++ b/src/routes/(console)/project-[region]-[project]/functions/create-function/template-[template]/+page.svelte @@ -34,7 +34,7 @@ export let data; - const specificationOptions = data.specificationsList.specifications.map((size) => ({ + const specificationOptions = (data.specificationsList?.specifications ?? []).map((size) => ({ label: `${size.cpus} CPU, ${size.memory} MB RAM` + (!size.enabled ? ` (Upgrade to use this)` : ''), @@ -65,7 +65,7 @@ let selectedScopes: string[] = []; let execute = true; let variables: Partial[] = []; - let specification = specificationOptions[0].value; + let specification = specificationOptions[0]?.value || ''; onMount(async () => { if (!$installation?.$id) { diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/settings/updateResourceLimits.svelte b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/settings/updateResourceLimits.svelte index c3199dcf57..30dcd26ff7 100644 --- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/settings/updateResourceLimits.svelte +++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/settings/updateResourceLimits.svelte @@ -65,7 +65,7 @@ } } - const options = specs.specifications.map((spec) => ({ + const options = (specs?.specifications ?? []).map((spec) => ({ label: `${spec.cpus} CPU, ${spec.memory} MB RAM`, value: spec.slug, disabled: !spec.enabled diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/settings/+page.ts b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/settings/+page.ts index 1d856b016e..d71de3091a 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/settings/+page.ts +++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/settings/+page.ts @@ -1,5 +1,6 @@ import { sdk } from '$lib/stores/sdk'; import { Dependencies } from '$lib/constants'; +import { isCloud } from '$lib/system'; export const load = async ({ params, depends, parent }) => { depends(Dependencies.VARIABLES); @@ -14,7 +15,9 @@ export const load = async ({ params, depends, parent }) => { .sites.listVariables({ siteId: params.site }), sdk.forProject(params.region, params.project).sites.listFrameworks(), sdk.forProject(params.region, params.project).vcs.listInstallations(), - sdk.forProject(params.region, params.project).sites.listSpecifications() + isCloud + ? sdk.forProject(params.region, params.project).sites.listSpecifications() + : Promise.resolve({ specifications: [], total: 0 }) ]); // Conflicting variables first diff --git a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/settings/updateResourceLimits.svelte b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/settings/updateResourceLimits.svelte index 40fb7a83fb..bc4dcea093 100644 --- a/src/routes/(console)/project-[region]-[project]/sites/site-[site]/settings/updateResourceLimits.svelte +++ b/src/routes/(console)/project-[region]-[project]/sites/site-[site]/settings/updateResourceLimits.svelte @@ -58,7 +58,7 @@ } } - const options = specs.specifications.map((spec) => ({ + const options = (specs?.specifications ?? []).map((spec) => ({ label: `${spec.cpus} CPU, ${spec.memory} MB RAM`, value: spec.slug, disabled: !spec.enabled