diff --git a/src/routes/(console)/project-[region]-[project]/functions/create-function/(components)/aside.svelte b/src/routes/(console)/project-[region]-[project]/functions/create-function/(components)/aside.svelte
index d63fe5d05..4acf3d41a 100644
--- a/src/routes/(console)/project-[region]-[project]/functions/create-function/(components)/aside.svelte
+++ b/src/routes/(console)/project-[region]-[project]/functions/create-function/(components)/aside.svelte
@@ -1,6 +1,6 @@
@@ -18,7 +19,7 @@
- {#if selectedRuntime?.name}
+ {#if selectedRuntime?.name && !loading}
Runtime
@@ -30,6 +31,11 @@
+ {:else if loading}
+
+
+
+
{/if}
{#if showGitData}
{#if repositoryName}
diff --git a/src/routes/(console)/project-[region]-[project]/functions/create-function/(components)/details.svelte b/src/routes/(console)/project-[region]-[project]/functions/create-function/(components)/details.svelte
index baa9692af..9b097f7a3 100644
--- a/src/routes/(console)/project-[region]-[project]/functions/create-function/(components)/details.svelte
+++ b/src/routes/(console)/project-[region]-[project]/functions/create-function/(components)/details.svelte
@@ -7,7 +7,7 @@
import { organization } from '$lib/stores/organization';
import { isCloud } from '$lib/system';
import { IconPencil } from '@appwrite.io/pink-icons-svelte';
- import { Fieldset, Icon, Input, Layout, Tag } from '@appwrite.io/pink-svelte';
+ import { Fieldset, Icon, Input, Layout, Skeleton, Tag } from '@appwrite.io/pink-svelte';
import type { ComponentType } from 'svelte';
export let name: string;
@@ -25,6 +25,7 @@
value: string;
label: string;
}[] = [];
+ export let loading = false;
let showCustomId = false;
@@ -51,13 +52,20 @@
{/if}
{#key runtime}
-
+ {#if loading}
+
+
+
+
+ {:else}
+
+ {/if}
{/key}
{#if isCloud}
@@ -79,12 +87,19 @@
{/if}
{#if showEntrypoint}
-
+ {#if loading}
+
+
+
+
+ {:else}
+
+ {/if}
{/if}
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 4414e0ddc..d2ed95c5d 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
@@ -10,7 +10,7 @@
import { installation, repository } from '$lib/stores/vcs';
import { Layout } from '@appwrite.io/pink-svelte';
import { writable } from 'svelte/store';
- import { ID, Runtime, VCSDeploymentType } from '@appwrite.io/console';
+ import { ID, Runtime, VCSDeploymentType, VCSDetectionType } from '@appwrite.io/console';
import type { Models } from '@appwrite.io/console';
import { onMount } from 'svelte';
import Details from '../(components)/details.svelte';
@@ -57,12 +57,40 @@
let silentMode = false;
let specification = specificationOptions[0].value;
+ let detectingRuntime = true;
+
onMount(async () => {
installation.set(data.installation);
repository.set(data.repository);
name = data.repository.name;
+
+ await detectRuntime();
});
+ async function detectRuntime() {
+ try {
+ detectingRuntime = true;
+
+ const detections = (await sdk
+ .forProject(page.params.regionn, page.params.project)
+ .vcs.createRepositoryDetection(
+ data.installation.$id,
+ page.params.repository,
+ VCSDetectionType.Runtime
+ )) as unknown as Models.DetectionRuntime; /* SDK return type is wrong atm */
+
+ entrypoint = detections.entrypoint;
+ buildCommand = detections.commands;
+ runtime = detections.runtime as Runtime;
+
+ trackEvent(Submit.FrameworkDetect, { runtime, source: 'repository' });
+ } catch (error) {
+ trackError(error, Submit.FrameworkDetect);
+ } finally {
+ detectingRuntime = false;
+ }
+ }
+
async function create() {
try {
const func = await sdk
@@ -154,7 +182,8 @@
bind:specification
{specificationOptions}
options={runtimeOptions}
- showEntrypoint />
+ showEntrypoint
+ loading={detectingRuntime} />
+ {rootDir}
+ loading={detectingRuntime} />
diff --git a/src/routes/(console)/project-[region]-[project]/functions/create-function/repository-[repository]/+page.ts b/src/routes/(console)/project-[region]-[project]/functions/create-function/repository-[repository]/+page.ts
index 6b98ecef0..66fc213fa 100644
--- a/src/routes/(console)/project-[region]-[project]/functions/create-function/repository-[repository]/+page.ts
+++ b/src/routes/(console)/project-[region]-[project]/functions/create-function/repository-[repository]/+page.ts
@@ -3,17 +3,17 @@ import { sdk } from '$lib/stores/sdk';
export const load = async ({ parent, params, url }) => {
const { installations, runtimesList, specificationsList } = await parent();
- const [repository] = await Promise.all([
- sdk
- .forProject(params.region, params.project)
- .vcs.getRepository(url.searchParams.get('installation'), params.repository)
- ]);
+ const repository = await sdk
+ .forProject(params.region, params.project)
+ .vcs.getRepository(url.searchParams.get('installation'), params.repository);
+
+ const installation = installations.installations.find(
+ (installation) => installation.$id === url.searchParams.get('installation')
+ );
return {
+ installation,
installations,
- installation: installations.installations.find(
- (installation) => installation.$id === url.searchParams.get('installation')
- ),
repository,
runtimesList,
specificationsList
diff --git a/src/routes/(console)/project-[region]-[project]/sites/create-site/repositories/repository-[repository]/+page.svelte b/src/routes/(console)/project-[region]-[project]/sites/create-site/repositories/repository-[repository]/+page.svelte
index a061a490f..f08f635a1 100644
--- a/src/routes/(console)/project-[region]-[project]/sites/create-site/repositories/repository-[repository]/+page.svelte
+++ b/src/routes/(console)/project-[region]-[project]/sites/create-site/repositories/repository-[repository]/+page.svelte
@@ -62,7 +62,7 @@
.forProject(page.params.region, page.params.project)
.vcs.createRepositoryDetection(
$installation.$id,
- data.repository.id,
+ page.params.repository,
VCSDetectionType.Framework,
rootDir
);
diff --git a/src/routes/(console)/project-[region]-[project]/sites/create-site/repositories/repository-[repository]/+page.ts b/src/routes/(console)/project-[region]-[project]/sites/create-site/repositories/repository-[repository]/+page.ts
index f5607d122..de559a2f3 100644
--- a/src/routes/(console)/project-[region]-[project]/sites/create-site/repositories/repository-[repository]/+page.ts
+++ b/src/routes/(console)/project-[region]-[project]/sites/create-site/repositories/repository-[repository]/+page.ts
@@ -5,11 +5,14 @@ import { buildVerboseDomain } from '../../store';
export const load = async ({ parent, params, url }) => {
const { installations, frameworks, project, organization, regionalConsoleVariables } =
await parent();
- const [repository] = await Promise.all([
- sdk
- .forProject(params.region, params.project)
- .vcs.getRepository(url.searchParams.get('installation'), params.repository)
- ]);
+
+ const repository = await sdk
+ .forProject(params.region, params.project)
+ .vcs.getRepository(url.searchParams.get('installation'), params.repository);
+
+ const installation = installations.installations.find(
+ (installation) => installation.$id === url.searchParams.get('installation')
+ );
const domain = await buildVerboseDomain(
regionalConsoleVariables._APP_DOMAIN_SITES,
@@ -21,9 +24,7 @@ export const load = async ({ parent, params, url }) => {
return {
installations,
- installation: installations.installations.find(
- (installation) => installation.$id === url.searchParams.get('installation')
- ),
+ installation,
repository,
frameworks,
domain