@datadog/datadog-ci-base 5.7.0 → 5.9.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 (204) hide show
  1. package/dist/cli.d.ts +13 -1
  2. package/dist/cli.js +76 -33
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/aas/common.d.ts +13 -2
  5. package/dist/commands/aas/common.js +46 -24
  6. package/dist/commands/aas/common.js.map +1 -1
  7. package/dist/commands/aas/instrument.js +1 -1
  8. package/dist/commands/aas/instrument.js.map +1 -1
  9. package/dist/commands/aas/uninstrument.js +1 -1
  10. package/dist/commands/aas/uninstrument.js.map +1 -1
  11. package/dist/commands/ci-env/cli.d.ts +2 -0
  12. package/dist/commands/ci-env/cli.js +10 -0
  13. package/dist/commands/ci-env/cli.js.map +1 -0
  14. package/dist/commands/ci-env/read.d.ts +7 -0
  15. package/dist/commands/ci-env/read.js +176 -0
  16. package/dist/commands/ci-env/read.js.map +1 -0
  17. package/dist/commands/cloud-run/constants.js +1 -2
  18. package/dist/commands/cloud-run/constants.js.map +1 -1
  19. package/dist/commands/container-app/common.js +10 -11
  20. package/dist/commands/container-app/common.js.map +1 -1
  21. package/dist/commands/coverage/upload.d.ts +2 -0
  22. package/dist/commands/coverage/upload.js +6 -0
  23. package/dist/commands/coverage/upload.js.map +1 -1
  24. package/dist/commands/elf-symbols/cli.d.ts +2 -0
  25. package/dist/commands/elf-symbols/cli.js +10 -0
  26. package/dist/commands/elf-symbols/cli.js.map +1 -0
  27. package/dist/commands/elf-symbols/elf-constants.d.ts +256 -0
  28. package/dist/commands/elf-symbols/elf-constants.js +465 -0
  29. package/dist/commands/elf-symbols/elf-constants.js.map +1 -0
  30. package/dist/commands/elf-symbols/elf.d.ts +105 -0
  31. package/dist/commands/elf-symbols/elf.js +431 -0
  32. package/dist/commands/elf-symbols/elf.js.map +1 -0
  33. package/dist/commands/elf-symbols/helpers.d.ts +4 -0
  34. package/dist/commands/elf-symbols/helpers.js +29 -0
  35. package/dist/commands/elf-symbols/helpers.js.map +1 -0
  36. package/dist/commands/elf-symbols/interfaces.d.ts +18 -0
  37. package/dist/commands/elf-symbols/interfaces.js +7 -0
  38. package/dist/commands/elf-symbols/interfaces.js.map +1 -0
  39. package/dist/commands/elf-symbols/renderer.d.ts +19 -0
  40. package/dist/commands/elf-symbols/renderer.js +87 -0
  41. package/dist/commands/elf-symbols/renderer.js.map +1 -0
  42. package/dist/commands/elf-symbols/upload.d.ts +31 -0
  43. package/dist/commands/elf-symbols/upload.js +412 -0
  44. package/dist/commands/elf-symbols/upload.js.map +1 -0
  45. package/dist/commands/flutter-symbols/cli.d.ts +2 -0
  46. package/dist/commands/flutter-symbols/cli.js +10 -0
  47. package/dist/commands/flutter-symbols/cli.js.map +1 -0
  48. package/dist/commands/flutter-symbols/helpers.d.ts +8 -0
  49. package/dist/commands/flutter-symbols/helpers.js +51 -0
  50. package/dist/commands/flutter-symbols/helpers.js.map +1 -0
  51. package/dist/commands/flutter-symbols/interfaces.d.ts +17 -0
  52. package/dist/commands/flutter-symbols/interfaces.js +10 -0
  53. package/dist/commands/flutter-symbols/interfaces.js.map +1 -0
  54. package/dist/commands/flutter-symbols/renderer.d.ts +23 -0
  55. package/dist/commands/flutter-symbols/renderer.js +106 -0
  56. package/dist/commands/flutter-symbols/renderer.js.map +1 -0
  57. package/dist/commands/flutter-symbols/upload.d.ts +44 -0
  58. package/dist/commands/flutter-symbols/upload.js +510 -0
  59. package/dist/commands/flutter-symbols/upload.js.map +1 -0
  60. package/dist/commands/lambda/cli.d.ts +2 -1
  61. package/dist/commands/lambda/cli.js +2 -0
  62. package/dist/commands/lambda/cli.js.map +1 -1
  63. package/dist/commands/lambda/cloudwatch.d.ts +15 -0
  64. package/dist/commands/lambda/cloudwatch.js +77 -0
  65. package/dist/commands/lambda/cloudwatch.js.map +1 -0
  66. package/dist/commands/measure/cli.d.ts +2 -0
  67. package/dist/commands/measure/cli.js +10 -0
  68. package/dist/commands/measure/cli.js.map +1 -0
  69. package/dist/commands/measure/measure.d.ts +18 -0
  70. package/dist/commands/measure/measure.js +171 -0
  71. package/dist/commands/measure/measure.js.map +1 -0
  72. package/dist/commands/pe-symbols/breakpad.d.ts +2 -0
  73. package/dist/commands/pe-symbols/breakpad.js +159 -0
  74. package/dist/commands/pe-symbols/breakpad.js.map +1 -0
  75. package/dist/commands/pe-symbols/cli.d.ts +2 -0
  76. package/dist/commands/pe-symbols/cli.js +10 -0
  77. package/dist/commands/pe-symbols/cli.js.map +1 -0
  78. package/dist/commands/pe-symbols/helpers.d.ts +4 -0
  79. package/dist/commands/pe-symbols/helpers.js +30 -0
  80. package/dist/commands/pe-symbols/helpers.js.map +1 -0
  81. package/dist/commands/pe-symbols/interfaces.d.ts +17 -0
  82. package/dist/commands/pe-symbols/interfaces.js +7 -0
  83. package/dist/commands/pe-symbols/interfaces.js.map +1 -0
  84. package/dist/commands/pe-symbols/pe-constants.d.ts +51 -0
  85. package/dist/commands/pe-symbols/pe-constants.js +160 -0
  86. package/dist/commands/pe-symbols/pe-constants.js.map +1 -0
  87. package/dist/commands/pe-symbols/pe.d.ts +40 -0
  88. package/dist/commands/pe-symbols/pe.js +249 -0
  89. package/dist/commands/pe-symbols/pe.js.map +1 -0
  90. package/dist/commands/pe-symbols/renderer.d.ts +19 -0
  91. package/dist/commands/pe-symbols/renderer.js +87 -0
  92. package/dist/commands/pe-symbols/renderer.js.map +1 -0
  93. package/dist/commands/pe-symbols/upload.d.ts +34 -0
  94. package/dist/commands/pe-symbols/upload.js +457 -0
  95. package/dist/commands/pe-symbols/upload.js.map +1 -0
  96. package/dist/commands/react-native/cli.d.ts +5 -0
  97. package/dist/commands/react-native/cli.js +16 -0
  98. package/dist/commands/react-native/cli.js.map +1 -0
  99. package/dist/commands/react-native/codepush.d.ts +29 -0
  100. package/dist/commands/react-native/codepush.js +176 -0
  101. package/dist/commands/react-native/codepush.js.map +1 -0
  102. package/dist/commands/react-native/errors.d.ts +9 -0
  103. package/dist/commands/react-native/errors.js +34 -0
  104. package/dist/commands/react-native/errors.js.map +1 -0
  105. package/dist/commands/react-native/injectDebugId.d.ts +42 -0
  106. package/dist/commands/react-native/injectDebugId.js +252 -0
  107. package/dist/commands/react-native/injectDebugId.js.map +1 -0
  108. package/dist/commands/react-native/interfaces.d.ts +20 -0
  109. package/dist/commands/react-native/interfaces.js +93 -0
  110. package/dist/commands/react-native/interfaces.js.map +1 -0
  111. package/dist/commands/react-native/renderer.d.ts +20 -0
  112. package/dist/commands/react-native/renderer.js +111 -0
  113. package/dist/commands/react-native/renderer.js.map +1 -0
  114. package/dist/commands/react-native/upload.d.ts +30 -0
  115. package/dist/commands/react-native/upload.js +317 -0
  116. package/dist/commands/react-native/upload.js.map +1 -0
  117. package/dist/commands/react-native/utils.d.ts +4 -0
  118. package/dist/commands/react-native/utils.js +35 -0
  119. package/dist/commands/react-native/utils.js.map +1 -0
  120. package/dist/commands/react-native/validation.d.ts +6 -0
  121. package/dist/commands/react-native/validation.js +24 -0
  122. package/dist/commands/react-native/validation.js.map +1 -0
  123. package/dist/commands/react-native/xcode.d.ts +58 -0
  124. package/dist/commands/react-native/xcode.js +561 -0
  125. package/dist/commands/react-native/xcode.js.map +1 -0
  126. package/dist/commands/sourcemaps/cli.d.ts +2 -0
  127. package/dist/commands/sourcemaps/cli.js +10 -0
  128. package/dist/commands/sourcemaps/cli.js.map +1 -0
  129. package/dist/commands/sourcemaps/interfaces.d.ts +18 -0
  130. package/dist/commands/sourcemaps/interfaces.js +59 -0
  131. package/dist/commands/sourcemaps/interfaces.js.map +1 -0
  132. package/dist/commands/sourcemaps/renderer.d.ts +13 -0
  133. package/dist/commands/sourcemaps/renderer.js +93 -0
  134. package/dist/commands/sourcemaps/renderer.js.map +1 -0
  135. package/dist/commands/sourcemaps/upload.d.ts +29 -0
  136. package/dist/commands/sourcemaps/upload.js +342 -0
  137. package/dist/commands/sourcemaps/upload.js.map +1 -0
  138. package/dist/commands/sourcemaps/utils.d.ts +3 -0
  139. package/dist/commands/sourcemaps/utils.js +73 -0
  140. package/dist/commands/sourcemaps/utils.js.map +1 -0
  141. package/dist/commands/sourcemaps/validation.d.ts +7 -0
  142. package/dist/commands/sourcemaps/validation.js +41 -0
  143. package/dist/commands/sourcemaps/validation.js.map +1 -0
  144. package/dist/commands/span/cli.d.ts +2 -0
  145. package/dist/commands/span/cli.js +10 -0
  146. package/dist/commands/span/cli.js.map +1 -0
  147. package/dist/commands/span/span.d.ts +10 -0
  148. package/dist/commands/span/span.js +112 -0
  149. package/dist/commands/span/span.js.map +1 -0
  150. package/dist/commands/terraform/cli.d.ts +2 -0
  151. package/dist/commands/terraform/cli.js +10 -0
  152. package/dist/commands/terraform/cli.js.map +1 -0
  153. package/dist/commands/terraform/upload.d.ts +14 -0
  154. package/dist/commands/terraform/upload.js +93 -0
  155. package/dist/commands/terraform/upload.js.map +1 -0
  156. package/dist/commands/trace/api.d.ts +6 -0
  157. package/dist/commands/trace/api.js +38 -0
  158. package/dist/commands/trace/api.js.map +1 -0
  159. package/dist/commands/trace/cli.d.ts +2 -0
  160. package/dist/commands/trace/cli.js +10 -0
  161. package/dist/commands/trace/cli.js.map +1 -0
  162. package/dist/commands/trace/helper.d.ts +16 -0
  163. package/dist/commands/trace/helper.js +125 -0
  164. package/dist/commands/trace/helper.js.map +1 -0
  165. package/dist/commands/trace/interfaces.d.ts +18 -0
  166. package/dist/commands/trace/interfaces.js +14 -0
  167. package/dist/commands/trace/interfaces.js.map +1 -0
  168. package/dist/commands/trace/test-utils.d.ts +4 -0
  169. package/dist/commands/trace/test-utils.js +156 -0
  170. package/dist/commands/trace/test-utils.js.map +1 -0
  171. package/dist/commands/trace/trace.d.ts +10 -0
  172. package/dist/commands/trace/trace.js +110 -0
  173. package/dist/commands/trace/trace.js.map +1 -0
  174. package/dist/commands/unity-symbols/cli.d.ts +2 -0
  175. package/dist/commands/unity-symbols/cli.js +10 -0
  176. package/dist/commands/unity-symbols/cli.js.map +1 -0
  177. package/dist/commands/unity-symbols/helpers.d.ts +4 -0
  178. package/dist/commands/unity-symbols/helpers.js +29 -0
  179. package/dist/commands/unity-symbols/helpers.js.map +1 -0
  180. package/dist/commands/unity-symbols/interfaces.d.ts +14 -0
  181. package/dist/commands/unity-symbols/interfaces.js +9 -0
  182. package/dist/commands/unity-symbols/interfaces.js.map +1 -0
  183. package/dist/commands/unity-symbols/renderer.d.ts +19 -0
  184. package/dist/commands/unity-symbols/renderer.js +88 -0
  185. package/dist/commands/unity-symbols/renderer.js.map +1 -0
  186. package/dist/commands/unity-symbols/upload.d.ts +32 -0
  187. package/dist/commands/unity-symbols/upload.js +392 -0
  188. package/dist/commands/unity-symbols/upload.js.map +1 -0
  189. package/dist/commands/version/cli.d.ts +2 -0
  190. package/dist/commands/version/cli.js +10 -0
  191. package/dist/commands/version/cli.js.map +1 -0
  192. package/dist/commands/version/version.d.ts +6 -0
  193. package/dist/commands/version/version.js +31 -0
  194. package/dist/commands/version/version.js.map +1 -0
  195. package/dist/helpers/ci.js +50 -5
  196. package/dist/helpers/ci.js.map +1 -1
  197. package/dist/helpers/plugin.js +1 -1
  198. package/dist/helpers/plugin.js.map +1 -1
  199. package/dist/helpers/serverless/azure.d.ts +2 -0
  200. package/dist/helpers/serverless/azure.js +3 -3
  201. package/dist/helpers/serverless/azure.js.map +1 -1
  202. package/dist/helpers/serverless/lambda-layer-versions.d.ts +3 -3
  203. package/dist/helpers/serverless/lambda-layer-versions.js +3 -3
  204. package/package.json +23 -17
