From cae827a10997c58108fffcc8391084751995b10e Mon Sep 17 00:00:00 2001 From: bnechyporenko Date: Tue, 2 Jul 2024 20:31:14 +0200 Subject: [PATCH 1/3] Fixed an issue for cleaning the scaffolder workspace. Signed-off-by: bnechyporenko --- .../src/scaffolder/tasks/DatabaseTaskStore.ts | 18 +++++++++++------- .../scaffolder/tasks/NunjucksWorkflowRunner.ts | 2 +- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts index fe62572af9..0e6757345d 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts @@ -527,8 +527,10 @@ export class DatabaseTaskStore implements TaskStore { } async cleanWorkspace({ taskId }: { taskId: string }): Promise { - await this.db('tasks').where({ id: taskId }).update({ - workspace: undefined, + await this.db.transaction(async tx => { + await tx('tasks').where({ id: taskId }).update({ + workspace: null, + }); }); } @@ -537,11 +539,13 @@ export class DatabaseTaskStore implements TaskStore { taskId: string; }): Promise { if (options.path) { - await this.db('tasks') - .where({ id: options.taskId }) - .update({ - workspace: (await serializeWorkspace(options)).contents, - }); + await this.db.transaction(async tx => { + await tx('tasks') + .where({ id: options.taskId }) + .update({ + workspace: (await serializeWorkspace(options)).contents, + }); + }); } } diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.ts index 3b88fd0f10..aab1100a21 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.ts @@ -508,11 +508,11 @@ export class NunjucksWorkflowRunner implements WorkflowRunner { const output = this.render(task.spec.output, context, renderTemplate); await taskTrack.markSuccessful(); + await task.cleanWorkspace?.(); return { output }; } finally { if (workspacePath) { - await task.cleanWorkspace?.(); await fs.remove(workspacePath); } } From c160951121c9191d871995689b140bea07bd1d3a Mon Sep 17 00:00:00 2001 From: bnechyporenko Date: Mon, 15 Jul 2024 07:52:51 +0200 Subject: [PATCH 2/3] Added missing changeset Signed-off-by: bnechyporenko --- .changeset/five-tigers-share.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/five-tigers-share.md diff --git a/.changeset/five-tigers-share.md b/.changeset/five-tigers-share.md new file mode 100644 index 0000000000..507614c8b8 --- /dev/null +++ b/.changeset/five-tigers-share.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend': patch +--- + +Found the issue during testing the clean up of the workspace for the database implementation. From 6bd9e0361b6d9d6e539eff6df31eedb72aed89c8 Mon Sep 17 00:00:00 2001 From: bnechyporenko Date: Sun, 25 Aug 2024 20:13:09 +0200 Subject: [PATCH 3/3] fix Signed-off-by: bnechyporenko --- .../src/scaffolder/tasks/DatabaseTaskStore.ts | 19 ++++++++----------- .../tasks/DatabaseWorkspaceProvider.ts | 2 +- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts index e8ac7a35da..23fe793432 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts @@ -532,10 +532,8 @@ export class DatabaseTaskStore implements TaskStore { } async cleanWorkspace({ taskId }: { taskId: string }): Promise { - await this.db.transaction(async tx => { - await tx('tasks').where({ id: taskId }).update({ - workspace: null, - }); + await this.db('tasks').where({ id: taskId }).update({ + workspace: null, }); } @@ -544,13 +542,12 @@ export class DatabaseTaskStore implements TaskStore { taskId: string; }): Promise { if (options.path) { - await this.db.transaction(async tx => { - await tx('tasks') - .where({ id: options.taskId }) - .update({ - workspace: (await serializeWorkspace(options)).contents, - }); - }); + const workspace = (await serializeWorkspace(options)).contents; + await this.db('tasks') + .where({ id: options.taskId }) + .update({ + workspace, + }); } } diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseWorkspaceProvider.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseWorkspaceProvider.ts index 69f90b3d7e..b3c3c24975 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseWorkspaceProvider.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseWorkspaceProvider.ts @@ -29,7 +29,7 @@ export class DatabaseWorkspaceProvider implements WorkspaceProvider { path: string; taskId: string; }): Promise { - this.storage.serializeWorkspace?.(options); + await this.storage.serializeWorkspace?.(options); } public async rehydrateWorkspace(options: {