diff --git a/.changeset/quiet-seals-battle.md b/.changeset/quiet-seals-battle.md new file mode 100644 index 000000000..96a1ab69f --- /dev/null +++ b/.changeset/quiet-seals-battle.md @@ -0,0 +1,6 @@ +--- +'@openfn/project': patch +'@openfn/cli': patch +--- + +Include `webhook_reply` and `cron_cursor_job_id` in workflow version hashes. diff --git a/packages/project/src/util/version.ts b/packages/project/src/util/version.ts index df42b8bb1..d815d794c 100644 --- a/packages/project/src/util/version.ts +++ b/packages/project/src/util/version.ts @@ -54,7 +54,13 @@ export const generateHash = ( 'body', ].sort(); - const triggerKeys = ['type', 'cron_expression', 'enabled'].sort(); + const triggerKeys = [ + 'type', + 'cron_expression', + 'enabled', + 'webhook_reply', + 'cron_cursor_job_id', + ].sort(); const edgeKeys = [ 'name', // generated diff --git a/packages/project/test/util/version-workflow.test.ts b/packages/project/test/util/version-workflow.test.ts index 4f34e8843..6b0dd0543 100644 --- a/packages/project/test/util/version-workflow.test.ts +++ b/packages/project/test/util/version-workflow.test.ts @@ -384,6 +384,40 @@ test('hash a trigger', (t) => { t.not(generateHash(webhook), generateHash(cronExpression)); }); +test('hash changes when webhook_reply changes', (t) => { + const wf1 = generateWorkflow( + `@name wf-1 + @id workflow-id + t(type=webhook,webhook_reply=x)-x + ` + ); + const wf2 = generateWorkflow( + `@name wf-1 + @id workflow-id + t(type=webhook,webhook_reply=y)-x + ` + ); + + t.not(generateHash(wf1), generateHash(wf2)); +}); + +test('hash changes when cron_cursor_job_id changes', (t) => { + const wf1 = generateWorkflow( + `@name wf-1 + @id workflow-id + t(type=cron,cron_expression="1",cron_cursor_job_id=x)-x + ` + ); + const wf2 = generateWorkflow( + `@name wf-1 + @id workflow-id + t(type=cron,cron_expression="1",cron_cursor_job_id=y)-x + ` + ); + + t.not(generateHash(wf1), generateHash(wf2)); +}); + test('hash changes across an edge', (t) => { const basicEdge = generateWorkflow( `