@@ -0,0 +1,392 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ var __importDefault = (this && this.__importDefault) || function (mod) {
35
+ return (mod && mod.__esModule) ? mod : { "default": mod };
36
+ };
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ exports.UnitySymbolsUploadCommand = void 0;
39
+ const fs_1 = __importDefault(require("fs"));
40
+ const clipanion_1 = require("clipanion");
41
+ const upath_1 = __importDefault(require("upath"));
42
+ const datadog_ci_base_1 = require("@datadog/datadog-ci-base");
43
+ const upload_1 = require("@datadog/datadog-ci-base/commands/dsyms/upload");
44
+ const utils_1 = require("@datadog/datadog-ci-base/commands/dsyms/utils");
45
+ const constants_1 = require("@datadog/datadog-ci-base/constants");
46
+ const apikey_1 = require("@datadog/datadog-ci-base/helpers/apikey");
47
+ const concurrency_1 = require("@datadog/datadog-ci-base/helpers/concurrency");
48
+ const env_1 = require("@datadog/datadog-ci-base/helpers/env");
49
+ const fips_1 = require("@datadog/datadog-ci-base/helpers/fips");
50
+ const format_git_sourcemaps_data_1 = require("@datadog/datadog-ci-base/helpers/git/format-git-sourcemaps-data");
51
+ const glob_1 = require("@datadog/datadog-ci-base/helpers/glob");
52
+ const metrics_1 = require("@datadog/datadog-ci-base/helpers/metrics");
53
+ const upload_2 = require("@datadog/datadog-ci-base/helpers/upload");
54
+ const utils_2 = require("@datadog/datadog-ci-base/helpers/utils");
55
+ const validation = __importStar(require("@datadog/datadog-ci-base/helpers/validation"));
56
+ const validation_1 = require("@datadog/datadog-ci-base/helpers/validation");
57
+ const version_1 = require("@datadog/datadog-ci-base/version");
58
+ const elf = __importStar(require("../elf-symbols/elf"));
59
+ const helpers_1 = require("./helpers");
60
+ const interfaces_1 = require("./interfaces");
61
+ const renderer_1 = require("./renderer");
62
+ class UnitySymbolsUploadCommand extends datadog_ci_base_1.BaseCommand {
63
+ constructor() {
64
+ var _a, _b;
65
+ super(...arguments);
66
+ this.disableGit = clipanion_1.Option.Boolean('--disable-git', false);
67
+ this.dryRun = clipanion_1.Option.Boolean('--dry-run', false);
68
+ this.configPath = clipanion_1.Option.String('--config');
69
+ this.maxConcurrency = clipanion_1.Option.String('--max-concurrency', '20', { validator: validation.isInteger() });
70
+ this.repositoryUrl = clipanion_1.Option.String('--repository-url');
71
+ this.symbolsLocation = clipanion_1.Option.String('--symbols-location', undefined);
72
+ this.android = clipanion_1.Option.Boolean('--android', false);
73
+ this.ios = clipanion_1.Option.Boolean('--ios', false);
74
+ this.skipIl2Cpp = clipanion_1.Option.Boolean('--skip-il2cpp', false);
75
+ this.cliVersion = version_1.cliVersion;
76
+ this.config = {
77
+ datadogSite: 'datadoghq.com',
78
+ };
79
+ this.fips = clipanion_1.Option.Boolean('--fips', false);
80
+ this.fipsIgnoreError = clipanion_1.Option.Boolean('--fips-ignore-error', false);
81
+ this.fipsConfig = {
82
+ fips: (_a = (0, env_1.toBoolean)(process.env[constants_1.FIPS_ENV_VAR])) !== null && _a !== void 0 ? _a : false,
83
+ fipsIgnoreError: (_b = (0, env_1.toBoolean)(process.env[constants_1.FIPS_IGNORE_ERROR_ENV_VAR])) !== null && _b !== void 0 ? _b : false,
84
+ };
85
+ }
86
+ execute() {
87
+ return __awaiter(this, void 0, void 0, function* () {
88
+ (0, fips_1.enableFips)(this.fips || this.fipsConfig.fips, this.fipsIgnoreError || this.fipsConfig.fipsIgnoreError);
89
+ if (!(yield this.verifyParameters())) {
90
+ return 1;
91
+ }
92
+ const initialTime = Date.now();
93
+ this.context.stdout.write((0, renderer_1.renderCommandInfo)(this.dryRun, this.buildId, this.symbolsLocation));
94
+ this.config = yield (0, utils_2.resolveConfigFromFileAndEnvironment)(this.config, {
95
+ apiKey: process.env.DATADOG_API_KEY || process.env.DD_API_KEY,
96
+ datadogSite: process.env.DATADOG_SITE || process.env.DD_SITE,
97
+ }, {
98
+ configPath: this.configPath,
99
+ defaultConfigPaths: utils_2.DEFAULT_CONFIG_PATHS,
100
+ configFromFileCallback: (configFromFile) => {
101
+ (0, validation_1.checkAPIKeyOverride)(process.env.DATADOG_API_KEY || process.env.DD_API_KEY, configFromFile.apiKey, this.context.stdout);
102
+ },
103
+ });
104
+ if (!this.disableGit) {
105
+ this.gitData = yield this.getGitMetadata();
106
+ }
107
+ const callResults = [];
108
+ try {
109
+ if (this.ios) {
110
+ callResults.push(yield this.performDsymUpload());
111
+ }
112
+ else if (this.android) {
113
+ callResults.push(...(yield this.performSoUpload()));
114
+ }
115
+ if (!this.skipIl2Cpp) {
116
+ callResults.push(yield this.performIl2CppMappingUpload());
117
+ }
118
+ const totalTime = (Date.now() - initialTime) / 1000;
119
+ this.context.stdout.write((0, renderer_1.renderCommandSummary)(callResults, totalTime, this.dryRun));
120
+ }
121
+ catch (e) {
122
+ this.context.stderr.write((0, renderer_1.renderGeneralizedError)(e));
123
+ return 1;
124
+ }
125
+ return 0;
126
+ });
127
+ }
128
+ getApiKeyValidator(metricsLogger) {
129
+ return (0, apikey_1.newApiKeyValidator)({
130
+ apiKey: this.config.apiKey,
131
+ datadogSite: this.config.datadogSite,
132
+ metricsLogger: metricsLogger.logger,
133
+ });
134
+ }
135
+ getGitDataPayload(gitData) {
136
+ const files = gitData.trackedFilesMatcher.rawTrackedFilesList();
137
+ const repoPayload = {
138
+ data: [
139
+ {
140
+ files,
141
+ hash: gitData.hash,
142
+ repository_url: gitData.remote,
143
+ },
144
+ ],
145
+ version: 1,
146
+ };
147
+ return {
148
+ type: 'string',
149
+ options: { filename: 'repository', contentType: 'application/json' },
150
+ value: JSON.stringify(repoPayload),
151
+ };
152
+ }
153
+ getGitMetadata() {
154
+ return __awaiter(this, void 0, void 0, function* () {
155
+ try {
156
+ return yield (0, format_git_sourcemaps_data_1.getRepositoryData)(yield (0, format_git_sourcemaps_data_1.newSimpleGit)(), this.repositoryUrl);
157
+ }
158
+ catch (e) {
159
+ this.context.stdout.write((0, renderer_1.renderGitWarning)(e));
160
+ }
161
+ return undefined;
162
+ });
163
+ }
164
+ getMappingMetadata(type, arch) {
165
+ var _a, _b;
166
+ return {
167
+ arch,
168
+ cli_version: this.cliVersion,
169
+ git_commit_sha: (_a = this.gitData) === null || _a === void 0 ? void 0 : _a.hash,
170
+ git_repository_url: (_b = this.gitData) === null || _b === void 0 ? void 0 : _b.remote,
171
+ build_id: this.buildId,
172
+ type,
173
+ };
174
+ }
175
+ getMetricsLogger(tags) {
176
+ const metricsLogger = (0, metrics_1.getMetricsLogger)({
177
+ apiKey: this.config.apiKey,
178
+ datadogSite: this.config.datadogSite,
179
+ defaultTags: [`cli_version:${this.cliVersion}`, 'platform:unity', ...tags],
180
+ prefix: 'datadog.ci.symbols.upload.',
181
+ });
182
+ return metricsLogger;
183
+ }
184
+ performDsymUpload() {
185
+ return __awaiter(this, void 0, void 0, function* () {
186
+ const dsymUploadCommand = ['dsyms', 'upload', this.symbolsLocation];
187
+ dsymUploadCommand.push('--max-concurrency');
188
+ dsymUploadCommand.push(`${this.maxConcurrency}`);
189
+ if (this.dryRun) {
190
+ dsymUploadCommand.push('--dry-run');
191
+ }
192
+ const exitCode = yield (0, utils_2.performSubCommand)(upload_1.DsymsUploadCommand, dsymUploadCommand, this.context);
193
+ if (exitCode && exitCode !== 0) {
194
+ return upload_2.UploadStatus.Failure;
195
+ }
196
+ return upload_2.UploadStatus.Success;
197
+ });
198
+ }
199
+ getBuildId() {
200
+ var _a;
201
+ return __awaiter(this, void 0, void 0, function* () {
202
+ const buildIdPath = upath_1.default.join(this.symbolsLocation, 'build_id');
203
+ if (!fs_1.default.existsSync(buildIdPath)) {
204
+ this.context.stderr.write((0, renderer_1.renderMissingBuildId)(buildIdPath));
205
+ return 1;
206
+ }
207
+ this.buildId = (_a = fs_1.default.readFileSync(buildIdPath)) === null || _a === void 0 ? void 0 : _a.toString();
208
+ if (!this.buildId) {
209
+ this.context.stderr.write((0, renderer_1.renderMissingBuildId)(buildIdPath));
210
+ return 1;
211
+ }
212
+ return 0;
213
+ });
214
+ }
215
+ performSoUpload() {
216
+ return __awaiter(this, void 0, void 0, function* () {
217
+ const metricsLogger = this.getMetricsLogger(['platform:unity']);
218
+ const apiKeyValidator = this.getApiKeyValidator(metricsLogger);
219
+ const soFiles = (0, glob_1.globSync)((0, utils_2.buildPath)(this.symbolsLocation, '**/*.so'));
220
+ this.context.stdout.write(`${soFiles}`);
221
+ const tmpDirectory = yield (0, utils_1.createUniqueTmpDirectory)();
222
+ const requestBuilder = (0, helpers_1.getUnityRequestBuilder)(this.config.apiKey, this.cliVersion, this.config.datadogSite);
223
+ try {
224
+ const results = yield (0, concurrency_1.doWithMaxConcurrency)(this.maxConcurrency, soFiles, (soFileName) => __awaiter(this, void 0, void 0, function* () {
225
+ const elfMetadata = yield elf.getElfFileMetadata(soFileName);
226
+ if (this.dryRun) {
227
+ this.context.stdout.write(`[DRYRUN] ${(0, renderer_1.renderUpload)(`Symbol File (${elfMetadata.arch})`, soFileName)}`);
228
+ return upload_2.UploadStatus.Success;
229
+ }
230
+ const tempDir = (0, utils_2.buildPath)(tmpDirectory, elfMetadata.arch);
231
+ const tempFilePath = (0, utils_2.buildPath)(tempDir, upath_1.default.basename(soFileName));
232
+ if (!fs_1.default.existsSync(tempDir)) {
233
+ fs_1.default.mkdirSync(tempDir);
234
+ }
235
+ yield elf.copyElfDebugInfo(soFileName, tempFilePath, elfMetadata, true);
236
+ const metadata = this.getMappingMetadata(interfaces_1.TYPE_NDK_SYMBOL_FILE, elfMetadata.arch);
237
+ const baseFilename = upath_1.default.basename(soFileName);
238
+ this.context.stdout.write(`[] ${tempFilePath}\n`);
239
+ const payload = {
240
+ content: new Map([
241
+ [
242
+ 'event',
243
+ {
244
+ type: 'string',
245
+ value: JSON.stringify(metadata),
246
+ options: { filename: 'event', contentType: 'application/json' },
247
+ },
248
+ ],
249
+ [interfaces_1.VALUE_NAME_NDK_SYMBOL_FILE, { type: 'file', path: tempFilePath, options: { filename: baseFilename } }],
250
+ ]),
251
+ };
252
+ if (this.gitData !== undefined) {
253
+ payload.content.set('repository', this.getGitDataPayload(this.gitData));
254
+ }
255
+ return (0, helpers_1.uploadMultipartHelper)(requestBuilder, payload, {
256
+ apiKeyValidator,
257
+ onError: (e) => {
258
+ this.context.stdout.write((0, renderer_1.renderFailedUpload)(soFileName, e.message));
259
+ metricsLogger.logger.increment('failed', 1);
260
+ },
261
+ onRetry: (e, attempts) => {
262
+ this.context.stdout.write((0, renderer_1.renderRetriedUpload)(soFileName, e.message, attempts));
263
+ metricsLogger.logger.increment('retries', 1);
264
+ },
265
+ onUpload: () => {
266
+ this.context.stdout.write((0, renderer_1.renderUpload)(`Symbol File (${elfMetadata.arch})`, soFileName));
267
+ },
268
+ retries: 5,
269
+ useGzip: true,
270
+ });
271
+ }));
272
+ return results;
273
+ }
274
+ catch (error) {
275
+ this.context.stdout.write(`ERROR: ${error}`);
276
+ }
277
+ finally {
278
+ try {
279
+ yield metricsLogger.flush();
280
+ }
281
+ catch (err) {
282
+ this.context.stdout.write(`WARN: ${err}\n`);
283
+ }
284
+ }
285
+ return [];
286
+ });
287
+ }
288
+ performIl2CppMappingUpload() {
289
+ return __awaiter(this, void 0, void 0, function* () {
290
+ const il2cppMappingPath = upath_1.default.join(this.symbolsLocation, 'LineNumberMappings.json');
291
+ if (!fs_1.default.existsSync(il2cppMappingPath)) {
292
+ this.context.stderr.write((0, renderer_1.renderMissingIL2CPPMappingFile)(il2cppMappingPath));
293
+ return 1;
294
+ }
295
+ const metricsLogger = this.getMetricsLogger(['platform:unity']);
296
+ const apiKeyValidator = this.getApiKeyValidator(metricsLogger);
297
+ const requestBuilder = (0, helpers_1.getUnityRequestBuilder)(this.config.apiKey, this.cliVersion, this.config.datadogSite);
298
+ if (this.dryRun) {
299
+ this.context.stdout.write(`[DRYRUN] ${(0, renderer_1.renderUpload)('IL2CPP Mapping File', il2cppMappingPath)}`);
300
+ return upload_2.UploadStatus.Skipped;
301
+ }
302
+ const metadata = this.getMappingMetadata(interfaces_1.TYPE_IL2CPP_MAPPING);
303
+ const payload = {
304
+ content: new Map([
305
+ [
306
+ 'event',
307
+ {
308
+ type: 'string',
309
+ value: JSON.stringify(metadata),
310
+ options: { filename: 'event', contentType: 'application/json' },
311
+ },
312
+ ],
313
+ [
314
+ interfaces_1.VALUE_NAME_IL2CPP_MAPPING,
315
+ { type: 'file', path: il2cppMappingPath, options: { filename: interfaces_1.IL2CPP_MAPPING_FILE_NAME } },
316
+ ],
317
+ ]),
318
+ };
319
+ if (this.gitData !== undefined) {
320
+ payload.content.set('repository', this.getGitDataPayload(this.gitData));
321
+ }
322
+ const status = yield (0, helpers_1.uploadMultipartHelper)(requestBuilder, payload, {
323
+ apiKeyValidator,
324
+ onError: (e) => {
325
+ this.context.stdout.write((0, renderer_1.renderFailedUpload)(il2cppMappingPath, e.message));
326
+ metricsLogger.logger.increment('failed', 1);
327
+ },
328
+ onRetry: (e, attempts) => {
329
+ this.context.stdout.write((0, renderer_1.renderRetriedUpload)(il2cppMappingPath, e.message, attempts));
330
+ metricsLogger.logger.increment('retries', 1);
331
+ },
332
+ onUpload: () => {
333
+ this.context.stdout.write((0, renderer_1.renderUpload)('IL2CPP Mapping File', il2cppMappingPath));
334
+ },
335
+ retries: 5,
336
+ useGzip: true,
337
+ });
338
+ if (status === upload_2.UploadStatus.Success) {
339
+ this.context.stdout.write('IL2CPP Mapping upload finished\n');
340
+ }
341
+ else {
342
+ this.context.stdout.write(`IL2CPP Mapping upload failed\n`);
343
+ }
344
+ return status;
345
+ });
346
+ }
347
+ verifyParameters() {
348
+ return __awaiter(this, void 0, void 0, function* () {
349
+ let parametersOkay = true;
350
+ if (!this.ios && !this.android) {
351
+ this.context.stderr.write((0, renderer_1.renderMustSupplyPlatform)());
352
+ return false;
353
+ }
354
+ if (this.ios && this.android) {
355
+ this.context.stderr.write((0, renderer_1.renderUseOnlyOnePlatform)());
356
+ return false;
357
+ }
358
+ if (this.symbolsLocation === undefined) {
359
+ if (this.ios) {
360
+ this.symbolsLocation = './datadogSymbols';
361
+ }
362
+ else if (this.android) {
363
+ this.symbolsLocation = './unityLibrary/symbols';
364
+ }
365
+ }
366
+ if (!this.symbolsLocation) {
367
+ this.context.stderr.write((0, renderer_1.renderArgumentMissingError)('symbols-location'));
368
+ parametersOkay = false;
369
+ }
370
+ else if (!fs_1.default.existsSync(this.symbolsLocation)) {
371
+ this.context.stderr.write((0, renderer_1.renderMissingDir)(this.symbolsLocation));
372
+ return false;
373
+ }
374
+ if (yield this.getBuildId()) {
375
+ parametersOkay = false;
376
+ }
377
+ return parametersOkay;
378
+ });
379
+ }
380
+ }
381
+ exports.UnitySymbolsUploadCommand = UnitySymbolsUploadCommand;
382
+ UnitySymbolsUploadCommand.paths = [['unity-symbols', 'upload']];
383
+ UnitySymbolsUploadCommand.usage = clipanion_1.Command.Usage({
384
+ category: 'RUM',
385
+ description: 'Upload Unity symbol files to Datadog.',
386
+ details: `
387
+ This command will upload all iOS symbol files for Unity applications in order to symbolicate errors and
388
+ crash reports received by Datadog. This includes uploading dSYMs and IL2CPP mapping files.
389
+ `,
390
+ examples: [['Upload all symbol files from the default location', 'datadog-ci unity-symbols upload']],
391
+ });
392
+ //# sourceMappingURL=upload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload.js","sourceRoot":"","sources":["../../../src/commands/unity-symbols/upload.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { VersionCommand } from './version';
2
+ export declare const commands: (typeof VersionCommand)[];
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.commands = void 0;
4
+ /* eslint-disable import-x/order */
5
+ const version_1 = require("./version");
6
+ // prettier-ignore
7
+ exports.commands = [
8
+ version_1.VersionCommand,
9
+ ];
10
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/commands/version/cli.ts"],"names":[],"mappings":";;;AAAA,mCAAmC;AACnC,uCAAwC;AAExC,kBAAkB;AACL,QAAA,QAAQ,GAAG;IACtB,wBAAc;CACf,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { BaseCommand } from '@datadog/datadog-ci-base';
2
+ export declare class VersionCommand extends BaseCommand {
3
+ static paths: string[][];
4
+ static usage: import("clipanion").Usage;
5
+ execute(): Promise<number>;
6
+ }
@@ -0,0 +1,31 @@
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
+ exports.VersionCommand = void 0;
13
+ const clipanion_1 = require("clipanion");
14
+ const datadog_ci_base_1 = require("@datadog/datadog-ci-base");
15
+ const version_1 = require("../../version");
16
+ class VersionCommand extends datadog_ci_base_1.BaseCommand {
17
+ execute() {
18
+ return __awaiter(this, void 0, void 0, function* () {
19
+ this.context.stdout.write(`v${version_1.cliVersion}\n`);
20
+ return 0;
21
+ });
22
+ }
23
+ }
24
+ exports.VersionCommand = VersionCommand;
25
+ VersionCommand.paths = [['version']];
26
+ VersionCommand.usage = clipanion_1.Command.Usage({
27
+ // This description is longer than usual because this is valuable information, and it's unlikely
28
+ // that the user is going to run `datadog-ci version --help`. This description will show in `datadog-ci --help` instead.
29
+ description: 'Get the current version of datadog-ci. This command outputs a prefixed version, e.g. `v1.0.0`. If you want the raw version, use `datadog-ci --version`.',
30
+ });
31
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/commands/version/version.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAAiC;AAEjC,8DAAoD;AAEpD,2CAAwC;AAExC,MAAa,cAAe,SAAQ,6BAAW;IAUhC,OAAO;;YAClB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,oBAAU,IAAI,CAAC,CAAA;YAE7C,OAAO,CAAC,CAAA;QACV,CAAC;KAAA;;AAdH,wCAeC;AAde,oBAAK,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;AAErB,oBAAK,GAAG,mBAAO,CAAC,KAAK,CAAC;IAClC,gGAAgG;IAChG,wHAAwH;IACxH,WAAW,EACT,yJAAyJ;CAC5J,CAAC,CAAA"}
@@ -39,7 +39,24 @@ exports.githubWellKnownDiagnosticDirsWin = [
39
39
  'C:/actions-runner/cached/_diag',
40
40
  'C:/actions-runner/_diag', // for self-hosted
41
41
  ];
