diff --git a/src/routes/(console)/project-[project]/sites/site-[site]/deployments/+page.svelte b/src/routes/(console)/project-[project]/sites/site-[site]/deployments/+page.svelte
index 5caa16dbb..29fd42786 100644
--- a/src/routes/(console)/project-[project]/sites/site-[site]/deployments/+page.svelte
+++ b/src/routes/(console)/project-[project]/sites/site-[site]/deployments/+page.svelte
@@ -227,5 +227,5 @@
{/if}
{#if showCreateDeployment}
-
+
{/if}
diff --git a/src/routes/(console)/project-[project]/sites/site-[site]/deployments/createGitDeploymentModal.svelte b/src/routes/(console)/project-[project]/sites/site-[site]/deployments/createGitDeploymentModal.svelte
index a9f94dd22..d4ae66449 100644
--- a/src/routes/(console)/project-[project]/sites/site-[site]/deployments/createGitDeploymentModal.svelte
+++ b/src/routes/(console)/project-[project]/sites/site-[site]/deployments/createGitDeploymentModal.svelte
@@ -3,48 +3,140 @@
import { Repositories } from '$lib/components/git';
import { Link } from '$lib/elements';
import { Button } from '$lib/elements/forms';
+ import InputSelectSearch from '$lib/elements/forms/inputSelectSearch.svelte';
import { sdk } from '$lib/stores/sdk';
+ import { installation, repository, sortBranches } from '$lib/stores/vcs';
+ import type { BuildRuntime, Framework, Models, ServeRuntime } from '@appwrite.io/console';
import { IconGithub } from '@appwrite.io/pink-icons-svelte';
- import { Icon, InlineCode, Layout, Typography } from '@appwrite.io/pink-svelte';
+ import { Icon, InlineCode, Layout, Spinner, Typography } from '@appwrite.io/pink-svelte';
import { onMount } from 'svelte';
export let show = false;
+ export let site: Models.Site;
let installations = { installations: [], total: 0 };
+ let hasRepository = !!site?.providerRepositoryId;
let selectedRepository: string = null;
+ let branch: string = null;
onMount(async () => {
installations = await sdk.forProject.vcs.listInstallations();
console.log(installations);
});
+
+ async function loadBranches() {
+ const { branches } = await sdk.forProject.vcs.listRepositoryBranches(
+ $installation.$id,
+ selectedRepository
+ );
+ const sorted = sortBranches(branches);
+ branch = sorted[0]?.name ?? null;
+
+ if (!branch) {
+ branch = 'main';
+ }
+
+ return sorted;
+ }
+
+ async function createDeployment() {
+ try {
+ if (!site.installationId || !site.providerRepositoryId || !branch) {
+ await sdk.forProject.sites.update(
+ site.$id,
+ site.name,
+ site?.framework as Framework,
+ site.enabled || undefined,
+ site.timeout || undefined,
+ site.installCommand || undefined,
+ site.buildCommand || undefined,
+ site.outputDirectory || undefined,
+ (site?.buildRuntime as BuildRuntime) || undefined,
+ (site?.serveRuntime as ServeRuntime) || undefined,
+ site.fallbackFile || undefined,
+ site.installationId || $installation.$id || undefined,
+ site.providerRepositoryId || $repository.id || undefined,
+ branch,
+ site.providerSilentMode || undefined,
+ undefined //TODO: add dir?
+ );
+ }
+
+ await sdk.forProject.sites.createDeployment();
+ } catch (error) {
+ console.error(error);
+ }
+ }
-
+
Enter a valid commit reference to create a new deployment from or
use the CLI to deploy. Learn more
-
-
-
-
-
- name
-
+ {#if installations && hasRepository}
+
+
+
+
+
+ {$repository.organization}/{$repository.name}
+
+
-
-
- console.log('test')} />
+
+ {#await loadBranches()}
+
+ {:then branches}
+ {@const options =
+ branches
+ ?.map((branch) => {
+ return {
+ value: branch.name,
+ label: branch.name
+ };
+ })
+ ?.sort((a, b) => {
+ return a.label > b.label ? 1 : -1;
+ }) ?? []}
+
+ {
+ branch = event.detail.value;
+ }}
+ interactiveOutput
+ name="branch"
+ {options} />
+ {/await}
+ {/if}
+ {#if !hasRepository}
+ {
+ repository.set(e.detail);
+ hasRepository = true;
+ }} />
+ {/if}
-
+