Skip to content

Commit

Permalink
test: lock Node.js v18 testing to v18.18.2 as a workaround for IITM d…
Browse files Browse the repository at this point in the history
…ouble-import issue (#3783)

In Nodejs v18.19.0 ESM module loading was moved to being off-thread
(a backport from Node.js v20, nodejs/node#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
  • Loading branch information
trentm authored Dec 11, 2023
1 parent 38e9a8e commit a9dc49c
Show file tree
Hide file tree
Showing 6 changed files with 51 additions and 42 deletions.
77 changes: 39 additions & 38 deletions .ci/tav.json
Original file line number Diff line number Diff line change
@@ -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 }
]
}
3 changes: 2 additions & 1 deletion .github/workflows/tav-command.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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}`)
}
}
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/tav.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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}`)
}
}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down
5 changes: 5 additions & 0 deletions CHANGELOG.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,11 @@ See the <<upgrade-to-v4>> guide.
[[release-notes-4.3.0]]
==== 4.3.0 - 2023/12/05
*Known issue*: Using the APM agent's <<esm>> with Node v18.19.0 is currently
not supported. Earlier versions of Node.js v18 and Node.js v20 and later
*are* supported. See <https://github.com/elastic/apm-agent-nodejs/issues/3784>
for details.
[float]
===== Features
Expand Down
3 changes: 2 additions & 1 deletion dev-utils/lint-tav-json.js
Original file line number Diff line number Diff line change
Expand Up @@ -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}`);
}
}
Expand Down

0 comments on commit a9dc49c

Please sign in to comment.