@datadog/datadog-ci 2.4.0 → 2.5.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.
Files changed (203) hide show
  1. package/LICENSE-3rdparty.csv +1 -0
  2. package/dist/commands/dsyms/upload.js +2 -1
  3. package/dist/commands/dsyms/upload.js.map +1 -1
  4. package/dist/commands/flutter-symbols/helpers.js +1 -1
  5. package/dist/commands/flutter-symbols/helpers.js.map +1 -1
  6. package/dist/commands/flutter-symbols/upload.js +1 -1
  7. package/dist/commands/flutter-symbols/upload.js.map +1 -1
  8. package/dist/commands/lambda/functions/commons.d.ts +4 -2
  9. package/dist/commands/lambda/functions/commons.js +71 -12
  10. package/dist/commands/lambda/functions/commons.js.map +1 -1
  11. package/dist/commands/lambda/instrument.d.ts +2 -0
  12. package/dist/commands/lambda/instrument.js +28 -13
  13. package/dist/commands/lambda/instrument.js.map +1 -1
  14. package/dist/commands/lambda/interfaces.d.ts +6 -0
  15. package/dist/commands/lambda/loggroup.js +7 -1
  16. package/dist/commands/lambda/loggroup.js.map +1 -1
  17. package/dist/commands/lambda/renderer.d.ts +74 -2
  18. package/dist/commands/lambda/renderer.js +98 -5
  19. package/dist/commands/lambda/renderer.js.map +1 -1
  20. package/dist/commands/lambda/uninstrument.js +14 -18
  21. package/dist/commands/lambda/uninstrument.js.map +1 -1
  22. package/dist/commands/react-native/upload.js +2 -2
  23. package/dist/commands/react-native/upload.js.map +1 -1
  24. package/dist/commands/react-native/xcode.js +5 -0
  25. package/dist/commands/react-native/xcode.js.map +1 -1
  26. package/dist/commands/synthetics/api.d.ts +2 -1
  27. package/dist/commands/synthetics/api.js +7 -0
  28. package/dist/commands/synthetics/api.js.map +1 -1
  29. package/dist/commands/synthetics/command.js +11 -2
  30. package/dist/commands/synthetics/command.js.map +1 -1
  31. package/dist/commands/synthetics/index.d.ts +1 -0
  32. package/dist/commands/synthetics/index.js +3 -1
  33. package/dist/commands/synthetics/index.js.map +1 -1
  34. package/dist/commands/synthetics/interfaces.d.ts +4 -1
  35. package/dist/commands/synthetics/reporters/default.d.ts +3 -2
  36. package/dist/commands/synthetics/reporters/default.js +19 -5
  37. package/dist/commands/synthetics/reporters/default.js.map +1 -1
  38. package/dist/commands/synthetics/reporters/junit.d.ts +2 -2
  39. package/dist/commands/synthetics/reporters/junit.js +1 -1
  40. package/dist/commands/synthetics/reporters/junit.js.map +1 -1
  41. package/dist/commands/synthetics/run-test.js +9 -1
  42. package/dist/commands/synthetics/run-test.js.map +1 -1
  43. package/dist/commands/synthetics/utils.d.ts +4 -2
  44. package/dist/commands/synthetics/utils.js +14 -5
  45. package/dist/commands/synthetics/utils.js.map +1 -1
  46. package/dist/helpers/ci.js +27 -29
  47. package/dist/helpers/ci.js.map +1 -1
  48. package/dist/helpers/user-provided-git.js +0 -3
  49. package/dist/helpers/user-provided-git.js.map +1 -1
  50. package/dist/helpers/utils.d.ts +3 -3
  51. package/dist/helpers/utils.js +10 -6
  52. package/dist/helpers/utils.js.map +1 -1
  53. package/package.json +7 -5
  54. package/dist/commands/dsyms/__tests__/upload.test.d.ts +0 -1
  55. package/dist/commands/dsyms/__tests__/upload.test.js +0 -297
  56. package/dist/commands/dsyms/__tests__/upload.test.js.map +0 -1
  57. package/dist/commands/dsyms/__tests__/utils.test.d.ts +0 -1
  58. package/dist/commands/dsyms/__tests__/utils.test.js +0 -99
  59. package/dist/commands/dsyms/__tests__/utils.test.js.map +0 -1
  60. package/dist/commands/flutter-symbols/__tests__/upload.test.d.ts +0 -1
  61. package/dist/commands/flutter-symbols/__tests__/upload.test.js +0 -538
  62. package/dist/commands/flutter-symbols/__tests__/upload.test.js.map +0 -1
  63. package/dist/commands/git-metadata/__tests__/git.test.d.ts +0 -1
  64. package/dist/commands/git-metadata/__tests__/git.test.js +0 -148
  65. package/dist/commands/git-metadata/__tests__/git.test.js.map +0 -1
  66. package/dist/commands/git-metadata/__tests__/library.test.d.ts +0 -1
  67. package/dist/commands/git-metadata/__tests__/library.test.js +0 -103
  68. package/dist/commands/git-metadata/__tests__/library.test.js.map +0 -1
  69. package/dist/commands/git-metadata/__tests__/upload.test.d.ts +0 -1
  70. package/dist/commands/git-metadata/__tests__/upload.test.js +0 -60
  71. package/dist/commands/git-metadata/__tests__/upload.test.js.map +0 -1
  72. package/dist/commands/junit/__tests__/api.test.d.ts +0 -1
  73. package/dist/commands/junit/__tests__/api.test.js +0 -9
  74. package/dist/commands/junit/__tests__/api.test.js.map +0 -1
  75. package/dist/commands/junit/__tests__/upload.test.d.ts +0 -1
  76. package/dist/commands/junit/__tests__/upload.test.js +0 -283
  77. package/dist/commands/junit/__tests__/upload.test.js.map +0 -1
  78. package/dist/commands/lambda/__tests__/fixtures.d.ts +0 -49
  79. package/dist/commands/lambda/__tests__/fixtures.js +0 -88
  80. package/dist/commands/lambda/__tests__/fixtures.js.map +0 -1
  81. package/dist/commands/lambda/__tests__/functions/commons.test.d.ts +0 -1
  82. package/dist/commands/lambda/__tests__/functions/commons.test.js +0 -621
  83. package/dist/commands/lambda/__tests__/functions/commons.test.js.map +0 -1
  84. package/dist/commands/lambda/__tests__/functions/instrument.part1.test.d.ts +0 -1
  85. package/dist/commands/lambda/__tests__/functions/instrument.part1.test.js +0 -350
  86. package/dist/commands/lambda/__tests__/functions/instrument.part1.test.js.map +0 -1
  87. package/dist/commands/lambda/__tests__/functions/instrument.part2.test.d.ts +0 -1
  88. package/dist/commands/lambda/__tests__/functions/instrument.part2.test.js +0 -583
  89. package/dist/commands/lambda/__tests__/functions/instrument.part2.test.js.map +0 -1
  90. package/dist/commands/lambda/__tests__/functions/uninstrument.test.d.ts +0 -1
  91. package/dist/commands/lambda/__tests__/functions/uninstrument.test.js +0 -477
  92. package/dist/commands/lambda/__tests__/functions/uninstrument.test.js.map +0 -1
  93. package/dist/commands/lambda/__tests__/functions/versionChecker.test.d.ts +0 -1
  94. package/dist/commands/lambda/__tests__/functions/versionChecker.test.js +0 -33
  95. package/dist/commands/lambda/__tests__/functions/versionChecker.test.js.map +0 -1
  96. package/dist/commands/lambda/__tests__/instrument.test.d.ts +0 -1
  97. package/dist/commands/lambda/__tests__/instrument.test.js +0 -1698
  98. package/dist/commands/lambda/__tests__/instrument.test.js.map +0 -1
  99. package/dist/commands/lambda/__tests__/loggroup.test.d.ts +0 -1
  100. package/dist/commands/lambda/__tests__/loggroup.test.js +0 -266
  101. package/dist/commands/lambda/__tests__/loggroup.test.js.map +0 -1
  102. package/dist/commands/lambda/__tests__/prompt.test.d.ts +0 -1
  103. package/dist/commands/lambda/__tests__/prompt.test.js +0 -235
  104. package/dist/commands/lambda/__tests__/prompt.test.js.map +0 -1
  105. package/dist/commands/lambda/__tests__/tags.test.d.ts +0 -1
  106. package/dist/commands/lambda/__tests__/tags.test.js +0 -253
  107. package/dist/commands/lambda/__tests__/tags.test.js.map +0 -1
  108. package/dist/commands/lambda/__tests__/uninstrument.test.d.ts +0 -1
  109. package/dist/commands/lambda/__tests__/uninstrument.test.js +0 -615
  110. package/dist/commands/lambda/__tests__/uninstrument.test.js.map +0 -1
  111. package/dist/commands/metric/__tests__/metric.test.d.ts +0 -1
  112. package/dist/commands/metric/__tests__/metric.test.js +0 -97
  113. package/dist/commands/metric/__tests__/metric.test.js.map +0 -1
  114. package/dist/commands/react-native/__tests__/codepush.test.d.ts +0 -1
  115. package/dist/commands/react-native/__tests__/codepush.test.js +0 -153
  116. package/dist/commands/react-native/__tests__/codepush.test.js.map +0 -1
  117. package/dist/commands/react-native/__tests__/interfaces.test.d.ts +0 -1
  118. package/dist/commands/react-native/__tests__/interfaces.test.js +0 -52
  119. package/dist/commands/react-native/__tests__/interfaces.test.js.map +0 -1
  120. package/dist/commands/react-native/__tests__/upload.test.d.ts +0 -1
  121. package/dist/commands/react-native/__tests__/upload.test.js +0 -176
  122. package/dist/commands/react-native/__tests__/upload.test.js.map +0 -1
  123. package/dist/commands/react-native/__tests__/xcode.test.d.ts +0 -1
  124. package/dist/commands/react-native/__tests__/xcode.test.js +0 -417
  125. package/dist/commands/react-native/__tests__/xcode.test.js.map +0 -1
  126. package/dist/commands/sourcemaps/__tests__/upload.test.d.ts +0 -1
  127. package/dist/commands/sourcemaps/__tests__/upload.test.js +0 -270
  128. package/dist/commands/sourcemaps/__tests__/upload.test.js.map +0 -1
  129. package/dist/commands/sourcemaps/__tests__/utils.test.d.ts +0 -1
  130. package/dist/commands/sourcemaps/__tests__/utils.test.js +0 -31
  131. package/dist/commands/sourcemaps/__tests__/utils.test.js.map +0 -1
  132. package/dist/commands/synthetics/__tests__/api.test.d.ts +0 -1
  133. package/dist/commands/synthetics/__tests__/api.test.js +0 -273
  134. package/dist/commands/synthetics/__tests__/api.test.js.map +0 -1
  135. package/dist/commands/synthetics/__tests__/cli.test.d.ts +0 -1
  136. package/dist/commands/synthetics/__tests__/cli.test.js +0 -391
  137. package/dist/commands/synthetics/__tests__/cli.test.js.map +0 -1
  138. package/dist/commands/synthetics/__tests__/fixtures.d.ts +0 -119
  139. package/dist/commands/synthetics/__tests__/fixtures.js +0 -386
  140. package/dist/commands/synthetics/__tests__/fixtures.js.map +0 -1
  141. package/dist/commands/synthetics/__tests__/mobile.test.d.ts +0 -1
  142. package/dist/commands/synthetics/__tests__/mobile.test.js +0 -228
  143. package/dist/commands/synthetics/__tests__/mobile.test.js.map +0 -1
  144. package/dist/commands/synthetics/__tests__/reporters/default.test.d.ts +0 -1
  145. package/dist/commands/synthetics/__tests__/reporters/default.test.js +0 -202
  146. package/dist/commands/synthetics/__tests__/reporters/default.test.js.map +0 -1
  147. package/dist/commands/synthetics/__tests__/reporters/junit.test.d.ts +0 -1
  148. package/dist/commands/synthetics/__tests__/reporters/junit.test.js +0 -339
  149. package/dist/commands/synthetics/__tests__/reporters/junit.test.js.map +0 -1
  150. package/dist/commands/synthetics/__tests__/run-test.test.d.ts +0 -1
  151. package/dist/commands/synthetics/__tests__/run-test.test.js +0 -419
  152. package/dist/commands/synthetics/__tests__/run-test.test.js.map +0 -1
  153. package/dist/commands/synthetics/__tests__/tunnel/crypto.test.d.ts +0 -1
  154. package/dist/commands/synthetics/__tests__/tunnel/crypto.test.js +0 -21
  155. package/dist/commands/synthetics/__tests__/tunnel/crypto.test.js.map +0 -1
  156. package/dist/commands/synthetics/__tests__/tunnel/tunnel.test.d.ts +0 -1
  157. package/dist/commands/synthetics/__tests__/tunnel/tunnel.test.js +0 -80
  158. package/dist/commands/synthetics/__tests__/tunnel/tunnel.test.js.map +0 -1
  159. package/dist/commands/synthetics/__tests__/tunnel/websocket.test.d.ts +0 -1
  160. package/dist/commands/synthetics/__tests__/tunnel/websocket.test.js +0 -111
  161. package/dist/commands/synthetics/__tests__/tunnel/websocket.test.js.map +0 -1
  162. package/dist/commands/synthetics/__tests__/utils.test.d.ts +0 -1
  163. package/dist/commands/synthetics/__tests__/utils.test.js +0 -933
  164. package/dist/commands/synthetics/__tests__/utils.test.js.map +0 -1
  165. package/dist/commands/tag/__tests__/tag.test.d.ts +0 -1
  166. package/dist/commands/tag/__tests__/tag.test.js +0 -77
  167. package/dist/commands/tag/__tests__/tag.test.js.map +0 -1
  168. package/dist/commands/trace/__tests__/trace.test.d.ts +0 -1
  169. package/dist/commands/trace/__tests__/trace.test.js +0 -64
  170. package/dist/commands/trace/__tests__/trace.test.js.map +0 -1
  171. package/dist/helpers/__tests__/ci.test.d.ts +0 -1
  172. package/dist/helpers/__tests__/ci.test.js +0 -197
  173. package/dist/helpers/__tests__/ci.test.js.map +0 -1
  174. package/dist/helpers/__tests__/plist.test.d.ts +0 -1
  175. package/dist/helpers/__tests__/plist.test.js +0 -31
  176. package/dist/helpers/__tests__/plist.test.js.map +0 -1
  177. package/dist/helpers/__tests__/retry.test.d.ts +0 -1
  178. package/dist/helpers/__tests__/retry.test.js +0 -99
  179. package/dist/helpers/__tests__/retry.test.js.map +0 -1
  180. package/dist/helpers/__tests__/tags.test.d.ts +0 -1
  181. package/dist/helpers/__tests__/tags.test.js +0 -17
  182. package/dist/helpers/__tests__/tags.test.js.map +0 -1
  183. package/dist/helpers/__tests__/upload.test.d.ts +0 -1
  184. package/dist/helpers/__tests__/upload.test.js +0 -185
  185. package/dist/helpers/__tests__/upload.test.js.map +0 -1
  186. package/dist/helpers/__tests__/user-provided-git.test.d.ts +0 -1
  187. package/dist/helpers/__tests__/user-provided-git.test.js +0 -118
  188. package/dist/helpers/__tests__/user-provided-git.test.js.map +0 -1
  189. package/dist/helpers/__tests__/utils.test.d.ts +0 -1
  190. package/dist/helpers/__tests__/utils.test.js +0 -382
  191. package/dist/helpers/__tests__/utils.test.js.map +0 -1
  192. package/dist/helpers/__tests__/validation.test.d.ts +0 -1
  193. package/dist/helpers/__tests__/validation.test.js +0 -21
  194. package/dist/helpers/__tests__/validation.test.js.map +0 -1
  195. package/dist/helpers/git/__tests__/format-git-sourcemaps-data.test.d.ts +0 -1
  196. package/dist/helpers/git/__tests__/format-git-sourcemaps-data.test.js +0 -106
  197. package/dist/helpers/git/__tests__/format-git-sourcemaps-data.test.js.map +0 -1
  198. package/dist/helpers/git/__tests__/format-git-span-data.test.d.ts +0 -1
  199. package/dist/helpers/git/__tests__/format-git-span-data.test.js +0 -67
  200. package/dist/helpers/git/__tests__/format-git-span-data.test.js.map +0 -1
  201. package/dist/helpers/git/__tests__/get-git-data.test.d.ts +0 -1
  202. package/dist/helpers/git/__tests__/get-git-data.test.js +0 -60
  203. package/dist/helpers/git/__tests__/get-git-data.test.js.map +0 -1
