From a9dc49c09af55e045edec9fa7d7ca88fce9742bd Mon Sep 17 00:00:00 2001 From: Trent Mick Date: Mon, 11 Dec 2023 09:40:30 -0800 Subject: [PATCH] test: lock Node.js v18 testing to v18.18.2 as a workaround for IITM double-import issue (#3783) In Nodejs v18.19.0 ESM module loading was moved to being off-thread (a backport from Node.js v20, https://github.com/nodejs/node/pull/44710). This breaks current import-in-the-middle usage, resulting in ESM modules being double-loaded when the IITM hook is active (once on the loader worker thread, and then again later on the main thread). This change is a workaround to skip testing recent Node.js v18 versions until the IITM issue is resolved. Refs: #3784 --- .ci/tav.json | 77 ++++++++++++++++--------------- .github/workflows/tav-command.yml | 3 +- .github/workflows/tav.yml | 3 +- .github/workflows/test.yml | 2 +- CHANGELOG.asciidoc | 5 ++ dev-utils/lint-tav-json.js | 3 +- 6 files changed, 51 insertions(+), 42 deletions(-) diff --git a/.ci/tav.json b/.ci/tav.json index 3812344527..769e83108a 100644 --- a/.ci/tav.json +++ b/.ci/tav.json @@ -1,44 +1,45 @@ { - "versions": [ 21, 20, 18, 16, 14 ], + "// versions": "Skip >=18.19.0 until IITM double-import issue is resolved.", + "versions": [ "21", "20", "18.18.2", "16", "14" ], "// modules": [ - "List of instrumented modules with the min Node version supported.", - "minVersion for each module should be kept in sync with .tav.yml" + "List of instrumented modules with the minimum Node major version supported.", + "minMajorVersion for each module should be kept in sync with .tav.yml" ], "modules": [ - { "name": "@apollo/server", "minVersion": 14 }, - { "name": "@aws-sdk/client-dynamodb", "minVersion": 14 }, - { "name": "@aws-sdk/client-s3", "minVersion": 14 }, - { "name": "@aws-sdk/client-sns", "minVersion": 14 }, - { "name": "@aws-sdk/client-sqs", "minVersion": 14 }, - { "name": "@elastic/elasticsearch", "minVersion": 10 }, - { "name": "@hapi/hapi", "minVersion": 8 }, - { "name": "@opentelemetry/api", "minVersion": 14 }, - { "name": "apollo-server-express", "minVersion": 8 }, - { "name": "aws-sdk", "minVersion": 8 }, - { "name": "cassandra-driver", "minVersion": 16 }, - { "name": "elasticsearch", "minVersion": 8 }, - { "name": "express", "minVersion": 8 }, - { "name": "express-queue", "minVersion": 8 }, - { "name": "fastify", "minVersion": 8 }, - { "name": "finalhandler", "minVersion": 8 }, - { "name": "generic-pool", "minVersion": 8 }, - { "name": "graphql", "minVersion": 8 }, - { "name": "ioredis", "minVersion": 8 }, - { "name": "knex", "minVersion": 8 }, - { "name": "memcached", "minVersion": 8 }, - { "name": "mongodb", "minVersion": 8 }, - { "name": "mongodb-core", "minVersion": 8 }, - { "name": "mysql", "minVersion": 8 }, - { "name": "mysql2", "minVersion": 8 }, - { "name": "next", "minVersion": 14 }, - { "name": "pg", "minVersion": 8 }, - { "name": "redis", "minVersion": 8 }, - { "name": "restify", "minVersion": 14 }, - { "name": "tedious", "minVersion": 8 }, - { "name": "undici", "minVersion": 8 }, - { "name": "ws", "minVersion": 8 }, - { "name": "@koa/router,koa-router", "minVersion": 8 }, - { "name": "handlebars,pug", "minVersion": 8 }, - { "name": "bluebird,got", "minVersion": 8 } + { "name": "@apollo/server", "minMajorVersion": 14 }, + { "name": "@aws-sdk/client-dynamodb", "minMajorVersion": 14 }, + { "name": "@aws-sdk/client-s3", "minMajorVersion": 14 }, + { "name": "@aws-sdk/client-sns", "minMajorVersion": 14 }, + { "name": "@aws-sdk/client-sqs", "minMajorVersion": 14 }, + { "name": "@elastic/elasticsearch", "minMajorVersion": 10 }, + { "name": "@hapi/hapi", "minMajorVersion": 8 }, + { "name": "@opentelemetry/api", "minMajorVersion": 14 }, + { "name": "apollo-server-express", "minMajorVersion": 8 }, + { "name": "aws-sdk", "minMajorVersion": 8 }, + { "name": "cassandra-driver", "minMajorVersion": 16 }, + { "name": "elasticsearch", "minMajorVersion": 8 }, + { "name": "express", "minMajorVersion": 8 }, + { "name": "express-queue", "minMajorVersion": 8 }, + { "name": "fastify", "minMajorVersion": 8 }, + { "name": "finalhandler", "minMajorVersion": 8 }, + { "name": "generic-pool", "minMajorVersion": 8 }, + { "name": "graphql", "minMajorVersion": 8 }, + { "name": "ioredis", "minMajorVersion": 8 }, + { "name": "knex", "minMajorVersion": 8 }, + { "name": "memcached", "minMajorVersion": 8 }, + { "name": "mongodb", "minMajorVersion": 8 }, + { "name": "mongodb-core", "minMajorVersion": 8 }, + { "name": "mysql", "minMajorVersion": 8 }, + { "name": "mysql2", "minMajorVersion": 8 }, + { "name": "next", "minMajorVersion": 14 }, + { "name": "pg", "minMajorVersion": 8 }, + { "name": "redis", "minMajorVersion": 8 }, + { "name": "restify", "minMajorVersion": 14 }, + { "name": "tedious", "minMajorVersion": 8 }, + { "name": "undici", "minMajorVersion": 8 }, + { "name": "ws", "minMajorVersion": 8 }, + { "name": "@koa/router,koa-router", "minMajorVersion": 8 }, + { "name": "handlebars,pug", "minMajorVersion": 8 }, + { "name": "bluebird,got", "minMajorVersion": 8 } ] } diff --git a/.github/workflows/tav-command.yml b/.github/workflows/tav-command.yml index 780be326bb..ea6fb43adb 100644 --- a/.github/workflows/tav-command.yml +++ b/.github/workflows/tav-command.yml @@ -66,7 +66,8 @@ jobs: const permutations = [] for (const mod of mods) { for (const nv of vers) { - if (mod.minVersion && nv >= mod.minVersion) { + const nvMajor = Number(nv.split('.')[0]); + if (mod.minMajorVersion && nvMajor >= mod.minMajorVersion) { permutations.push(`${mod.name} ${nv}`) } } diff --git a/.github/workflows/tav.yml b/.github/workflows/tav.yml index b1e15b2d4e..0bcb52399d 100644 --- a/.github/workflows/tav.yml +++ b/.github/workflows/tav.yml @@ -45,7 +45,8 @@ jobs: const permutations = [] for (const mod of matrix.modules) { for (const nv of matrix.versions) { - if (mod.minVersion && nv >= mod.minVersion) { + const nvMajor = Number(nv.split('.')[0]) + if (mod.minMajorVersion && nvMajor >= mod.minMajorVersion) { permutations.push(`${mod.name} ${nv}`) } } diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f93a75bf0d..8ac3339afe 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -130,7 +130,7 @@ jobs: - '21.0' - '20' - '20.0' - - '18' + - '18.18.2' # Skip >=18.19.0 until IITM double-import issue is resolved. - '18.0' - '16' - '16.0' diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index 0976728e22..d6525474c3 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -37,6 +37,11 @@ See the <> guide. [[release-notes-4.3.0]] ==== 4.3.0 - 2023/12/05 +*Known issue*: Using the APM agent's <> with Node v18.19.0 is currently +not supported. Earlier versions of Node.js v18 and Node.js v20 and later +*are* supported. See +for details. + [float] ===== Features diff --git a/dev-utils/lint-tav-json.js b/dev-utils/lint-tav-json.js index f990cccb27..ddd7bf2681 100755 --- a/dev-utils/lint-tav-json.js +++ b/dev-utils/lint-tav-json.js @@ -59,7 +59,8 @@ function main(argv) { moduleNamesFromJson.add(moduleName); }); for (const nv of tavJson.versions) { - if (mod.minVersion && nv >= mod.minVersion) { + const nvMajor = Number(nv.split('.')[0]); + if (mod.minMajorVersion && nvMajor >= mod.minMajorVersion) { matrix.push(`${mod.name} ${nv}`); } }