diff --git a/workflow/inproc/context.go b/workflow/inproc/context.go index 9c1fab60..7e58ba22 100644 --- a/workflow/inproc/context.go +++ b/workflow/inproc/context.go @@ -616,10 +616,10 @@ func (proc *runnerContext) yieldOutput(ctx context.Context, executorID string, o return fmt.Errorf("executor %q cannot output object of type %s; expected one of %v", executorID, reflect.TypeOf(output), expectedTypes) } - tags, ok := proc.outputFilter.tryGetTags(executorID) - if !ok { + if !proc.outputFilter.canOutput(executorID, output) { return nil } + tags, _ := proc.outputFilter.tryGetTags(executorID) return proc.addEvent(ctx, workflow.OutputEvent{ ExecutorID: executorID, Output: output, diff --git a/workflow/inproc/outputfilter.go b/workflow/inproc/outputfilter.go index 82d33cdf..7f8110b3 100644 --- a/workflow/inproc/outputfilter.go +++ b/workflow/inproc/outputfilter.go @@ -19,6 +19,14 @@ func newOutputFilter(wf *workflow.Workflow) *outputFilter { return &outputFilter{tagsByExecutor: wf.OutputExecutors()} } +func (f *outputFilter) canOutput(executorID string, _ any) bool { + if f == nil { + return false + } + _, ok := f.tagsByExecutor[executorID] + return ok +} + func (f *outputFilter) tryGetTags(executorID string) ([]workflow.OutputTag, bool) { if f == nil { return nil, false