diff --git a/.circleci/config.yml b/.circleci/config.yml index 0a9c842f88..3978377329 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -6,7 +6,7 @@ orbs: # Shared configuration defaults: elixir_version: &elixir_version "1.18.3-otp-27" - nodejs_version: &nodejs_version "22.12.0" + nodejs_version: &nodejs_version "24.14.0" docker_elixir: &docker_elixir - image: elixir:1.18.3-otp-27 docker_elixir_postgres: &docker_elixir_postgres diff --git a/.gitignore b/.gitignore index f8ff37ac20..8b755f67ce 100644 --- a/.gitignore +++ b/.gitignore @@ -92,4 +92,5 @@ assets/test-results .claude/settings.local.json test-results -assets/coverage \ No newline at end of file +assets/coverage +.envrc \ No newline at end of file diff --git a/.tool-versions b/.tool-versions index 0e62d5a4ae..58495ff227 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1,4 +1,4 @@ erlang 27.3.3 elixir 1.18.3-otp-27 -nodejs 22.12.0 +nodejs 24.14.0 k6 0.49.0 diff --git a/CHANGELOG.md b/CHANGELOG.md index 78cec3139c..a9801b130c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,13 @@ and this project adheres to ### Changed +- Bumped Node.js from 22.12.0 to 24.14.0 and ws-worker from 1.23.1 to 1.23.3 + (includes ESM resolve hook for Node 24 compatibility) + [#4603](https://github.com/OpenFn/lightning/pull/4603) +- Made dev and test database names configurable via `DEV_DATABASE_NAME` and + `TEST_DATABASE_NAME` environment variables + [#4603](https://github.com/OpenFn/lightning/pull/4603) + ### Fixed ## [2.16.1] - 2026-04-07 diff --git a/Dockerfile b/Dockerfile index c49ec58f27..de628a2129 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,7 +15,7 @@ ARG ELIXIR_VERSION=1.18.3 ARG OTP_VERSION=27.3.3 ARG DEBIAN_VERSION=bookworm-20250428 -ARG NODE_VERSION=22.12.0 +ARG NODE_VERSION=24.14.0 ARG ERL_FLAGS ARG BUILDER_IMAGE="hexpm/elixir:${ELIXIR_VERSION}-erlang-${OTP_VERSION}-debian-${DEBIAN_VERSION}" diff --git a/Dockerfile-dev b/Dockerfile-dev index a714ca85f5..8d3aeaadc0 100644 --- a/Dockerfile-dev +++ b/Dockerfile-dev @@ -16,7 +16,7 @@ ARG ELIXIR_VERSION=1.18.3 ARG OTP_VERSION=27.3.3 ARG DEBIAN_VERSION=bookworm-20250428 -ARG NODE_VERSION=22.12.0 +ARG NODE_VERSION=24.14.0 ARG BUILDER_IMAGE="hexpm/elixir:${ELIXIR_VERSION}-erlang-${OTP_VERSION}-debian-${DEBIAN_VERSION}" ARG RUNNER_IMAGE="debian:${DEBIAN_VERSION}" diff --git a/assets/package-lock.json b/assets/package-lock.json index 18e28ec33c..07c1332371 100644 --- a/assets/package-lock.json +++ b/assets/package-lock.json @@ -59,19 +59,19 @@ "devDependencies": { "@eslint-community/eslint-plugin-eslint-comments": "^4.4.1", "@eslint/js": "^9.21.0", - "@openfn/ws-worker": "^1.23.1", + "@openfn/ws-worker": "^1.23.3", "@playwright/test": "^1.55.0", "@redux-devtools/extension": "^3.3.0", "@testing-library/jest-dom": "^6.9.0", "@testing-library/react": "^16.3.0", "@testing-library/user-event": "^14.6.1", "@total-typescript/ts-reset": "^0.6.1", - "@tsconfig/node-lts": "^22.0.1", + "@tsconfig/node-lts": "^24.0.0", "@tsconfig/recommended": "^1.0.8", "@tsconfig/strictest": "^2.0.5", "@types/jsonpath": "^0.2.4", "@types/marked": "^4.0.8", - "@types/node": "^22.18.1", + "@types/node": "^24.0.0", "@types/phoenix": "^1.6.6", "@types/phoenix_live_view": "^1.0.0", "@types/react": "^18.3.1", @@ -634,28 +634,6 @@ "node": ">=18" } }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, "node_modules/@csstools/color-helpers": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", @@ -1838,9 +1816,9 @@ } }, "node_modules/@inquirer/core/node_modules/@types/node": { - "version": "20.19.37", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.37.tgz", - "integrity": "sha512-8kzdPJ3FsNsVIurqBs7oodNnCEVbni9yUEkaHbgptDACOPW04jimGagZ51E6+lXUwJjgnBw+hyko/lkFWCldqw==", + "version": "20.19.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.39.tgz", + "integrity": "sha512-orrrD74MBUyK8jOAD/r0+lfa1I2MO6I+vAkmAWzMYbCcgrN4lCrmK52gRFQq/JRxfYPfonkr4b0jcY7Olqdqbw==", "dev": true, "license": "MIT", "dependencies": { @@ -2250,9 +2228,9 @@ } }, "node_modules/@openfn/engine-multi": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/@openfn/engine-multi/-/engine-multi-1.10.7.tgz", - "integrity": "sha512-cJTm461qBuv9Cfhw22SaN7McUzu9fyy+jNNqcWpt8i3AUNb4Tj75T7yZBp8GfPSExrJgi0P2qOiHbS2zzTLOaA==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@openfn/engine-multi/-/engine-multi-1.11.0.tgz", + "integrity": "sha512-IJGAnyxyGdVqAvg+tUnj7UKDuen4FAvclMm+mXQPP+6PMUSAWizEU59/iJKAMI1YJzP8gdStyEz2r3hOJTU+Hg==", "dev": true, "license": "ISC", "dependencies": { @@ -2260,7 +2238,7 @@ "@openfn/language-common": "3.2.3", "@openfn/lexicon": "^1.4.2", "@openfn/logger": "1.1.2", - "@openfn/runtime": "1.8.6", + "@openfn/runtime": "1.9.0", "fast-safe-stringify": "^2.1.1", "json-stream-stringify": "^3.1.6" } @@ -2327,9 +2305,9 @@ } }, "node_modules/@openfn/runtime": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@openfn/runtime/-/runtime-1.8.6.tgz", - "integrity": "sha512-5qY0S2runfWo5dp+lWRqx7Qr66EeZCVxvLEnD6AHYEe9NVRPTtqUq8s9MK/Z5Bw8mOOKZM3YCDD5+yIIExQ1xw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@openfn/runtime/-/runtime-1.9.0.tgz", + "integrity": "sha512-z/Mtggsx5EWT9OwyD+O1gdvWvdBEMct+/SPeiDtkElTXX/IhonxfqVQtT2uTIbmQjQOyfQ2+iZr2AZpkCiUB4A==", "dev": true, "license": "ISC", "dependencies": { @@ -2341,18 +2319,18 @@ } }, "node_modules/@openfn/ws-worker": { - "version": "1.23.1", - "resolved": "https://registry.npmjs.org/@openfn/ws-worker/-/ws-worker-1.23.1.tgz", - "integrity": "sha512-nSZeiOz7dq6bMyiyGYZUuT3M6iu/UiO6fuakV+avEB4WzYezgT7SUx+RZsDJDB0dUErrHlR/BsmGXc38r509QQ==", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/@openfn/ws-worker/-/ws-worker-1.23.3.tgz", + "integrity": "sha512-xBTaA8w1geLMwGT5gARVkm9V7i83SAvXLaoccNy8SLyPpYSCYrkOUlze5Wc/LaohmHAXoPxjqj1J8CmJswSSWQ==", "dev": true, "license": "ISC", "dependencies": { "@koa/bodyparser": "^6.1.0", "@koa/router": "^15.4.0", - "@openfn/engine-multi": "1.10.7", + "@openfn/engine-multi": "1.11.0", "@openfn/lexicon": "^1.4.2", "@openfn/logger": "1.1.2", - "@openfn/runtime": "1.8.6", + "@openfn/runtime": "1.9.0", "@sentry/node": "^10.44.0", "@types/koa-logger": "^3.1.5", "@types/ws": "^8.18.1", @@ -4315,38 +4293,12 @@ "license": "MIT" }, "node_modules/@tsconfig/node-lts": { - "version": "22.0.1", + "version": "24.0.0", + "resolved": "https://registry.npmjs.org/@tsconfig/node-lts/-/node-lts-24.0.0.tgz", + "integrity": "sha512-8mSTqWwCd6aQpvxSrpQlMoA9RiUZSs7bYhL5qsLXIIaN9HQaINeoydrRu/Y7/fws4bvfuyhs0BRnW9/NI8tySg==", "dev": true, "license": "MIT" }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/@tsconfig/recommended": { "version": "1.0.8", "dev": true, @@ -4734,15 +4686,22 @@ } }, "node_modules/@types/node": { - "version": "22.18.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.1.tgz", - "integrity": "sha512-rzSDyhn4cYznVG+PCzGe1lwuMYJrcBS1fc3JqSa2PvtABwWo+dZ1ij5OVok3tqfpEBCBoaR4d7upFJk73HRJDw==", - "devOptional": true, + "version": "24.12.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.12.2.tgz", + "integrity": "sha512-A1sre26ke7HDIuY/M23nd9gfB+nrmhtYyMINbjI1zHJxYteKR6qSMX56FsmjMcDb3SMcjJg5BiRRgOCC/yBD0g==", + "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.21.0" + "undici-types": "~7.16.0" } }, + "node_modules/@types/node/node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/pg": { "version": "8.15.6", "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.15.6.tgz", @@ -5633,7 +5592,7 @@ "version": "8.16.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "devOptional": true, + "dev": true, "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -5663,8 +5622,10 @@ } }, "node_modules/acorn-walk": { - "version": "8.3.4", - "devOptional": true, + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz", + "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==", + "dev": true, "license": "MIT", "dependencies": { "acorn": "^8.11.0" @@ -6992,14 +6953,6 @@ "node": ">= 0.8" } }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/cron-validator": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/cron-validator/-/cron-validator-1.4.0.tgz", @@ -7521,15 +7474,6 @@ "license": "Apache-2.0", "peer": true }, - "node_modules/diff": { - "version": "4.0.2", - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/dir-glob": { "version": "3.0.1", "license": "MIT", @@ -11225,9 +11169,9 @@ } }, "node_modules/lodash": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", - "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", "dev": true, "license": "MIT" }, @@ -11331,12 +11275,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-error": { - "version": "1.3.6", - "license": "ISC", - "optional": true, - "peer": true - }, "node_modules/map-age-cleaner": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", @@ -15420,57 +15358,6 @@ "license": "Apache-2.0", "peer": true }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/arg": { - "version": "4.1.3", - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/tsconfck": { "version": "3.1.6", "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz", @@ -15733,9 +15620,9 @@ "license": "MIT" }, "node_modules/undici": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.24.5.tgz", - "integrity": "sha512-3IWdCpjgxp15CbJnsi/Y9TCDE7HWVN19j1hmzVhoAkY/+CJx449tVxT5wZc1Gwg8J+P0LWvzlBzxYRnHJ+1i7Q==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.24.7.tgz", + "integrity": "sha512-H/nlJ/h0ggGC+uRL3ovD+G0i4bqhvsDOpbDv7At5eFLlj2b41L8QliGbnl2H7SnDiYhENphh1tQFJZf+MyfLsQ==", "dev": true, "license": "MIT", "engines": { @@ -15746,7 +15633,7 @@ "version": "6.21.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/unified": { @@ -15950,12 +15837,6 @@ "license": "MIT", "peer": true }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -16755,17 +16636,6 @@ "node": ">= 4.0.0" } }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/assets/package.json b/assets/package.json index 507e3f96b2..1b3d489c85 100644 --- a/assets/package.json +++ b/assets/package.json @@ -69,19 +69,19 @@ "devDependencies": { "@eslint-community/eslint-plugin-eslint-comments": "^4.4.1", "@eslint/js": "^9.21.0", - "@openfn/ws-worker": "^1.23.1", + "@openfn/ws-worker": "^1.23.3", "@playwright/test": "^1.55.0", "@redux-devtools/extension": "^3.3.0", "@testing-library/jest-dom": "^6.9.0", "@testing-library/react": "^16.3.0", "@testing-library/user-event": "^14.6.1", "@total-typescript/ts-reset": "^0.6.1", - "@tsconfig/node-lts": "^22.0.1", + "@tsconfig/node-lts": "^24.0.0", "@tsconfig/recommended": "^1.0.8", "@tsconfig/strictest": "^2.0.5", "@types/jsonpath": "^0.2.4", "@types/marked": "^4.0.8", - "@types/node": "^22.18.1", + "@types/node": "^24.0.0", "@types/phoenix": "^1.6.6", "@types/phoenix_live_view": "^1.0.0", "@types/react": "^18.3.1", diff --git a/config/dev.exs b/config/dev.exs index ad4124a030..ae2f031d7b 100644 --- a/config/dev.exs +++ b/config/dev.exs @@ -7,7 +7,7 @@ config :lightning, Lightning.Repo, username: "postgres", password: "postgres", hostname: "localhost", - database: "lightning_dev", + database: System.get_env("DEV_DATABASE_NAME", "lightning_dev"), show_sensitive_data_on_connection_error: true, pool_size: 10 diff --git a/config/test.exs b/config/test.exs index 9641f9e9a6..2c86923c7e 100644 --- a/config/test.exs +++ b/config/test.exs @@ -36,7 +36,9 @@ config :lightning, Lightning.Repo, username: "postgres", password: "postgres", hostname: "localhost", - database: "lightning_test#{System.get_env("MIX_TEST_PARTITION")}", + database: + System.get_env("TEST_DATABASE_NAME", "lightning_test") <> + "#{System.get_env("MIX_TEST_PARTITION")}", pool: Ecto.Adapters.SQL.Sandbox, pool_size: 15, queue_target: 100, diff --git a/test/integration/web_and_worker_test.exs b/test/integration/web_and_worker_test.exs index 33bbcee340..1c217ee163 100644 --- a/test/integration/web_and_worker_test.exs +++ b/test/integration/web_and_worker_test.exs @@ -269,7 +269,7 @@ defmodule Lightning.WebAndWorkerTest do version_logs = pick_out_version_logs(run) assert version_logs["@openfn/language-http"] =~ "3.1.12" assert version_logs["worker"] =~ "1.23" - assert version_logs["node.js"] =~ "22.12" + assert version_logs["node.js"] =~ "24.14" assert version_logs["@openfn/language-common"] == "3.0.2" [step_1, step_2, step_3, step_4] = run.steps