From 8112c3aab346c9ff048e32c6030530f3279f050f Mon Sep 17 00:00:00 2001 From: Thomas Trompette Date: Fri, 18 Apr 2025 11:26:51 +0200 Subject: [PATCH] Fix workflow run executed by empty (#11642) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Workflow run executed by should not be empty when the workflow is unamed. Adding Workflow as fallback Capture d’écran 2025-04-17 à 19 17 12 --- .../workflow-runner.workspace-service.ts | 17 +++++++++----- .../jobs/workflow-trigger.job.ts | 22 +++++++++++++------ .../workflow-trigger.workspace-service.ts | 10 ++++----- 3 files changed, 31 insertions(+), 18 deletions(-) diff --git a/packages/twenty-server/src/modules/workflow/workflow-runner/workspace-services/workflow-runner.workspace-service.ts b/packages/twenty-server/src/modules/workflow/workflow-runner/workspace-services/workflow-runner.workspace-service.ts index 971ad2156..1374e4da1 100644 --- a/packages/twenty-server/src/modules/workflow/workflow-runner/workspace-services/workflow-runner.workspace-service.ts +++ b/packages/twenty-server/src/modules/workflow/workflow-runner/workspace-services/workflow-runner.workspace-service.ts @@ -21,12 +21,17 @@ export class WorkflowRunnerWorkspaceService { private readonly billingUsageService: BillingUsageService, ) {} - async run( - workspaceId: string, - workflowVersionId: string, - payload: object, - source: ActorMetadata, - ) { + async run({ + workspaceId, + workflowVersionId, + payload, + source, + }: { + workspaceId: string; + workflowVersionId: string; + payload: object; + source: ActorMetadata; + }) { const canFeatureBeUsed = await this.billingUsageService.canFeatureBeUsed(workspaceId); diff --git a/packages/twenty-server/src/modules/workflow/workflow-trigger/jobs/workflow-trigger.job.ts b/packages/twenty-server/src/modules/workflow/workflow-trigger/jobs/workflow-trigger.job.ts index 17ac71f99..eb7eba7f0 100644 --- a/packages/twenty-server/src/modules/workflow/workflow-trigger/jobs/workflow-trigger.job.ts +++ b/packages/twenty-server/src/modules/workflow/workflow-trigger/jobs/workflow-trigger.job.ts @@ -1,5 +1,8 @@ import { Scope } from '@nestjs/common'; +import { isDefined } from 'class-validator'; +import isEmpty from 'lodash.isempty'; + import { InjectMessageQueue } from 'src/engine/core-modules/message-queue/decorators/message-queue.decorator'; import { Process } from 'src/engine/core-modules/message-queue/decorators/process.decorator'; import { Processor } from 'src/engine/core-modules/message-queue/decorators/processor.decorator'; @@ -24,6 +27,8 @@ export type WorkflowTriggerJobData = { payload: object; }; +const DEFAULT_WORKFLOW_NAME = 'Workflow'; + @Processor({ queueName: MessageQueue.workflowQueue, scope: Scope.REQUEST }) export class WorkflowTriggerJob { constructor( @@ -68,17 +73,20 @@ export class WorkflowTriggerJob { ); } - await this.workflowRunnerWorkspaceService.run( - data.workspaceId, - workflow.lastPublishedVersionId, - data.payload, - { + await this.workflowRunnerWorkspaceService.run({ + workspaceId: data.workspaceId, + workflowVersionId: workflow.lastPublishedVersionId, + payload: data.payload, + source: { source: FieldActorSource.WORKFLOW, - name: workflow.name, + name: + isDefined(workflow.name) && !isEmpty(workflow.name) + ? workflow.name + : DEFAULT_WORKFLOW_NAME, context: {}, workspaceMemberId: null, }, - ); + }); } catch (e) { // We remove cron if it exists when no valid workflowVersion exists await this.messageQueueService.removeCron({ diff --git a/packages/twenty-server/src/modules/workflow/workflow-trigger/workspace-services/workflow-trigger.workspace-service.ts b/packages/twenty-server/src/modules/workflow/workflow-trigger/workspace-services/workflow-trigger.workspace-service.ts index 99e2cb4da..30b6768f5 100644 --- a/packages/twenty-server/src/modules/workflow/workflow-trigger/workspace-services/workflow-trigger.workspace-service.ts +++ b/packages/twenty-server/src/modules/workflow/workflow-trigger/workspace-services/workflow-trigger.workspace-service.ts @@ -7,6 +7,7 @@ import { DatabaseEventAction } from 'src/engine/api/graphql/graphql-query-runner import { InjectMessageQueue } from 'src/engine/core-modules/message-queue/decorators/message-queue.decorator'; import { MessageQueue } from 'src/engine/core-modules/message-queue/message-queue.constants'; import { MessageQueueService } from 'src/engine/core-modules/message-queue/services/message-queue.service'; +import { ActorMetadata } from 'src/engine/metadata-modules/field-metadata/composite-types/actor.composite-type'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { ScopedWorkspaceContextFactory } from 'src/engine/twenty-orm/factories/scoped-workspace-context.factory'; import { WorkspaceRepository } from 'src/engine/twenty-orm/repository/workspace.repository'; @@ -35,7 +36,6 @@ import { WorkflowTriggerType } from 'src/modules/workflow/workflow-trigger/types import { assertVersionCanBeActivated } from 'src/modules/workflow/workflow-trigger/utils/assert-version-can-be-activated.util'; import { computeCronPatternFromSchedule } from 'src/modules/workflow/workflow-trigger/utils/compute-cron-pattern-from-schedule'; import { assertNever } from 'src/utils/assert'; -import { ActorMetadata } from 'src/engine/metadata-modules/field-metadata/composite-types/actor.composite-type'; @Injectable() export class WorkflowTriggerWorkspaceService { @@ -78,12 +78,12 @@ export class WorkflowTriggerWorkspaceService { workflowVersionId, ); - return await this.workflowRunnerWorkspaceService.run( - this.getWorkspaceId(), + return this.workflowRunnerWorkspaceService.run({ + workspaceId: this.getWorkspaceId(), workflowVersionId, payload, - createdBy, - ); + source: createdBy, + }); } async activateWorkflowVersion(workflowVersionId: string) {