42
- const githubJobDisplayNameRegex = /"jobDisplayName":\s*"([^"]+)"/;
42
+ const githubJobDisplayNameRegex = /"jobDisplayName":\s*"((?:[^"\\]|\\.)*)"/;
43
+ /**
44
+ * Properly unescape a JSON string value by leveraging JSON.parse
45
+ * Handles all JSON escape sequences: \", \\, \n, \r, \t, \f, \b, \uXXXX
46
+ *
47
+ * @param str - The JSON-escaped string (without surrounding quotes)
48
+ * @returns The unescaped string
49
+ */
50
+ const unescapeJsonString = (str) => {
51
+ try {
52
+ return JSON.parse('"' + str + '"');
53
+ }
54
+ catch (e) {
55
+ // If JSON.parse fails, return as-is
56
+ // This handles edge cases where the string might be malformed
57
+ return str;
58
+ }
59
+ };
43
60
  const uniq = (items) => Array.from(new Set(items));
44
61
  /**
45
62
  * GitHub runner diagnostic logs live under the runner installation directory in `_diag`.
@@ -57,6 +74,9 @@ const getGithubDiagnosticDirsFromEnv = () => {
57
74
  const runnerRoot = upath_1.default.resolve(runnerTemp, '..', '..');
58
75
  dirs.push(upath_1.default.join(runnerRoot, 'cached', '_diag'));
59
76
  dirs.push(upath_1.default.join(runnerRoot, '_diag'));
77
+ // actions-runner variants
78
+ dirs.push(upath_1.default.join(runnerRoot, 'actions-runner', 'cached', '_diag'));
79
+ dirs.push(upath_1.default.join(runnerRoot, 'actions-runner', '_diag'));
60
80
  }
61
81
  return uniq(dirs.filter(Boolean));
62
82
  };
@@ -775,14 +795,39 @@ const getGithubJobNameFromLogs = (context) => {
775
795
  return;
776
796
  }
777
797
  // 2. Get the job display name via regex
778
- for (const logFile of workerLogFiles) {
798
+ // For non-ephemeral runners, multiple Worker logs may exist from different jobs
799
+ // Use ACTIONS_ORCHESTRATION_ID to identify the correct log if available
800
+ const orchestrationId = process.env.ACTIONS_ORCHESTRATION_ID;
801
+ let targetLogFile;
802
+ if (orchestrationId) {
803
+ // Extract planId GUID (everything before first dot)
804
+ const planId = orchestrationId.split('.')[0];
805
+ // Find the Worker log containing this planId
806
+ for (const logFile of workerLogFiles) {
807
+ const filePath = upath_1.default.join(foundDiagDir, logFile);
808
+ const content = fs_1.default.readFileSync(filePath, 'utf-8');
809
+ // Check if this log matches the current job's planId
810
+ if (content.includes(`"planId": "${planId}"`)) {
811
+ targetLogFile = logFile;
812
+ context.stdout.write(`Found Worker log for planId ${planId}: ${logFile}\n`);
813
+ break;
814
+ }
815
+ }
816
+ if (!targetLogFile) {
817
+ context.stderr.write(`${chalk_1.default.yellow.bold('[WARNING]')} Could not find Worker log for planId ${planId}, checking all logs\n`);
818
+ }
819
+ }
820
+ // If we found a specific log file, check only that one; otherwise check all
821
+ const logsToCheck = targetLogFile ? [targetLogFile] : workerLogFiles;
822
+ for (const logFile of logsToCheck) {
779
823
  const filePath = upath_1.default.join(foundDiagDir, logFile);
780
824
  const content = fs_1.default.readFileSync(filePath, 'utf-8');
781
825
  const match = content.match(githubJobDisplayNameRegex);
782
826
  if (match && match[1]) {
783
- // match[1] is the captured group with the display name
784
- context.stdout.write(`Successfully extracted job name: ${match[1]}\n`);
785
- return match[1];
827
+ // match[1] is the captured group with the JSON-escaped display name
828
+ const unescapedName = unescapeJsonString(match[1]);
829
+ context.stdout.write(`Successfully extracted job name: ${unescapedName}\n`);
830
+ return unescapedName;
786
831
  }
787
832
  }
788
833
  context.stderr.write(`${chalk_1.default.yellow.bold('[WARNING]')} could not find "jobDisplayName" attribute in GitHub diagnostic logs`);