diff --git a/packages/cli/src/WorkflowExecuteAdditionalData.ts b/packages/cli/src/WorkflowExecuteAdditionalData.ts index 717f8bd67e..f4f10472a2 100644 --- a/packages/cli/src/WorkflowExecuteAdditionalData.ts +++ b/packages/cli/src/WorkflowExecuteAdditionalData.ts @@ -1129,6 +1129,36 @@ export function getWorkflowHooksWorkerMain( // So to avoid confusion, we are removing other hooks. hookFunctions.nodeExecuteBefore = []; hookFunctions.nodeExecuteAfter = []; + hookFunctions.workflowExecuteAfter = [ + async function ( + this: WorkflowHooks, + fullRunData: IRun, + newStaticData: IDataObject, + ): Promise { + // Check config to know if execution should be saved or not + let saveDataErrorExecution = config.getEnv('executions.saveDataOnError') as string; + let saveDataSuccessExecution = config.getEnv('executions.saveDataOnSuccess') as string; + if (this.workflowData.settings !== undefined) { + saveDataErrorExecution = + (this.workflowData.settings.saveDataErrorExecution as string) || saveDataErrorExecution; + saveDataSuccessExecution = + (this.workflowData.settings.saveDataSuccessExecution as string) || + saveDataSuccessExecution; + } + + const workflowStatusFinal = determineFinalExecutionStatus(fullRunData); + + if ( + (workflowStatusFinal === 'success' && saveDataSuccessExecution === 'none') || + (workflowStatusFinal !== 'success' && saveDataErrorExecution === 'none') + ) { + await Container.get(ExecutionRepository).hardDelete({ + workflowId: this.workflowData.id as string, + executionId: this.executionId, + }); + } + }, + ]; return new WorkflowHooks(hookFunctions, mode, executionId, workflowData, optionalParameters); }