dd-trace 5.56.0 → 5.57.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.d.ts +44 -2
- package/init.js +4 -1
- package/package.json +20 -20
- package/packages/datadog-esbuild/index.js +22 -0
- package/packages/datadog-instrumentations/src/cassandra-driver.js +43 -60
- package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +12 -12
- package/packages/datadog-instrumentations/src/cucumber.js +4 -6
- package/packages/datadog-instrumentations/src/elasticsearch.js +16 -19
- package/packages/datadog-instrumentations/src/fastify.js +91 -9
- package/packages/datadog-instrumentations/src/helpers/bundler-register.js +20 -5
- package/packages/datadog-instrumentations/src/helpers/check-require-cache.js +2 -2
- package/packages/datadog-instrumentations/src/helpers/hooks.js +1 -0
- package/packages/datadog-instrumentations/src/helpers/register.js +17 -5
- package/packages/datadog-instrumentations/src/ioredis.js +8 -13
- package/packages/datadog-instrumentations/src/iovalkey.js +10 -14
- package/packages/datadog-instrumentations/src/jest.js +28 -6
- package/packages/datadog-instrumentations/src/memcached.js +17 -24
- package/packages/datadog-instrumentations/src/mocha/main.js +7 -6
- package/packages/datadog-instrumentations/src/moleculer/client.js +9 -10
- package/packages/datadog-instrumentations/src/moleculer/server.js +12 -13
- package/packages/datadog-instrumentations/src/openai.js +30 -2
- package/packages/datadog-instrumentations/src/playwright.js +4 -1
- package/packages/datadog-instrumentations/src/prisma.js +116 -0
- package/packages/datadog-instrumentations/src/redis.js +32 -43
- package/packages/datadog-instrumentations/src/router.js +1 -1
- package/packages/datadog-instrumentations/src/sharedb.js +10 -16
- package/packages/datadog-instrumentations/src/vitest.js +4 -4
- package/packages/datadog-plugin-aws-sdk/src/base.js +6 -1
- package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +9 -4
- package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +3 -2
- package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +2 -1
- package/packages/datadog-plugin-aws-sdk/src/util.js +2 -2
- package/packages/datadog-plugin-bunyan/src/index.js +2 -2
- package/packages/datadog-plugin-cassandra-driver/src/index.js +6 -2
- package/packages/datadog-plugin-confluentinc-kafka-javascript/src/batch-consumer.js +1 -1
- package/packages/datadog-plugin-confluentinc-kafka-javascript/src/consumer.js +1 -1
- package/packages/datadog-plugin-confluentinc-kafka-javascript/src/index.js +1 -1
- package/packages/datadog-plugin-confluentinc-kafka-javascript/src/producer.js +1 -1
- package/packages/datadog-plugin-cucumber/src/index.js +4 -2
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +9 -5
- package/packages/datadog-plugin-elasticsearch/src/index.js +12 -4
- package/packages/datadog-plugin-http/src/client.js +1 -0
- package/packages/datadog-plugin-http/src/server.js +2 -1
- package/packages/datadog-plugin-http2/src/client.js +1 -0
- package/packages/datadog-plugin-http2/src/server.js +1 -0
- package/packages/datadog-plugin-jest/src/index.js +4 -3
- package/packages/datadog-plugin-memcached/src/index.js +6 -2
- package/packages/datadog-plugin-mocha/src/index.js +3 -2
- package/packages/datadog-plugin-moleculer/src/client.js +15 -9
- package/packages/datadog-plugin-moleculer/src/server.js +9 -5
- package/packages/datadog-plugin-next/src/index.js +2 -1
- package/packages/datadog-plugin-openai/src/tracing.js +127 -80
- package/packages/datadog-plugin-pino/src/index.js +2 -2
- package/packages/datadog-plugin-prisma/src/client.js +62 -0
- package/packages/datadog-plugin-prisma/src/engine.js +81 -0
- package/packages/datadog-plugin-prisma/src/index.js +22 -0
- package/packages/datadog-plugin-protobufjs/src/schema_iterator.js +1 -1
- package/packages/datadog-plugin-redis/src/index.js +9 -3
- package/packages/datadog-plugin-router/src/index.js +1 -0
- package/packages/datadog-plugin-sharedb/src/index.js +13 -5
- package/packages/datadog-plugin-winston/src/index.js +2 -2
- package/packages/dd-trace/src/appsec/channels.js +26 -21
- package/packages/dd-trace/src/appsec/iast/analyzers/unvalidated-redirect-analyzer.js +13 -20
- package/packages/dd-trace/src/appsec/iast/taint-tracking/source-types.js +0 -1
- package/packages/dd-trace/src/appsec/index.js +16 -1
- package/packages/dd-trace/src/appsec/rasp/utils.js +0 -5
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +3 -3
- package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +1 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +1 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +1 -1
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +2 -2
- package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +6 -6
- package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +2 -3
- package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +3 -3
- package/packages/dd-trace/src/config.js +286 -270
- package/packages/dd-trace/src/constants.js +2 -1
- package/packages/dd-trace/src/crashtracking/crashtracker.js +12 -14
- package/packages/dd-trace/src/datastreams/context.js +1 -1
- package/packages/dd-trace/src/datastreams/processor.js +1 -1
- package/packages/dd-trace/src/datastreams/writer.js +3 -3
- package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +6 -3
- package/packages/dd-trace/src/debugger/devtools_client/condition.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/index.js +2 -3
- package/packages/dd-trace/src/debugger/devtools_client/state.js +7 -4
- package/packages/dd-trace/src/dogstatsd.js +3 -3
- package/packages/dd-trace/src/exporters/agent/index.js +10 -5
- package/packages/dd-trace/src/exporters/agent/writer.js +1 -1
- package/packages/dd-trace/src/exporters/common/agent-info-exporter.js +2 -2
- package/packages/dd-trace/src/exporters/log/index.js +1 -1
- package/packages/dd-trace/src/exporters/span-stats/writer.js +2 -2
- package/packages/dd-trace/src/guardrails/index.js +3 -1
- package/packages/dd-trace/src/guardrails/telemetry.js +1 -1
- package/packages/dd-trace/src/llmobs/index.js +11 -5
- package/packages/dd-trace/src/llmobs/plugins/base.js +2 -2
- package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +1 -1
- package/packages/dd-trace/src/llmobs/tagger.js +13 -13
- package/packages/dd-trace/src/llmobs/writers/base.js +2 -2
- package/packages/dd-trace/src/llmobs/writers/spans.js +2 -2
- package/packages/dd-trace/src/opentelemetry/tracer.js +1 -1
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +4 -4
- package/packages/dd-trace/src/opentracing/span.js +1 -0
- package/packages/dd-trace/src/plugin_manager.js +3 -3
- package/packages/dd-trace/src/plugins/cache.js +2 -2
- package/packages/dd-trace/src/plugins/ci_plugin.js +11 -7
- package/packages/dd-trace/src/plugins/database.js +3 -1
- package/packages/dd-trace/src/plugins/index.js +1 -0
- package/packages/dd-trace/src/plugins/log_plugin.js +5 -1
- package/packages/dd-trace/src/plugins/outbound.js +8 -6
- package/packages/dd-trace/src/plugins/structured_log_plugin.js +9 -0
- package/packages/dd-trace/src/plugins/tracing.js +1 -1
- package/packages/dd-trace/src/plugins/util/ci.js +83 -30
- package/packages/dd-trace/src/plugins/util/git.js +1 -0
- package/packages/dd-trace/src/plugins/util/inferred_proxy.js +3 -2
- package/packages/dd-trace/src/plugins/util/ip_extractor.js +1 -0
- package/packages/dd-trace/src/plugins/util/tags.js +4 -1
- package/packages/dd-trace/src/plugins/util/test.js +80 -10
- package/packages/dd-trace/src/plugins/util/web.js +1 -0
- package/packages/dd-trace/src/profiler.js +0 -2
- package/packages/dd-trace/src/profiling/exporter_cli.js +1 -3
- package/packages/dd-trace/src/profiling/ssi-heuristics.js +18 -126
- package/packages/dd-trace/src/proxy.js +12 -27
- package/packages/dd-trace/src/runtime_metrics/index.js +1 -1
- package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +14 -45
- package/packages/dd-trace/src/service-naming/schemas/v0/messaging.js +2 -2
- package/packages/dd-trace/src/service-naming/schemas/v0/storage.js +4 -0
- package/packages/dd-trace/src/service-naming/schemas/v1/messaging.js +2 -2
- package/packages/dd-trace/src/service-naming/schemas/v1/storage.js +4 -0
- package/packages/dd-trace/src/supported-configurations.json +12 -3
- package/packages/dd-trace/src/telemetry/telemetry.js +5 -1
- package/packages/dd-trace/src/tracer.js +11 -0
- package/packages/dd-trace/src/tracer_metadata.js +25 -0
- package/packages/dd-trace/src/util.js +11 -4
- package/version.js +3 -1
- package/packages/dd-trace/src/profiling/ssi-telemetry-mock-profiler.js +0 -30
|
@@ -75,7 +75,7 @@ module.exports = class CiPlugin extends Plugin {
|
|
|
75
75
|
this.rootDir = process.cwd() // fallback in case :session:start events are not emitted
|
|
76
76
|
|
|
77
77
|
this.addSub(`ci:${this.constructor.id}:library-configuration`, (ctx) => {
|
|
78
|
-
const { onDone, isParallel } = ctx
|
|
78
|
+
const { onDone, isParallel, frameworkVersion } = ctx
|
|
79
79
|
ctx.currentStore = storage('legacy').getStore()
|
|
80
80
|
|
|
81
81
|
if (!this.tracer._exporter || !this.tracer._exporter.getLibraryConfiguration) {
|
|
@@ -88,7 +88,7 @@ module.exports = class CiPlugin extends Plugin {
|
|
|
88
88
|
this.libraryConfig = libraryConfig
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
-
const libraryCapabilitiesTags = getLibraryCapabilitiesTags(this.constructor.id, isParallel)
|
|
91
|
+
const libraryCapabilitiesTags = getLibraryCapabilitiesTags(this.constructor.id, isParallel, frameworkVersion)
|
|
92
92
|
const metadataTags = {
|
|
93
93
|
test: {
|
|
94
94
|
...libraryCapabilitiesTags
|
|
@@ -150,7 +150,8 @@ module.exports = class CiPlugin extends Plugin {
|
|
|
150
150
|
[COMPONENT]: this.constructor.id,
|
|
151
151
|
...this.testEnvironmentMetadata,
|
|
152
152
|
...testSessionSpanMetadata
|
|
153
|
-
}
|
|
153
|
+
},
|
|
154
|
+
integrationName: this.constructor.id
|
|
154
155
|
})
|
|
155
156
|
// TODO: add telemetry tag when we can add `is_agentless_log_submission_enabled` for agentless log submission
|
|
156
157
|
this.telemetry.ciVisEvent(TELEMETRY_EVENT_CREATED, 'session')
|
|
@@ -161,7 +162,8 @@ module.exports = class CiPlugin extends Plugin {
|
|
|
161
162
|
[COMPONENT]: this.constructor.id,
|
|
162
163
|
...this.testEnvironmentMetadata,
|
|
163
164
|
...testModuleSpanMetadata
|
|
164
|
-
}
|
|
165
|
+
},
|
|
166
|
+
integrationName: this.constructor.id
|
|
165
167
|
})
|
|
166
168
|
// only for vitest
|
|
167
169
|
// These are added for the worker threads to use
|
|
@@ -194,7 +196,8 @@ module.exports = class CiPlugin extends Plugin {
|
|
|
194
196
|
...testSuiteMetadata,
|
|
195
197
|
[TEST_STATUS]: 'skip',
|
|
196
198
|
[TEST_SKIPPED_BY_ITR]: 'true'
|
|
197
|
-
}
|
|
199
|
+
},
|
|
200
|
+
integrationName: this.constructor.id
|
|
198
201
|
}).finish()
|
|
199
202
|
})
|
|
200
203
|
this.telemetry.count(TELEMETRY_ITR_SKIPPED, { testLevel: 'suite' }, skippedSuites.length)
|
|
@@ -396,7 +399,8 @@ module.exports = class CiPlugin extends Plugin {
|
|
|
396
399
|
tags: {
|
|
397
400
|
...this.testEnvironmentMetadata,
|
|
398
401
|
...testTags
|
|
399
|
-
}
|
|
402
|
+
},
|
|
403
|
+
integrationName: this.constructor.id
|
|
400
404
|
})
|
|
401
405
|
|
|
402
406
|
testSpan.context()._trace.origin = CI_APP_ORIGIN
|
|
@@ -453,7 +457,7 @@ module.exports = class CiPlugin extends Plugin {
|
|
|
453
457
|
|
|
454
458
|
removeDiProbe ({ file, line }) {
|
|
455
459
|
const probeId = this.fileLineToProbeId.get(`${file}:${line}`)
|
|
456
|
-
log.warn(
|
|
460
|
+
log.warn('Removing probe from %s:%s, with id: %s', file, line, probeId)
|
|
457
461
|
this.fileLineToProbeId.delete(probeId)
|
|
458
462
|
return this.di.removeProbe(probeId)
|
|
459
463
|
}
|
|
@@ -89,7 +89,9 @@ class DatabasePlugin extends StoragePlugin {
|
|
|
89
89
|
return query
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
-
return
|
|
92
|
+
return this.config.appendComment
|
|
93
|
+
? `${query} /*${dbmTraceComment}*/`
|
|
94
|
+
: `/*${dbmTraceComment}*/ ${query}`
|
|
93
95
|
}
|
|
94
96
|
|
|
95
97
|
maybeTruncate (query) {
|
|
@@ -20,6 +20,7 @@ module.exports = {
|
|
|
20
20
|
get '@langchain/openai' () { return require('../../../datadog-plugin-langchain/src') },
|
|
21
21
|
get '@node-redis/client' () { return require('../../../datadog-plugin-redis/src') },
|
|
22
22
|
get '@opensearch-project/opensearch' () { return require('../../../datadog-plugin-opensearch/src') },
|
|
23
|
+
get '@prisma/client' () { return require('../../../datadog-plugin-prisma/src') },
|
|
23
24
|
get '@redis/client' () { return require('../../../datadog-plugin-redis/src') },
|
|
24
25
|
get '@smithy/smithy-client' () { return require('../../../datadog-plugin-aws-sdk/src') },
|
|
25
26
|
get '@vitest/runner' () { return require('../../../datadog-plugin-vitest/src') },
|
|
@@ -45,10 +45,14 @@ module.exports = class LogPlugin extends Plugin {
|
|
|
45
45
|
})
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
+
_isEnabled (config) {
|
|
49
|
+
return config.enabled && (config.logInjection === true || config.ciVisAgentlessLogSubmissionEnabled)
|
|
50
|
+
}
|
|
51
|
+
|
|
48
52
|
configure (config) {
|
|
49
53
|
return super.configure({
|
|
50
54
|
...config,
|
|
51
|
-
enabled:
|
|
55
|
+
enabled: this._isEnabled(config)
|
|
52
56
|
})
|
|
53
57
|
}
|
|
54
58
|
}
|
|
@@ -21,8 +21,8 @@ class OutboundPlugin extends TracingPlugin {
|
|
|
21
21
|
constructor (...args) {
|
|
22
22
|
super(...args)
|
|
23
23
|
|
|
24
|
-
this.addTraceSub('connect',
|
|
25
|
-
this.connect(
|
|
24
|
+
this.addTraceSub('connect', ctx => {
|
|
25
|
+
this.connect(ctx)
|
|
26
26
|
})
|
|
27
27
|
}
|
|
28
28
|
|
|
@@ -105,12 +105,14 @@ class OutboundPlugin extends TracingPlugin {
|
|
|
105
105
|
}
|
|
106
106
|
}
|
|
107
107
|
|
|
108
|
-
connect (
|
|
109
|
-
this.addHost(
|
|
108
|
+
connect (ctx) {
|
|
109
|
+
this.addHost(ctx)
|
|
110
110
|
}
|
|
111
111
|
|
|
112
|
-
addHost (
|
|
113
|
-
const
|
|
112
|
+
addHost (ctx) {
|
|
113
|
+
const { hostname, port } = ctx
|
|
114
|
+
|
|
115
|
+
const span = ctx?.currentStore?.span || this.activeSpan
|
|
114
116
|
|
|
115
117
|
if (!span) return
|
|
116
118
|
|
|
@@ -24,10 +24,11 @@ const {
|
|
|
24
24
|
GIT_COMMIT_COMMITTER_NAME,
|
|
25
25
|
GIT_COMMIT_COMMITTER_EMAIL,
|
|
26
26
|
CI_NODE_LABELS,
|
|
27
|
-
CI_NODE_NAME
|
|
27
|
+
CI_NODE_NAME,
|
|
28
|
+
PR_NUMBER
|
|
28
29
|
} = require('./tags')
|
|
29
30
|
const { filterSensitiveInfoFromRepository } = require('./url')
|
|
30
|
-
const { getEnvironmentVariable } = require('../../config-helper')
|
|
31
|
+
const { getEnvironmentVariable, getEnvironmentVariables } = require('../../config-helper')
|
|
31
32
|
|
|
32
33
|
// Receives a string with the form 'John Doe <john.doe@gmail.com>'
|
|
33
34
|
// and returns { name: 'John Doe', email: 'john.doe@gmail.com' }
|
|
@@ -92,7 +93,7 @@ function getGitHubEventPayload () {
|
|
|
92
93
|
module.exports = {
|
|
93
94
|
normalizeRef,
|
|
94
95
|
getCIMetadata () {
|
|
95
|
-
const
|
|
96
|
+
const env = getEnvironmentVariables()
|
|
96
97
|
|
|
97
98
|
let tags = {}
|
|
98
99
|
|
|
@@ -109,7 +110,9 @@ module.exports = {
|
|
|
109
110
|
GIT_URL_1: JENKINS_GIT_REPOSITORY_URL_1,
|
|
110
111
|
DD_CUSTOM_TRACE_ID,
|
|
111
112
|
NODE_NAME,
|
|
112
|
-
NODE_LABELS
|
|
113
|
+
NODE_LABELS,
|
|
114
|
+
CHANGE_ID,
|
|
115
|
+
CHANGE_TARGET
|
|
113
116
|
} = env
|
|
114
117
|
|
|
115
118
|
tags = {
|
|
@@ -121,7 +124,9 @@ module.exports = {
|
|
|
121
124
|
[GIT_REPOSITORY_URL]: JENKINS_GIT_REPOSITORY_URL || JENKINS_GIT_REPOSITORY_URL_1,
|
|
122
125
|
[CI_WORKSPACE_PATH]: WORKSPACE,
|
|
123
126
|
[CI_ENV_VARS]: JSON.stringify({ DD_CUSTOM_TRACE_ID }),
|
|
124
|
-
[CI_NODE_NAME]: NODE_NAME
|
|
127
|
+
[CI_NODE_NAME]: NODE_NAME,
|
|
128
|
+
[PR_NUMBER]: CHANGE_ID,
|
|
129
|
+
[GIT_PULL_REQUEST_BASE_BRANCH]: CHANGE_TARGET
|
|
125
130
|
}
|
|
126
131
|
|
|
127
132
|
if (NODE_LABELS) {
|
|
@@ -172,7 +177,7 @@ module.exports = {
|
|
|
172
177
|
CI_RUNNER_ID,
|
|
173
178
|
CI_RUNNER_TAGS,
|
|
174
179
|
CI_MERGE_REQUEST_TARGET_BRANCH_NAME,
|
|
175
|
-
|
|
180
|
+
CI_MERGE_REQUEST_IID
|
|
176
181
|
} = env
|
|
177
182
|
|
|
178
183
|
const { name, email } = parseEmailAndName(CI_COMMIT_AUTHOR)
|
|
@@ -203,7 +208,7 @@ module.exports = {
|
|
|
203
208
|
[CI_NODE_LABELS]: CI_RUNNER_TAGS,
|
|
204
209
|
[CI_NODE_NAME]: CI_RUNNER_ID,
|
|
205
210
|
[GIT_PULL_REQUEST_BASE_BRANCH]: CI_MERGE_REQUEST_TARGET_BRANCH_NAME,
|
|
206
|
-
[
|
|
211
|
+
[PR_NUMBER]: CI_MERGE_REQUEST_IID
|
|
207
212
|
}
|
|
208
213
|
}
|
|
209
214
|
|
|
@@ -218,7 +223,8 @@ module.exports = {
|
|
|
218
223
|
CIRCLE_SHA1,
|
|
219
224
|
CIRCLE_REPOSITORY_URL,
|
|
220
225
|
CIRCLE_JOB,
|
|
221
|
-
CIRCLE_BUILD_NUM
|
|
226
|
+
CIRCLE_BUILD_NUM,
|
|
227
|
+
CIRCLE_PR_NUMBER
|
|
222
228
|
} = env
|
|
223
229
|
|
|
224
230
|
const pipelineUrl = `https://app.circleci.com/pipelines/workflows/${CIRCLE_WORKFLOW_ID}`
|
|
@@ -237,8 +243,9 @@ module.exports = {
|
|
|
237
243
|
[GIT_BRANCH]: CIRCLE_BRANCH,
|
|
238
244
|
[CI_ENV_VARS]: JSON.stringify({
|
|
239
245
|
CIRCLE_WORKFLOW_ID,
|
|
240
|
-
CIRCLE_BUILD_NUM
|
|
241
|
-
})
|
|
246
|
+
CIRCLE_BUILD_NUM,
|
|
247
|
+
}),
|
|
248
|
+
[PR_NUMBER]: CIRCLE_PR_NUMBER
|
|
242
249
|
}
|
|
243
250
|
}
|
|
244
251
|
|
|
@@ -317,7 +324,9 @@ module.exports = {
|
|
|
317
324
|
APPVEYOR_REPO_COMMIT_AUTHOR,
|
|
318
325
|
APPVEYOR_REPO_COMMIT_AUTHOR_EMAIL,
|
|
319
326
|
APPVEYOR_REPO_COMMIT_MESSAGE,
|
|
320
|
-
APPVEYOR_REPO_COMMIT_MESSAGE_EXTENDED
|
|
327
|
+
APPVEYOR_REPO_COMMIT_MESSAGE_EXTENDED,
|
|
328
|
+
APPVEYOR_PULL_REQUEST_HEAD_COMMIT,
|
|
329
|
+
APPVEYOR_PULL_REQUEST_NUMBER
|
|
321
330
|
} = env
|
|
322
331
|
|
|
323
332
|
const pipelineUrl = `https://ci.appveyor.com/project/${APPVEYOR_REPO_NAME}/builds/${APPVEYOR_BUILD_ID}`
|
|
@@ -333,7 +342,12 @@ module.exports = {
|
|
|
333
342
|
[GIT_COMMIT_AUTHOR_NAME]: APPVEYOR_REPO_COMMIT_AUTHOR,
|
|
334
343
|
[GIT_COMMIT_AUTHOR_EMAIL]: APPVEYOR_REPO_COMMIT_AUTHOR_EMAIL,
|
|
335
344
|
[GIT_COMMIT_MESSAGE]: APPVEYOR_REPO_COMMIT_MESSAGE + '\n' + APPVEYOR_REPO_COMMIT_MESSAGE_EXTENDED,
|
|
336
|
-
[
|
|
345
|
+
[GIT_COMMIT_HEAD_SHA]: APPVEYOR_PULL_REQUEST_HEAD_COMMIT,
|
|
346
|
+
[PR_NUMBER]: APPVEYOR_PULL_REQUEST_NUMBER
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
if (APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH) {
|
|
350
|
+
tags[GIT_PULL_REQUEST_BASE_BRANCH] = APPVEYOR_REPO_BRANCH
|
|
337
351
|
}
|
|
338
352
|
|
|
339
353
|
if (APPVEYOR_REPO_PROVIDER === 'github') {
|
|
@@ -367,7 +381,9 @@ module.exports = {
|
|
|
367
381
|
BUILD_REQUESTEDFOREMAIL,
|
|
368
382
|
BUILD_SOURCEVERSIONMESSAGE,
|
|
369
383
|
SYSTEM_STAGEDISPLAYNAME,
|
|
370
|
-
SYSTEM_JOBDISPLAYNAME
|
|
384
|
+
SYSTEM_JOBDISPLAYNAME,
|
|
385
|
+
SYSTEM_PULLREQUEST_PULLREQUESTNUMBER,
|
|
386
|
+
SYSTEM_PULLREQUEST_TARGETBRANCH
|
|
371
387
|
} = env
|
|
372
388
|
|
|
373
389
|
const ref = SYSTEM_PULLREQUEST_SOURCEBRANCH || BUILD_SOURCEBRANCH || BUILD_SOURCEBRANCHNAME
|
|
@@ -387,7 +403,9 @@ module.exports = {
|
|
|
387
403
|
[GIT_COMMIT_MESSAGE]: BUILD_SOURCEVERSIONMESSAGE,
|
|
388
404
|
[CI_STAGE_NAME]: SYSTEM_STAGEDISPLAYNAME,
|
|
389
405
|
[CI_JOB_NAME]: SYSTEM_JOBDISPLAYNAME,
|
|
390
|
-
[CI_ENV_VARS]: JSON.stringify({ SYSTEM_TEAMPROJECTID, BUILD_BUILDID, SYSTEM_JOBID })
|
|
406
|
+
[CI_ENV_VARS]: JSON.stringify({ SYSTEM_TEAMPROJECTID, BUILD_BUILDID, SYSTEM_JOBID }),
|
|
407
|
+
[PR_NUMBER]: SYSTEM_PULLREQUEST_PULLREQUESTNUMBER,
|
|
408
|
+
[GIT_PULL_REQUEST_BASE_BRANCH]: SYSTEM_PULLREQUEST_TARGETBRANCH
|
|
391
409
|
}
|
|
392
410
|
|
|
393
411
|
if (SYSTEM_TEAMFOUNDATIONSERVERURI && SYSTEM_TEAMPROJECTID && BUILD_BUILDID) {
|
|
@@ -415,7 +433,8 @@ module.exports = {
|
|
|
415
433
|
BITBUCKET_TAG,
|
|
416
434
|
BITBUCKET_PIPELINE_UUID,
|
|
417
435
|
BITBUCKET_CLONE_DIR,
|
|
418
|
-
BITBUCKET_PR_DESTINATION_BRANCH
|
|
436
|
+
BITBUCKET_PR_DESTINATION_BRANCH,
|
|
437
|
+
BITBUCKET_PR_ID
|
|
419
438
|
} = env
|
|
420
439
|
|
|
421
440
|
const url =
|
|
@@ -433,7 +452,8 @@ module.exports = {
|
|
|
433
452
|
[GIT_REPOSITORY_URL]: BITBUCKET_GIT_SSH_ORIGIN || BITBUCKET_GIT_HTTP_ORIGIN,
|
|
434
453
|
[CI_WORKSPACE_PATH]: BITBUCKET_CLONE_DIR,
|
|
435
454
|
[CI_PIPELINE_ID]: BITBUCKET_PIPELINE_UUID && BITBUCKET_PIPELINE_UUID.replaceAll(/{|}/gm, ''),
|
|
436
|
-
[GIT_PULL_REQUEST_BASE_BRANCH]: BITBUCKET_PR_DESTINATION_BRANCH
|
|
455
|
+
[GIT_PULL_REQUEST_BASE_BRANCH]: BITBUCKET_PR_DESTINATION_BRANCH,
|
|
456
|
+
[PR_NUMBER]: BITBUCKET_PR_ID
|
|
437
457
|
}
|
|
438
458
|
}
|
|
439
459
|
|
|
@@ -450,7 +470,8 @@ module.exports = {
|
|
|
450
470
|
BITRISE_SOURCE_DIR,
|
|
451
471
|
GIT_REPOSITORY_URL: BITRISE_GIT_REPOSITORY_URL,
|
|
452
472
|
BITRISE_GIT_TAG,
|
|
453
|
-
BITRISE_GIT_MESSAGE
|
|
473
|
+
BITRISE_GIT_MESSAGE,
|
|
474
|
+
BITRISE_PULL_REQUEST
|
|
454
475
|
} = env
|
|
455
476
|
|
|
456
477
|
tags = {
|
|
@@ -465,7 +486,8 @@ module.exports = {
|
|
|
465
486
|
[GIT_TAG]: BITRISE_GIT_TAG,
|
|
466
487
|
[GIT_BRANCH]: BITRISEIO_GIT_BRANCH_DEST || BITRISE_GIT_BRANCH,
|
|
467
488
|
[GIT_COMMIT_MESSAGE]: BITRISE_GIT_MESSAGE,
|
|
468
|
-
[GIT_PULL_REQUEST_BASE_BRANCH]: BITRISEIO_GIT_BRANCH_DEST
|
|
489
|
+
[GIT_PULL_REQUEST_BASE_BRANCH]: BITRISEIO_GIT_BRANCH_DEST,
|
|
490
|
+
[PR_NUMBER]: BITRISE_PULL_REQUEST
|
|
469
491
|
}
|
|
470
492
|
}
|
|
471
493
|
|
|
@@ -484,7 +506,9 @@ module.exports = {
|
|
|
484
506
|
BUILDKITE_BUILD_AUTHOR,
|
|
485
507
|
BUILDKITE_BUILD_AUTHOR_EMAIL,
|
|
486
508
|
BUILDKITE_MESSAGE,
|
|
487
|
-
BUILDKITE_AGENT_ID
|
|
509
|
+
BUILDKITE_AGENT_ID,
|
|
510
|
+
BUILDKITE_PULL_REQUEST,
|
|
511
|
+
BUILDKITE_PULL_REQUEST_BASE_BRANCH
|
|
488
512
|
} = env
|
|
489
513
|
|
|
490
514
|
const extraTags = Object.keys(env).filter(envVar =>
|
|
@@ -514,7 +538,12 @@ module.exports = {
|
|
|
514
538
|
BUILDKITE_JOB_ID
|
|
515
539
|
}),
|
|
516
540
|
[CI_NODE_NAME]: BUILDKITE_AGENT_ID,
|
|
517
|
-
[CI_NODE_LABELS]: JSON.stringify(extraTags)
|
|
541
|
+
[CI_NODE_LABELS]: JSON.stringify(extraTags),
|
|
542
|
+
[PR_NUMBER]: BUILDKITE_PULL_REQUEST,
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
if (BUILDKITE_PULL_REQUEST) {
|
|
546
|
+
tags[GIT_PULL_REQUEST_BASE_BRANCH] = BUILDKITE_PULL_REQUEST_BASE_BRANCH
|
|
518
547
|
}
|
|
519
548
|
}
|
|
520
549
|
|
|
@@ -530,7 +559,9 @@ module.exports = {
|
|
|
530
559
|
TRAVIS_BUILD_NUMBER,
|
|
531
560
|
TRAVIS_BUILD_WEB_URL,
|
|
532
561
|
TRAVIS_BUILD_DIR,
|
|
533
|
-
TRAVIS_COMMIT_MESSAGE
|
|
562
|
+
TRAVIS_COMMIT_MESSAGE,
|
|
563
|
+
TRAVIS_PULL_REQUEST,
|
|
564
|
+
TRAVIS_PULL_REQUEST_SHA
|
|
534
565
|
} = env
|
|
535
566
|
|
|
536
567
|
tags = {
|
|
@@ -545,7 +576,10 @@ module.exports = {
|
|
|
545
576
|
[CI_WORKSPACE_PATH]: TRAVIS_BUILD_DIR,
|
|
546
577
|
[GIT_TAG]: TRAVIS_TAG,
|
|
547
578
|
[GIT_BRANCH]: TRAVIS_PULL_REQUEST_BRANCH || TRAVIS_BRANCH,
|
|
548
|
-
[GIT_COMMIT_MESSAGE]: TRAVIS_COMMIT_MESSAGE
|
|
579
|
+
[GIT_COMMIT_MESSAGE]: TRAVIS_COMMIT_MESSAGE,
|
|
580
|
+
[GIT_COMMIT_HEAD_SHA]: TRAVIS_PULL_REQUEST_SHA,
|
|
581
|
+
[GIT_PULL_REQUEST_BASE_BRANCH]: TRAVIS_BRANCH,
|
|
582
|
+
[PR_NUMBER]: TRAVIS_PULL_REQUEST
|
|
549
583
|
}
|
|
550
584
|
}
|
|
551
585
|
|
|
@@ -562,7 +596,8 @@ module.exports = {
|
|
|
562
596
|
BUDDY_PIPELINE_ID,
|
|
563
597
|
BUDDY_PIPELINE_NAME,
|
|
564
598
|
BUDDY_SCM_URL,
|
|
565
|
-
BUDDY_RUN_PR_BASE_BRANCH
|
|
599
|
+
BUDDY_RUN_PR_BASE_BRANCH,
|
|
600
|
+
BUDDY_RUN_PR_NO
|
|
566
601
|
} = env
|
|
567
602
|
tags = {
|
|
568
603
|
[CI_PROVIDER_NAME]: 'buddy',
|
|
@@ -577,19 +612,28 @@ module.exports = {
|
|
|
577
612
|
[GIT_COMMIT_MESSAGE]: BUDDY_EXECUTION_REVISION_MESSAGE,
|
|
578
613
|
[GIT_COMMIT_COMMITTER_NAME]: BUDDY_EXECUTION_REVISION_COMMITTER_NAME,
|
|
579
614
|
[GIT_COMMIT_COMMITTER_EMAIL]: BUDDY_EXECUTION_REVISION_COMMITTER_EMAIL,
|
|
580
|
-
[GIT_PULL_REQUEST_BASE_BRANCH]: BUDDY_RUN_PR_BASE_BRANCH
|
|
615
|
+
[GIT_PULL_REQUEST_BASE_BRANCH]: BUDDY_RUN_PR_BASE_BRANCH,
|
|
616
|
+
[PR_NUMBER]: BUDDY_RUN_PR_NO
|
|
581
617
|
}
|
|
582
618
|
}
|
|
583
619
|
|
|
584
620
|
if (env.TEAMCITY_VERSION) {
|
|
585
|
-
const {
|
|
621
|
+
const {
|
|
622
|
+
BUILD_URL,
|
|
623
|
+
TEAMCITY_BUILDCONF_NAME,
|
|
624
|
+
DATADOG_BUILD_ID,
|
|
625
|
+
TEAMCITY_PULLREQUEST_NUMBER,
|
|
626
|
+
TEAMCITY_PULLREQUEST_TARGET_BRANCH
|
|
627
|
+
} = env
|
|
586
628
|
tags = {
|
|
587
629
|
[CI_PROVIDER_NAME]: 'teamcity',
|
|
588
630
|
[CI_JOB_URL]: BUILD_URL,
|
|
589
631
|
[CI_JOB_NAME]: TEAMCITY_BUILDCONF_NAME,
|
|
590
632
|
[CI_ENV_VARS]: JSON.stringify({
|
|
591
633
|
DATADOG_BUILD_ID
|
|
592
|
-
})
|
|
634
|
+
}),
|
|
635
|
+
[PR_NUMBER]: TEAMCITY_PULLREQUEST_NUMBER,
|
|
636
|
+
[GIT_PULL_REQUEST_BASE_BRANCH]: TEAMCITY_PULLREQUEST_TARGET_BRANCH
|
|
593
637
|
}
|
|
594
638
|
}
|
|
595
639
|
|
|
@@ -599,7 +643,9 @@ module.exports = {
|
|
|
599
643
|
CF_PIPELINE_NAME,
|
|
600
644
|
CF_BUILD_URL,
|
|
601
645
|
CF_STEP_NAME,
|
|
602
|
-
CF_BRANCH
|
|
646
|
+
CF_BRANCH,
|
|
647
|
+
CF_PULL_REQUEST_NUMBER,
|
|
648
|
+
CF_PULL_REQUEST_TARGET
|
|
603
649
|
} = env
|
|
604
650
|
tags = {
|
|
605
651
|
[CI_PROVIDER_NAME]: 'codefresh',
|
|
@@ -609,7 +655,9 @@ module.exports = {
|
|
|
609
655
|
[CI_JOB_NAME]: CF_STEP_NAME,
|
|
610
656
|
[CI_ENV_VARS]: JSON.stringify({
|
|
611
657
|
CF_BUILD_ID
|
|
612
|
-
})
|
|
658
|
+
}),
|
|
659
|
+
[PR_NUMBER]: CF_PULL_REQUEST_NUMBER,
|
|
660
|
+
[GIT_PULL_REQUEST_BASE_BRANCH]: CF_PULL_REQUEST_TARGET
|
|
613
661
|
}
|
|
614
662
|
|
|
615
663
|
const isTag = CF_BRANCH && CF_BRANCH.includes('tags/')
|
|
@@ -649,7 +697,9 @@ module.exports = {
|
|
|
649
697
|
DRONE_TAG,
|
|
650
698
|
DRONE_COMMIT_AUTHOR_NAME,
|
|
651
699
|
DRONE_COMMIT_AUTHOR_EMAIL,
|
|
652
|
-
DRONE_COMMIT_MESSAGE
|
|
700
|
+
DRONE_COMMIT_MESSAGE,
|
|
701
|
+
DRONE_PULL_REQUEST,
|
|
702
|
+
DRONE_TARGET_BRANCH
|
|
653
703
|
} = env
|
|
654
704
|
tags = {
|
|
655
705
|
[CI_PROVIDER_NAME]: 'drone',
|
|
@@ -664,7 +714,9 @@ module.exports = {
|
|
|
664
714
|
[GIT_TAG]: DRONE_TAG,
|
|
665
715
|
[GIT_COMMIT_AUTHOR_NAME]: DRONE_COMMIT_AUTHOR_NAME,
|
|
666
716
|
[GIT_COMMIT_AUTHOR_EMAIL]: DRONE_COMMIT_AUTHOR_EMAIL,
|
|
667
|
-
[GIT_COMMIT_MESSAGE]: DRONE_COMMIT_MESSAGE
|
|
717
|
+
[GIT_COMMIT_MESSAGE]: DRONE_COMMIT_MESSAGE,
|
|
718
|
+
[PR_NUMBER]: DRONE_PULL_REQUEST,
|
|
719
|
+
[GIT_PULL_REQUEST_BASE_BRANCH]: DRONE_TARGET_BRANCH
|
|
668
720
|
}
|
|
669
721
|
}
|
|
670
722
|
|
|
@@ -672,6 +724,7 @@ module.exports = {
|
|
|
672
724
|
normalizeTag(tags, GIT_REPOSITORY_URL, filterSensitiveInfoFromRepository)
|
|
673
725
|
normalizeTag(tags, GIT_BRANCH, normalizeRef)
|
|
674
726
|
normalizeTag(tags, GIT_TAG, normalizeRef)
|
|
727
|
+
normalizeTag(tags, GIT_PULL_REQUEST_BASE_BRANCH, normalizeRef)
|
|
675
728
|
|
|
676
729
|
return removeEmptyValues(tags)
|
|
677
730
|
}
|
|
@@ -380,6 +380,7 @@ function generatePackFilesForCommits (commitsToUpload) {
|
|
|
380
380
|
const tmpFolder = os.tmpdir()
|
|
381
381
|
|
|
382
382
|
if (!isDirectory(tmpFolder)) {
|
|
383
|
+
// TODO: Do we need the stack trace for this error? If not, just log the string
|
|
383
384
|
log.error(new Error('Provided path to generate packfiles is not a directory'))
|
|
384
385
|
return []
|
|
385
386
|
}
|
|
@@ -37,7 +37,7 @@ function createInferredProxySpan (headers, childOf, tracer, context) {
|
|
|
37
37
|
|
|
38
38
|
const proxySpanInfo = supportedProxies[proxyContext.proxySystemName]
|
|
39
39
|
|
|
40
|
-
log.debug(
|
|
40
|
+
log.debug('Successfully extracted inferred span info %s for proxy:', proxyContext, proxyContext.proxySystemName)
|
|
41
41
|
|
|
42
42
|
const span = tracer.startSpan(
|
|
43
43
|
proxySpanInfo.spanName,
|
|
@@ -45,6 +45,7 @@ function createInferredProxySpan (headers, childOf, tracer, context) {
|
|
|
45
45
|
childOf,
|
|
46
46
|
type: 'web',
|
|
47
47
|
startTime: proxyContext.requestTime,
|
|
48
|
+
integrationName: proxySpanInfo.component,
|
|
48
49
|
tags: {
|
|
49
50
|
service: proxyContext.domainName || tracer._config.service,
|
|
50
51
|
component: proxySpanInfo.component,
|
|
@@ -79,7 +80,7 @@ function extractInferredProxyContext (headers) {
|
|
|
79
80
|
}
|
|
80
81
|
|
|
81
82
|
if (!(PROXY_HEADER_SYSTEM in headers && headers[PROXY_HEADER_SYSTEM] in supportedProxies)) {
|
|
82
|
-
log.debug(
|
|
83
|
+
log.debug('Received headers to create inferred proxy span but headers include an unsupported proxy type', headers)
|
|
83
84
|
return null
|
|
84
85
|
}
|
|
85
86
|
|
|
@@ -28,6 +28,8 @@ const CI_NODE_LABELS = 'ci.node.labels'
|
|
|
28
28
|
|
|
29
29
|
const CI_ENV_VARS = '_dd.ci.env_vars'
|
|
30
30
|
|
|
31
|
+
const PR_NUMBER = 'pr.number'
|
|
32
|
+
|
|
31
33
|
module.exports = {
|
|
32
34
|
GIT_COMMIT_SHA,
|
|
33
35
|
GIT_BRANCH,
|
|
@@ -54,5 +56,6 @@ module.exports = {
|
|
|
54
56
|
CI_STAGE_NAME,
|
|
55
57
|
CI_ENV_VARS,
|
|
56
58
|
CI_NODE_NAME,
|
|
57
|
-
CI_NODE_LABELS
|
|
59
|
+
CI_NODE_LABELS,
|
|
60
|
+
PR_NUMBER
|
|
58
61
|
}
|
|
@@ -3,6 +3,7 @@ const fs = require('fs')
|
|
|
3
3
|
const { URL } = require('url')
|
|
4
4
|
const log = require('../../log')
|
|
5
5
|
const { getEnvironmentVariable } = require('../../config-helper')
|
|
6
|
+
const satisfies = require('semifies')
|
|
6
7
|
|
|
7
8
|
const istanbul = require('istanbul-lib-coverage')
|
|
8
9
|
const ignore = require('ignore')
|
|
@@ -127,8 +128,28 @@ const DD_CAPABILITIES_IMPACTED_TESTS = '_dd.library_capabilities.impacted_tests'
|
|
|
127
128
|
const DD_CAPABILITIES_TEST_MANAGEMENT_QUARANTINE = '_dd.library_capabilities.test_management.quarantine'
|
|
128
129
|
const DD_CAPABILITIES_TEST_MANAGEMENT_DISABLE = '_dd.library_capabilities.test_management.disable'
|
|
129
130
|
const DD_CAPABILITIES_TEST_MANAGEMENT_ATTEMPT_TO_FIX = '_dd.library_capabilities.test_management.attempt_to_fix'
|
|
131
|
+
const DD_CAPABILITIES_FAILED_TEST_REPLAY = '_dd.library_capabilities.failed_test_replay'
|
|
130
132
|
const UNSUPPORTED_TIA_FRAMEWORKS = new Set(['playwright', 'vitest'])
|
|
131
133
|
const UNSUPPORTED_TIA_FRAMEWORKS_PARALLEL_MODE = new Set(['cucumber', 'mocha'])
|
|
134
|
+
const MINIMUM_FRAMEWORK_VERSION_FOR_EFD = {
|
|
135
|
+
playwright: '>=1.38.0'
|
|
136
|
+
}
|
|
137
|
+
const MINIMUM_FRAMEWORK_VERSION_FOR_IMPACTED_TESTS = {
|
|
138
|
+
playwright: '>=1.38.0'
|
|
139
|
+
}
|
|
140
|
+
const MINIMUM_FRAMEWORK_VERSION_FOR_QUARANTINE = {
|
|
141
|
+
playwright: '>=1.38.0'
|
|
142
|
+
}
|
|
143
|
+
const MINIMUM_FRAMEWORK_VERSION_FOR_DISABLE = {
|
|
144
|
+
playwright: '>=1.38.0'
|
|
145
|
+
}
|
|
146
|
+
const MINIMUM_FRAMEWORK_VERSION_FOR_ATTEMPT_TO_FIX = {
|
|
147
|
+
playwright: '>=1.38.0'
|
|
148
|
+
}
|
|
149
|
+
const MINIMUM_FRAMEWORK_VERSION_FOR_FAILED_TEST_REPLAY = {
|
|
150
|
+
playwright: '>=1.38.0'
|
|
151
|
+
}
|
|
152
|
+
|
|
132
153
|
const UNSUPPORTED_ATTEMPT_TO_FIX_FRAMEWORKS_PARALLEL_MODE = new Set(['mocha'])
|
|
133
154
|
const NOT_SUPPORTED_GRANULARITY_IMPACTED_TESTS_FRAMEWORKS = new Set(['mocha', 'playwright', 'vitest'])
|
|
134
155
|
|
|
@@ -257,6 +278,7 @@ module.exports = {
|
|
|
257
278
|
DD_CAPABILITIES_TEST_MANAGEMENT_QUARANTINE,
|
|
258
279
|
DD_CAPABILITIES_TEST_MANAGEMENT_DISABLE,
|
|
259
280
|
DD_CAPABILITIES_TEST_MANAGEMENT_ATTEMPT_TO_FIX,
|
|
281
|
+
DD_CAPABILITIES_FAILED_TEST_REPLAY,
|
|
260
282
|
TEST_LEVEL_EVENT_TYPES,
|
|
261
283
|
TEST_RETRY_REASON_TYPES,
|
|
262
284
|
getNumFromKnownTests,
|
|
@@ -409,7 +431,7 @@ function checkShaDiscrepancies (ciMetadata, userProvidedGitMetadata) {
|
|
|
409
431
|
|
|
410
432
|
incrementCountMetric(
|
|
411
433
|
TELEMETRY_GIT_SHA_MATCH,
|
|
412
|
-
{
|
|
434
|
+
{ matched: gitCommitShaMatch }
|
|
413
435
|
)
|
|
414
436
|
}
|
|
415
437
|
|
|
@@ -895,20 +917,68 @@ function isTiaSupported (testFramework, isParallel) {
|
|
|
895
917
|
(isParallel && UNSUPPORTED_TIA_FRAMEWORKS_PARALLEL_MODE.has(testFramework)))
|
|
896
918
|
}
|
|
897
919
|
|
|
898
|
-
function
|
|
920
|
+
function isEarlyFlakeDetectionSupported (testFramework, frameworkVersion) {
|
|
921
|
+
return testFramework === 'playwright'
|
|
922
|
+
? satisfies(frameworkVersion, MINIMUM_FRAMEWORK_VERSION_FOR_EFD[testFramework])
|
|
923
|
+
: true
|
|
924
|
+
}
|
|
925
|
+
|
|
926
|
+
function isImpactedTestsSupported (testFramework, frameworkVersion) {
|
|
927
|
+
return testFramework === 'playwright'
|
|
928
|
+
? satisfies(frameworkVersion, MINIMUM_FRAMEWORK_VERSION_FOR_IMPACTED_TESTS[testFramework])
|
|
929
|
+
: true
|
|
930
|
+
}
|
|
931
|
+
|
|
932
|
+
function isQuarantineSupported (testFramework, frameworkVersion) {
|
|
933
|
+
return testFramework === 'playwright'
|
|
934
|
+
? satisfies(frameworkVersion, MINIMUM_FRAMEWORK_VERSION_FOR_QUARANTINE[testFramework])
|
|
935
|
+
: true
|
|
936
|
+
}
|
|
937
|
+
|
|
938
|
+
function isDisableSupported (testFramework, frameworkVersion) {
|
|
939
|
+
return testFramework === 'playwright'
|
|
940
|
+
? satisfies(frameworkVersion, MINIMUM_FRAMEWORK_VERSION_FOR_DISABLE[testFramework])
|
|
941
|
+
: true
|
|
942
|
+
}
|
|
943
|
+
|
|
944
|
+
function isAttemptToFixSupported (testFramework, isParallel, frameworkVersion) {
|
|
945
|
+
if (testFramework === 'playwright') {
|
|
946
|
+
return satisfies(frameworkVersion, MINIMUM_FRAMEWORK_VERSION_FOR_ATTEMPT_TO_FIX[testFramework])
|
|
947
|
+
}
|
|
948
|
+
|
|
899
949
|
return !(isParallel && UNSUPPORTED_ATTEMPT_TO_FIX_FRAMEWORKS_PARALLEL_MODE.has(testFramework))
|
|
900
950
|
}
|
|
901
951
|
|
|
902
|
-
function
|
|
952
|
+
function isFailedTestReplaySupported (testFramework, frameworkVersion) {
|
|
953
|
+
return testFramework === 'playwright'
|
|
954
|
+
? satisfies(frameworkVersion, MINIMUM_FRAMEWORK_VERSION_FOR_FAILED_TEST_REPLAY[testFramework])
|
|
955
|
+
: true
|
|
956
|
+
}
|
|
957
|
+
|
|
958
|
+
function getLibraryCapabilitiesTags (testFramework, isParallel, frameworkVersion) {
|
|
903
959
|
return {
|
|
904
|
-
[DD_CAPABILITIES_TEST_IMPACT_ANALYSIS]: isTiaSupported(testFramework, isParallel)
|
|
905
|
-
|
|
960
|
+
[DD_CAPABILITIES_TEST_IMPACT_ANALYSIS]: isTiaSupported(testFramework, isParallel)
|
|
961
|
+
? '1'
|
|
962
|
+
: undefined,
|
|
963
|
+
[DD_CAPABILITIES_EARLY_FLAKE_DETECTION]: isEarlyFlakeDetectionSupported(testFramework, frameworkVersion)
|
|
964
|
+
? '1'
|
|
965
|
+
: undefined,
|
|
906
966
|
[DD_CAPABILITIES_AUTO_TEST_RETRIES]: '1',
|
|
907
|
-
[DD_CAPABILITIES_IMPACTED_TESTS]:
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
[
|
|
911
|
-
? '
|
|
967
|
+
[DD_CAPABILITIES_IMPACTED_TESTS]: isImpactedTestsSupported(testFramework, frameworkVersion)
|
|
968
|
+
? '1'
|
|
969
|
+
: undefined,
|
|
970
|
+
[DD_CAPABILITIES_TEST_MANAGEMENT_QUARANTINE]: isQuarantineSupported(testFramework, frameworkVersion)
|
|
971
|
+
? '1'
|
|
972
|
+
: undefined,
|
|
973
|
+
[DD_CAPABILITIES_TEST_MANAGEMENT_DISABLE]: isDisableSupported(testFramework, frameworkVersion)
|
|
974
|
+
? '1'
|
|
975
|
+
: undefined,
|
|
976
|
+
[DD_CAPABILITIES_TEST_MANAGEMENT_ATTEMPT_TO_FIX]:
|
|
977
|
+
isAttemptToFixSupported(testFramework, isParallel, frameworkVersion)
|
|
978
|
+
? '4'
|
|
979
|
+
: undefined,
|
|
980
|
+
[DD_CAPABILITIES_FAILED_TEST_REPLAY]: isFailedTestReplaySupported(testFramework, frameworkVersion)
|
|
981
|
+
? '1'
|
|
912
982
|
: undefined
|
|
913
983
|
}
|
|
914
984
|
}
|