Skip to content

ci: prepare infrastructure for dropping Node.js 18/20 in v6#9033

Merged
rochdev merged 9 commits into
masterfrom
rochdev/drop-node-18-20-infra
Jun 25, 2026
Merged

ci: prepare infrastructure for dropping Node.js 18/20 in v6#9033
rochdev merged 9 commits into
masterfrom
rochdev/drop-node-18-20-infra

Conversation

@rochdev

@rochdev rochdev commented Jun 23, 2026

Copy link
Copy Markdown
Member

What does this PR do?

Prepares the CI and runtime infrastructure so that dropping Node.js 18 and 20 support in v6 only requires a one-line change to engines.node in package.json.

  • engines.node: changed to only specify the minimum version (>=18); the upper bound is moved into guardrails as a hardcoded constant (27), so it no longer creates conflicts between release lines
  • guardrails: regex made flexible to handle a min-only engines field; upper bound (<27) is now hardcoded in the guard rather than read from package.json
  • oldest alias: now derived dynamically from engines.node (integrates #9032), so v5 and v6 resolve the correct minimum Node version without any YAML changes
  • supported output: the node setup action now emits a supported output (true/false) comparing the installed Node version against engines.node; jobs with explicit version numbers in their matrix (aerospike, confluentinc-kafka-javascript, prisma) use this to skip test steps on unsupported versions while keeping the version/range coupling intact
  • couchbase: replaced hardcoded node-version: 18 include with oldest so it automatically tracks the minimum supported version across release lines
  • .nvmrc: updated to Node 22

Motivation

When v6 drops Node 18/20 support, the goal is to make that a single package.json change with no YAML divergence between the v5 and v6 release branches.

Additional Notes

The skip mechanism (via supported output) only applies to jobs that tie specific Node versions to specific library version ranges. Jobs using composite plugin actions (.github/actions/plugins/test, etc.) are unaffected — they already use aliases internally.

Generated by Claude Code

- Update engines field to only specify minimum version; move upper bound
  cap (Node <27) into guardrails so it no longer conflicts between release
  lines
- Derive the `oldest` alias dynamically from engines.node so v5 and v6
  resolve the correct minimum without YAML changes (from #9032)
- Emit a `supported` output from the node setup action and skip test steps
  on unsupported versions, allowing explicit version numbers to remain in
  the matrix for range-coupled jobs (aerospike, confluentinc-kafka-javascript,
  prisma)
- Replace couchbase node-version 18 include with `oldest` so it
  automatically tracks the minimum supported version
- Update .nvmrc to Node 22

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@datadog-datadog-prod-us1-2

datadog-datadog-prod-us1-2 Bot commented Jun 23, 2026

Copy link
Copy Markdown

Tests

🎉 All green!

🧪 All tests passed
❄️ No new flaky tests detected

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: b7f0570 | Docs | Datadog PR Page | Give us feedback!

@dd-octo-sts

dd-octo-sts Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Overall package size

Self size: 6.35 MB
Deduped: 7.41 MB
No deduping: 7.41 MB

Dependency sizes | name | version | self size | total size | |------|---------|-----------|------------| | import-in-the-middle | 3.2.0 | 104.26 kB | 843.44 kB | | opentracing | 0.14.7 | 194.81 kB | 194.81 kB | | dc-polyfill | 0.1.11 | 25.74 kB | 25.74 kB |

🤖 This report was automatically generated by heaviest-objects-in-the-universe

@codecov

codecov Bot commented Jun 23, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 92.70%. Comparing base (632fbea) to head (b7f0570).
⚠️ Report is 41 commits behind head on master.

Additional details and impacted files
@@            Coverage Diff             @@
##           master    #9033      +/-   ##
==========================================
+ Coverage   92.60%   92.70%   +0.09%     
==========================================
  Files         879      884       +5     
  Lines       50471    50697     +226     
  Branches     9934    10002      +68     
==========================================
+ Hits        46738    46997     +259     
+ Misses       3733     3700      -33     
Flag Coverage Δ
aiguard-integration-active 41.74% <ø> (+<0.01%) ⬆️
aiguard-integration-latest 41.75% <ø> (?)
aiguard-integration-maintenance 41.83% <ø> (+<0.01%) ⬆️
aiguard-macos 34.57% <ø> (-0.07%) ⬇️
aiguard-ubuntu 34.72% <ø> (-0.07%) ⬇️
aiguard-windows 34.40% <ø> (-0.07%) ⬇️
apm-capabilities-tracing-macos 48.26% <ø> (+0.09%) ⬆️
apm-capabilities-tracing-ubuntu-active 48.43% <ø> (+0.06%) ⬆️
apm-capabilities-tracing-ubuntu-latest 48.43% <ø> (+0.24%) ⬆️
apm-capabilities-tracing-ubuntu-maintenance 48.47% <ø> (+0.06%) ⬆️
apm-capabilities-tracing-ubuntu-oldest 48.48% <ø> (+0.07%) ⬆️
apm-capabilities-tracing-windows 48.18% <ø> (+<0.01%) ⬆️
apm-integrations-aerospike-18-gte.5.2.0 33.09% <ø> (-0.08%) ⬇️
apm-integrations-aerospike-20-gte.5.5.0 33.11% <ø> (-0.08%) ⬇️
apm-integrations-aerospike-22-gte.5.12.1 33.12% <ø> (-0.08%) ⬇️
apm-integrations-aerospike-22-gte.6.0.0 33.12% <ø> (-0.08%) ⬇️
apm-integrations-aerospike-eol- 42.45% <ø> (+9.35%) ⬆️
apm-integrations-child-process 34.02% <ø> (-0.08%) ⬇️
apm-integrations-confluentinc-kafka-javascript-18 40.03% <ø> (-0.07%) ⬇️
apm-integrations-confluentinc-kafka-javascript-20 40.04% <ø> (-0.07%) ⬇️
apm-integrations-confluentinc-kafka-javascript-22 40.05% <ø> (-0.07%) ⬇️
apm-integrations-confluentinc-kafka-javascript-24 39.94% <ø> (-0.07%) ⬇️
apm-integrations-couchbase-18 ?
apm-integrations-couchbase-eol 33.15% <ø> (-0.08%) ⬇️
apm-integrations-couchbase-oldest 33.11% <ø> (?)
apm-integrations-dns 32.96% <ø> (-0.08%) ⬇️
apm-integrations-elasticsearch 34.15% <ø> (-0.04%) ⬇️
apm-integrations-http-latest 41.96% <ø> (+0.09%) ⬆️
apm-integrations-http-maintenance 42.05% <ø> (+0.09%) ⬆️
apm-integrations-http-oldest 41.98% <ø> (+0.09%) ⬆️
apm-integrations-kafkajs-latest 40.08% <ø> (-0.07%) ⬇️
apm-integrations-kafkajs-oldest 40.26% <ø> (-0.07%) ⬇️
apm-integrations-net 33.64% <ø> (-0.08%) ⬇️
apm-integrations-next-11.1.4 36.34% <ø> (-0.32%) ⬇️
apm-integrations-next-12.3.7 36.34% <ø> (-0.32%) ⬇️
apm-integrations-next-13.0.0 29.10% <ø> (-0.06%) ⬇️
apm-integrations-next-13.2.0 29.10% <ø> (-0.06%) ⬇️
apm-integrations-next-13.5.11 29.24% <ø> (-0.06%) ⬇️
apm-integrations-next-14.0.0 29.21% <ø> (-0.02%) ⬇️
apm-integrations-next-14.2.35 29.17% <ø> (-0.06%) ⬇️
apm-integrations-next-14.2.6 29.17% <ø> (-0.06%) ⬇️
apm-integrations-next-14.2.7 29.17% <ø> (-0.06%) ⬇️
apm-integrations-next-15.0.0 29.17% <ø> (-0.06%) ⬇️
apm-integrations-next-15.4.0 29.24% <ø> (-0.06%) ⬇️
apm-integrations-next-latest 29.27% <ø> (-0.06%) ⬇️
apm-integrations-oracledb 33.98% <ø> (-0.06%) ⬇️
apm-integrations-prisma-18-gte.6.16.0.and.lt.7.0.0 34.80% <ø> (-0.08%) ⬇️
apm-integrations-prisma-latest-all 34.23% <ø> (-0.09%) ⬇️
apm-integrations-restify 35.63% <ø> (?)
apm-integrations-sharedb 32.55% <ø> (+0.02%) ⬆️
apm-integrations-tedious 33.90% <ø> (+0.44%) ⬆️
appsec-express 51.31% <ø> (+0.33%) ⬆️
appsec-fastify 48.08% <ø> (+0.31%) ⬆️
appsec-graphql 47.76% <ø> (-0.04%) ⬇️
appsec-integration-active 36.10% <ø> (+<0.01%) ⬆️
appsec-integration-latest 36.10% <ø> (+<0.01%) ⬆️
appsec-integration-maintenance 36.16% <ø> (+<0.01%) ⬆️
appsec-integration-oldest 36.16% <ø> (+<0.01%) ⬆️
appsec-kafka 40.28% <ø> (-0.11%) ⬇️
appsec-ldapjs 39.80% <ø> (?)
appsec-lodash 39.72% <ø> (-0.08%) ⬇️
appsec-macos 57.16% <ø> (?)
appsec-mongodb-core 43.89% <ø> (-0.06%) ⬇️
appsec-mongoose 44.75% <ø> (-0.06%) ⬇️
appsec-mysql 47.09% <ø> (+0.02%) ⬆️
appsec-next-latest-11.1.4 27.40% <ø> (-0.05%) ⬇️
appsec-next-latest-12.3.7 27.43% <ø> (-0.01%) ⬇️
appsec-next-latest-13.0.0 29.18% <ø> (-0.06%) ⬇️
appsec-next-latest-13.2.0 29.21% <ø> (-0.06%) ⬇️
appsec-next-latest-13.5.11 29.30% <ø> (-0.06%) ⬇️
appsec-next-latest-14.0.0 29.23% <ø> (-0.06%) ⬇️
appsec-next-latest-14.2.35 29.23% <ø> (-0.06%) ⬇️
appsec-next-latest-14.2.6 29.23% <ø> (-0.06%) ⬇️
appsec-next-latest-14.2.7 29.23% <ø> (-0.06%) ⬇️
appsec-next-latest-15.0.0 29.23% <ø> (-0.06%) ⬇️
appsec-next-latest-latest 29.27% <ø> (-0.06%) ⬇️
appsec-next-oldest-11.1.4 27.45% <ø> (-0.05%) ⬇️
appsec-next-oldest-12.3.7 29.24% <ø> (-0.06%) ⬇️
appsec-next-oldest-13.0.0 29.24% <ø> (-0.06%) ⬇️
appsec-next-oldest-13.2.0 ?
appsec-next-oldest-13.5.11 29.60% <ø> (-0.06%) ⬇️
appsec-next-oldest-14.0.0 29.54% <ø> (-0.06%) ⬇️
appsec-next-oldest-14.2.35 29.54% <ø> (?)
appsec-next-oldest-14.2.6 29.54% <ø> (?)
appsec-next-oldest-14.2.7 29.54% <ø> (?)
appsec-next-oldest-15.0.0 29.54% <ø> (-0.06%) ⬇️
appsec-next-oldest-latest 27.62% <ø> (-0.01%) ⬇️
appsec-node-serialize 39.01% <ø> (-0.10%) ⬇️
appsec-passport 42.65% <ø> (-0.08%) ⬇️
appsec-postgres ?
appsec-sourcing 38.49% <ø> (-0.06%) ⬇️
appsec-stripe 40.54% <ø> (-0.06%) ⬇️
appsec-template 39.30% <ø> (-0.08%) ⬇️
appsec-ubuntu 57.28% <ø> (+0.11%) ⬆️
appsec-windows 57.01% <ø> (+0.12%) ⬆️
debugger-ubuntu-active ?
debugger-ubuntu-latest ?
debugger-ubuntu-maintenance 43.52% <71.42%> (+<0.01%) ⬆️
debugger-ubuntu-oldest 43.82% <71.42%> (-0.07%) ⬇️
instrumentations-instrumentation-ai 45.57% <ø> (+0.03%) ⬆️
instrumentations-instrumentation-aws-sdk 45.14% <ø> (+0.03%) ⬆️
instrumentations-instrumentation-bluebird 27.62% <ø> (-0.07%) ⬇️
instrumentations-instrumentation-body-parser 35.65% <ø> (-0.07%) ⬇️
instrumentations-instrumentation-child_process 33.32% <ø> (-0.08%) ⬇️
instrumentations-instrumentation-connect 48.55% <ø> (+0.03%) ⬆️
instrumentations-instrumentation-cookie-parser 29.53% <ø> (-0.06%) ⬇️
instrumentations-instrumentation-couchbase-18 46.27% <ø> (+0.03%) ⬆️
instrumentations-instrumentation-couchbase-eol 46.27% <ø> (+0.03%) ⬆️
instrumentations-instrumentation-crypto 27.58% <ø> (-0.07%) ⬇️
instrumentations-instrumentation-express 29.73% <ø> (-0.06%) ⬇️
instrumentations-instrumentation-express-mongo-sanitize 29.63% <ø> (?)
instrumentations-instrumentation-express-multi-version 41.85% <ø> (+0.04%) ⬆️
instrumentations-instrumentation-express-session 35.48% <ø> (-0.07%) ⬇️
instrumentations-instrumentation-fastify 48.50% <ø> (+0.03%) ⬆️
instrumentations-instrumentation-fetch 45.26% <ø> (+0.04%) ⬆️
instrumentations-instrumentation-fs 27.30% <ø> (-0.07%) ⬇️
instrumentations-instrumentation-generic-pool 27.49% <ø> (+0.02%) ⬆️
instrumentations-instrumentation-hono 28.83% <ø> (-0.06%) ⬇️
instrumentations-instrumentation-http 37.92% <ø> (-0.07%) ⬇️
instrumentations-instrumentation-http-client-options 37.52% <ø> (-0.07%) ⬇️
instrumentations-instrumentation-kafkajs 49.23% <ø> (+0.03%) ⬆️
instrumentations-instrumentation-knex 27.60% <ø> (-0.07%) ⬇️
instrumentations-instrumentation-koa 46.15% <ø> (+0.03%) ⬆️
instrumentations-instrumentation-light-my-request 35.29% <ø> (?)
instrumentations-instrumentation-mongoose 28.72% <ø> (-0.06%) ⬇️
instrumentations-instrumentation-multer 35.33% <ø> (-0.07%) ⬇️
instrumentations-instrumentation-mysql2 33.44% <ø> (-0.08%) ⬇️
instrumentations-instrumentation-openai-lifecycle 46.25% <ø> (+0.03%) ⬆️
instrumentations-instrumentation-otel-sdk-trace 25.47% <ø> (+0.02%) ⬆️
instrumentations-instrumentation-passport 39.27% <ø> (-0.01%) ⬇️
instrumentations-instrumentation-passport-http 38.97% <ø> (-0.01%) ⬇️
instrumentations-instrumentation-passport-local 39.41% <ø> (?)
instrumentations-instrumentation-pg 33.17% <ø> (-0.08%) ⬇️
instrumentations-instrumentation-promise 27.56% <ø> (-0.07%) ⬇️
instrumentations-instrumentation-promise-js 27.56% <ø> (-0.07%) ⬇️
instrumentations-instrumentation-q 27.59% <ø> (-0.07%) ⬇️
instrumentations-instrumentation-restify 47.79% <ø> (+0.03%) ⬆️
instrumentations-instrumentation-router 43.74% <ø> (+0.09%) ⬆️
instrumentations-instrumentation-stripe 28.11% <ø> (-0.06%) ⬇️
instrumentations-instrumentation-url 27.42% <ø> (-0.07%) ⬇️
instrumentations-instrumentation-when 27.58% <ø> (-0.07%) ⬇️
instrumentations-instrumentation-zlib 27.47% <ø> (-0.07%) ⬇️
instrumentations-integration-esbuild-0.16.12-active ?
instrumentations-integration-esbuild-0.16.12-latest 24.70% <ø> (-0.03%) ⬇️
instrumentations-integration-esbuild-0.16.12-maintenance 18.73% <ø> (?)
instrumentations-integration-esbuild-0.16.12-oldest 18.72% <ø> (-0.01%) ⬇️
instrumentations-integration-esbuild-latest-active 24.70% <ø> (?)
instrumentations-integration-esbuild-latest-latest 24.70% <ø> (-0.03%) ⬇️
instrumentations-integration-esbuild-latest-maintenance 18.73% <ø> (-0.01%) ⬇️
llmobs-ai 35.14% <ø> (-0.06%) ⬇️
llmobs-anthropic 36.52% <ø> (-0.08%) ⬇️
llmobs-bedrock 36.05% <ø> (-0.06%) ⬇️
llmobs-google-genai 35.96% <ø> (-0.08%) ⬇️
llmobs-langchain 35.50% <ø> (-0.05%) ⬇️
llmobs-openai-latest 39.42% <ø> (-0.08%) ⬇️
llmobs-openai-oldest ?
llmobs-sdk-active 43.37% <ø> (-0.08%) ⬇️
llmobs-sdk-latest 43.37% <ø> (-0.08%) ⬇️
llmobs-sdk-maintenance 43.47% <ø> (?)
llmobs-sdk-oldest 43.46% <ø> (-0.08%) ⬇️
llmobs-vertex-ai 35.63% <ø> (-0.08%) ⬇️
master-coverage 92.70% <100.00%> (?)
openfeature-macos 37.49% <ø> (+<0.01%) ⬆️
openfeature-ubuntu 37.63% <ø> (+0.01%) ⬆️
openfeature-unit-active 50.02% <ø> (+0.14%) ⬆️
openfeature-unit-latest 50.02% <ø> (+0.14%) ⬆️
openfeature-unit-maintenance 50.38% <ø> (+0.13%) ⬆️
openfeature-unit-oldest 50.38% <ø> (+0.13%) ⬆️
openfeature-windows ?
platform-core 46.52% <ø> (+0.04%) ⬆️
platform-esbuild 18.67% <ø> (-28.82%) ⬇️
platform-instrumentations-misc 29.57% <ø> (+0.08%) ⬆️
platform-integration-active 47.31% <100.00%> (+0.24%) ⬆️
platform-integration-latest 47.29% <100.00%> (+0.23%) ⬆️
platform-integration-maintenance ?
platform-integration-oldest 47.30% <100.00%> (-0.02%) ⬇️
platform-shimmer 47.54% <ø> (+0.03%) ⬆️
platform-unit-guardrails 45.39% <100.00%> (+0.97%) ⬆️
platform-webpack 18.32% <ø> (+0.04%) ⬆️
plugins-aws-durable-execution-sdk-js 32.85% <ø> (-0.05%) ⬇️
plugins-axios 35.48% <71.42%> (+0.02%) ⬆️
plugins-azure-cosmos 35.97% <ø> (-0.04%) ⬇️
plugins-azure-event-hubs 34.84% <71.42%> (+0.02%) ⬆️
plugins-azure-service-bus 35.34% <71.42%> (+0.02%) ⬆️
plugins-body-parser 36.44% <71.42%> (+<0.01%) ⬆️
plugins-bullmq 39.43% <ø> (-0.07%) ⬇️
plugins-cassandra 33.58% <ø> (-0.23%) ⬇️
plugins-cookie 40.76% <ø> (+0.04%) ⬆️
plugins-cookie-parser 40.59% <ø> (+0.04%) ⬆️
plugins-crypto 42.76% <ø> (+0.04%) ⬆️
plugins-dd-trace-api 33.17% <ø> (-0.09%) ⬇️
plugins-express-mongo-sanitize 40.64% <ø> (+0.04%) ⬆️
plugins-express-session 40.50% <ø> (?)
plugins-fastify 37.77% <71.42%> (-0.08%) ⬇️
plugins-fetch 34.52% <ø> (-0.06%) ⬇️
plugins-fs 33.60% <ø> (-0.08%) ⬇️
plugins-generic-pool 40.07% <ø> (+0.04%) ⬆️
plugins-google-cloud-pubsub 41.32% <ø> (-0.07%) ⬇️
plugins-grpc 36.47% <ø> (-0.06%) ⬇️
plugins-handlebars 40.64% <ø> (+0.04%) ⬆️
plugins-hapi 35.76% <ø> (+0.14%) ⬆️
plugins-hono 35.87% <ø> (-0.08%) ⬇️
plugins-ioredis 34.23% <ø> (?)
plugins-jest 27.05% <ø> (?)
plugins-knex 40.10% <ø> (+0.04%) ⬆️
plugins-langgraph 32.31% <ø> (?)
plugins-ldapjs 39.06% <ø> (+0.04%) ⬆️
plugins-light-my-request 40.20% <ø> (+0.04%) ⬆️
plugins-limitd-client 27.92% <ø> (-0.07%) ⬇️
plugins-lodash 40.25% <ø> (+0.04%) ⬆️
plugins-mariadb 34.86% <ø> (-0.29%) ⬇️
plugins-memcached ?
plugins-microgateway-core 34.71% <ø> (-0.08%) ⬇️
plugins-modelcontextprotocol-sdk 32.26% <ø> (?)
plugins-moleculer 36.53% <ø> (-0.06%) ⬇️
plugins-mongodb 35.84% <ø> (+0.04%) ⬆️
plugins-mongodb-core 35.36% <ø> (-0.06%) ⬇️
plugins-mongoose 34.51% <ø> (+0.11%) ⬆️
plugins-multer 40.56% <ø> (+0.04%) ⬆️
plugins-mysql 34.56% <ø> (?)
plugins-mysql2 34.89% <ø> (-0.06%) ⬇️
plugins-nats 36.25% <ø> (-0.06%) ⬇️
plugins-node-serialize 40.48% <ø> (-0.27%) ⬇️
plugins-opensearch 33.68% <ø> (+0.08%) ⬆️
plugins-passport-http 40.37% <ø> (+0.04%) ⬆️
plugins-pino 29.82% <ø> (?)
plugins-postgres 34.61% <ø> (-0.06%) ⬇️
plugins-process 42.76% <ø> (+0.04%) ⬆️
plugins-pug 40.76% <ø> (+0.04%) ⬆️
plugins-redis 34.26% <ø> (-0.02%) ⬇️
plugins-router 38.16% <ø> (-0.05%) ⬇️
plugins-sequelize 40.02% <ø> (+0.04%) ⬆️
plugins-test-and-upstream-amqp10 33.61% <ø> (-0.24%) ⬇️
plugins-test-and-upstream-amqplib 39.10% <ø> (+0.12%) ⬆️
plugins-test-and-upstream-apollo 34.79% <ø> (-0.06%) ⬇️
plugins-test-and-upstream-avsc 33.66% <ø> (-0.07%) ⬇️
plugins-test-and-upstream-bunyan 29.04% <ø> (-0.07%) ⬇️
plugins-test-and-upstream-connect 36.26% <ø> (-0.08%) ⬇️
plugins-test-and-upstream-graphql 36.04% <ø> (+0.03%) ⬆️
plugins-test-and-upstream-koa 35.82% <ø> (-0.08%) ⬇️
plugins-test-and-upstream-protobufjs 33.89% <ø> (-0.08%) ⬇️
plugins-test-and-upstream-rhea 39.03% <ø> (-0.07%) ⬇️
plugins-undici 34.96% <ø> (-0.06%) ⬇️
plugins-url 42.76% <ø> (+0.04%) ⬆️
plugins-valkey 33.72% <ø> (-0.09%) ⬇️
plugins-vm 42.76% <ø> (+0.04%) ⬆️
plugins-winston 29.71% <ø> (-0.07%) ⬇️
plugins-ws 37.02% <ø> (-0.06%) ⬇️
profiling-macos 43.02% <71.42%> (-0.03%) ⬇️
profiling-ubuntu 43.40% <71.42%> (?)
profiling-windows 40.87% <71.42%> (-0.06%) ⬇️
serverless-aws-sdk-latest-bedrockruntime 31.94% <ø> (-0.05%) ⬇️
serverless-aws-sdk-latest-client 36.37% <ø> (+0.04%) ⬆️
serverless-aws-sdk-latest-dynamodb 33.97% <ø> (+0.02%) ⬆️
serverless-aws-sdk-latest-eventbridge ?
serverless-aws-sdk-latest-kinesis ?
serverless-aws-sdk-latest-lambda 34.37% <ø> (?)
serverless-aws-sdk-latest-s3 32.33% <ø> (-0.05%) ⬇️
serverless-aws-sdk-latest-serverless-peer-service 39.36% <ø> (+0.04%) ⬆️
serverless-aws-sdk-latest-sns 38.05% <ø> (-0.13%) ⬇️
serverless-aws-sdk-latest-sqs 37.82% <ø> (+0.02%) ⬆️
serverless-aws-sdk-latest-stepfunctions ?
serverless-aws-sdk-latest-util 46.92% <ø> (+0.04%) ⬆️
serverless-aws-sdk-oldest-aws-sdk 33.19% <ø> (-0.06%) ⬇️
serverless-aws-sdk-oldest-bedrockruntime 32.03% <ø> (-0.05%) ⬇️
serverless-aws-sdk-oldest-client 36.94% <ø> (+0.04%) ⬆️
serverless-aws-sdk-oldest-dynamodb 34.04% <ø> (+<0.01%) ⬆️
serverless-aws-sdk-oldest-eventbridge 27.18% <ø> (?)
serverless-aws-sdk-oldest-kinesis 37.30% <ø> (-0.05%) ⬇️
serverless-aws-sdk-oldest-lambda 34.47% <ø> (?)
serverless-aws-sdk-oldest-s3 32.46% <ø> (-0.05%) ⬇️
serverless-aws-sdk-oldest-serverless-peer-service 39.45% <ø> (+0.04%) ⬆️
serverless-aws-sdk-oldest-sns 38.15% <ø> (-0.13%) ⬇️
serverless-aws-sdk-oldest-sqs 37.90% <ø> (+0.02%) ⬆️
serverless-aws-sdk-oldest-stepfunctions 33.07% <ø> (?)
serverless-aws-sdk-oldest-util 47.69% <ø> (+0.04%) ⬆️
serverless-azure-durable-functions 36.79% <71.42%> (-0.14%) ⬇️
serverless-azure-functions-eventhubs 38.38% <71.42%> (+0.01%) ⬆️
serverless-azure-functions-servicebus 38.43% <71.42%> (+0.01%) ⬆️
serverless-lambda 34.32% <ø> (-0.06%) ⬇️
test-optimization-cucumber-latest-7.0.0 49.79% <ø> (+0.11%) ⬆️
test-optimization-cucumber-latest-latest 52.43% <ø> (+0.11%) ⬆️
test-optimization-cucumber-oldest-7.0.0 49.87% <ø> (+0.11%) ⬆️
test-optimization-cypress-latest-12.0.0-commonJS 49.10% <ø> (+3.30%) ⬆️
test-optimization-cypress-latest-12.0.0-esm 48.51% <ø> (+2.76%) ⬆️
test-optimization-cypress-latest-14.5.4-commonJS 48.28% <ø> (+0.13%) ⬆️
test-optimization-cypress-latest-14.5.4-esm 48.03% <ø> (-0.91%) ⬇️
test-optimization-cypress-latest-latest-commonJS 49.43% <ø> (+0.66%) ⬆️
test-optimization-cypress-latest-latest-esm 47.64% <ø> (-1.51%) ⬇️
test-optimization-cypress-oldest-12.0.0-commonJS 49.19% <ø> (+0.05%) ⬆️
test-optimization-cypress-oldest-12.0.0-esm 49.02% <ø> (-0.15%) ⬇️
test-optimization-cypress-oldest-14.5.4-commonJS 47.29% <ø> (-1.70%) ⬇️
test-optimization-cypress-oldest-14.5.4-esm 48.76% <ø> (-0.26%) ⬇️
test-optimization-jest-latest-latest 53.35% <71.42%> (-1.77%) ⬇️
test-optimization-jest-latest-oldest 51.82% <ø> (+0.08%) ⬆️
test-optimization-jest-oldest-latest 53.40% <71.42%> (-1.77%) ⬇️
test-optimization-jest-oldest-oldest 54.14% <71.42%> (+0.07%) ⬆️
test-optimization-mocha-latest-latest ?
test-optimization-mocha-latest-oldest 51.03% <71.42%> (?)
test-optimization-mocha-oldest-latest ?
test-optimization-mocha-oldest-oldest 51.02% <71.42%> (+0.08%) ⬆️
test-optimization-playwright-latest-latest-playwright-active-test-span 44.24% <ø> (+0.39%) ⬆️
test-optimization-playwright-latest-latest-playwright-atr 42.91% <ø> (+0.09%) ⬆️
test-optimization-playwright-latest-latest-playwright-efd 43.33% <ø> (+0.10%) ⬆️
test-optimization-playwright-latest-latest-playwright-final-status 43.39% <ø> (+0.09%) ⬆️
test-optimization-playwright-latest-latest-playwright-impacted-tests 42.86% <ø> (-0.02%) ⬇️
test-optimization-playwright-latest-latest-playwright-reporting ?
test-optimization-playwright-latest-latest-playwright-test-management 44.40% <ø> (+0.08%) ⬆️
test-optimization-playwright-latest-oldest-playwright-active-test-span 44.07% <ø> (+0.25%) ⬆️
test-optimization-playwright-latest-oldest-playwright-atr 42.97% <ø> (+0.09%) ⬆️
test-optimization-playwright-latest-oldest-playwright-efd 43.26% <ø> (+0.07%) ⬆️
test-optimization-playwright-latest-oldest-playwright-final-status 43.33% <ø> (+0.12%) ⬆️
test-optimization-playwright-latest-oldest-playwright-impacted-tests ?
test-optimization-playwright-latest-oldest-playwright-reporting 42.75% <ø> (+0.07%) ⬆️
test-optimization-playwright-latest-oldest-playwright-test-management ?
test-optimization-playwright-oldest-latest-playwright-active-test-span 44.32% <ø> (+0.07%) ⬆️
test-optimization-playwright-oldest-latest-playwright-atr ?
test-optimization-playwright-oldest-latest-playwright-efd 43.38% <ø> (+0.07%) ⬆️
test-optimization-playwright-oldest-latest-playwright-final-status 43.45% <ø> (?)
test-optimization-playwright-oldest-latest-playwright-impacted-tests ?
test-optimization-playwright-oldest-latest-playwright-reporting 43.00% <ø> (?)
test-optimization-playwright-oldest-latest-playwright-test-management 44.48% <ø> (+0.07%) ⬆️
test-optimization-playwright-oldest-oldest-playwright-active-test-span 44.15% <ø> (+0.25%) ⬆️
test-optimization-playwright-oldest-oldest-playwright-atr 43.05% <ø> (+0.09%) ⬆️
test-optimization-playwright-oldest-oldest-playwright-efd 43.32% <ø> (+0.07%) ⬆️
test-optimization-playwright-oldest-oldest-playwright-final-status 43.41% <ø> (+0.12%) ⬆️
test-optimization-playwright-oldest-oldest-playwright-impacted-tests ?
test-optimization-playwright-oldest-oldest-playwright-reporting 42.81% <ø> (+0.07%) ⬆️
test-optimization-playwright-oldest-oldest-playwright-test-management 44.43% <ø> (?)
test-optimization-selenium-latest ?
test-optimization-selenium-oldest 44.98% <ø> (+0.24%) ⬆️
test-optimization-testopt-active 48.12% <71.42%> (+0.02%) ⬆️
test-optimization-testopt-latest 48.11% <71.42%> (+0.02%) ⬆️
test-optimization-testopt-oldest 49.30% <ø> (?)
test-optimization-vitest-latest 50.79% <ø> (+1.28%) ⬆️
test-optimization-vitest-oldest 47.44% <ø> (+0.36%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

The engines.node field no longer includes an upper bound, and the upper
bound is now hardcoded in guardrails. Update tests accordingly:
- Fix format assertion regex to /^>=\d+$/
- Remove "too recent" context (upper bound can no longer be simulated
  via engines.node)
- Update "too old" context to use min-only format
- Update expected log messages to reflect the new engines string format

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@pr-commenter

pr-commenter Bot commented Jun 23, 2026

Copy link
Copy Markdown

Benchmarks

Benchmark execution time: 2026-06-25 22:17:45

Comparing candidate commit b7f0570 in PR branch rochdev/drop-node-18-20-infra with baseline commit 632fbea in branch master.

📊 Benchmarking dashboard

Found 0 performance improvements and 0 performance regressions! Performance is the same for 1952 metrics, 13 unstable metrics.

Explanation

This is an A/B test comparing a candidate commit's performance against that of a baseline commit. Performance changes are noted in the tables below as:

  • 🟩 = significantly better candidate vs. baseline
  • 🟥 = significantly worse candidate vs. baseline

We compute a confidence interval (CI) over the relative difference of means between metrics from the candidate and baseline commits, considering the baseline as the reference.

If the CI is entirely outside the configured SIGNIFICANT_IMPACT_THRESHOLD (or the deprecated UNCONFIDENCE_THRESHOLD), the change is considered significant.

Feel free to reach out to #apm-benchmarking-platform on Slack if you have any questions.

More details about the CI and significant changes

You can imagine this CI as a range of values that is likely to contain the true difference of means between the candidate and baseline commits.

CIs of the difference of means are often centered around 0%, because often changes are not that big:

---------------------------------(------|---^--------)-------------------------------->
                              -0.6%    0%  0.3%     +1.2%
                                 |          |        |
         lower bound of the CI --'          |        |
sample mean (center of the CI) -------------'        |
         upper bound of the CI ----------------------'

As described above, a change is considered significant if the CI is entirely outside the configured SIGNIFICANT_IMPACT_THRESHOLD (or the deprecated UNCONFIDENCE_THRESHOLD).

For instance, for an execution time metric, this confidence interval indicates a significantly worse performance:

----------------------------------------|---------|---(---------^---------)---------->
                                       0%        1%  1.3%      2.2%      3.1%
                                                  |   |         |         |
       significant impact threshold --------------'   |         |         |
                      lower bound of CI --------------'         |         |
       sample mean (center of the CI) --------------------------'         |
                      upper bound of CI ----------------------------------'

Unstable benchmarks

These benchmarks have a confidence interval too wide to call a change; treat them as noise rather than signal.

scenario:appsec-appsec-enabled-24

  • unstable execution_time [-158.238ms; +155.641ms] or [-6.074%; +5.974%]

scenario:appsec-appsec-enabled-26

  • unstable execution_time [-169.415ms; +165.708ms] or [-6.828%; +6.678%]

scenario:appsec-control-20

  • unstable execution_time [-119.833ms; +134.416ms] or [-7.026%; +7.881%]

scenario:appsec-control-24

  • unstable execution_time [-91.845ms; +88.386ms] or [-7.629%; +7.342%]

scenario:appsec-control-26

  • unstable execution_time [-95496.084µs; +96180.917µs] or [-8.074%; +8.131%]

scenario:debugger-line-probe-with-snapshot-default-20

  • unstable max_rss_usage [-21.989MB; +15.401MB] or [-11.663%; +8.169%]

scenario:dogstatsd-with-tags-20

  • unstable cpu_user_time [-464.135ms; +238.613ms] or [-9.423%; +4.844%]
  • unstable execution_time [-464.637ms; +239.092ms] or [-9.298%; +4.785%]

scenario:plugin-graphql-long-with-depth-and-collapse-off-24

  • unstable cpu_user_time [-234.976ms; +394.320ms] or [-5.341%; +8.963%]
  • unstable execution_time [-253.396ms; +423.232ms] or [-5.410%; +9.035%]
  • unstable max_rss_usage [-30.807MB; +52.637MB] or [-5.773%; +9.864%]

scenario:plugin-graphql-long-with-depth-off-20

  • unstable max_rss_usage [-8266.595KB; +9270.023KB] or [-6.017%; +6.747%]

scenario:test-optimization-large-suite-20

  • unstable max_rss_usage [-4573.660KB; +6029.327KB] or [-5.688%; +7.498%]

rochdev and others added 4 commits June 22, 2026 21:24
…ersions

- oldest: use awk to parse engines.node from package.json so it works
  before actions/setup-node runs (no node in PATH in some containers)
- supported-check: guard with [ -f package.json ] for sparse checkouts
  that don't include the root package.json (e.g. all-green job)
- supported-check: use node -e instead of node -p, which wasn't
  available until Node 0.9.4 (guardrails job tests down to Node 0.8)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds nodeMaxMajor to package.json as the shared source of truth for
the Node.js upper bound. Both the guardrails and the init integration
tests read from it, avoiding the hardcoded 27. Restores the removed
"too recent" test context which now manipulates nodeMaxMajor instead
of the engines field.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…of YAML

Add a semver check at the top of withVersions() that returns early when
the current Node.js version is outside the supported range
(engines.node / nodeMaxMajor). This replaces the YAML-level
`if: steps.node.outputs.supported != 'false'` guards on the aerospike,
confluentinc-kafka-javascript, and prisma jobs, and removes the
`supported` output from the node setup actions entirely. The skip now
applies consistently in both CI and local runs without repeating the
logic across multiple workflow files.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The in-range context sets engines.node to '>=0' to bypass the lower
bound, but left nodeMaxMajor at 27. Any Node version >=27 would still
abort. Set nodeMaxMajor to 1000 to preserve the original >=0 <1000
behaviour.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@rochdev rochdev marked this pull request as ready for review June 25, 2026 20:14
@rochdev rochdev requested review from a team as code owners June 25, 2026 20:14
@rochdev rochdev requested review from crysmags and removed request for a team June 25, 2026 20:14

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1045d1c56f

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread package.json
Comment thread packages/dd-trace/test/setup/mocha.js Outdated
rochdev and others added 2 commits June 25, 2026 16:27
The abort path (NODE_MAJOR >= nodeMaxMajor) was only exercised by
integration tests, leaving the changed supportedRange lines uncovered
in the unit test coverage report. Add a proxyquire-based unit test
that simulates a too-recent Node version to cover those lines.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Read nodeMaxMajor from package.json in generate-supported-integrations
  so built-in integrations (dns, http, net) keep their upper bound after
  engines.node was stripped of the <N comparator
- Respect DD_INJECT_FORCE in withVersions() so jobs that intentionally
  run on EOL Node (couchbase, oracledb) are not silently skipped

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@rochdev rochdev requested a review from a team as a code owner June 25, 2026 20:52
@rochdev rochdev requested review from khanayan123 and removed request for a team June 25, 2026 20:52
pabloerhard
pabloerhard previously approved these changes Jun 25, 2026
Istanbul only emits a single DA entry at the opening line of a
multi-line telemetry() call, so the result_reason property string
concatenation was never recorded in the lcov. Extracting it into a
var statement gives Istanbul a separately-tracked line to instrument.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@rochdev rochdev merged commit 1a79e10 into master Jun 25, 2026
805 checks passed
@rochdev rochdev deleted the rochdev/drop-node-18-20-infra branch June 25, 2026 22:23
dd-octo-sts Bot pushed a commit that referenced this pull request Jun 26, 2026
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
@dd-octo-sts dd-octo-sts Bot mentioned this pull request Jun 26, 2026
IlyasShabi pushed a commit that referenced this pull request Jun 26, 2026
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
@dd-octo-sts dd-octo-sts Bot mentioned this pull request Jun 26, 2026
pabloerhard pushed a commit that referenced this pull request Jun 26, 2026
packages/dd-trace/test/guardrails/index.spec.js duplicated existing
integration coverage. init.spec.js's "when node version is too recent"
context already exercises the incompatible-runtime bailout — plus the
telemetry, debug logs, and DD_INJECT_FORCE override that the unit test
stubbed to no-ops — by setting pkg.nodeMaxMajor = NODE_MAJOR.

The unit test was added in #9033 only to satisfy a Codecov patch-coverage
flag on lines that PR added to the bailout block (integration tests run
in sandboxes and don't count toward nyc). It relied on proxyquire
intercepting an in-function require() of package.json, which is
environment-dependent: it failed on the v5.110.0 release proposal on
Node 26 even though the real bailout — verified by the passing
init.spec.js integration test on that same run — works correctly.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
dd-octo-sts Bot pushed a commit that referenced this pull request Jun 26, 2026
packages/dd-trace/test/guardrails/index.spec.js duplicated existing
integration coverage. init.spec.js's "when node version is too recent"
context already exercises the incompatible-runtime bailout — plus the
telemetry, debug logs, and DD_INJECT_FORCE override that the unit test
stubbed to no-ops — by setting pkg.nodeMaxMajor = NODE_MAJOR.

The unit test was added in #9033 only to satisfy a Codecov patch-coverage
flag on lines that PR added to the bailout block (integration tests run
in sandboxes and don't count toward nyc). It relied on proxyquire
intercepting an in-function require() of package.json, which is
environment-dependent: it failed on the v5.110.0 release proposal on
Node 26 even though the real bailout — verified by the passing
init.spec.js integration test on that same run — works correctly.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
pabloerhard pushed a commit that referenced this pull request Jun 26, 2026
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
pabloerhard pushed a commit that referenced this pull request Jun 26, 2026
packages/dd-trace/test/guardrails/index.spec.js duplicated existing
integration coverage. init.spec.js's "when node version is too recent"
context already exercises the incompatible-runtime bailout — plus the
telemetry, debug logs, and DD_INJECT_FORCE override that the unit test
stubbed to no-ops — by setting pkg.nodeMaxMajor = NODE_MAJOR.

The unit test was added in #9033 only to satisfy a Codecov patch-coverage
flag on lines that PR added to the bailout block (integration tests run
in sandboxes and don't count toward nyc). It relied on proxyquire
intercepting an in-function require() of package.json, which is
environment-dependent: it failed on the v5.110.0 release proposal on
Node 26 even though the real bailout — verified by the passing
init.spec.js integration test on that same run — works correctly.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants