Skip to content

Commit a9dc49c

Browse files
authored
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, 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
1 parent 38e9a8e commit a9dc49c

File tree

6 files changed

+51
-42
lines changed

6 files changed

+51
-42
lines changed

.ci/tav.json

+39-38
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,45 @@
11
{
2-
"versions": [ 21, 20, 18, 16, 14 ],
2+
"// versions": "Skip >=18.19.0 until IITM double-import issue is resolved.",
3+
"versions": [ "21", "20", "18.18.2", "16", "14" ],
34
"// modules": [
4-
"List of instrumented modules with the min Node version supported.",
5-
"minVersion for each module should be kept in sync with .tav.yml"
5+
"List of instrumented modules with the minimum Node major version supported.",
6+
"minMajorVersion for each module should be kept in sync with .tav.yml"
67
],
78
"modules": [
8-
{ "name": "@apollo/server", "minVersion": 14 },
9-
{ "name": "@aws-sdk/client-dynamodb", "minVersion": 14 },
10-
{ "name": "@aws-sdk/client-s3", "minVersion": 14 },
11-
{ "name": "@aws-sdk/client-sns", "minVersion": 14 },
12-
{ "name": "@aws-sdk/client-sqs", "minVersion": 14 },
13-
{ "name": "@elastic/elasticsearch", "minVersion": 10 },
14-
{ "name": "@hapi/hapi", "minVersion": 8 },
15-
{ "name": "@opentelemetry/api", "minVersion": 14 },
16-
{ "name": "apollo-server-express", "minVersion": 8 },
17-
{ "name": "aws-sdk", "minVersion": 8 },
18-
{ "name": "cassandra-driver", "minVersion": 16 },
19-
{ "name": "elasticsearch", "minVersion": 8 },
20-
{ "name": "express", "minVersion": 8 },
21-
{ "name": "express-queue", "minVersion": 8 },
22-
{ "name": "fastify", "minVersion": 8 },
23-
{ "name": "finalhandler", "minVersion": 8 },
24-
{ "name": "generic-pool", "minVersion": 8 },
25-
{ "name": "graphql", "minVersion": 8 },
26-
{ "name": "ioredis", "minVersion": 8 },
27-
{ "name": "knex", "minVersion": 8 },
28-
{ "name": "memcached", "minVersion": 8 },
29-
{ "name": "mongodb", "minVersion": 8 },
30-
{ "name": "mongodb-core", "minVersion": 8 },
31-
{ "name": "mysql", "minVersion": 8 },
32-
{ "name": "mysql2", "minVersion": 8 },
33-
{ "name": "next", "minVersion": 14 },
34-
{ "name": "pg", "minVersion": 8 },
35-
{ "name": "redis", "minVersion": 8 },
36-
{ "name": "restify", "minVersion": 14 },
37-
{ "name": "tedious", "minVersion": 8 },
38-
{ "name": "undici", "minVersion": 8 },
39-
{ "name": "ws", "minVersion": 8 },
40-
{ "name": "@koa/router,koa-router", "minVersion": 8 },
41-
{ "name": "handlebars,pug", "minVersion": 8 },
42-
{ "name": "bluebird,got", "minVersion": 8 }
9+
{ "name": "@apollo/server", "minMajorVersion": 14 },
10+
{ "name": "@aws-sdk/client-dynamodb", "minMajorVersion": 14 },
11+
{ "name": "@aws-sdk/client-s3", "minMajorVersion": 14 },
12+
{ "name": "@aws-sdk/client-sns", "minMajorVersion": 14 },
13+
{ "name": "@aws-sdk/client-sqs", "minMajorVersion": 14 },
14+
{ "name": "@elastic/elasticsearch", "minMajorVersion": 10 },
15+
{ "name": "@hapi/hapi", "minMajorVersion": 8 },
16+
{ "name": "@opentelemetry/api", "minMajorVersion": 14 },
17+
{ "name": "apollo-server-express", "minMajorVersion": 8 },
18+
{ "name": "aws-sdk", "minMajorVersion": 8 },
19+
{ "name": "cassandra-driver", "minMajorVersion": 16 },
20+
{ "name": "elasticsearch", "minMajorVersion": 8 },
21+
{ "name": "express", "minMajorVersion": 8 },
22+
{ "name": "express-queue", "minMajorVersion": 8 },
23+
{ "name": "fastify", "minMajorVersion": 8 },
24+
{ "name": "finalhandler", "minMajorVersion": 8 },
25+
{ "name": "generic-pool", "minMajorVersion": 8 },
26+
{ "name": "graphql", "minMajorVersion": 8 },
27+
{ "name": "ioredis", "minMajorVersion": 8 },
28+
{ "name": "knex", "minMajorVersion": 8 },
29+
{ "name": "memcached", "minMajorVersion": 8 },
30+
{ "name": "mongodb", "minMajorVersion": 8 },
31+
{ "name": "mongodb-core", "minMajorVersion": 8 },
32+
{ "name": "mysql", "minMajorVersion": 8 },
33+
{ "name": "mysql2", "minMajorVersion": 8 },
34+
{ "name": "next", "minMajorVersion": 14 },
35+
{ "name": "pg", "minMajorVersion": 8 },
36+
{ "name": "redis", "minMajorVersion": 8 },
37+
{ "name": "restify", "minMajorVersion": 14 },
38+
{ "name": "tedious", "minMajorVersion": 8 },
39+
{ "name": "undici", "minMajorVersion": 8 },
40+
{ "name": "ws", "minMajorVersion": 8 },
41+
{ "name": "@koa/router,koa-router", "minMajorVersion": 8 },
42+
{ "name": "handlebars,pug", "minMajorVersion": 8 },
43+
{ "name": "bluebird,got", "minMajorVersion": 8 }
4344
]
4445
}

