Fix workflow run executed by empty (#11642)

Workflow run executed by should not be empty when the workflow is
unamed. Adding Workflow as fallback

<img width="1072" alt="Capture d’écran 2025-04-17 à 19 17 12"
src="https://github.com/user-attachments/assets/e4cc3360-06e5-47e8-ba05-28a0eafab994"
/>
This commit is contained in:
Thomas Trompette
2025-04-18 11:26:51 +02:00
committed by GitHub
parent 8a2a004fb5
commit 8112c3aab3
3 changed files with 31 additions and 18 deletions

View File

@ -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);

View File

@ -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({

View File

@ -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) {