From 535202c1fe1e3a90b1aff2dad6632f615ca8aef8 Mon Sep 17 00:00:00 2001 From: Guillaume Bouvignies Date: Fri, 8 Dec 2023 18:20:23 +0100 Subject: [PATCH] feat: Add a git sync test button (#2817) --- .../components/ErrorOrRecoveryHandler.svelte | 2 +- .../(logged)/workspace_settings/+page.svelte | 92 ++++++++++++++++--- 2 files changed, 82 insertions(+), 12 deletions(-) diff --git a/frontend/src/lib/components/ErrorOrRecoveryHandler.svelte b/frontend/src/lib/components/ErrorOrRecoveryHandler.svelte index 62151ff3ed..e310461b88 100644 --- a/frontend/src/lib/components/ErrorOrRecoveryHandler.svelte +++ b/frontend/src/lib/components/ErrorOrRecoveryHandler.svelte @@ -80,7 +80,7 @@ workspace: $workspaceStore!, id: slackConnectionTestJob!.uuid, requestBody: { - reason: 'Slack message not sent after after 5s' + reason: 'Slack message not sent after 5s' } }) } catch (err) { diff --git a/frontend/src/routes/(root)/(logged)/workspace_settings/+page.svelte b/frontend/src/routes/(root)/(logged)/workspace_settings/+page.svelte index 05fc4274af..b597e3d9de 100644 --- a/frontend/src/routes/(root)/(logged)/workspace_settings/+page.svelte +++ b/frontend/src/routes/(root)/(logged)/workspace_settings/+page.svelte @@ -19,7 +19,8 @@ OauthService, Script, WorkspaceService, - HelpersService + HelpersService, + JobService } from '$lib/gen' import { enterpriseLicense, @@ -30,8 +31,8 @@ workspaceStore } from '$lib/stores' import { sendUserToast } from '$lib/toast' - import { setQueryWithoutLoad, emptyString } from '$lib/utils' - import { Scroll, Slack } from 'lucide-svelte' + import { setQueryWithoutLoad, emptyString, tryEvery } from '$lib/utils' + import { Scroll, Slack, XCircle, RotateCw, CheckCircle2 } from 'lucide-svelte' import BarsStaggered from '$lib/components/icons/BarsStaggered.svelte' import PremiumInfo from '$lib/components/settings/PremiumInfo.svelte' @@ -54,7 +55,13 @@ let errorHandlerMutedOnCancel: boolean | undefined = undefined let openaiResourceInitialPath: string | undefined = undefined let s3ResourceInitialPath: string | undefined = undefined - let gitSyncResourceInitialPath: string | undefined = undefined + let gitSyncResourcePath: string | undefined = undefined + let gitSyncTestJob: + | { + jobId: string + status: 'running' | 'success' | 'failure' + } + | undefined = undefined let codeCompletionEnabled: boolean = false let tab = ($page.url.searchParams.get('tab') as @@ -181,10 +188,10 @@ } } - async function editWindmillGitSyncSettings(gitRepoResourcePath: string): Promise { - gitSyncResourceInitialPath = gitRepoResourcePath - if (gitRepoResourcePath) { - let resourcePathWithPrefix = `$res:${gitRepoResourcePath}` + async function editWindmillGitSyncSettings(newGitRepoResourcePath: string): Promise { + gitSyncResourcePath = newGitRepoResourcePath + if (newGitRepoResourcePath) { + let resourcePathWithPrefix = `$res:${newGitRepoResourcePath}` await WorkspaceService.editWorkspaceGitSyncConfig({ workspace: $workspaceStore!, requestBody: { @@ -240,7 +247,7 @@ settings.large_file_storage?.type === LargeFileStorage.type.S3STORAGE ? settings.large_file_storage?.s3_resource_path?.replace('$res:', '') : undefined - gitSyncResourceInitialPath = settings.git_sync?.git_repo_resource_path?.replace('$res:', '') + gitSyncResourcePath = settings.git_sync?.git_repo_resource_path?.replace('$res:', '') } $: { @@ -282,6 +289,47 @@ scriptPath.endsWith('/workspace-or-schedule-error-handler-slack') ) } + + async function runGitSyncTestJob(gitRepoResourcePath: string | undefined) { + if (gitRepoResourcePath === undefined) { + return + } + let jobId = await JobService.runScriptByPath({ + workspace: $workspaceStore!, + path: 'hub/7841/git-repo-test-read-write-windmill', + requestBody: { + repo_url_resource_path: gitRepoResourcePath + } + }) + gitSyncTestJob = { + jobId: jobId, + status: 'running' + } + tryEvery({ + tryCode: async () => { + const testResult = await JobService.getCompletedJob({ + workspace: $workspaceStore!, + id: jobId + }) + gitSyncTestJob!.status = testResult.success ? 'success' : 'failure' + }, + timeoutCode: async () => { + try { + await JobService.cancelQueuedJob({ + workspace: $workspaceStore!, + id: jobId, + requestBody: { + reason: 'Git sync test job timed out after 5s' + } + }) + } catch (err) { + console.error(err) + } + }, + interval: 500, + timeout: 5000 + }) + } @@ -681,17 +729,39 @@
Filtering out certain sensitive folders from the sync will be available soon. -
+
{#key s3ResourceInitialPath} { editWindmillGitSyncSettings(ev.detail) }} /> + {/key}
+
+ {#if gitSyncTestJob !== undefined} + {#if gitSyncTestJob?.status === 'running'} + + {:else if gitSyncTestJob?.status === 'success'} + + {:else} + + {/if} + Git sync resource checked via Windmill job + + {gitSyncTestJob?.jobId} + + {/if} +
Git repository initial setup