deprecations: more scaffolder backend stuff

Signed-off-by: blam <ben@blam.sh>
This commit is contained in:
blam
2022-02-18 19:07:08 +01:00
parent c654699a27
commit 65a7939c6c
5 changed files with 47 additions and 30 deletions
+6
View File
@@ -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`
+16 -13
View File
@@ -322,6 +322,16 @@ export type CreateWorkerOptions = {
additionalTemplateFilters?: Record<string, TemplateFilter>;
};
// @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<void>;
complete(result: TaskCompletionState, metadata?: JsonObject): Promise<void>;
// (undocumented)
done: boolean;
// (undocumented)
emitLog(message: string, metadata?: JsonValue): Promise<void>;
emitLog(message: string, logMetadata?: JsonObject): Promise<void>;
// (undocumented)
getWorkspaceName(): Promise<string>;
// (undocumented)
@@ -536,14 +546,14 @@ export class TaskManager implements TaskContext {
complete(result: TaskCompletionState, metadata?: JsonObject): Promise<void>;
// (undocumented)
static create(
state: TaskState,
task: CurrentClaimedTask,
storage: TaskStore,
logger: Logger_2,
): TaskManager;
// (undocumented)
get done(): boolean;
// (undocumented)
emitLog(message: string, metadata?: JsonObject): Promise<void>;
emitLog(message: string, logMetadata?: JsonObject): Promise<void>;
// (undocumented)
getWorkspaceName(): Promise<string>;
// (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 =
@@ -38,39 +38,39 @@ export class TaskManager implements TaskContext {
private heartbeatTimeoutId?: ReturnType<typeof setInterval>;
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<void> {
async emitLog(message: string, logMetadata?: JsonObject): Promise<void> {
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<void> {
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<void>(_resolve => {
@@ -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 {
@@ -146,8 +146,8 @@ export interface TaskContext {
spec: TaskSpec;
secrets?: TaskSecrets;
done: boolean;
emitLog(message: string, metadata?: JsonValue): Promise<void>;
complete(result: TaskCompletionState, metadata?: JsonValue): Promise<void>;
emitLog(message: string, logMetadata?: JsonObject): Promise<void>;
complete(result: TaskCompletionState, metadata?: JsonObject): Promise<void>;
getWorkspaceName(): Promise<string>;
}