diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index eba8b1986..f585b61f7 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,12 @@ # @openfn/cli +## 1.39.4 + +### Patch Changes + +- Updated dependencies [e3ddfef] + - @openfn/lexicon@2.4.1 + ## 1.39.3 ### Patch Changes diff --git a/packages/cli/package.json b/packages/cli/package.json index 4b9952642..d816436ed 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@openfn/cli", - "version": "1.39.3", + "version": "1.39.4", "description": "CLI devtools for the OpenFn toolchain", "engines": { "node": ">=18", diff --git a/packages/lexicon/CHANGELOG.md b/packages/lexicon/CHANGELOG.md index 491b610ce..22437b683 100644 --- a/packages/lexicon/CHANGELOG.md +++ b/packages/lexicon/CHANGELOG.md @@ -1,5 +1,11 @@ # lexicon +## 2.4.1 + +### Patch Changes + +- e3ddfef: Support metadata on the run object + ## 2.4.0 ### Minor Changes diff --git a/packages/lexicon/lightning.d.ts b/packages/lexicon/lightning.d.ts index 8554c0fb6..46b4f03c5 100644 --- a/packages/lexicon/lightning.d.ts +++ b/packages/lexicon/lightning.d.ts @@ -44,6 +44,14 @@ export type LightningPlan = { options?: LightningPlanOptions; globals?: string; + + meta?: LightningPlanMeta; +}; + +export type LightningPlanMeta = { + work_order_id?: string; + workflow_id?: string; + project_id?: string; }; /** diff --git a/packages/lexicon/package.json b/packages/lexicon/package.json index 51a8e9fc6..04c1de44d 100644 --- a/packages/lexicon/package.json +++ b/packages/lexicon/package.json @@ -1,6 +1,6 @@ { "name": "@openfn/lexicon", - "version": "2.4.0", + "version": "2.4.1", "description": "Central repo of names and type definitions", "author": "Open Function Group ", "license": "ISC", diff --git a/packages/ws-worker/CHANGELOG.md b/packages/ws-worker/CHANGELOG.md index 93d82c24d..6f8f92f2d 100644 --- a/packages/ws-worker/CHANGELOG.md +++ b/packages/ws-worker/CHANGELOG.md @@ -1,5 +1,13 @@ # ws-worker +## 1.29.1 + +### Patch Changes + +- e3ddfef: Support metadata on the run object +- Updated dependencies [e3ddfef] + - @openfn/lexicon@2.4.1 + ## 1.29.0 ### Minor Changes diff --git a/packages/ws-worker/package.json b/packages/ws-worker/package.json index e27e30243..2bd5a6534 100644 --- a/packages/ws-worker/package.json +++ b/packages/ws-worker/package.json @@ -1,6 +1,6 @@ { "name": "@openfn/ws-worker", - "version": "1.29.0", + "version": "1.29.1", "description": "A Websocket Worker to connect Lightning to a Runtime Engine", "main": "dist/index.js", "type": "module", diff --git a/packages/ws-worker/src/util/convert-lightning-plan.ts b/packages/ws-worker/src/util/convert-lightning-plan.ts index 2b00a2473..df595a94b 100644 --- a/packages/ws-worker/src/util/convert-lightning-plan.ts +++ b/packages/ws-worker/src/util/convert-lightning-plan.ts @@ -134,10 +134,22 @@ export default ( // But some need to get passed down into the engine's options const engineOpts: WorkerRunOptions = {}; + // Lightning only sends run.meta from 2.18.0. Older versions get a meta global + // with just the run id, rather than a set of undefined keys. project_id is on + // the plan itself, so it's available whatever version we're talking to. + const ids = { + workOrderId: run.meta?.work_order_id, + workflowId: run.meta?.workflow_id, + projectId: run.meta?.project_id ?? run.project_id, + }; + engineOpts.globals = { meta: { runId: run.id, startTime: Date.now(), + ...Object.fromEntries( + Object.entries(ids).filter(([_key, value]) => value !== undefined) + ), }, }; diff --git a/packages/ws-worker/test/util/convert-lightning-plan.test.ts b/packages/ws-worker/test/util/convert-lightning-plan.test.ts index 2989480ab..d125be1cb 100644 --- a/packages/ws-worker/test/util/convert-lightning-plan.test.ts +++ b/packages/ws-worker/test/util/convert-lightning-plan.test.ts @@ -773,3 +773,53 @@ test('sets runId and startTime on the engine options globals meta', (t) => { t.true(options.globals!.meta.startTime >= before); t.true(options.globals!.meta.startTime <= after); }); + +test('maps run.meta work order/workflow/project ids onto globals meta', (t) => { + const run: Partial = { + id: 'some-run-id', + jobs: [createNode()], + triggers: [], + edges: [], + meta: { + work_order_id: 'some-work-order-id', + workflow_id: 'some-workflow-id', + project_id: 'some-project-id', + }, + }; + + const { options } = convertPlan(run as LightningPlan); + + t.is(options.globals!.meta.workOrderId, 'some-work-order-id'); + t.is(options.globals!.meta.workflowId, 'some-workflow-id'); + t.is(options.globals!.meta.projectId, 'some-project-id'); +}); + +test('takes projectId from the plan when run.meta is missing', (t) => { + const run: Partial = { + id: 'some-run-id', + project_id: 'some-project-id', + jobs: [createNode()], + triggers: [], + edges: [], + }; + + const { options } = convertPlan(run as LightningPlan); + + t.is(options.globals!.meta.projectId, 'some-project-id'); +}); + +test('omits globals meta ids when run.meta is missing', (t) => { + const run: Partial = { + id: 'some-run-id', + jobs: [createNode()], + triggers: [], + edges: [], + }; + + const { options } = convertPlan(run as LightningPlan); + + t.deepEqual(Object.keys(options.globals!.meta).sort(), [ + 'runId', + 'startTime', + ]); +});