.github/workflows/tav-command.yml

+2-1
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ jobs:
6666
const permutations = []
6767
for (const mod of mods) {
6868
for (const nv of vers) {
69-
if (mod.minVersion && nv >= mod.minVersion) {
69+
const nvMajor = Number(nv.split('.')[0]);
70+
if (mod.minMajorVersion && nvMajor >= mod.minMajorVersion) {
7071
permutations.push(`${mod.name} ${nv}`)
7172
}
7273
}

.github/workflows/tav.yml

+2-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ jobs:
4545
const permutations = []
4646
for (const mod of matrix.modules) {
4747
for (const nv of matrix.versions) {
48-
if (mod.minVersion && nv >= mod.minVersion) {
48+
const nvMajor = Number(nv.split('.')[0])
49+
if (mod.minMajorVersion && nvMajor >= mod.minMajorVersion) {
4950
permutations.push(`${mod.name} ${nv}`)
5051
}
5152
}

.github/workflows/test.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ jobs:
130130
- '21.0'
131131
- '20'
132132
- '20.0'
133-
- '18'
133+
- '18.18.2' # Skip >=18.19.0 until IITM double-import issue is resolved.
134134
- '18.0'
135135
- '16'
136136
- '16.0'

CHANGELOG.asciidoc

+5
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,11 @@ See the <<upgrade-to-v4>> guide.
3737
[[release-notes-4.3.0]]
3838
==== 4.3.0 - 2023/12/05
3939
40+
*Known issue*: Using the APM agent's <<esm>> with Node v18.19.0 is currently
41+
not supported. Earlier versions of Node.js v18 and Node.js v20 and later
42+
*are* supported. See <https://github.com/elastic/apm-agent-nodejs/issues/3784>
43+
for details.
44+
4045
[float]
4146
===== Features
4247

dev-utils/lint-tav-json.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,8 @@ function main(argv) {
5959
moduleNamesFromJson.add(moduleName);
6060
});
6161
for (const nv of tavJson.versions) {
62-
if (mod.minVersion && nv >= mod.minVersion) {
62+
const nvMajor = Number(nv.split('.')[0]);
63+
if (mod.minMajorVersion && nvMajor >= mod.minMajorVersion) {
6364
matrix.push(`${mod.name} ${nv}`);
6465
}
6566
}

0 commit comments

Comments
 (0)