From 65a7939c6c1c548bf537d339cdaec146f88d0f11 Mon Sep 17 00:00:00 2001 From: blam Date: Fri, 18 Feb 2022 19:07:08 +0100 Subject: [PATCH] deprecations: more scaffolder backend stuff Signed-off-by: blam --- .changeset/eight-houses-remain.md | 6 ++++ plugins/scaffolder-backend/api-report.md | 29 ++++++++------- .../src/scaffolder/tasks/StorageTaskBroker.ts | 36 +++++++++++-------- .../src/scaffolder/tasks/index.ts | 2 +- .../src/scaffolder/tasks/types.ts | 4 +-- 5 files changed, 47 insertions(+), 30 deletions(-) create mode 100644 .changeset/eight-houses-remain.md diff --git a/.changeset/eight-houses-remain.md b/.changeset/eight-houses-remain.md new file mode 100644 index 0000000000..27921bdaa5 --- /dev/null +++ b/.changeset/eight-houses-remain.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-scaffolder-backend': patch +--- + +- **DEPRECATED** - `TaskState` has been deprecated in favour of `CurrentClaimedTask` +- Narrowed the types from `JSONValue` to `JSONObject` as the usage is and should always be `JSONObject` for `complete` and `emitLog` `metadata` in `TaskContext` diff --git a/plugins/scaffolder-backend/api-report.md b/plugins/scaffolder-backend/api-report.md index aea6689183..bd507d892a 100644 --- a/plugins/scaffolder-backend/api-report.md +++ b/plugins/scaffolder-backend/api-report.md @@ -322,6 +322,16 @@ export type CreateWorkerOptions = { additionalTemplateFilters?: Record; }; +// @public +export interface CurrentClaimedTask { + // (undocumented) + secrets?: TaskSecrets; + // (undocumented) + spec: TaskSpec; + // (undocumented) + taskId: string; +} + // @public export class DatabaseTaskStore implements TaskStore { // (undocumented) @@ -514,11 +524,11 @@ export type TaskCompletionState = 'failed' | 'completed'; // @public export interface TaskContext { // (undocumented) - complete(result: TaskCompletionState, metadata?: JsonValue): Promise; + complete(result: TaskCompletionState, metadata?: JsonObject): Promise; // (undocumented) done: boolean; // (undocumented) - emitLog(message: string, metadata?: JsonValue): Promise; + emitLog(message: string, logMetadata?: JsonObject): Promise; // (undocumented) getWorkspaceName(): Promise; // (undocumented) @@ -536,14 +546,14 @@ export class TaskManager implements TaskContext { complete(result: TaskCompletionState, metadata?: JsonObject): Promise; // (undocumented) static create( - state: TaskState, + task: CurrentClaimedTask, storage: TaskStore, logger: Logger_2, ): TaskManager; // (undocumented) get done(): boolean; // (undocumented) - emitLog(message: string, metadata?: JsonObject): Promise; + emitLog(message: string, logMetadata?: JsonObject): Promise; // (undocumented) getWorkspaceName(): Promise; // (undocumented) @@ -563,15 +573,8 @@ export { TaskSpecV1beta2 }; export { TaskSpecV1beta3 }; -// @public -export interface TaskState { - // (undocumented) - secrets?: TaskSecrets; - // (undocumented) - spec: TaskSpec; - // (undocumented) - taskId: string; -} +// @public @deprecated +export type TaskState = CurrentClaimedTask; // @public export type TaskStatus = diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.ts index e7fd76ea9a..898516ef3b 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.ts @@ -38,39 +38,39 @@ export class TaskManager implements TaskContext { private heartbeatTimeoutId?: ReturnType; - static create(state: TaskState, storage: TaskStore, logger: Logger) { - const agent = new TaskManager(state, storage, logger); + static create(task: CurrentClaimedTask, storage: TaskStore, logger: Logger) { + const agent = new TaskManager(task, storage, logger); agent.startTimeout(); return agent; } // Runs heartbeat internally private constructor( - private readonly state: TaskState, + private readonly task: CurrentClaimedTask, private readonly storage: TaskStore, private readonly logger: Logger, ) {} get spec() { - return this.state.spec; + return this.task.spec; } get secrets() { - return this.state.secrets; + return this.task.secrets; } async getWorkspaceName() { - return this.state.taskId; + return this.task.taskId; } get done() { return this.isDone; } - async emitLog(message: string, metadata?: JsonObject): Promise { + async emitLog(message: string, logMetadata?: JsonObject): Promise { await this.storage.emitLogEvent({ - taskId: this.state.taskId, - body: { message, ...metadata }, + taskId: this.task.taskId, + body: { message, ...logMetadata }, }); } @@ -79,7 +79,7 @@ export class TaskManager implements TaskContext { metadata?: JsonObject, ): Promise { await this.storage.completeTask({ - taskId: this.state.taskId, + taskId: this.task.taskId, status: result === 'failed' ? 'failed' : 'completed', eventBody: { message: `Run completed with status: ${result}`, @@ -95,13 +95,13 @@ export class TaskManager implements TaskContext { private startTimeout() { this.heartbeatTimeoutId = setTimeout(async () => { try { - await this.storage.heartbeatTask(this.state.taskId); + await this.storage.heartbeatTask(this.task.taskId); this.startTimeout(); } catch (error) { this.isDone = true; this.logger.error( - `Heartbeat for task ${this.state.taskId} failed`, + `Heartbeat for task ${this.task.taskId} failed`, error, ); } @@ -110,16 +110,24 @@ export class TaskManager implements TaskContext { } /** - * TaskState + * Stores the state of the current claimed task passed to the TaskContext * * @public */ -export interface TaskState { +export interface CurrentClaimedTask { spec: TaskSpec; taskId: string; secrets?: TaskSecrets; } +/** + * TaskState + * + * @public + * @deprecated use CurrentClaimedTask instead + */ +export type TaskState = CurrentClaimedTask; + function defer() { let resolve = () => {}; const promise = new Promise(_resolve => { diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/index.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/index.ts index 89404d3390..aa1640dae2 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/index.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/index.ts @@ -15,7 +15,7 @@ */ export { DatabaseTaskStore } from './DatabaseTaskStore'; export { TaskManager } from './StorageTaskBroker'; -export type { TaskState } from './StorageTaskBroker'; +export type { CurrentClaimedTask, TaskState } from './StorageTaskBroker'; export { TaskWorker } from './TaskWorker'; export type { CreateWorkerOptions } from './TaskWorker'; export type { diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/types.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/types.ts index 6cc3eabdc7..e17f8b2c3b 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/types.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/types.ts @@ -146,8 +146,8 @@ export interface TaskContext { spec: TaskSpec; secrets?: TaskSecrets; done: boolean; - emitLog(message: string, metadata?: JsonValue): Promise; - complete(result: TaskCompletionState, metadata?: JsonValue): Promise; + emitLog(message: string, logMetadata?: JsonObject): Promise; + complete(result: TaskCompletionState, metadata?: JsonObject): Promise; getWorkspaceName(): Promise; }