From 806a168e185cdaf82356ae1aa0fef77dc1558c8a Mon Sep 17 00:00:00 2001 From: wendrul <53628737+wendrul@users.noreply.github.com> Date: Wed, 12 Nov 2025 13:32:36 +0100 Subject: [PATCH] Add link to job + update git sync script tip if applicable on fork fail (#7117) * Add link to job + update git sync script tip if applicable on fork fail * Format --- .../workspaceSettings/CreateWorkspace.svelte | 95 +++++++++++++++++-- 1 file changed, 89 insertions(+), 6 deletions(-) diff --git a/frontend/src/lib/components/workspaceSettings/CreateWorkspace.svelte b/frontend/src/lib/components/workspaceSettings/CreateWorkspace.svelte index b230658e36..6f6041cc4b 100644 --- a/frontend/src/lib/components/workspaceSettings/CreateWorkspace.svelte +++ b/frontend/src/lib/components/workspaceSettings/CreateWorkspace.svelte @@ -4,12 +4,14 @@ import { goto } from '$lib/navigation' import { base } from '$lib/base' import { + JobService, ResourceService, SettingService, UserService, VariableService, WorkspaceService, - type AIProvider + type AIProvider, + type CompletedJob } from '$lib/gen' import { validateUsername } from '$lib/utils' import { logoutWithRedirect } from '$lib/logout' @@ -79,8 +81,41 @@ const WM_FORK_PREFIX = 'wm-fork-' let forkCreationLoading = $state(false) - let forkCreationError = $state("") + let forkCreationError = $state('') let errorMsgs: string[] = $state([]) + let failedSyncJobs: string[] = $state([]) + + async function fetchFailedSyncJobs(jobs: string[]): Promise { + let ret: CompletedJob[] = [] + for (const job of jobs) { + let j = await JobService.getCompletedJob({ + id: job, + workspace: $workspaceStore! + }) + ret.push(j) + } + return ret + } + + function isPathVersionLessThan(path: string | undefined, version: number): boolean { + if (!path || !path.startsWith('hub/')) { + return false + } + + const parts = path.split('/') + + if (parts.length < 2) { + return false + } + + const embeddedVersion = parseInt(parts[1], 10) + + if (isNaN(embeddedVersion)) { + return false + } + + return embeddedVersion < version + } async function createOrForkWorkspace() { const prefixed_id = `${WM_FORK_PREFIX}${id}` @@ -88,7 +123,8 @@ if ($workspaceStore) { forkCreationLoading = true errorMsgs = [] - forkCreationError = "" + failedSyncJobs = [] + forkCreationError = '' let gitSyncJobIds = await WorkspaceService.createWorkspaceForkGitBranch({ workspace: $workspaceStore!, @@ -109,6 +145,7 @@ onProgress: (status) => { if (status.status === 'failure') { errorMsgs.push(status.error ?? 'Deploy fork job failed') + failedSyncJobs.push(jobId) } } }) @@ -123,7 +160,7 @@ return } if (errorMsgs.length != 0) { - forkCreationError = "Failed to create a branch for this fork on the git sync repo(s)" + forkCreationError = 'Failed to create a branch for this fork on the git sync repo(s)' forkCreationLoading = false sendUserToast( `Could not fork workspace ${$workspaceStore} because branch creation failed: ${errorMsgs}`, @@ -143,7 +180,7 @@ }) } catch (e) { forkCreationError = `Failed to create fork '${prefixed_id}'` - errorMsgs.push(e?.body ?? e ?? "Unknown error") + errorMsgs.push(e?.body ?? e ?? 'Unknown error') forkCreationLoading = false sendUserToast(`Could not create fork '${prefixed_id}' ${e}`, true) return @@ -319,11 +356,57 @@ {/if} {#if errorMsgs.length != 0} -