From 3492cdae2a164417ea7131019f53b75e1c12df96 Mon Sep 17 00:00:00 2001 From: Tifenn LE GOFF Date: Thu, 21 May 2026 18:14:53 +0200 Subject: [PATCH] Build skipList before exclude enrichment in apply section --- internal/impl/pure/processor_workflow.go | 22 +++++++++---------- internal/impl/pure/processor_workflow_test.go | 2 ++ 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/internal/impl/pure/processor_workflow.go b/internal/impl/pure/processor_workflow.go index dafd32b37..cb8a2a8e3 100644 --- a/internal/impl/pure/processor_workflow.go +++ b/internal/impl/pure/processor_workflow.go @@ -398,6 +398,17 @@ func (w *Workflow) skipFromMeta(root any) map[string]struct{} { gObj := gabs.Wrap(root) + // Skip stages that were already skipped in a previous run of this workflow. + if skipped, ok := gObj.S(append(w.metaPath, "skipped")...).Data().([]any); ok { + for _, id := range skipped { + if idStr, isString := id.(string); isString { + if _, exists := w.allStages[idStr]; exists { + skipList[idStr] = struct{}{} + } + } + } + } + // If a whitelist is provided for this flow then skip stages that aren't // within it. if apply, ok := gObj.S(append(w.metaPath, "apply")...).Data().([]any); ok { @@ -424,17 +435,6 @@ func (w *Workflow) skipFromMeta(root any) map[string]struct{} { } } - // Skip stages that were already skipped in a previous run of this workflow. - if skipped, ok := gObj.S(append(w.metaPath, "skipped")...).Data().([]any); ok { - for _, id := range skipped { - if idStr, isString := id.(string); isString { - if _, exists := w.allStages[idStr]; exists { - skipList[idStr] = struct{}{} - } - } - } - } - return skipList } diff --git a/internal/impl/pure/processor_workflow_test.go b/internal/impl/pure/processor_workflow_test.go index e1a03dc79..f57715be0 100644 --- a/internal/impl/pure/processor_workflow_test.go +++ b/internal/impl/pure/processor_workflow_test.go @@ -396,11 +396,13 @@ func TestWorkflows(t *testing.T) { msg(`{"meta":{"workflow":{"apply":["2"]}},"baz":2}`), msg(`{"meta":{"workflow":{"skipped":["0"]}},"bar":3}`), msg(`{"meta":{"workflow":{"succeeded":["1"]}},"baz":9}`), + msg(`{"bar":3,"baz":2,"meta":{"workflow":{"apply":["1","2"],"failed":{"0":"request mapping failed: failed assignment (line 1): field ` + "`this.foo`" + `: value is null"},"skipped":["1","2"]}}}`), }, output: []mockMsg{ msg(`{"baz":2,"buz":4,"meta":{"workflow":{"previous":{"apply":["2"]},"skipped":["0","1"],"succeeded":["2"]}}}`), msg(`{"bar":3,"baz":8,"buz":10,"meta":{"workflow":{"previous":{"skipped":["0"]},"skipped":["0"],"succeeded":["1","2"]}}}`), msg(`{"baz":9,"buz":11,"meta":{"workflow":{"failed":{"0":"request mapping failed: failed assignment (line 1): field ` + "`this.foo`" + `: value is null"},"previous":{"succeeded":["1"]},"skipped":["1"],"succeeded":["2"]}}}`), + msg(`{"bar":3,"baz":8,"buz":10,"meta":{"workflow":{"previous":{"apply":["1","2"],"failed":{"0":"request mapping failed: failed assignment (line 1): field ` + "`this.foo`" + `: value is null"},"skipped":["1","2"]},"skipped":["0"],"succeeded":["1","2"]}}}`), }, }, {