Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
95769d0
chore(deps): bump the test-versions group across 1 directory with 2 u…
dependabot[bot] Oct 28, 2025
2349ff5
fix retry no longer working for bun (#6762)
rochdev Oct 28, 2025
a248b7d
FFL-1294: Fix FFE_FLAGS Remote Config handler payload format (#6754)
leoromanovsky Oct 28, 2025
a9a7a6b
chore(deps-dev): bump workerpool from 9.3.4 to 10.0.0 (#6751)
dependabot[bot] Oct 28, 2025
3960f41
chore: always redact exception messages for logs in telemetry (#6740)
bouwkast Oct 28, 2025
5d4ba0f
fix: do not include peer dependencies of a dependency (#6760)
BridgeAR Oct 28, 2025
eb2a356
chore: remove unused code (#6768)
BridgeAR Oct 28, 2025
3212de1
ci: fix express-session job name (#6769)
pabloerhard Oct 28, 2025
0279e8d
[test optimization] Improve flakiness in cypress (even more) (#6772)
juan-fernandez Oct 28, 2025
4ab5ba1
fix: make sure latest vitest versions get properly instrumented (#6773)
juan-fernandez Oct 28, 2025
d49da59
ci: remove deprecated lambda executor from localstack config (#6771)
rochdev Oct 28, 2025
9f65d1f
Renamed nightly dispatch workflow (#6742)
pabloerhard Oct 28, 2025
7d1c70e
feat: support most configurations with Declarative Config (#6694)
mtoffl01 Oct 28, 2025
122f609
fix: safer wrapFunction for ESM instrumentation (#6761)
pabloerhard Oct 28, 2025
a0cb799
fix: restore the try catch in esubild because could fail using yarn (…
uurien Oct 29, 2025
d9f9ed4
chore(deps): bump the test-versions group across 1 directory with 2 u…
dependabot[bot] Oct 30, 2025
05113f1
add include configuration to iitm loader hook (#6455)
rochdev Oct 30, 2025
6ce8834
fix: Add @yaacovcr/transform as external in tests because it is a new…
uurien Oct 30, 2025
f59cd92
feat(ai_guard): add telemetry to the SDK (#6767)
manuel-alvarez-alvarez Oct 30, 2025
bd45541
[test optimization] Fix reported test suite duration in playwright (#…
juan-fernandez Oct 30, 2025
d052b0e
[test optimization] Playwright + RUM: wait for RUM data to flush (#6759)
juan-fernandez Oct 30, 2025
440beb8
[test optimization] Fix playwright tests in v5 release line (#6798)
juan-fernandez Oct 30, 2025
b1118b4
fix: made wrapFunction unique to functions (#6796)
pabloerhard Oct 30, 2025
32afa0f
ci: update kafka docker image to 3.9.1 (#6794)
rochdev Oct 30, 2025
dabd881
fix: update ai plugin typing (#6786)
sabrenner Oct 30, 2025
fba8ae7
test: skip Next.js 16 tests on non-supported Node.js versions (#6780)
BridgeAR Oct 30, 2025
1838b13
v5.75.0
rochdev Oct 31, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 13 additions & 3 deletions .github/workflows/apm-integrations.yml
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,7 @@ jobs:
runs-on: ubuntu-latest
services:
kafka:
image: apache/kafka-native:3.8.0-rc2
image: apache/kafka-native:3.9.1
env:
KAFKA_PROCESS_ROLES: broker,controller
KAFKA_NODE_ID: '1'
Expand Down Expand Up @@ -384,7 +384,17 @@ jobs:
- uses: ./.github/actions/install
- run: yarn test:plugins:ci

cookie-session:
express-mongo-sanitize:
runs-on: ubuntu-latest
env:
PLUGINS: express-mongo-sanitize
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
- uses: ./.github/actions/plugins/test
with:
dd_api_key: ${{ secrets.DD_API_KEY }}

express-session:
runs-on: ubuntu-latest
env:
PLUGINS: express-session
Expand Down Expand Up @@ -524,7 +534,7 @@ jobs:
runs-on: ubuntu-latest
services:
kafka:
image: apache/kafka-native:3.8.0-rc2
image: apache/kafka-native:3.9.1
env:
KAFKA_PROCESS_ROLES: broker,controller
KAFKA_NODE_ID: '1'
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/appsec.yml
Original file line number Diff line number Diff line change
Expand Up @@ -421,7 +421,7 @@ jobs:
runs-on: ubuntu-latest
services:
kafka:
image: apache/kafka-native:3.8.0-rc2
image: apache/kafka-native:3.9.1
env:
KAFKA_PROCESS_ROLES: broker,controller
KAFKA_NODE_ID: '1'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Nightly Testing
name: Nightly and custom Node.js builds

on:
workflow_dispatch:
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/serverless.yml
Original file line number Diff line number Diff line change
Expand Up @@ -78,10 +78,11 @@ jobs:
EXTRA_CORS_EXPOSE_HEADERS: x-amz-request-id,x-amzn-requestid,x-amz-id-2
AWS_DEFAULT_REGION: us-east-1
FORCE_NONINTERACTIVE: 'true'
LAMBDA_EXECUTOR: local
START_WEB: '0'
ports:
- 4566:4566
volumes:
- /var/run/docker.sock:/var/run/docker.sock:rw
# we have two localstacks since upgrading localstack was causing lambda & S3 tests to fail
# To-Do: Debug localstack / lambda and localstack / S3
localstack-legacy:
Expand Down
1 change: 1 addition & 0 deletions LICENSE-3rdparty.csv
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ require,@opentelemetry/resources,Apache license 2.0,Copyright OpenTelemetry Auth
require,@isaacs/ttlcache,ISC,Copyright (c) 2022-2023 - Isaac Z. Schlueter and Contributors
require,crypto-randomuuid,MIT,Copyright 2021 Node.js Foundation and contributors
require,dc-polyfill,MIT,Copyright 2023 Datadog Inc.
require,escape-string-regexp,MIT,Copyright Sindre Sorhus
require,ignore,MIT,Copyright 2013 Kael Zhang and contributors
require,import-in-the-middle,Apache license 2.0,Copyright 2021 Datadog Inc.
require,istanbul-lib-coverage,BSD-3-Clause,Copyright 2012-2015 Yahoo! Inc.
Expand Down
2 changes: 1 addition & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ services:
- LAMBDA_EXECUTOR=local
kafka:
platform: linux/arm64
image: apache/kafka-native:3.8.0-rc2
image: apache/kafka-native:3.9.1
ports:
- "127.0.0.1:9092:9092"
- "127.0.0.1:9093:9093"
Expand Down
2 changes: 1 addition & 1 deletion docs/test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,6 @@ const elasticsearchOptions: plugins.elasticsearch = {

const awsSdkOptions: plugins.aws_sdk = {
service: 'test',
splitByAwsService: false,
batchPropagationEnabled: false,
hooks: {
request: (span?: Span, response?) => {},
Expand Down Expand Up @@ -303,6 +302,7 @@ const openSearchOptions: plugins.opensearch = {
},
};

tracer.use('ai', true)
tracer.use('amqp10');
tracer.use('amqplib');
tracer.use('anthropic');
Expand Down
18 changes: 11 additions & 7 deletions index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,7 @@ interface Tracer extends opentracing.Tracer {
/** @hidden */
interface Plugins {
"aerospike": tracer.plugins.aerospike;
"ai": tracer.plugins.ai;
"amqp10": tracer.plugins.amqp10;
"amqplib": tracer.plugins.amqplib;
"anthropic": tracer.plugins.anthropic;
Expand Down Expand Up @@ -1642,6 +1643,12 @@ declare namespace tracer {
*/
interface aerospike extends Instrumentation {}

/**
* This plugin automatically instruments the
* [Vercel AI SDK](https://ai-sdk.dev/docs/introduction) module.
*/
interface ai extends Instrumentation {}

/**
* This plugin automatically instruments the
* [amqp10](https://github.com/noodlefrenzy/node-amqp10) module.
Expand Down Expand Up @@ -1698,12 +1705,6 @@ declare namespace tracer {
* [aws-sdk](https://github.com/aws/aws-sdk-js) module.
*/
interface aws_sdk extends Instrumentation {
/**
* Whether to add a suffix to the service name so that each AWS service has its own service name.
* @default true
*/
splitByAwsService?: boolean;

/**
* Whether to inject all messages during batch AWS SQS, Kinesis, and SNS send operations. Normal
* behavior is to inject the first message in batch send operations.
Expand Down Expand Up @@ -2821,7 +2822,10 @@ declare namespace tracer {
redactionValuePattern?: string,

/**
* Allows to enable security controls.
* Allows to enable security controls. This option is not supported when
* using ESM.
* @deprecated Please use the DD_IAST_SECURITY_CONTROLS_CONFIGURATION
* environment variable instead.
*/
securityControlsConfiguration?: string,

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
'use strict'

const { test, expect } = require('@playwright/test')

test.describe('long suite', () => {
test('should be able to run', async () => {
await new Promise(resolve => setTimeout(resolve, 5000))
expect(true).toBe(true)
})
})
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
'use strict'

const { test, expect } = require('@playwright/test')

test.describe('short suite', () => {
test('should be able to run', async () => {
expect(true).toBe(true)
})

test.skip('should skip and not mess up the duration of the test suite', async () => {
// TODO
})
})
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
'use strict'

const { test, expect } = require('@playwright/test')

test.beforeEach(async ({ page }) => {
await page.goto(process.env.PW_BASE_URL)
})

test.describe('playwright', () => {
test('should have RUM active', async ({ page }) => {
await expect(page.locator('.hello-world')).toHaveText([
'Hello World'
])
await page.goto(`${process.env.PW_BASE_URL}/another-page`)
await expect(page.locator('.hello-world')).toHaveText([
'Hello World'
])
})
})
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@
"pluginsFile": "cypress/plugins-old/index.js",
"supportFile": "cypress/support/e2e.js",
"integrationFolder": "cypress/e2e",
"defaultCommandTimeout": 100,
"defaultCommandTimeout": 1000,
"nodeVersion": "system"
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
'use strict'

module.exports = {
defaultCommandTimeout: 100,
defaultCommandTimeout: 1000,
e2e: {
setupNodeEvents (on, config) {
return require('dd-trace/ci/cypress/plugin')(on, config)
Expand Down
2 changes: 1 addition & 1 deletion integration-tests/cypress-config.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@
"pluginsFile": "cypress/plugins-old/index.js",
"supportFile": "cypress/support/e2e.js",
"integrationFolder": "cypress/e2e",
"defaultCommandTimeout": 100,
"defaultCommandTimeout": 1000,
"nodeVersion": "system"
}
30 changes: 15 additions & 15 deletions integration-tests/cypress/cypress.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -493,7 +493,7 @@ moduleTypes.forEach(({
.map(file => file.filename)

assert.includeMembers(fileNames, Object.keys(coverageFixture))
}, 20000)
}, 25000)

childProcess = exec(
testCommand,
Expand Down Expand Up @@ -988,7 +988,7 @@ moduleTypes.forEach(({
'ci-visibility/subproject/src/index.tsx',
'ci-visibility/subproject/cypress/e2e/spec.cy.js'
])
}, 10000)
}, 25000)

childProcess = exec(
command,
Expand Down Expand Up @@ -1028,7 +1028,7 @@ moduleTypes.forEach(({
assert.exists(testEvent.content.test_session_id)
assert.notEqual(testEvent.content.test_suite_id, testModuleEvent.content.test_module_id)
})
})
}, 25000)

childProcess = exec(
testCommand,
Expand Down Expand Up @@ -1173,7 +1173,7 @@ moduleTypes.forEach(({

const testSession = events.find(event => event.type === 'test_session_end').content
assert.propertyVal(testSession.meta, TEST_EARLY_FLAKE_ENABLED, 'true')
})
}, 25000)

const {
NODE_OPTIONS, // NODE_OPTIONS dd-trace config does not work with cypress
Expand Down Expand Up @@ -1241,7 +1241,7 @@ moduleTypes.forEach(({

const testSession = events.find(event => event.type === 'test_session_end').content
assert.notProperty(testSession.meta, TEST_EARLY_FLAKE_ENABLED)
})
}, 25000)

const specToRun = 'cypress/e2e/spec.cy.js'
childProcess = exec(
Expand Down Expand Up @@ -1298,7 +1298,7 @@ moduleTypes.forEach(({

const testSession = events.find(event => event.type === 'test_session_end').content
assert.propertyVal(testSession.meta, TEST_EARLY_FLAKE_ENABLED, 'true')
})
}, 25000)

const specToRun = 'cypress/e2e/skipped-test.js'

Expand Down Expand Up @@ -1353,7 +1353,7 @@ moduleTypes.forEach(({

const newTests = tests.filter(test => test.meta[TEST_IS_NEW] === 'true')
assert.equal(newTests.length, 0)
})
}, 25000)

const specToRun = 'cypress/e2e/spec.cy.js'

Expand Down Expand Up @@ -1624,7 +1624,7 @@ moduleTypes.forEach(({
'cypress/e2e/flaky-test-retries.js.flaky test retry always passes'
])
assert.equal(tests.filter(test => test.meta[TEST_RETRY_REASON] === TEST_RETRY_REASON_TYPES.atr).length, 0)
})
}, 25000)

const {
NODE_OPTIONS, // NODE_OPTIONS dd-trace config does not work with cypress
Expand Down Expand Up @@ -1683,7 +1683,7 @@ moduleTypes.forEach(({
])

assert.equal(tests.filter(test => test.meta[TEST_RETRY_REASON] === TEST_RETRY_REASON_TYPES.atr).length, 2)
})
}, 25000)

const {
NODE_OPTIONS, // NODE_OPTIONS dd-trace config does not work with cypress
Expand Down Expand Up @@ -1795,7 +1795,7 @@ moduleTypes.forEach(({

const testSession = events.find(event => event.type === 'test_session_end').content
assert.notProperty(testSession.meta, TEST_EARLY_FLAKE_ENABLED)
})
}, 25000)

const specToRun = 'cypress/e2e/spec.cy.js'
childProcess = exec(
Expand Down Expand Up @@ -1835,7 +1835,7 @@ moduleTypes.forEach(({
const test = events.find(event => event.type === 'test').content
assert.equal(test.resource, 'cypress/e2e/multi-origin.js.tests multiple origins')
assert.equal(test.meta[TEST_STATUS], 'pass')
})
}, 25000)

secondWebAppServer = http.createServer((req, res) => {
res.setHeader('Content-Type', 'text/html')
Expand Down Expand Up @@ -2011,7 +2011,7 @@ moduleTypes.forEach(({
}
}
}
})
}, 25000)

const runAttemptToFixTest = async ({
isAttemptToFix,
Expand Down Expand Up @@ -2195,7 +2195,7 @@ moduleTypes.forEach(({
assert.propertyVal(failedTest.meta, TEST_STATUS, 'fail')
assert.notProperty(failedTest.meta, TEST_MANAGEMENT_IS_DISABLED)
}
})
}, 25000)

const runDisableTest = async (isDisabling, extraEnvVars = {}) => {
const testAssertionsPromise = getTestAssertions(isDisabling)
Expand Down Expand Up @@ -2294,7 +2294,7 @@ moduleTypes.forEach(({
assert.propertyVal(failedTest.meta, TEST_STATUS, 'fail')
assert.notProperty(failedTest.meta, TEST_MANAGEMENT_IS_QUARANTINED)
}
})
}, 25000)

const runQuarantineTest = async (isQuarantining, extraEnvVars = {}) => {
const testAssertionsPromise = getTestAssertions(isQuarantining)
Expand Down Expand Up @@ -2366,7 +2366,7 @@ moduleTypes.forEach(({
const tests = events.filter(event => event.type === 'test').map(event => event.content)
// it is not retried
assert.equal(tests.length, 1)
})
}, 25000)

const {
NODE_OPTIONS,
Expand Down
3 changes: 2 additions & 1 deletion integration-tests/esbuild/build-and-test-git-tags.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ esbuild.build({
'mysql',
'oracledb',
'pg-query-stream',
'tedious'
'tedious',
'@yaacovcr/transform'
]
}).then(() => {
const { status, stdout, stderr } = spawnSync('node', [SCRIPT], {
Expand Down
4 changes: 0 additions & 4 deletions integration-tests/esbuild/build.esm-hono-output-cjs.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,6 @@ const external = [
// required if you use profiling
'@datadog/pprof',

// @openfeature/core is a peer dependency of @openfeature/server-sdk
// which is used by @datadog/openfeature-node-server
'@openfeature/core',

// required if you use Datadog security features
'@datadog/native-appsec',
'@datadog/native-iast-taint-tracking',
Expand Down
4 changes: 0 additions & 4 deletions integration-tests/esbuild/build.esm-hono-output-esm.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,6 @@ const external = [
// required if you use profiling
'@datadog/pprof',

// @openfeature/core is a peer dependency of @openfeature/server-sdk
// which is used by @datadog/openfeature-node-server
'@openfeature/core',

// required if you use Datadog security features
'@datadog/native-appsec',
'@datadog/native-iast-taint-tracking',
Expand Down
4 changes: 0 additions & 4 deletions integration-tests/esbuild/build.esm-http-output-cjs.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,6 @@ const external = [
// required if you use profiling
'@datadog/pprof',

// @openfeature/core is a peer dependency of @openfeature/server-sdk
// which is used by @datadog/openfeature-node-server
'@openfeature/core',

// required if you use Datadog security features
'@datadog/native-appsec',
'@datadog/native-iast-taint-tracking',
Expand Down
Loading