Fix use as draft (#9718)
- remove delete serverless function when archiving workflow version - update copy serverless function to reset serverless function to old version - remove createNewWorkflowVersion and use createDraftFromWorkflowVersion - fix step update issue and optimistic rendering when generate draft from active version
This commit is contained in:
@ -198,37 +198,27 @@ export class WorkflowVersionStepWorkspaceService {
|
||||
step: WorkflowAction;
|
||||
workspaceId: string;
|
||||
}): Promise<WorkflowAction> {
|
||||
const newStepId = v4();
|
||||
|
||||
switch (step.type) {
|
||||
case WorkflowActionType.CODE: {
|
||||
const copiedServerlessFunction =
|
||||
await this.serverlessFunctionService.copyOneServerlessFunction({
|
||||
serverlessFunctionToCopyId:
|
||||
step.settings.input.serverlessFunctionId,
|
||||
serverlessFunctionToCopyVersion:
|
||||
step.settings.input.serverlessFunctionVersion,
|
||||
workspaceId,
|
||||
});
|
||||
await this.serverlessFunctionService.usePublishedVersionAsDraft({
|
||||
id: step.settings.input.serverlessFunctionId,
|
||||
version: step.settings.input.serverlessFunctionVersion,
|
||||
workspaceId,
|
||||
});
|
||||
|
||||
return {
|
||||
...step,
|
||||
id: newStepId,
|
||||
settings: {
|
||||
...step.settings,
|
||||
input: {
|
||||
...step.settings.input,
|
||||
serverlessFunctionId: copiedServerlessFunction.id,
|
||||
serverlessFunctionVersion: copiedServerlessFunction.latestVersion,
|
||||
serverlessFunctionVersion: 'draft',
|
||||
},
|
||||
},
|
||||
};
|
||||
}
|
||||
default: {
|
||||
return {
|
||||
...step,
|
||||
id: newStepId,
|
||||
};
|
||||
return step;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -473,17 +463,6 @@ export class WorkflowVersionStepWorkspaceService {
|
||||
|
||||
assertWorkflowVersionIsDraft(draftWorkflowVersion);
|
||||
|
||||
if (Array.isArray(draftWorkflowVersion.steps)) {
|
||||
await Promise.all(
|
||||
draftWorkflowVersion.steps.map((step) =>
|
||||
this.runWorkflowVersionStepDeletionSideEffects({
|
||||
step,
|
||||
workspaceId,
|
||||
}),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
const newWorkflowVersionTrigger = workflowVersionToCopy.trigger;
|
||||
const newWorkflowVersionSteps: WorkflowAction[] = [];
|
||||
|
||||
@ -500,6 +479,8 @@ export class WorkflowVersionStepWorkspaceService {
|
||||
steps: newWorkflowVersionSteps,
|
||||
trigger: newWorkflowVersionTrigger,
|
||||
});
|
||||
|
||||
return draftWorkflowVersion.id;
|
||||
}
|
||||
|
||||
private async runWorkflowVersionStepDeletionSideEffects({
|
||||
|
||||
@ -161,26 +161,30 @@ export class WorkflowStatusesUpdateJob {
|
||||
const newStep = { ...step };
|
||||
|
||||
if (step.type === WorkflowActionType.CODE) {
|
||||
let serverlessFunction;
|
||||
|
||||
try {
|
||||
serverlessFunction =
|
||||
await this.serverlessFunctionService.publishOneServerlessFunction(
|
||||
step.settings.input.serverlessFunctionId,
|
||||
workspaceId,
|
||||
);
|
||||
await this.serverlessFunctionService.publishOneServerlessFunction(
|
||||
step.settings.input.serverlessFunctionId,
|
||||
workspaceId,
|
||||
);
|
||||
} catch (e) {
|
||||
serverlessFunction = null;
|
||||
// publishOneServerlessFunction throws if no change have been
|
||||
// applied between draft and lastPublished version.
|
||||
// If no change have been applied, we just use the same
|
||||
// serverless function version
|
||||
}
|
||||
|
||||
if (serverlessFunction) {
|
||||
const newStepSettings = { ...step.settings };
|
||||
const serverlessFunction =
|
||||
await this.serverlessFunctionService.findOneOrFail({
|
||||
id: step.settings.input.serverlessFunctionId,
|
||||
workspaceId,
|
||||
});
|
||||
|
||||
newStepSettings.input.serverlessFunctionVersion =
|
||||
serverlessFunction.latestVersion;
|
||||
const newStepSettings = { ...step.settings };
|
||||
|
||||
newStep.settings = newStepSettings;
|
||||
}
|
||||
newStepSettings.input.serverlessFunctionVersion =
|
||||
serverlessFunction.latestVersion;
|
||||
|
||||
newStep.settings = newStepSettings;
|
||||
}
|
||||
newSteps.push(newStep);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user