dd-trace 2.25.0 → 2.26.0
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 +50 -0
- package/package.json +1 -1
- package/packages/datadog-instrumentations/src/fs.js +350 -4
- package/packages/datadog-instrumentations/src/helpers/hooks.js +2 -0
- package/packages/datadog-instrumentations/src/helpers/register.js +0 -2
- package/packages/datadog-instrumentations/src/jest.js +11 -1
- package/packages/datadog-instrumentations/src/mocha.js +3 -2
- package/packages/datadog-instrumentations/src/mysql.js +7 -1
- package/packages/datadog-instrumentations/src/mysql2.js +7 -1
- package/packages/datadog-instrumentations/src/playwright.js +236 -0
- package/packages/datadog-plugin-fs/src/index.js +37 -574
- package/packages/datadog-plugin-jest/src/index.js +45 -23
- package/packages/datadog-plugin-mocha/src/index.js +34 -6
- package/packages/datadog-plugin-mysql/src/index.js +8 -7
- package/packages/datadog-plugin-playwright/src/index.js +171 -0
- package/packages/dd-trace/src/appsec/callbacks/ddwaf.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/analyzers.js +1 -0
- package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +60 -0
- package/packages/dd-trace/src/appsec/index.js +1 -1
- package/packages/dd-trace/src/appsec/recommended.json +247 -112
- package/packages/dd-trace/src/appsec/sdk/index.js +23 -0
- package/packages/dd-trace/src/appsec/sdk/noop.js +11 -0
- package/packages/dd-trace/src/appsec/sdk/track_event.js +74 -0
- package/packages/dd-trace/src/appsec/sdk/utils.js +10 -0
- package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +1 -1
- package/packages/dd-trace/src/config.js +7 -0
- package/packages/dd-trace/src/encode/agentless-ci-visibility.js +44 -4
- package/packages/dd-trace/src/encode/coverage-ci-visibility.js +52 -37
- package/packages/dd-trace/src/lambda/runtime/patch.js +1 -1
- package/packages/dd-trace/src/lambda/runtime/ritm.js +6 -11
- package/packages/dd-trace/src/log/channels.js +47 -0
- package/packages/dd-trace/src/log/index.js +79 -0
- package/packages/dd-trace/src/log/writer.js +108 -0
- package/packages/dd-trace/src/noop/proxy.js +3 -0
- package/packages/dd-trace/src/plugins/index.js +1 -0
- package/packages/dd-trace/src/plugins/util/ci.js +13 -21
- package/packages/dd-trace/src/{appsec → plugins/util}/ip_blocklist.js +0 -0
- package/packages/dd-trace/src/{appsec → plugins/util}/ip_extractor.js +1 -1
- package/packages/dd-trace/src/plugins/util/test.js +27 -10
- package/packages/dd-trace/src/plugins/util/user-provided-git.js +2 -7
- package/packages/dd-trace/src/plugins/util/web.js +11 -0
- package/packages/dd-trace/src/proxy.js +2 -0
- package/packages/dd-trace/src/startup-log.js +1 -1
- package/scripts/check-proposal-labels.js +71 -0
- package/packages/dd-trace/src/log.js +0 -143
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
module.exports = {
|
|
4
4
|
get '@cucumber/cucumber' () { return require('../../../datadog-plugin-cucumber/src') },
|
|
5
|
+
get '@playwright/test' () { return require('../../../datadog-plugin-playwright/src') },
|
|
5
6
|
get '@elastic/elasticsearch' () { return require('../../../datadog-plugin-elasticsearch/src') },
|
|
6
7
|
get '@elastic/transport' () { return require('../../../datadog-plugin-elasticsearch/src') },
|
|
7
8
|
get '@google-cloud/pubsub' () { return require('../../../datadog-plugin-google-cloud-pubsub/src') },
|
|
@@ -122,7 +122,7 @@ module.exports = {
|
|
|
122
122
|
[CI_ENV_VARS]: JSON.stringify({ DD_CUSTOM_TRACE_ID })
|
|
123
123
|
}
|
|
124
124
|
|
|
125
|
-
const isTag = JENKINS_GIT_BRANCH && JENKINS_GIT_BRANCH.includes('tags')
|
|
125
|
+
const isTag = JENKINS_GIT_BRANCH && JENKINS_GIT_BRANCH.includes('tags/')
|
|
126
126
|
const refKey = isTag ? GIT_TAG : GIT_BRANCH
|
|
127
127
|
const ref = normalizeRef(JENKINS_GIT_BRANCH)
|
|
128
128
|
|
|
@@ -216,7 +216,8 @@ module.exports = {
|
|
|
216
216
|
[GIT_REPOSITORY_URL]: CIRCLE_REPOSITORY_URL,
|
|
217
217
|
[CI_JOB_URL]: CIRCLE_BUILD_URL,
|
|
218
218
|
[CI_WORKSPACE_PATH]: CIRCLE_WORKING_DIRECTORY,
|
|
219
|
-
[
|
|
219
|
+
[GIT_TAG]: CIRCLE_TAG,
|
|
220
|
+
[GIT_BRANCH]: CIRCLE_BRANCH,
|
|
220
221
|
[CI_ENV_VARS]: JSON.stringify({
|
|
221
222
|
CIRCLE_WORKFLOW_ID,
|
|
222
223
|
CIRCLE_BUILD_NUM
|
|
@@ -249,7 +250,7 @@ module.exports = {
|
|
|
249
250
|
const jobUrl = `${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/commit/${GITHUB_SHA}/checks`
|
|
250
251
|
|
|
251
252
|
const ref = GITHUB_HEAD_REF || GITHUB_REF || ''
|
|
252
|
-
const refKey = ref.includes('tags') ? GIT_TAG : GIT_BRANCH
|
|
253
|
+
const refKey = ref.includes('tags/') ? GIT_TAG : GIT_BRANCH
|
|
253
254
|
|
|
254
255
|
tags = {
|
|
255
256
|
[CI_PIPELINE_ID]: GITHUB_RUN_ID,
|
|
@@ -305,13 +306,12 @@ module.exports = {
|
|
|
305
306
|
}
|
|
306
307
|
|
|
307
308
|
if (APPVEYOR_REPO_PROVIDER === 'github') {
|
|
308
|
-
const refKey = APPVEYOR_REPO_TAG_NAME ? GIT_TAG : GIT_BRANCH
|
|
309
|
-
const ref = APPVEYOR_REPO_TAG_NAME || APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH || APPVEYOR_REPO_BRANCH
|
|
310
309
|
tags = {
|
|
311
310
|
...tags,
|
|
312
311
|
[GIT_REPOSITORY_URL]: `https://github.com/${APPVEYOR_REPO_NAME}.git`,
|
|
313
312
|
[GIT_COMMIT_SHA]: APPVEYOR_REPO_COMMIT,
|
|
314
|
-
[
|
|
313
|
+
[GIT_TAG]: APPVEYOR_REPO_TAG_NAME,
|
|
314
|
+
[GIT_BRANCH]: APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH || APPVEYOR_REPO_BRANCH
|
|
315
315
|
}
|
|
316
316
|
}
|
|
317
317
|
}
|
|
@@ -340,7 +340,7 @@ module.exports = {
|
|
|
340
340
|
} = env
|
|
341
341
|
|
|
342
342
|
const ref = SYSTEM_PULLREQUEST_SOURCEBRANCH || BUILD_SOURCEBRANCH || BUILD_SOURCEBRANCHNAME
|
|
343
|
-
const refKey = (ref || '').includes('tags') ? GIT_TAG : GIT_BRANCH
|
|
343
|
+
const refKey = (ref || '').includes('tags/') ? GIT_TAG : GIT_BRANCH
|
|
344
344
|
|
|
345
345
|
tags = {
|
|
346
346
|
[CI_PROVIDER_NAME]: 'azurepipelines',
|
|
@@ -419,10 +419,6 @@ module.exports = {
|
|
|
419
419
|
BITRISE_GIT_MESSAGE
|
|
420
420
|
} = env
|
|
421
421
|
|
|
422
|
-
const isTag = !!BITRISE_GIT_TAG
|
|
423
|
-
const refKey = isTag ? GIT_TAG : GIT_BRANCH
|
|
424
|
-
const ref = BITRISE_GIT_TAG || BITRISEIO_GIT_BRANCH_DEST || BITRISE_GIT_BRANCH
|
|
425
|
-
|
|
426
422
|
tags = {
|
|
427
423
|
[CI_PROVIDER_NAME]: 'bitrise',
|
|
428
424
|
[CI_PIPELINE_ID]: BITRISE_BUILD_SLUG,
|
|
@@ -432,7 +428,8 @@ module.exports = {
|
|
|
432
428
|
[GIT_COMMIT_SHA]: BITRISE_GIT_COMMIT || GIT_CLONE_COMMIT_HASH,
|
|
433
429
|
[GIT_REPOSITORY_URL]: BITRISE_GIT_REPOSITORY_URL,
|
|
434
430
|
[CI_WORKSPACE_PATH]: BITRISE_SOURCE_DIR,
|
|
435
|
-
[
|
|
431
|
+
[GIT_TAG]: BITRISE_GIT_TAG,
|
|
432
|
+
[GIT_BRANCH]: BITRISEIO_GIT_BRANCH_DEST || BITRISE_GIT_BRANCH,
|
|
436
433
|
[GIT_COMMIT_MESSAGE]: BITRISE_GIT_MESSAGE
|
|
437
434
|
}
|
|
438
435
|
}
|
|
@@ -454,9 +451,6 @@ module.exports = {
|
|
|
454
451
|
BUILDKITE_MESSAGE
|
|
455
452
|
} = env
|
|
456
453
|
|
|
457
|
-
const ref = BUILDKITE_TAG || BUILDKITE_BRANCH
|
|
458
|
-
const refKey = BUILDKITE_TAG ? GIT_TAG : GIT_BRANCH
|
|
459
|
-
|
|
460
454
|
tags = {
|
|
461
455
|
[CI_PROVIDER_NAME]: 'buildkite',
|
|
462
456
|
[CI_PIPELINE_ID]: BUILDKITE_BUILD_ID,
|
|
@@ -467,7 +461,8 @@ module.exports = {
|
|
|
467
461
|
[GIT_COMMIT_SHA]: BUILDKITE_COMMIT,
|
|
468
462
|
[CI_WORKSPACE_PATH]: BUILDKITE_BUILD_CHECKOUT_PATH,
|
|
469
463
|
[GIT_REPOSITORY_URL]: BUILDKITE_REPO,
|
|
470
|
-
[
|
|
464
|
+
[GIT_TAG]: BUILDKITE_TAG,
|
|
465
|
+
[GIT_BRANCH]: BUILDKITE_BRANCH,
|
|
471
466
|
[GIT_COMMIT_AUTHOR_NAME]: BUILDKITE_BUILD_AUTHOR,
|
|
472
467
|
[GIT_COMMIT_AUTHOR_EMAIL]: BUILDKITE_BUILD_AUTHOR_EMAIL,
|
|
473
468
|
[GIT_COMMIT_MESSAGE]: BUILDKITE_MESSAGE,
|
|
@@ -493,10 +488,6 @@ module.exports = {
|
|
|
493
488
|
TRAVIS_COMMIT_MESSAGE
|
|
494
489
|
} = env
|
|
495
490
|
|
|
496
|
-
const isTag = !!TRAVIS_TAG
|
|
497
|
-
const ref = TRAVIS_TAG || TRAVIS_PULL_REQUEST_BRANCH || TRAVIS_BRANCH
|
|
498
|
-
const refKey = isTag ? GIT_TAG : GIT_BRANCH
|
|
499
|
-
|
|
500
491
|
tags = {
|
|
501
492
|
[CI_PROVIDER_NAME]: 'travisci',
|
|
502
493
|
[CI_JOB_URL]: TRAVIS_JOB_WEB_URL,
|
|
@@ -507,7 +498,8 @@ module.exports = {
|
|
|
507
498
|
[GIT_COMMIT_SHA]: TRAVIS_COMMIT,
|
|
508
499
|
[GIT_REPOSITORY_URL]: `https://github.com/${TRAVIS_REPO_SLUG}.git`,
|
|
509
500
|
[CI_WORKSPACE_PATH]: TRAVIS_BUILD_DIR,
|
|
510
|
-
[
|
|
501
|
+
[GIT_TAG]: TRAVIS_TAG,
|
|
502
|
+
[GIT_BRANCH]: TRAVIS_PULL_REQUEST_BRANCH || TRAVIS_BRANCH,
|
|
511
503
|
[GIT_COMMIT_MESSAGE]: TRAVIS_COMMIT_MESSAGE
|
|
512
504
|
}
|
|
513
505
|
}
|
|
File without changes
|
|
@@ -38,7 +38,9 @@ const TEST_CODE_OWNERS = 'test.codeowners'
|
|
|
38
38
|
const TEST_SOURCE_FILE = 'test.source.file'
|
|
39
39
|
const LIBRARY_VERSION = 'library_version'
|
|
40
40
|
const TEST_COMMAND = 'test.command'
|
|
41
|
+
const TEST_BUNDLE = 'test.bundle'
|
|
41
42
|
const TEST_SESSION_ID = 'test_session_id'
|
|
43
|
+
const TEST_MODULE_ID = 'test_module_id'
|
|
42
44
|
const TEST_SUITE_ID = 'test_suite_id'
|
|
43
45
|
|
|
44
46
|
const CI_APP_ORIGIN = 'ciapp-test'
|
|
@@ -75,9 +77,11 @@ module.exports = {
|
|
|
75
77
|
getCodeOwnersForFilename,
|
|
76
78
|
getTestCommonTags,
|
|
77
79
|
getTestSessionCommonTags,
|
|
80
|
+
getTestModuleCommonTags,
|
|
78
81
|
getTestSuiteCommonTags,
|
|
79
82
|
TEST_COMMAND,
|
|
80
83
|
TEST_SESSION_ID,
|
|
84
|
+
TEST_MODULE_ID,
|
|
81
85
|
TEST_SUITE_ID,
|
|
82
86
|
TEST_ITR_TESTS_SKIPPED,
|
|
83
87
|
TEST_SESSION_ITR_SKIPPING_ENABLED,
|
|
@@ -242,26 +246,39 @@ function getCodeOwnersForFilename (filename, entries) {
|
|
|
242
246
|
return null
|
|
243
247
|
}
|
|
244
248
|
|
|
245
|
-
function
|
|
249
|
+
function getTestLevelCommonTags (command, testFrameworkVersion) {
|
|
250
|
+
return {
|
|
251
|
+
[TEST_FRAMEWORK_VERSION]: testFrameworkVersion,
|
|
252
|
+
[LIBRARY_VERSION]: ddTraceVersion,
|
|
253
|
+
[TEST_COMMAND]: command,
|
|
254
|
+
[TEST_TYPE]: 'test'
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
function getTestSessionCommonTags (command, testFrameworkVersion) {
|
|
246
259
|
return {
|
|
247
260
|
[SPAN_TYPE]: 'test_session_end',
|
|
248
|
-
[TEST_TYPE]: 'test',
|
|
249
261
|
[RESOURCE_NAME]: `test_session.${command}`,
|
|
250
|
-
|
|
251
|
-
[LIBRARY_VERSION]: ddTraceVersion,
|
|
252
|
-
[TEST_COMMAND]: command
|
|
262
|
+
...getTestLevelCommonTags(command, testFrameworkVersion)
|
|
253
263
|
}
|
|
254
264
|
}
|
|
255
265
|
|
|
256
|
-
function
|
|
266
|
+
function getTestModuleCommonTags (command, testFrameworkVersion) {
|
|
267
|
+
return {
|
|
268
|
+
[SPAN_TYPE]: 'test_module_end',
|
|
269
|
+
[RESOURCE_NAME]: `test_module.${command}`,
|
|
270
|
+
[TEST_BUNDLE]: command,
|
|
271
|
+
...getTestLevelCommonTags(command, testFrameworkVersion)
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
function getTestSuiteCommonTags (command, testFrameworkVersion, testSuite) {
|
|
257
276
|
return {
|
|
258
277
|
[SPAN_TYPE]: 'test_suite_end',
|
|
259
|
-
[TEST_TYPE]: 'test',
|
|
260
278
|
[RESOURCE_NAME]: `test_suite.${testSuite}`,
|
|
261
|
-
[
|
|
262
|
-
[LIBRARY_VERSION]: ddTraceVersion,
|
|
279
|
+
[TEST_BUNDLE]: command,
|
|
263
280
|
[TEST_SUITE]: testSuite,
|
|
264
|
-
|
|
281
|
+
...getTestLevelCommonTags(command, testFrameworkVersion)
|
|
265
282
|
}
|
|
266
283
|
}
|
|
267
284
|
|
|
@@ -54,16 +54,11 @@ function getUserProviderGitMetadata () {
|
|
|
54
54
|
DD_GIT_COMMIT_AUTHOR_DATE
|
|
55
55
|
} = process.env
|
|
56
56
|
|
|
57
|
-
|
|
57
|
+
const branch = normalizeRef(DD_GIT_BRANCH)
|
|
58
58
|
let tag = normalizeRef(DD_GIT_TAG)
|
|
59
59
|
|
|
60
|
-
if
|
|
61
|
-
branch = undefined
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
// if DD_GIT_BRANCH is a tag, we associate its value to TAG instead of BRANCH
|
|
60
|
+
// if DD_GIT_BRANCH is a tag, we associate its value to TAG too
|
|
65
61
|
if ((DD_GIT_BRANCH || '').includes('origin/tags') || (DD_GIT_BRANCH || '').includes('refs/heads/tags')) {
|
|
66
|
-
branch = undefined
|
|
67
62
|
tag = normalizeRef(DD_GIT_BRANCH)
|
|
68
63
|
}
|
|
69
64
|
|
|
@@ -8,6 +8,7 @@ const tags = require('../../../../../ext/tags')
|
|
|
8
8
|
const types = require('../../../../../ext/types')
|
|
9
9
|
const kinds = require('../../../../../ext/kinds')
|
|
10
10
|
const urlFilter = require('./urlfilter')
|
|
11
|
+
const { extractIp } = require('./ip_extractor')
|
|
11
12
|
const { ERROR_MESSAGE, ERROR_TYPE, ERROR_STACK } = require('../../constants')
|
|
12
13
|
|
|
13
14
|
const WEB = types.WEB
|
|
@@ -24,6 +25,7 @@ const HTTP_ROUTE = tags.HTTP_ROUTE
|
|
|
24
25
|
const HTTP_REQUEST_HEADERS = tags.HTTP_REQUEST_HEADERS
|
|
25
26
|
const HTTP_RESPONSE_HEADERS = tags.HTTP_RESPONSE_HEADERS
|
|
26
27
|
const HTTP_USERAGENT = tags.HTTP_USERAGENT
|
|
28
|
+
const HTTP_CLIENT_IP = tags.HTTP_CLIENT_IP
|
|
27
29
|
const MANUAL_DROP = tags.MANUAL_DROP
|
|
28
30
|
|
|
29
31
|
const HTTP2_HEADER_AUTHORITY = ':authority'
|
|
@@ -432,6 +434,15 @@ function addRequestTags (context) {
|
|
|
432
434
|
[HTTP_USERAGENT]: req.headers['user-agent']
|
|
433
435
|
})
|
|
434
436
|
|
|
437
|
+
// if client ip has already been set by appsec, no need to run it again
|
|
438
|
+
if (config.clientIpEnabled && !span.context()._tags.hasOwnProperty(HTTP_CLIENT_IP)) {
|
|
439
|
+
const clientIp = extractIp(config, req)
|
|
440
|
+
|
|
441
|
+
if (clientIp) {
|
|
442
|
+
span.setTag(HTTP_CLIENT_IP, clientIp)
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
|
|
435
446
|
addHeaders(context)
|
|
436
447
|
}
|
|
437
448
|
|
|
@@ -8,6 +8,7 @@ const log = require('./log')
|
|
|
8
8
|
const { setStartupLogPluginManager } = require('./startup-log')
|
|
9
9
|
const telemetry = require('./telemetry')
|
|
10
10
|
const remoteConfig = require('./appsec/remote_config')
|
|
11
|
+
const AppsecSdk = require('./appsec/sdk')
|
|
11
12
|
|
|
12
13
|
class Tracer extends NoopProxy {
|
|
13
14
|
constructor () {
|
|
@@ -50,6 +51,7 @@ class Tracer extends NoopProxy {
|
|
|
50
51
|
}
|
|
51
52
|
|
|
52
53
|
this._tracer = new DatadogTracer(config)
|
|
54
|
+
this.appsec = new AppsecSdk(this._tracer)
|
|
53
55
|
|
|
54
56
|
if (config.iast.enabled) {
|
|
55
57
|
require('./appsec/iast').enable(config, this._tracer)
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/* eslint-disable no-console */
|
|
2
|
+
|
|
3
|
+
const childProcess = require('child_process')
|
|
4
|
+
const ORIGIN = 'origin/'
|
|
5
|
+
|
|
6
|
+
let releaseBranch = process.env['GITHUB_BASE_REF'] // 'origin/v3.x'
|
|
7
|
+
let releaseVersion = releaseBranch
|
|
8
|
+
if (releaseBranch.startsWith(ORIGIN)) {
|
|
9
|
+
releaseVersion = releaseBranch.substring(ORIGIN.length)
|
|
10
|
+
} else {
|
|
11
|
+
releaseBranch = ORIGIN + releaseBranch
|
|
12
|
+
}
|
|
13
|
+
let currentBranch = process.env['GITHUB_HEAD_REF'] // 'ugaitz/workflow-to-verify-dont-land-on-v3.x'
|
|
14
|
+
if (!currentBranch.startsWith(ORIGIN)) {
|
|
15
|
+
currentBranch = ORIGIN + currentBranch
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const getHashesCommandWithExclusions = 'branch-diff --user DataDog --repo dd-trace-js --exclude-label=semver-major' +
|
|
19
|
+
` --exclude-label=dont-land-on-${releaseVersion} ${releaseBranch} ${currentBranch}`
|
|
20
|
+
const getHashesCommandWithoutExclusions =
|
|
21
|
+
`branch-diff --user DataDog --repo dd-trace-js ${releaseBranch} ${currentBranch}`
|
|
22
|
+
|
|
23
|
+
childProcess.exec(getHashesCommandWithExclusions, { timeout: 30000 },
|
|
24
|
+
(withExclusionError, withExclusionStdout, withExclusionStderr) => {
|
|
25
|
+
if (withExclusionError) {
|
|
26
|
+
console.error(`stdout:
|
|
27
|
+
${withExclusionStdout}
|
|
28
|
+
stderr:
|
|
29
|
+
${withExclusionStderr}
|
|
30
|
+
`, withExclusionError)
|
|
31
|
+
process.exit(1)
|
|
32
|
+
return
|
|
33
|
+
}
|
|
34
|
+
if (withExclusionStderr) {
|
|
35
|
+
console.error(withExclusionStderr)
|
|
36
|
+
process.exit(1)
|
|
37
|
+
return
|
|
38
|
+
}
|
|
39
|
+
const commitsHashesWithExclusions = withExclusionStdout.split('\n')
|
|
40
|
+
|
|
41
|
+
childProcess.exec(getHashesCommandWithoutExclusions,
|
|
42
|
+
(withoutExclusionError, withoutExclusionStdout, withoutExclusionStderr) => {
|
|
43
|
+
if (withoutExclusionError) {
|
|
44
|
+
console.error(`stdout:
|
|
45
|
+
${withoutExclusionStdout}
|
|
46
|
+
stderr:
|
|
47
|
+
${withoutExclusionStderr}
|
|
48
|
+
`, withoutExclusionError)
|
|
49
|
+
process.exit(1)
|
|
50
|
+
return
|
|
51
|
+
}
|
|
52
|
+
if (withoutExclusionStderr) {
|
|
53
|
+
console.error(withoutExclusionStderr)
|
|
54
|
+
process.exit(1)
|
|
55
|
+
return
|
|
56
|
+
}
|
|
57
|
+
const commitsHashesWithoutExclusions = withoutExclusionStdout.split('\n')
|
|
58
|
+
if (commitsHashesWithExclusions.length !== commitsHashesWithoutExclusions.length) {
|
|
59
|
+
const commitsWithInvalidLabels = []
|
|
60
|
+
commitsHashesWithoutExclusions.filter(c1 => {
|
|
61
|
+
if (!commitsHashesWithExclusions.some(c2 => c2 === c1)) {
|
|
62
|
+
commitsWithInvalidLabels.push(c1)
|
|
63
|
+
}
|
|
64
|
+
})
|
|
65
|
+
console.error('Some excluded label added in the release proposal', commitsWithInvalidLabels)
|
|
66
|
+
process.exit(1)
|
|
67
|
+
} else {
|
|
68
|
+
console.log('Commit PRs label looks OK')
|
|
69
|
+
}
|
|
70
|
+
})
|
|
71
|
+
})
|
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
const { storage } = require('../../datadog-core')
|
|
4
|
-
|
|
5
|
-
const _default = {
|
|
6
|
-
debug: msg => console.debug(msg), /* eslint-disable-line no-console */
|
|
7
|
-
info: msg => console.info(msg), /* eslint-disable-line no-console */
|
|
8
|
-
warn: msg => console.warn(msg), /* eslint-disable-line no-console */
|
|
9
|
-
error: msg => console.error(msg) /* eslint-disable-line no-console */
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
// based on: https://github.com/trentm/node-bunyan#levels
|
|
13
|
-
const _logLevels = {
|
|
14
|
-
'debug': 20,
|
|
15
|
-
'info': 30,
|
|
16
|
-
'warn': 40,
|
|
17
|
-
'error': 50
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
const _defaultLogLevel = 'debug'
|
|
21
|
-
|
|
22
|
-
const _checkLogLevel = (logLevel) => {
|
|
23
|
-
if (logLevel && typeof logLevel === 'string') {
|
|
24
|
-
return _logLevels[logLevel.toLowerCase().trim()] || _logLevels[_defaultLogLevel]
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
return _logLevels[_defaultLogLevel]
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
const memoize = func => {
|
|
31
|
-
const cache = {}
|
|
32
|
-
const memoized = function (key) {
|
|
33
|
-
if (!cache[key]) {
|
|
34
|
-
cache[key] = func.apply(this, arguments)
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
return cache[key]
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
return memoized
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
function processMsg (msg) {
|
|
44
|
-
return typeof msg === 'function' ? msg() : msg
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
function withNoop (fn) {
|
|
48
|
-
const store = storage.getStore()
|
|
49
|
-
|
|
50
|
-
storage.enterWith({ noop: true })
|
|
51
|
-
fn()
|
|
52
|
-
storage.enterWith(store)
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
const log = {
|
|
56
|
-
_isLogLevelEnabled (level) {
|
|
57
|
-
return _logLevels[level] >= this._logLevel
|
|
58
|
-
},
|
|
59
|
-
|
|
60
|
-
use (logger) {
|
|
61
|
-
if (logger && logger.debug instanceof Function && logger.error instanceof Function) {
|
|
62
|
-
this._logger = logger
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
return this
|
|
66
|
-
},
|
|
67
|
-
|
|
68
|
-
toggle (enabled, logLevel, tracer) {
|
|
69
|
-
this._enabled = enabled
|
|
70
|
-
this._logLevel = _checkLogLevel(logLevel)
|
|
71
|
-
this._tracer = tracer
|
|
72
|
-
|
|
73
|
-
return this
|
|
74
|
-
},
|
|
75
|
-
|
|
76
|
-
reset () {
|
|
77
|
-
this._logger = _default
|
|
78
|
-
this._enabled = false
|
|
79
|
-
this._deprecate = memoize((code, message) => {
|
|
80
|
-
withNoop(() => this._logger.error(message))
|
|
81
|
-
return this
|
|
82
|
-
})
|
|
83
|
-
this._logLevel = _checkLogLevel()
|
|
84
|
-
|
|
85
|
-
return this
|
|
86
|
-
},
|
|
87
|
-
|
|
88
|
-
debug (message) {
|
|
89
|
-
if (this._enabled && this._isLogLevelEnabled('debug')) {
|
|
90
|
-
withNoop(() => this._logger.debug(processMsg(message)))
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
return this
|
|
94
|
-
},
|
|
95
|
-
|
|
96
|
-
info (message) {
|
|
97
|
-
if (!this._logger.info) return this.debug(message)
|
|
98
|
-
if (this._enabled && this._isLogLevelEnabled('info')) {
|
|
99
|
-
withNoop(() => this._logger.info(processMsg(message)))
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
return this
|
|
103
|
-
},
|
|
104
|
-
|
|
105
|
-
warn (message) {
|
|
106
|
-
if (!this._logger.warn) return this.debug(message)
|
|
107
|
-
if (this._enabled && this._isLogLevelEnabled('warn')) {
|
|
108
|
-
withNoop(() => this._logger.warn(processMsg(message)))
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
return this
|
|
112
|
-
},
|
|
113
|
-
|
|
114
|
-
error (err) {
|
|
115
|
-
if (this._enabled && this._isLogLevelEnabled('error')) {
|
|
116
|
-
if (err instanceof Function) {
|
|
117
|
-
err = err()
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
if (typeof err !== 'object' || !err) {
|
|
121
|
-
err = String(err)
|
|
122
|
-
} else if (!err.stack) {
|
|
123
|
-
err = String(err.message || err)
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
if (typeof err === 'string') {
|
|
127
|
-
err = new Error(err)
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
withNoop(() => this._logger.error(err))
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
return this
|
|
134
|
-
},
|
|
135
|
-
|
|
136
|
-
deprecate (code, message) {
|
|
137
|
-
return this._deprecate(code, message)
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
log.reset()
|
|
142
|
-
|
|
143
|
-
module.exports = log
|