From 712f2642d5d475bb5106f6b314dd1e2ad1590b3f Mon Sep 17 00:00:00 2001 From: Pete Bacon Darwin Date: Sat, 14 Mar 2020 13:20:51 +0000 Subject: [PATCH] refactor(ngcc): add message text to task outcomes (#36083) This sets up the task execution to be able to report failed compiles PR Close #36083 --- packages/compiler-cli/ngcc/src/execution/api.ts | 5 ++++- .../ngcc/src/execution/cluster/api.ts | 1 + .../ngcc/src/execution/cluster/worker.ts | 5 +++-- packages/compiler-cli/ngcc/src/main.ts | 2 +- .../ngcc/test/execution/cluster/worker_spec.ts | 15 +++++++++++++-- 5 files changed, 22 insertions(+), 6 deletions(-) diff --git a/packages/compiler-cli/ngcc/src/execution/api.ts b/packages/compiler-cli/ngcc/src/execution/api.ts index be8fd5813f..6a363878fb 100644 --- a/packages/compiler-cli/ngcc/src/execution/api.ts +++ b/packages/compiler-cli/ngcc/src/execution/api.ts @@ -71,12 +71,15 @@ export interface Task extends JsonObject { } /** A function to be called once a task has been processed. */ -export type TaskCompletedCallback = (task: Task, outcome: TaskProcessingOutcome) => void; +export type TaskCompletedCallback = + (task: Task, outcome: TaskProcessingOutcome, message: string | null) => void; /** Represents the outcome of processing a `Task`. */ export const enum TaskProcessingOutcome { /** Successfully processed the target format property. */ Processed, + /** Failed to process the target format. */ + Failed, } /** diff --git a/packages/compiler-cli/ngcc/src/execution/cluster/api.ts b/packages/compiler-cli/ngcc/src/execution/cluster/api.ts index 75ce23e4d0..15b20771d1 100644 --- a/packages/compiler-cli/ngcc/src/execution/cluster/api.ts +++ b/packages/compiler-cli/ngcc/src/execution/cluster/api.ts @@ -33,6 +33,7 @@ export interface ProcessTaskMessage extends JsonObject { export interface TaskCompletedMessage extends JsonObject { type: 'task-completed'; outcome: TaskProcessingOutcome; + message: string|null; } /** A message requesting the update of a `package.json` file. */ diff --git a/packages/compiler-cli/ngcc/src/execution/cluster/worker.ts b/packages/compiler-cli/ngcc/src/execution/cluster/worker.ts index 3be80a13ef..c30a5f0e5a 100644 --- a/packages/compiler-cli/ngcc/src/execution/cluster/worker.ts +++ b/packages/compiler-cli/ngcc/src/execution/cluster/worker.ts @@ -30,8 +30,9 @@ export class ClusterWorker { throw new Error('Tried to instantiate `ClusterWorker` on the master process.'); } - this.compile = - createCompileFn((_task, outcome) => sendMessageToMaster({type: 'task-completed', outcome})); + this.compile = createCompileFn( + (_task, outcome, message) => + sendMessageToMaster({type: 'task-completed', outcome, message})); } run(): Promise { diff --git a/packages/compiler-cli/ngcc/src/main.ts b/packages/compiler-cli/ngcc/src/main.ts index d7fd2fb9b7..94ba18f4f8 100644 --- a/packages/compiler-cli/ngcc/src/main.ts +++ b/packages/compiler-cli/ngcc/src/main.ts @@ -300,7 +300,7 @@ export function mainNgcc({basePath, targetEntryPointPath, logger.debug(` Successfully compiled ${entryPoint.name} : ${formatProperty}`); - onTaskCompleted(task, TaskProcessingOutcome.Processed); + onTaskCompleted(task, TaskProcessingOutcome.Processed, null); }; }; diff --git a/packages/compiler-cli/ngcc/test/execution/cluster/worker_spec.ts b/packages/compiler-cli/ngcc/test/execution/cluster/worker_spec.ts index 201d469bb5..1a5d6c09eb 100644 --- a/packages/compiler-cli/ngcc/test/execution/cluster/worker_spec.ts +++ b/packages/compiler-cli/ngcc/test/execution/cluster/worker_spec.ts @@ -54,15 +54,26 @@ describe('ClusterWorker', () => { expect(createCompileFnSpy).toHaveBeenCalledWith(jasmine.any(Function)); }); - it('should set up `compileFn()` to send a `task-completed` message to master', () => { + it('should set up `compileFn()` to send `task-completed` messages to master', () => { new ClusterWorker(mockLogger, createCompileFnSpy); const onTaskCompleted: TaskCompletedCallback = createCompileFnSpy.calls.argsFor(0)[0]; - onTaskCompleted(null as any, TaskProcessingOutcome.Processed); + onTaskCompleted(null as any, TaskProcessingOutcome.Processed, null); expect(processSendSpy).toHaveBeenCalledTimes(1); expect(processSendSpy).toHaveBeenCalledWith({ type: 'task-completed', outcome: TaskProcessingOutcome.Processed, + message: null + }); + + processSendSpy.calls.reset(); + + onTaskCompleted(null as any, TaskProcessingOutcome.Failed, 'error message'); + expect(processSendSpy).toHaveBeenCalledTimes(1); + expect(processSendSpy).toHaveBeenCalledWith({ + type: 'task-completed', + outcome: TaskProcessingOutcome.Failed, + message: 'error message', }); }); });