diff --git a/.changeset/cyan-spies-dream.md b/.changeset/cyan-spies-dream.md new file mode 100644 index 00000000000..e842f26bd43 --- /dev/null +++ b/.changeset/cyan-spies-dream.md @@ -0,0 +1,5 @@ +--- +"chainlink": patch +--- + +#internal validate capability trigger event ID before executing diff --git a/core/services/workflows/engine.go b/core/services/workflows/engine.go index e98c592cc24..f4ab2b82bd0 100644 --- a/core/services/workflows/engine.go +++ b/core/services/workflows/engine.go @@ -10,6 +10,7 @@ import ( "time" "github.com/jonboulle/clockwork" + "github.com/smartcontractkit/chainlink-common/pkg/workflows/exec" "github.com/smartcontractkit/chainlink-common/pkg/capabilities" @@ -418,6 +419,11 @@ func (e *Engine) loop(ctx context.Context) { te := resp.Event + if te.ID == "" { + e.logger.With(tIDKey, te.TriggerType).Error("trigger event ID is empty; not executing") + continue + } + executionID, err := generateExecutionID(e.workflow.id, te.ID) if err != nil { e.logger.With(tIDKey, te.ID).Errorf("could not generate execution ID: %v", err) diff --git a/core/services/workflows/engine_test.go b/core/services/workflows/engine_test.go index 2d862823cfb..5cb24b8aeab 100644 --- a/core/services/workflows/engine_test.go +++ b/core/services/workflows/engine_test.go @@ -349,7 +349,9 @@ func mockTrigger(t *testing.T) (capabilities.TriggerCapability, capabilities.Tri require.NoError(t, err) tr := capabilities.TriggerResponse{ Event: capabilities.TriggerEvent{ - Outputs: resp, + TriggerType: mt.ID, + ID: time.Now().UTC().Format(time.RFC3339), + Outputs: resp, }, } mt.triggerEvent = &tr