Fix workflow run ouput format (#10302)

- Adapt the frontend to use the new output format
This commit is contained in:
Baptiste Devessier
2025-02-19 15:10:59 +01:00
committed by GitHub
parent ad9af65898
commit 77caf36d90
8 changed files with 94 additions and 119 deletions

View File

@ -231,7 +231,7 @@ export class WorkflowVisualizerPage {
async closeSidePanel() {
const closeButton = this.#page.getByTestId(
'page-header-close-command-menu-button',
'page-header-command-menu-button',
);
await closeButton.click();

View File

@ -194,20 +194,20 @@ export const useRecordShowContainerTabs = (
ifRelationsMissing: [],
},
},
// workflowRunFlow: {
// title: 'Flow',
// position: 0,
// Icon: IconSettings,
// cards: [{ type: CardType.WorkflowRunCard }],
// hide: {
// ifMobile: false,
// ifDesktop: false,
// ifInRightDrawer: false,
// ifFeaturesDisabled: [FeatureFlagKey.IsWorkflowEnabled],
// ifRequiredObjectsInactive: [],
// ifRelationsMissing: [],
// },
// },
workflowRunFlow: {
title: 'Flow',
position: 0,
Icon: IconSettings,
cards: [{ type: CardType.WorkflowRunCard }],
hide: {
ifMobile: false,
ifDesktop: false,
ifInRightDrawer: false,
ifFeaturesDisabled: [FeatureFlagKey.IsWorkflowEnabled],
ifRequiredObjectsInactive: [],
ifRelationsMissing: [],
},
},
timeline: null,
},
},

View File

