diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts index 2a39440775..5b99b5d0bc 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts @@ -268,6 +268,16 @@ export class DatabaseTaskStore implements TaskStore { return undefined; } + const getState = () => { + try { + return task.state ? JSON.parse(task.state) : undefined; + } catch (error) { + throw new Error( + `Failed to parse state of the task '${task.id}', ${error}`, + ); + } + }; + const secrets = this.parseTaskSecrets(task); return { id: task.id, @@ -277,6 +287,7 @@ export class DatabaseTaskStore implements TaskStore { createdAt: task.created_at, createdBy: task.created_by ?? undefined, secrets, + state: getState(), }; }); } diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.ts index a2018fe127..29a22716ba 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.ts @@ -314,6 +314,7 @@ export class StorageTaskBroker implements TaskBroker { spec: pendingTask.spec, secrets: pendingTask.secrets, createdBy: pendingTask.createdBy, + state: pendingTask.state, }, this.storage, abortController.signal, diff --git a/plugins/scaffolder-node/src/tasks/types.ts b/plugins/scaffolder-node/src/tasks/types.ts index a072bb5f5e..aef2c5f360 100644 --- a/plugins/scaffolder-node/src/tasks/types.ts +++ b/plugins/scaffolder-node/src/tasks/types.ts @@ -59,6 +59,7 @@ export type SerializedTask = { lastHeartbeatAt?: string; createdBy?: string; secrets?: TaskSecrets; + state?: JsonObject; }; /**