@@ -1,583 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- jest.mock('../../loggroup');
13
- const constants_1 = require("../../constants");
14
- const instrument_1 = require("../../functions/instrument");
15
- const fixtures_1 = require("../fixtures");
16
- describe('instrument', () => {
17
- describe('calculateUpdateRequest', () => {
18
- const OLD_ENV = process.env;
19
- beforeEach(() => {
20
- jest.resetModules();
21
- process.env = {};
22
- });
23
- afterAll(() => {
24
- process.env = OLD_ENV;
25
- });
26
- test('calculates an update request with just lambda library layers', () => __awaiter(void 0, void 0, void 0, function* () {
27
- const runtime = 'nodejs12.x';
28
- const config = {
29
- FunctionArn: 'arn:aws:lambda:us-east-1:123456789012:function:lambda-hello-world',
30
- Handler: 'index.handler',
31
- Layers: [],
32
- Runtime: runtime,
33
- };
34
- const settings = {
35
- flushMetricsToLogs: false,
36
- layerAWSAccount: fixtures_1.mockAwsAccount,
37
- layerVersion: 5,
38
- mergeXrayTraces: false,
39
- tracingEnabled: false,
40
- };
41
- const region = 'sa-east-1';
42
- const updateRequest = yield instrument_1.calculateUpdateRequest(config, settings, region, runtime);
43
- expect(updateRequest).toMatchInlineSnapshot(`
44
- Object {
45
- "Environment": Object {
46
- "Variables": Object {
47
- "DD_FLUSH_TO_LOG": "false",
48
- "DD_LAMBDA_HANDLER": "index.handler",
49
- "DD_MERGE_XRAY_TRACES": "false",
50
- "DD_SITE": "datadoghq.com",
51
- "DD_TRACE_ENABLED": "false",
52
- },
53
- },
54
- "FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:lambda-hello-world",
55
- "Handler": "/opt/nodejs/node_modules/datadog-lambda-js/handler.handler",
56
- "Layers": Array [
57
- "arn:aws:lambda:sa-east-1:123456789012:layer:Datadog-Node12-x:5",
58
- ],
59
- }
60
- `);
61
- }));
62
- test('calculates an update request with just lambda library layers in arm architecture', () => __awaiter(void 0, void 0, void 0, function* () {
63
- const runtime = 'python3.9';
64
- const config = {
65
- Architectures: ['arm64'],
66
- FunctionArn: 'arn:aws:lambda:us-east-1:123456789012:function:lambda-hello-world',
67
- Handler: 'handler.hello',
68
- Layers: [],
69
- Runtime: runtime,
70
- };
71
- const settings = {
72
- flushMetricsToLogs: false,
73
- layerAWSAccount: fixtures_1.mockAwsAccount,
74
- layerVersion: 11,
75
- mergeXrayTraces: false,
76
- tracingEnabled: false,
77
- };
78
- const region = 'sa-east-1';
79
- const updateRequest = yield instrument_1.calculateUpdateRequest(config, settings, region, runtime);
80
- expect(updateRequest).toMatchInlineSnapshot(`
81
- Object {
82
- "Environment": Object {
83
- "Variables": Object {
84
- "DD_FLUSH_TO_LOG": "false",
85
- "DD_LAMBDA_HANDLER": "handler.hello",
86
- "DD_MERGE_XRAY_TRACES": "false",
87
- "DD_SITE": "datadoghq.com",
88
- "DD_TRACE_ENABLED": "false",
89
- },
90
- },
91
- "FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:lambda-hello-world",
92
- "Handler": "datadog_lambda.handler.handler",
93
- "Layers": Array [
94
- "arn:aws:lambda:sa-east-1:123456789012:layer:Datadog-Python39-ARM:11",
95
- ],
96
- }
97
- `);
98
- }));
99
- test('calculates an update request with a lambda library, extension, and DATADOG_API_KEY', () => __awaiter(void 0, void 0, void 0, function* () {
100
- process.env[constants_1.CI_API_KEY_ENV_VAR] = '1234';
101
- const runtime = 'nodejs12.x';
102
- const config = {
103
- FunctionArn: 'arn:aws:lambda:us-east-1:123456789012:function:lambda-hello-world',
104
- Handler: 'index.handler',
105
- Layers: [],
106
- Runtime: runtime,
107
- };
108
- const settings = {
109
- extensionVersion: 6,
110
- flushMetricsToLogs: false,
111
- layerAWSAccount: fixtures_1.mockAwsAccount,
112
- layerVersion: 5,
113
- mergeXrayTraces: false,
114
- tracingEnabled: false,
115
- };
116
- const region = 'sa-east-1';
117
- const updateRequest = yield instrument_1.calculateUpdateRequest(config, settings, region, runtime);
118
- expect(updateRequest).toMatchInlineSnapshot(`
119
- Object {
120
- "Environment": Object {
121
- "Variables": Object {
122
- "DD_API_KEY": "1234",
123
- "DD_LAMBDA_HANDLER": "index.handler",
124
- "DD_MERGE_XRAY_TRACES": "false",
125
- "DD_SITE": "datadoghq.com",
126
- "DD_TRACE_ENABLED": "false",
127
- },
128
- },
129
- "FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:lambda-hello-world",
130
- "Handler": "/opt/nodejs/node_modules/datadog-lambda-js/handler.handler",
131
- "Layers": Array [
132
- "arn:aws:lambda:sa-east-1:123456789012:layer:Datadog-Extension:6",
133
- "arn:aws:lambda:sa-east-1:123456789012:layer:Datadog-Node12-x:5",
134
- ],
135
- }
136
- `);
137
- }));
138
- test('calculates an update request with a lambda library, extension, and DATADOG_API_KEY_SECRET_ARN', () => __awaiter(void 0, void 0, void 0, function* () {
139
- process.env[constants_1.CI_API_KEY_SECRET_ARN_ENV_VAR] = 'some-secret:arn:from:aws';
140
- const runtime = 'python3.9';
141
- const config = {
142
- FunctionArn: 'arn:aws:lambda:sa-east-1:123456789012:function:lambda-hello-world',
143
- Handler: 'index.handler',
144
- Layers: [],
145
- Runtime: runtime,
146
- };
147
- const settings = {
148
- extensionVersion: 11,
149
- flushMetricsToLogs: false,
150
- layerAWSAccount: fixtures_1.mockAwsAccount,
151
- layerVersion: 49,
152
- mergeXrayTraces: false,
153
- tracingEnabled: false,
154
- };
155
- const region = 'sa-east-1';
156
- const updateRequest = yield instrument_1.calculateUpdateRequest(config, settings, region, runtime);
157
- expect(updateRequest).toMatchInlineSnapshot(`
158
- Object {
159
- "Environment": Object {
160
- "Variables": Object {
161
- "DD_API_KEY_SECRET_ARN": "some-secret:arn:from:aws",
162
- "DD_LAMBDA_HANDLER": "index.handler",
163
- "DD_MERGE_XRAY_TRACES": "false",
164
- "DD_SITE": "datadoghq.com",
165
- "DD_TRACE_ENABLED": "false",
166
- },
167
- },
168
- "FunctionName": "arn:aws:lambda:sa-east-1:123456789012:function:lambda-hello-world",
169
- "Handler": "datadog_lambda.handler.handler",
170
- "Layers": Array [
171
- "arn:aws:lambda:sa-east-1:123456789012:layer:Datadog-Extension:11",
172
- "arn:aws:lambda:sa-east-1:123456789012:layer:Datadog-Python39:49",
173
- ],
174
- }
175
- `);
176
- }));
177
- test('calculates an update request with a lambda library, extension, and DATADOG_KMS_API_KEY', () => __awaiter(void 0, void 0, void 0, function* () {
178
- process.env[constants_1.CI_KMS_API_KEY_ENV_VAR] = '5678';
179
- const runtime = 'python3.6';
180
- const config = {
181
- FunctionArn: 'arn:aws:lambda:us-east-1:123456789012:function:lambda-hello-world',
182
- Handler: 'index.handler',
183
- Layers: [],
184
- Runtime: runtime,
185
- };
186
- const settings = {
187
- extensionVersion: 6,
188
- flushMetricsToLogs: false,
189
- layerAWSAccount: fixtures_1.mockAwsAccount,
190
- layerVersion: 5,
191
- mergeXrayTraces: false,
192
- tracingEnabled: false,
193
- };
194
- const region = 'sa-east-1';
195
- const updateRequest = yield instrument_1.calculateUpdateRequest(config, settings, region, runtime);
196
- expect(updateRequest).toMatchInlineSnapshot(`
197
- Object {
198
- "Environment": Object {
199
- "Variables": Object {
200
- "DD_KMS_API_KEY": "5678",
201
- "DD_LAMBDA_HANDLER": "index.handler",
202
- "DD_MERGE_XRAY_TRACES": "false",
203
- "DD_SITE": "datadoghq.com",
204
- "DD_TRACE_ENABLED": "false",
205
- },
206
- },
207
- "FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:lambda-hello-world",
208
- "Handler": "datadog_lambda.handler.handler",
209
- "Layers": Array [
210
- "arn:aws:lambda:sa-east-1:123456789012:layer:Datadog-Extension:6",
211
- "arn:aws:lambda:sa-east-1:123456789012:layer:Datadog-Python36:5",
212
- ],
213
- }
214
- `);
215
- }));
216
- test('prioritizes the KMS API KEY when all of them are exported', () => __awaiter(void 0, void 0, void 0, function* () {
217
- process.env = {
218
- [constants_1.CI_API_KEY_ENV_VAR]: '1234',
219
- [constants_1.CI_API_KEY_SECRET_ARN_ENV_VAR]: '5678',
220
- [constants_1.CI_KMS_API_KEY_ENV_VAR]: 'should-be-selected',
221
- };
222
- const config = {
223
- FunctionArn: 'arn:aws:lambda:sa-east-1:123456789012:function:lambda-hello-world',
224
- Handler: 'index.handler',
225
- Layers: [],
226
- };
227
- const runtime = 'python3.9';
228
- const region = 'sa-east-1';
229
- const updateRequest = yield instrument_1.calculateUpdateRequest(config, {}, region, runtime);
230
- expect(updateRequest).toMatchInlineSnapshot(`
231
- Object {
232
- "Environment": Object {
233
- "Variables": Object {
234
- "DD_KMS_API_KEY": "should-be-selected",
235
- "DD_LAMBDA_HANDLER": "index.handler",
236
- "DD_SITE": "datadoghq.com",
237
- },
238
- },
239
- "FunctionName": "arn:aws:lambda:sa-east-1:123456789012:function:lambda-hello-world",
240
- "Handler": "datadog_lambda.handler.handler",
241
- }
242
- `);
243
- }));
244
- test("doesn't set DD_FLUSH_TO_LOGS when extension is being used", () => __awaiter(void 0, void 0, void 0, function* () {
245
- process.env[constants_1.CI_API_KEY_ENV_VAR] = '1234';
246
- const config = {
247
- FunctionArn: 'arn:aws:lambda:sa-east-1:123456789012:function:lambda-hello-world',
248
- Handler: 'index.handler',
249
- Layers: [],
250
- };
251
- const runtime = 'python3.9';
252
- const region = 'sa-east-1';
253
- const settings = {
254
- extensionVersion: 13,
255
- flushMetricsToLogs: true,
256
- mergeXrayTraces: false,
257
- tracingEnabled: false,
258
- };
259
- const updateRequest = yield instrument_1.calculateUpdateRequest(config, settings, region, runtime);
260
- expect(updateRequest).toMatchInlineSnapshot(`
261
- Object {
262
- "Environment": Object {
263
- "Variables": Object {
264
- "DD_API_KEY": "1234",
265
- "DD_LAMBDA_HANDLER": "index.handler",
266
- "DD_MERGE_XRAY_TRACES": "false",
267
- "DD_SITE": "datadoghq.com",
268
- "DD_TRACE_ENABLED": "false",
269
- },
270
- },
271
- "FunctionName": "arn:aws:lambda:sa-east-1:123456789012:function:lambda-hello-world",
272
- "Handler": "datadog_lambda.handler.handler",
273
- "Layers": Array [
274
- "arn:aws:lambda:sa-east-1:464622532012:layer:Datadog-Extension:13",
275
- ],
276
- }
277
- `);
278
- }));
279
- test('by default calculates an update request with DATADOG_SITE being set to datadoghq.com', () => __awaiter(void 0, void 0, void 0, function* () {
280
- const runtime = 'python3.6';
281
- const config = {
282
- FunctionArn: 'arn:aws:lambda:us-east-1:123456789012:function:lambda-hello-world',
283
- Handler: 'index.handler',
284
- Layers: [],
285
- Runtime: runtime,
286
- };
287
- const settings = {
288
- flushMetricsToLogs: false,
289
- layerAWSAccount: fixtures_1.mockAwsAccount,
290
- mergeXrayTraces: false,
291
- tracingEnabled: false,
292
- };
293
- const region = 'sa-east-1';
294
- const updateRequest = yield instrument_1.calculateUpdateRequest(config, settings, region, runtime);
295
- expect(updateRequest).toMatchInlineSnapshot(`
296
- Object {
297
- "Environment": Object {
298
- "Variables": Object {
299
- "DD_FLUSH_TO_LOG": "false",
300
- "DD_LAMBDA_HANDLER": "index.handler",
301
- "DD_MERGE_XRAY_TRACES": "false",
302
- "DD_SITE": "datadoghq.com",
303
- "DD_TRACE_ENABLED": "false",
304
- },
305
- },
306
- "FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:lambda-hello-world",
307
- "Handler": "datadog_lambda.handler.handler",
308
- }
309
- `);
310
- }));
311
- test('calculates an update request with DATADOG_SITE being set to datadoghq.eu', () => __awaiter(void 0, void 0, void 0, function* () {
312
- process.env.DATADOG_SITE = 'datadoghq.eu';
313
- const config = {
314
- FunctionArn: 'arn:aws:lambda:us-east-1:123456789012:function:lambda-hello-world',
315
- Handler: 'index.handler',
316
- Layers: [],
317
- };
318
- const settings = {
319
- flushMetricsToLogs: false,
320
- layerAWSAccount: fixtures_1.mockAwsAccount,
321
- mergeXrayTraces: false,
322
- tracingEnabled: false,
323
- };
324
- const region = 'sa-east-1';
325
- const runtime = 'python3.6';
326
- const updateRequest = yield instrument_1.calculateUpdateRequest(config, settings, region, runtime);
327
- expect(updateRequest).toMatchInlineSnapshot(`
328
- Object {
329
- "Environment": Object {
330
- "Variables": Object {
331
- "DD_FLUSH_TO_LOG": "false",
332
- "DD_LAMBDA_HANDLER": "index.handler",
333
- "DD_MERGE_XRAY_TRACES": "false",
334
- "DD_SITE": "datadoghq.eu",
335
- "DD_TRACE_ENABLED": "false",
336
- },
337
- },
338
- "FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:lambda-hello-world",
339
- "Handler": "datadog_lambda.handler.handler",
340
- }
341
- `);
342
- }));
343
- test('throws an error when an invalid DATADOG_SITE url is given', () => __awaiter(void 0, void 0, void 0, function* () {
344
- process.env.DATADOG_SITE = 'datacathq.eu';
345
- const config = {
346
- FunctionArn: 'arn:aws:lambda:us-east-1:123456789012:function:lambda-hello-world',
347
- Handler: 'index.handler',
348
- Layers: [],
349
- };
350
- const settings = {
351
- flushMetricsToLogs: false,
352
- interactive: false,
353
- layerAWSAccount: fixtures_1.mockAwsAccount,
354
- layerVersion: 5,
355
- mergeXrayTraces: false,
356
- tracingEnabled: false,
357
- };
358
- const region = 'us-east-1';
359
- const runtime = 'python3.6';
360
- let error;
361
- try {
362
- yield instrument_1.calculateUpdateRequest(config, settings, region, runtime);
363
- }
364
- catch (e) {
365
- if (e instanceof Error) {
366
- error = e;
367
- }
368
- }
369
- expect(error === null || error === void 0 ? void 0 : error.message).toBe('Warning: Invalid site URL. Must be either datadoghq.com, datadoghq.eu, us3.datadoghq.com, us5.datadoghq.com, or ddog-gov.com.');
370
- }));
371
- test('throws an error when neither DATADOG_API_KEY nor DATADOG_KMS_API_KEY are given through the environment while using extensionVersion', () => __awaiter(void 0, void 0, void 0, function* () {
372
- const config = {
373
- FunctionArn: 'arn:aws:lambda:us-east-1:123456789012:function:lambda-hello-world',
374
- Handler: 'index.handler',
375
- Layers: [],
376
- };
377
- const settings = {
378
- extensionVersion: 6,
379
- flushMetricsToLogs: false,
380
- layerAWSAccount: fixtures_1.mockAwsAccount,
381
- layerVersion: 5,
382
- mergeXrayTraces: false,
383
- tracingEnabled: false,
384
- };
385
- const region = 'us-east-1';
386
- const runtime = 'python3.6';
387
- let error;
388
- try {
389
- yield instrument_1.calculateUpdateRequest(config, settings, region, runtime);
390
- }
391
- catch (e) {
392
- if (e instanceof Error) {
393
- error = e;
394
- }
395
- }
396
- expect(error === null || error === void 0 ? void 0 : error.message).toBe("When 'extensionLayer' is set, DATADOG_API_KEY, DATADOG_KMS_API_KEY, or DATADOG_API_KEY_SECRET_ARN must also be set");
397
- }));
398
- test('throws error when trying to add `DD_API_KEY_SECRET_ARN` while using sync metrics in a node runtime', () => __awaiter(void 0, void 0, void 0, function* () {
399
- process.env[constants_1.CI_API_KEY_SECRET_ARN_ENV_VAR] = 'some-secret:arn:from:aws';
400
- const runtime = 'nodejs14.x';
401
- const region = 'us-east-1';
402
- const config = {
403
- FunctionArn: 'arn:aws:lambda:us-east-1:123456789012:function:lambda-hello-world',
404
- Handler: 'index.handler',
405
- Layers: [],
406
- Runtime: runtime,
407
- };
408
- const settings = {
409
- flushMetricsToLogs: false,
410
- layerAWSAccount: fixtures_1.mockAwsAccount,
411
- layerVersion: 13,
412
- mergeXrayTraces: false,
413
- tracingEnabled: false,
414
- };
415
- let error;
416
- try {
417
- yield instrument_1.calculateUpdateRequest(config, settings, region, runtime);
418
- }
419
- catch (e) {
420
- if (e instanceof Error) {
421
- error = e;
422
- }
423
- }
424
- expect(error === null || error === void 0 ? void 0 : error.message).toBe('`apiKeySecretArn` is not supported for Node runtimes when using Synchronous Metrics. Use either `apiKey` or `apiKmsKey`.');
425
- }));
426
- describe('test universal instrumentation workflow for Java and .Net', () => {
427
- const region = 'us-east-1';
428
- const config = {
429
- FunctionArn: 'arn:aws:lambda:us-east-1:123456789012:function:lambda-hello-world',
430
- Handler: 'index.handler',
431
- Layers: [],
432
- Runtime: 'runtime',
433
- };
434
- const settings = {
435
- flushMetricsToLogs: false,
436
- layerAWSAccount: fixtures_1.mockAwsAccount,
437
- layerVersion: 13,
438
- mergeXrayTraces: false,
439
- tracingEnabled: false,
440
- };
441
- const dotnetRuntime = 'dotnet6';
442
- const javaRuntime = 'java11';
443
- describe(`test for runtime ${dotnetRuntime}`, () => {
444
- const dotNetConfig = Object.assign(Object.assign({}, config), { Runtime: dotnetRuntime });
445
- const dotNetConfigOnArm86 = Object.assign(Object.assign({}, config), { Runtime: dotnetRuntime, Architectures: ['arm64'] });
446
- test('should throw error when the extension version and trace version are not compatible', () => __awaiter(void 0, void 0, void 0, function* () {
447
- process.env[constants_1.CI_KMS_API_KEY_ENV_VAR] = '5678';
448
- const badSettings = Object.assign(Object.assign({}, settings), { extensionVersion: 24, layerVersion: 3 });
449
- let error;
450
- try {
451
- yield instrument_1.calculateUpdateRequest(dotNetConfig, badSettings, region, dotnetRuntime);
452
- }
453
- catch (e) {
454
- if (e instanceof Error) {
455
- error = e;
456
- }
457
- }
458
- expect(error === null || error === void 0 ? void 0 : error.message).toBe(`For the ${dotnetRuntime} runtime, the dd-trace version 3 is not compatible with the dd-extension version 24`);
459
- }));
460
- test('should throw error if it is running on arm64 with an old dd-extension version', () => __awaiter(void 0, void 0, void 0, function* () {
461
- process.env[constants_1.CI_KMS_API_KEY_ENV_VAR] = '5678';
462
- const curSettings = Object.assign(Object.assign({}, settings), { extensionVersion: 23 });
463
- let error;
464
- try {
465
- yield instrument_1.calculateUpdateRequest(dotNetConfigOnArm86, curSettings, region, dotnetRuntime);
466
- }
467
- catch (e) {
468
- if (e instanceof Error) {
469
- error = e;
470
- }
471
- }
472
- expect(error === null || error === void 0 ? void 0 : error.message).toBe('Instrumenting arm64 architecture is not supported for the given dd-extension version. Please choose the latest dd-extension version or use x86_64 architecture.');
473
- }));
474
- const baseVariables = {
475
- DD_KMS_API_KEY: '5678',
476
- DD_MERGE_XRAY_TRACES: 'false',
477
- DD_SITE: 'datadoghq.com',
478
- DD_TRACE_ENABLED: 'false',
479
- };
480
- const compatibleTracerAndExtension = {
481
- Environment: {
482
- Variables: Object.assign(Object.assign({}, baseVariables), { AWS_LAMBDA_EXEC_WRAPPER: '/opt/datadog_wrapper' }),
483
- },
484
- FunctionName: 'arn:aws:lambda:us-east-1:123456789012:function:lambda-hello-world',
485
- Layers: [
486
- 'arn:aws:lambda:us-east-1:123456789012:layer:Datadog-Extension:25',
487
- 'arn:aws:lambda:us-east-1:123456789012:layer:dd-trace-dotnet:4',
488
- ],
489
- };
490
- const oldExtensionVersion = {
491
- Environment: {
492
- Variables: Object.assign(Object.assign({}, baseVariables), { CORECLR_ENABLE_PROFILING: '1', CORECLR_PROFILER: '{846F5F1C-F9AE-4B07-969E-05C26BC060D8}', CORECLR_PROFILER_PATH: '/opt/datadog/Datadog.Trace.ClrProfiler.Native.so', DD_DOTNET_TRACER_HOME: '/opt/datadog' }),
493
- },
494
- FunctionName: 'arn:aws:lambda:us-east-1:123456789012:function:lambda-hello-world',
495
- Layers: [
496
- 'arn:aws:lambda:us-east-1:123456789012:layer:Datadog-Extension:23',
497
- 'arn:aws:lambda:us-east-1:123456789012:layer:dd-trace-dotnet:2',
498
- ],
499
- };
500
- const traceUndefined = {
501
- Environment: {
502
- Variables: Object.assign(Object.assign({}, baseVariables), { CORECLR_ENABLE_PROFILING: '1', CORECLR_PROFILER: '{846F5F1C-F9AE-4B07-969E-05C26BC060D8}', CORECLR_PROFILER_PATH: '/opt/datadog/Datadog.Trace.ClrProfiler.Native.so', DD_DOTNET_TRACER_HOME: '/opt/datadog' }),
503
- },
504
- FunctionName: 'arn:aws:lambda:us-east-1:123456789012:function:lambda-hello-world',
505
- Layers: ['arn:aws:lambda:us-east-1:123456789012:layer:Datadog-Extension:15'],
506
- };
507
- test.each `
508
- extensionVersion | traceVersion | outputResult
509
- ${25} | ${4} | ${compatibleTracerAndExtension}
510
- ${23} | ${2} | ${oldExtensionVersion}
511
- ${15} | ${undefined} | ${traceUndefined}
512
- `('should the output match the expected if extensionVersion=$extensionVersion and traceVersion=$traceVersion', ({ extensionVersion, traceVersion, outputResult }) => __awaiter(void 0, void 0, void 0, function* () {
513
- const curSettings = Object.assign(Object.assign({}, settings), { extensionVersion, layerVersion: traceVersion });
514
- process.env[constants_1.CI_KMS_API_KEY_ENV_VAR] = '5678';
515
- const updateRequest = yield instrument_1.calculateUpdateRequest(dotNetConfig, curSettings, region, dotnetRuntime);
516
- expect(updateRequest).toEqual(outputResult);
517
- }));
518
- });
519
- describe(`test for runtime ${javaRuntime}`, () => {
520
- const javaConfig = Object.assign(Object.assign({}, config), { Runtime: javaRuntime });
521
- test('should throw error when the extension version and trace version are not compatible', () => __awaiter(void 0, void 0, void 0, function* () {
522
- process.env[constants_1.CI_KMS_API_KEY_ENV_VAR] = '5678';
523
- const badSettings = Object.assign(Object.assign({}, settings), { extensionVersion: 24, layerVersion: 4 });
524
- let error;
525
- try {
526
- yield instrument_1.calculateUpdateRequest(javaConfig, badSettings, region, javaRuntime);
527
- }
528
- catch (e) {
529
- if (e instanceof Error) {
530
- error = e;
531
- }
532
- }
533
- expect(error === null || error === void 0 ? void 0 : error.message).toBe(`For the ${javaRuntime} runtime, the dd-trace version 4 is not compatible with the dd-extension version 24`);
534
- }));
535
- const baseVariables = {
536
- DD_KMS_API_KEY: '5678',
537
- DD_MERGE_XRAY_TRACES: 'false',
538
- DD_SITE: 'datadoghq.com',
539
- DD_TRACE_ENABLED: 'false',
540
- };
541
- const compatibleTracerAndExtension = {
542
- Environment: {
543
- Variables: Object.assign(Object.assign({}, baseVariables), { AWS_LAMBDA_EXEC_WRAPPER: '/opt/datadog_wrapper' }),
544
- },
545
- FunctionName: 'arn:aws:lambda:us-east-1:123456789012:function:lambda-hello-world',
546
- Layers: [
547
- 'arn:aws:lambda:us-east-1:123456789012:layer:Datadog-Extension:25',
548
- 'arn:aws:lambda:us-east-1:123456789012:layer:dd-trace-java:5',
549
- ],
550
- };
551
- const oldExtensionVersion = {
552
- Environment: {
553
- Variables: Object.assign({}, baseVariables),
554
- },
555
- FunctionName: 'arn:aws:lambda:us-east-1:123456789012:function:lambda-hello-world',
556
- Layers: [
557
- 'arn:aws:lambda:us-east-1:123456789012:layer:Datadog-Extension:23',
558
- 'arn:aws:lambda:us-east-1:123456789012:layer:dd-trace-java:2',
559
- ],
560
- };
561
- const traceUndefined = {
562
- Environment: {
563
- Variables: Object.assign({}, baseVariables),
564
- },
565
- FunctionName: 'arn:aws:lambda:us-east-1:123456789012:function:lambda-hello-world',
566
- Layers: ['arn:aws:lambda:us-east-1:123456789012:layer:Datadog-Extension:15'],
567
- };
568
- test.each `
569
- extensionVersion | traceVersion | outputResult
570
- ${25} | ${5} | ${compatibleTracerAndExtension}
571
- ${23} | ${2} | ${oldExtensionVersion}
572
- ${15} | ${undefined} | ${traceUndefined}
573
- `('should the output match the expected if extensionVersion=$extensionVersion and traceVersion=$traceVersion', ({ extensionVersion, traceVersion, outputResult }) => __awaiter(void 0, void 0, void 0, function* () {
574
- const curSettings = Object.assign(Object.assign({}, settings), { extensionVersion, layerVersion: traceVersion });
575
- process.env[constants_1.CI_KMS_API_KEY_ENV_VAR] = '5678';
576
- const updateRequest = yield instrument_1.calculateUpdateRequest(javaConfig, curSettings, region, javaRuntime);
577
- expect(updateRequest).toEqual(outputResult);
578
- }));
579
- });
580
- });
581
- });
582
- });
583
- //# sourceMappingURL=instrument.part2.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"instrument.part2.test.js","sourceRoot":"","sources":["../../../../../src/commands/lambda/__tests__/functions/instrument.part2.test.ts"],"names":[],"mappings":"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"}