@ -188,8 +188,6 @@ export type WorkflowVersion = {
type StepRunOutput = {
id: string;
name: string;
type: string;
outputs: {
attemptCount: number;
result: object | undefined;
@ -197,8 +195,14 @@ type StepRunOutput = {
}[];
};
export type WorkflowRunOutputStepsOutput = Record<string, StepRunOutput>;
export type WorkflowRunOutput = {
steps: Record<string, StepRunOutput>;
flow: {
trigger: WorkflowTrigger;
steps: WorkflowAction[];
};
stepsOutput?: WorkflowRunOutputStepsOutput;
error?: string;
};

View File

@ -1,4 +1,3 @@
import { useWorkflowVersion } from '@/workflow/hooks/useWorkflowVersion';
import { workflowVersionIdState } from '@/workflow/states/workflowVersionIdState';
import { WorkflowRun } from '@/workflow/types/Workflow';
import { workflowDiagramState } from '@/workflow/workflow-diagram/states/workflowDiagramState';
@ -14,8 +13,6 @@ export const WorkflowRunVisualizerEffect = ({
workflowVersionId: string;
workflowRun: WorkflowRun;
}) => {
const workflowVersion = useWorkflowVersion(workflowVersionId);
const setWorkflowVersionId = useSetRecoilState(workflowVersionIdState);
const setWorkflowDiagram = useSetRecoilState(workflowDiagramState);
@ -24,26 +21,20 @@ export const WorkflowRunVisualizerEffect = ({
}, [setWorkflowVersionId, workflowVersionId]);
useEffect(() => {
if (
!(
isDefined(workflowVersion) &&
isDefined(workflowVersion.trigger) &&
isDefined(workflowVersion.steps)
)
) {
if (!isDefined(workflowRun.output)) {
setWorkflowDiagram(undefined);
return;
}
const nextWorkflowDiagram = generateWorkflowRunDiagram({
trigger: workflowVersion.trigger,
steps: workflowVersion.steps,
output: workflowRun.output,
trigger: workflowRun.output.flow.trigger,
steps: workflowRun.output.flow.steps,
stepsOutput: workflowRun.output.stepsOutput,
});
setWorkflowDiagram(nextWorkflowDiagram);
}, [setWorkflowDiagram, workflowRun.output, workflowVersion]);
}, [setWorkflowDiagram, workflowRun.output]);
return null;
};

View File

@ -1,5 +1,5 @@
import {
WorkflowRunOutput,
WorkflowRunOutputStepsOutput,
WorkflowStep,
WorkflowTrigger,
} from '@/workflow/types/Workflow';
@ -76,18 +76,14 @@ describe('generateWorkflowRunDiagram', () => {
},
},
];
const output: WorkflowRunOutput = {
steps: {
step1: {
id: 'step1',
name: 'Step 1',
outputs: [],
type: 'CODE',
},
const stepsOutput: WorkflowRunOutputStepsOutput = {
step1: {
id: 'step1',
outputs: [],
},
};
const result = generateWorkflowRunDiagram({ trigger, steps, output });
const result = generateWorkflowRunDiagram({ trigger, steps, stepsOutput });
expect(result).toMatchInlineSnapshot(`
{
@ -249,24 +245,20 @@ describe('generateWorkflowRunDiagram', () => {
},
},
];
const output: WorkflowRunOutput = {
steps: {
step1: {
id: 'step1',
name: 'Step 1',
outputs: [
{
attemptCount: 1,
result: undefined,
error: '',
},
],
type: 'CODE',
},
const stepsOutput: WorkflowRunOutputStepsOutput = {
step1: {
id: 'step1',
outputs: [
{
attemptCount: 1,
result: undefined,
error: '',
},
],
},
};
const result = generateWorkflowRunDiagram({ trigger, steps, output });
const result = generateWorkflowRunDiagram({ trigger, steps, stepsOutput });
expect(result).toMatchInlineSnapshot(`
{
@ -428,48 +420,40 @@ describe('generateWorkflowRunDiagram', () => {
},
},
];
const output: WorkflowRunOutput = {
steps: {
step1: {
id: 'step1',
name: 'Step 1',
outputs: [
{
attemptCount: 1,
result: {},
error: undefined,
},
],
type: 'CODE',
},
step2: {
id: 'step2',
name: 'Step 2',
outputs: [
{
attemptCount: 1,
result: {},
error: undefined,
},
],
type: 'CODE',
},
step3: {
id: 'step3',
name: 'Step 3',
outputs: [
{
attemptCount: 1,
result: {},
error: undefined,
},
],
type: 'CODE',
},
const stepsOutput: WorkflowRunOutputStepsOutput = {
step1: {
id: 'step1',
outputs: [
{
attemptCount: 1,
result: {},
error: undefined,
},
],
},
step2: {
id: 'step2',
outputs: [
{
attemptCount: 1,
result: {},
error: undefined,
},
],
},
step3: {
id: 'step3',
outputs: [
{
attemptCount: 1,
result: {},
error: undefined,
},
],
},
};
const result = generateWorkflowRunDiagram({ trigger, steps, output });
const result = generateWorkflowRunDiagram({ trigger, steps, stepsOutput });
expect(result).toMatchInlineSnapshot(`
{
@ -633,9 +617,9 @@ describe('generateWorkflowRunDiagram', () => {
},
},
];
const output = null;
const stepsOutput = undefined;
const result = generateWorkflowRunDiagram({ trigger, steps, output });
const result = generateWorkflowRunDiagram({ trigger, steps, stepsOutput });
expect(result).toMatchInlineSnapshot(`
{
@ -815,24 +799,20 @@ describe('generateWorkflowRunDiagram', () => {
},
},
];
const output: WorkflowRunOutput = {
steps: {
step1: {
id: 'step1',
name: 'Step 1',
outputs: [
{
attemptCount: 1,
result: {},
error: undefined,
},
],
type: 'CODE',
},
const stepsOutput: WorkflowRunOutputStepsOutput = {
step1: {
id: 'step1',
outputs: [
{
attemptCount: 1,
result: {},
error: undefined,
},
],
},
};
const result = generateWorkflowRunDiagram({ trigger, steps, output });
const result = generateWorkflowRunDiagram({ trigger, steps, stepsOutput });
expect(result).toMatchInlineSnapshot(`
{

View File

@ -1,5 +1,5 @@
import {
WorkflowRunOutput,
WorkflowRunOutputStepsOutput,
WorkflowStep,
WorkflowTrigger,
} from '@/workflow/types/Workflow';
@ -21,11 +21,11 @@ import { v4 } from 'uuid';
export const generateWorkflowRunDiagram = ({
trigger,
steps,
output,
stepsOutput,
}: {
trigger: WorkflowTrigger;
steps: Array<WorkflowStep>;
output: WorkflowRunOutput | null;
stepsOutput: WorkflowRunOutputStepsOutput | undefined;
}): WorkflowRunDiagram => {
const triggerBase = getWorkflowDiagramTriggerNode({ trigger });
@ -78,7 +78,7 @@ export const generateWorkflowRunDiagram = ({
});
}
const runResult = output?.steps[nodeId];
const runResult = stepsOutput?.[nodeId];
let runStatus: WorkflowDiagramRunStatus;
if (skippedExecution) {

View File

@ -46,7 +46,7 @@ export type WorkflowRunOutput = {
trigger: WorkflowTrigger;
steps: WorkflowAction[];
};
stepsOutput: Record<string, StepRunOutput>;
stepsOutput?: Record<string, StepRunOutput>;
error?: string;
};

View File

@ -70,7 +70,7 @@ export class WorkflowExecutorWorkspaceService {
};
}
const stepOutput = workflowExecutorState.stepsOutput[step.id];
const stepOutput = workflowExecutorState.stepsOutput?.[step.id];
const error =
result.error?.errorMessage ??