@datadog/datadog-ci 3.12.0 → 3.13.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 (115) hide show
  1. package/README.md +1 -1
  2. package/dist/commands/aas/common.d.ts +3 -4
  3. package/dist/commands/aas/common.js +28 -10
  4. package/dist/commands/aas/common.js.map +1 -1
  5. package/dist/commands/aas/instrument.d.ts +7 -2
  6. package/dist/commands/aas/instrument.js +51 -10
  7. package/dist/commands/aas/instrument.js.map +1 -1
  8. package/dist/commands/aas/interfaces.d.ts +3 -0
  9. package/dist/commands/cloud-run/constants.d.ts +2 -0
  10. package/dist/commands/cloud-run/constants.js +3 -1
  11. package/dist/commands/cloud-run/constants.js.map +1 -1
  12. package/dist/commands/cloud-run/flare.js +1 -0
  13. package/dist/commands/cloud-run/flare.js.map +1 -1
  14. package/dist/commands/cloud-run/instrument.d.ts +15 -8
  15. package/dist/commands/cloud-run/instrument.js +260 -138
  16. package/dist/commands/cloud-run/instrument.js.map +1 -1
  17. package/dist/commands/cloud-run/interfaces.d.ts +0 -19
  18. package/dist/commands/cloud-run/prompt.d.ts +5 -0
  19. package/dist/commands/cloud-run/prompt.js +86 -0
  20. package/dist/commands/cloud-run/prompt.js.map +1 -0
  21. package/dist/commands/cloud-run/renderer.d.ts +1 -2
  22. package/dist/commands/cloud-run/renderer.js +3 -11
  23. package/dist/commands/cloud-run/renderer.js.map +1 -1
  24. package/dist/commands/cloud-run/types.d.ts +3 -2
  25. package/dist/commands/cloud-run/uninstrument.d.ts +21 -0
  26. package/dist/commands/cloud-run/uninstrument.js +187 -0
  27. package/dist/commands/cloud-run/uninstrument.js.map +1 -0
  28. package/dist/commands/cloud-run/utils.d.ts +10 -0
  29. package/dist/commands/cloud-run/utils.js +81 -1
  30. package/dist/commands/cloud-run/utils.js.map +1 -1
  31. package/dist/commands/coverage/renderer.d.ts +2 -1
  32. package/dist/commands/coverage/renderer.js +12 -7
  33. package/dist/commands/coverage/renderer.js.map +1 -1
  34. package/dist/commands/coverage/upload.js +6 -6
  35. package/dist/commands/coverage/upload.js.map +1 -1
  36. package/dist/commands/coverage/utils.d.ts +8 -2
  37. package/dist/commands/coverage/utils.js +119 -4
  38. package/dist/commands/coverage/utils.js.map +1 -1
  39. package/dist/commands/dsyms/interfaces.d.ts +5 -5
  40. package/dist/commands/dsyms/interfaces.js +1 -1
  41. package/dist/commands/dsyms/interfaces.js.map +1 -1
  42. package/dist/commands/dsyms/renderer.d.ts +2 -2
  43. package/dist/commands/dsyms/renderer.js +6 -6
  44. package/dist/commands/dsyms/renderer.js.map +1 -1
  45. package/dist/commands/dsyms/upload.d.ts +17 -12
  46. package/dist/commands/dsyms/upload.js +177 -145
  47. package/dist/commands/dsyms/upload.js.map +1 -1
  48. package/dist/commands/junit/utils.d.ts +2 -2
  49. package/dist/commands/junit/utils.js +9 -11
  50. package/dist/commands/junit/utils.js.map +1 -1
  51. package/dist/commands/lambda/constants.d.ts +0 -7
  52. package/dist/commands/lambda/constants.js +3 -15
  53. package/dist/commands/lambda/constants.js.map +1 -1
  54. package/dist/commands/lambda/flare.js +1 -0
  55. package/dist/commands/lambda/flare.js.map +1 -1
  56. package/dist/commands/lambda/functions/instrument.js +9 -9
  57. package/dist/commands/lambda/functions/instrument.js.map +1 -1
  58. package/dist/commands/lambda/functions/uninstrument.js +6 -6
  59. package/dist/commands/lambda/functions/uninstrument.js.map +1 -1
  60. package/dist/commands/lambda/instrument.d.ts +0 -3
  61. package/dist/commands/lambda/instrument.js +4 -51
  62. package/dist/commands/lambda/instrument.js.map +1 -1
  63. package/dist/commands/react-native/xcode.d.ts +23 -0
  64. package/dist/commands/react-native/xcode.js +166 -10
  65. package/dist/commands/react-native/xcode.js.map +1 -1
  66. package/dist/commands/sarif/renderer.js +2 -2
  67. package/dist/commands/sarif/renderer.js.map +1 -1
  68. package/dist/commands/sbom/api.js +2 -2
  69. package/dist/commands/sbom/api.js.map +1 -1
  70. package/dist/commands/sbom/renderer.js +3 -3
  71. package/dist/commands/sbom/renderer.js.map +1 -1
  72. package/dist/commands/synthetics/api.d.ts +7 -3
  73. package/dist/commands/synthetics/api.js +20 -3
  74. package/dist/commands/synthetics/api.js.map +1 -1
  75. package/dist/commands/synthetics/base-command.d.ts +8 -2
  76. package/dist/commands/synthetics/base-command.js +34 -32
  77. package/dist/commands/synthetics/base-command.js.map +1 -1
  78. package/dist/commands/synthetics/batch.d.ts +4 -3
  79. package/dist/commands/synthetics/batch.js +27 -14
  80. package/dist/commands/synthetics/batch.js.map +1 -1
  81. package/dist/commands/synthetics/errors.d.ts +1 -1
  82. package/dist/commands/synthetics/errors.js +1 -1
  83. package/dist/commands/synthetics/errors.js.map +1 -1
  84. package/dist/commands/synthetics/interfaces.d.ts +13 -2
  85. package/dist/commands/synthetics/interfaces.js.map +1 -1
  86. package/dist/commands/synthetics/reporters/default.js +16 -2
  87. package/dist/commands/synthetics/reporters/default.js.map +1 -1
  88. package/dist/commands/synthetics/reporters/junit.d.ts +1 -0
  89. package/dist/commands/synthetics/reporters/junit.js +2 -0
  90. package/dist/commands/synthetics/reporters/junit.js.map +1 -1
  91. package/dist/commands/synthetics/run-tests-lib.js +17 -3
  92. package/dist/commands/synthetics/run-tests-lib.js.map +1 -1
  93. package/dist/commands/synthetics/test.d.ts +2 -2
  94. package/dist/commands/synthetics/test.js +15 -2
  95. package/dist/commands/synthetics/test.js.map +1 -1
  96. package/dist/commands/synthetics/utils/internal.d.ts +2 -2
  97. package/dist/commands/synthetics/utils/internal.js.map +1 -1
  98. package/dist/commands/synthetics/utils/public.js +9 -2
  99. package/dist/commands/synthetics/utils/public.js.map +1 -1
  100. package/dist/constants.d.ts +7 -0
  101. package/dist/constants.js +14 -1
  102. package/dist/constants.js.map +1 -1
  103. package/dist/helpers/app.d.ts +1 -0
  104. package/dist/helpers/app.js +7 -1
  105. package/dist/helpers/app.js.map +1 -1
  106. package/dist/helpers/flare.d.ts +2 -0
  107. package/dist/helpers/flare.js +13 -1
  108. package/dist/helpers/flare.js.map +1 -1
  109. package/dist/helpers/git/instrument-helpers.d.ts +13 -0
  110. package/dist/helpers/git/instrument-helpers.js +60 -0
  111. package/dist/helpers/git/instrument-helpers.js.map +1 -0
  112. package/dist/helpers/version.d.ts +1 -0
  113. package/dist/helpers/version.js +17 -1
  114. package/dist/helpers/version.js.map +1 -1
  115. package/package.json +4 -1
@@ -0,0 +1,86 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.requestConfirmation = exports.requestSite = exports.requestServiceName = exports.requestGCPRegion = exports.requestGCPProject = void 0;
16
+ const inquirer_1 = __importDefault(require("inquirer"));
17
+ const constants_1 = require("../../constants");
18
+ const checkboxPlusPrompt = require('inquirer-checkbox-plus-prompt');
19
+ inquirer_1.default.registerPrompt('checkbox-plus', checkboxPlusPrompt);
20
+ const requestGCPProject = () => __awaiter(void 0, void 0, void 0, function* () {
21
+ const answer = yield inquirer_1.default.prompt({
22
+ message: 'Enter GCP Project ID:',
23
+ name: 'project',
24
+ type: 'input',
25
+ validate: (value) => {
26
+ if (!value || value.trim().length === 0) {
27
+ return 'Project ID is required.';
28
+ }
29
+ return true;
30
+ },
31
+ });
32
+ return answer.project;
33
+ });
34
+ exports.requestGCPProject = requestGCPProject;
35
+ const requestGCPRegion = (defaultRegion) => __awaiter(void 0, void 0, void 0, function* () {
36
+ const answer = yield inquirer_1.default.prompt({
37
+ default: defaultRegion || 'us-central1',
38
+ message: 'Enter GCP Region:',
39
+ name: 'region',
40
+ type: 'input',
41
+ validate: (value) => {
42
+ if (!value || value.trim().length === 0) {
43
+ return 'Region is required.';
44
+ }
45
+ return true;
46
+ },
47
+ });
48
+ return answer.region;
49
+ });
50
+ exports.requestGCPRegion = requestGCPRegion;
51
+ const requestServiceName = () => __awaiter(void 0, void 0, void 0, function* () {
52
+ const answer = yield inquirer_1.default.prompt({
53
+ message: 'Enter Cloud Run service name:',
54
+ name: 'serviceName',
55
+ type: 'input',
56
+ validate: (value) => {
57
+ if (!value || value.trim().length === 0) {
58
+ return 'Service name is required.';
59
+ }
60
+ return true;
61
+ },
62
+ });
63
+ return answer.serviceName;
64
+ });
65
+ exports.requestServiceName = requestServiceName;
66
+ const requestSite = () => __awaiter(void 0, void 0, void 0, function* () {
67
+ const answer = yield inquirer_1.default.prompt({
68
+ choices: constants_1.DATADOG_SITES,
69
+ message: 'Select a Datadog Site:',
70
+ name: 'site',
71
+ type: 'list',
72
+ });
73
+ return answer.site;
74
+ });
75
+ exports.requestSite = requestSite;
76
+ const requestConfirmation = (message, defaultValue = true) => __awaiter(void 0, void 0, void 0, function* () {
77
+ const confirmationAnswer = yield inquirer_1.default.prompt({
78
+ message,
79
+ name: 'confirmation',
80
+ type: 'confirm',
81
+ default: defaultValue,
82
+ });
83
+ return confirmationAnswer.confirmation !== false;
84
+ });
85
+ exports.requestConfirmation = requestConfirmation;
86
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../../src/commands/cloud-run/prompt.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,wDAA+B;AAE/B,+CAA6C;AAE7C,MAAM,kBAAkB,GAAG,OAAO,CAAC,+BAA+B,CAAC,CAAA;AACnE,kBAAQ,CAAC,cAAc,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAA;AAErD,MAAM,iBAAiB,GAAG,GAA0B,EAAE;IAC3D,MAAM,MAAM,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;QACnC,OAAO,EAAE,uBAAuB;QAChC,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;YAC1B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;gBACvC,OAAO,yBAAyB,CAAA;aACjC;YAED,OAAO,IAAI,CAAA;QACb,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,MAAM,CAAC,OAAO,CAAA;AACvB,CAAC,CAAA,CAAA;AAfY,QAAA,iBAAiB,qBAe7B;AAEM,MAAM,gBAAgB,GAAG,CAAO,aAAsB,EAAmB,EAAE;IAChF,MAAM,MAAM,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;QACnC,OAAO,EAAE,aAAa,IAAI,aAAa;QACvC,OAAO,EAAE,mBAAmB;QAC5B,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;YAC1B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;gBACvC,OAAO,qBAAqB,CAAA;aAC7B;YAED,OAAO,IAAI,CAAA;QACb,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,MAAM,CAAC,MAAM,CAAA;AACtB,CAAC,CAAA,CAAA;AAhBY,QAAA,gBAAgB,oBAgB5B;AAEM,MAAM,kBAAkB,GAAG,GAA0B,EAAE;IAC5D,MAAM,MAAM,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;QACnC,OAAO,EAAE,+BAA+B;QACxC,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;YAC1B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;gBACvC,OAAO,2BAA2B,CAAA;aACnC;YAED,OAAO,IAAI,CAAA;QACb,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,MAAM,CAAC,WAAW,CAAA;AAC3B,CAAC,CAAA,CAAA;AAfY,QAAA,kBAAkB,sBAe9B;AAEM,MAAM,WAAW,GAAG,GAA0B,EAAE;IACrD,MAAM,MAAM,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;QACnC,OAAO,EAAE,yBAAa;QACtB,OAAO,EAAE,wBAAwB;QACjC,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,MAAM;KACb,CAAC,CAAA;IAEF,OAAO,MAAM,CAAC,IAAI,CAAA;AACpB,CAAC,CAAA,CAAA;AATY,QAAA,WAAW,eASvB;AAEM,MAAM,mBAAmB,GAAG,CAAO,OAAe,EAAE,YAAY,GAAG,IAAI,EAAE,EAAE;IAChF,MAAM,kBAAkB,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;QAC/C,OAAO;QACP,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,YAAY;KACtB,CAAC,CAAA;IAEF,OAAO,kBAAkB,CAAC,YAAY,KAAK,KAAK,CAAA;AAClD,CAAC,CAAA,CAAA;AATY,QAAA,mBAAmB,uBAS/B"}
@@ -1,9 +1,8 @@
1
- import { InstrumentCommand } from './instrument';
2
1
  /**
3
2
  * @returns instructions on how to authenticate with GCP.
4
3
  */
5
4
  export declare const renderAuthenticationInstructions: () => string;
6
- export declare const renderCloudRunInstrumentUninstrumentHeader: (commandType: InstrumentCommand, isDryRun: boolean) => string;
5
+ export declare const dryRunPrefix: (isDryRun: boolean) => string;
7
6
  /**
8
7
  * Executes an async operation with a spinner
9
8
  * @param text - The text to display while spinning
@@ -35,7 +35,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
35
35
  return (mod && mod.__esModule) ? mod : { "default": mod };
36
36
  };
37
37
  Object.defineProperty(exports, "__esModule", { value: true });
38
- exports.withSpinner = exports.renderCloudRunInstrumentUninstrumentHeader = exports.renderAuthenticationInstructions = void 0;
38
+ exports.withSpinner = exports.dryRunPrefix = exports.renderAuthenticationInstructions = void 0;
39
39
  const chalk_1 = __importDefault(require("chalk"));
40
40
  const ora_1 = __importDefault(require("ora"));
41
41
  const helpersRenderer = __importStar(require("../../helpers/renderer"));
@@ -54,16 +54,8 @@ const renderAuthenticationInstructions = () => {
54
54
  return AUTHENTICATION_INSTRUCTIONS.join('\n');
55
55
  };
56
56
  exports.renderAuthenticationInstructions = renderAuthenticationInstructions;
57
- const renderCloudRunInstrumentUninstrumentHeader = (commandType, isDryRun) => {
58
- const prefix = isDryRun ? `${renderer_1.dryRunTag} ` : '';
59
- const commandVerb = 'Instrumenting';
60
- // TODO
61
- // if (commandType === UninstrumentCommand.prototype) {
62
- // commandVerb = 'Uninstrumenting'
63
- // }
64
- return `\n${prefix}🐶 ${commandVerb} Cloud Run service\n`;
65
- };
66
- exports.renderCloudRunInstrumentUninstrumentHeader = renderCloudRunInstrumentUninstrumentHeader;
57
+ const dryRunPrefix = (isDryRun) => (isDryRun ? `${renderer_1.dryRunTag} ` : '');
58
+ exports.dryRunPrefix = dryRunPrefix;
67
59
  /**
68
60
  * Executes an async operation with a spinner
69
61
  * @param text - The text to display while spinning
@@ -1 +1 @@
1
- {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../../src/commands/cloud-run/renderer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAAyB;AACzB,8CAAqB;AAErB,wEAAyD;AACzD,qDAAgD;AAIhD,MAAM,2BAA2B,GAAG;IAClC,IAAI,GAAG,eAAe,CAAC,WAAW,CAAC,kCAAkC,CAAC;IACtE,sDAAsD;IACtD,oGAAoG;IACpG,kGAAkG;IAClG,4EAA4E;CAC7E,CAAA;AACD;;GAEG;AACI,MAAM,gCAAgC,GAAG,GAAG,EAAE;IACnD,OAAO,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC/C,CAAC,CAAA;AAFY,QAAA,gCAAgC,oCAE5C;AAEM,MAAM,0CAA0C,GAAG,CAAC,WAA8B,EAAE,QAAiB,EAAE,EAAE;IAC9G,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,oBAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;IAE9C,MAAM,WAAW,GAAG,eAAe,CAAA;IACnC,OAAO;IACP,uDAAuD;IACvD,oCAAoC;IACpC,IAAI;IAEJ,OAAO,KAAK,MAAM,MAAM,WAAW,sBAAsB,CAAA;AAC3D,CAAC,CAAA;AAVY,QAAA,0CAA0C,8CAUtD;AAED;;;;;;GAMG;AACI,MAAM,WAAW,GAAG,CAAU,IAAY,EAAE,SAA2B,EAAE,WAAmB,EAAc,EAAE;IACjH,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC;QAClB,KAAK,EAAE,SAAS;QAChB,YAAY,EAAE,KAAK;QACnB,IAAI;KACL,CAAC,CAAA;IACF,OAAO,CAAC,KAAK,EAAE,CAAA;IAEf,IAAI;QACF,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAA;QAChC,OAAO,CAAC,OAAO,CAAC,eAAK,CAAC,KAAK,CAAC,GAAG,WAAW,EAAE,CAAC,CAAC,CAAA;QAE9C,OAAO,MAAM,CAAA;KACd;IAAC,OAAO,KAAK,EAAE;QACd,gCAAgC;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;QAC5C,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAA;QAEtC,MAAM,KAAK,CAAA;KACZ;AACH,CAAC,CAAA,CAAA;AApBY,QAAA,WAAW,eAoBvB"}
1
+ {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../../src/commands/cloud-run/renderer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAAyB;AACzB,8CAAqB;AAErB,wEAAyD;AACzD,qDAAgD;AAEhD,MAAM,2BAA2B,GAAG;IAClC,IAAI,GAAG,eAAe,CAAC,WAAW,CAAC,kCAAkC,CAAC;IACtE,sDAAsD;IACtD,oGAAoG;IACpG,kGAAkG;IAClG,4EAA4E;CAC7E,CAAA;AACD;;GAEG;AACI,MAAM,gCAAgC,GAAG,GAAG,EAAE;IACnD,OAAO,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC/C,CAAC,CAAA;AAFY,QAAA,gCAAgC,oCAE5C;AAEM,MAAM,YAAY,GAAG,CAAC,QAAiB,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,oBAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;AAAvE,QAAA,YAAY,gBAA2D;AAEpF;;;;;;GAMG;AACI,MAAM,WAAW,GAAG,CAAU,IAAY,EAAE,SAA2B,EAAE,WAAmB,EAAc,EAAE;IACjH,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC;QAClB,KAAK,EAAE,SAAS;QAChB,YAAY,EAAE,KAAK;QACnB,IAAI;KACL,CAAC,CAAA;IACF,OAAO,CAAC,KAAK,EAAE,CAAA;IAEf,IAAI;QACF,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAA;QAChC,OAAO,CAAC,OAAO,CAAC,eAAK,CAAC,KAAK,CAAC,GAAG,WAAW,EAAE,CAAC,CAAC,CAAA;QAE9C,OAAO,MAAM,CAAA;KACd;IAAC,OAAO,KAAK,EAAE;QACd,gCAAgC;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;QAC5C,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAA;QAEtC,MAAM,KAAK,CAAA;KACZ;AACH,CAAC,CAAA,CAAA;AApBY,QAAA,WAAW,eAoBvB"}
@@ -1,6 +1,6 @@
1
1
  export interface IEnvVar {
2
- name?: string;
3
- value?: string;
2
+ name: string;
3
+ value: string;
4
4
  }
5
5
  export interface IVolumeMount {
6
6
  name?: string;
@@ -23,6 +23,7 @@ export interface IVolume {
23
23
  export interface IServiceTemplate {
24
24
  containers?: IContainer[];
25
25
  volumes?: IVolume[];
26
+ revision?: string | undefined;
26
27
  }
27
28
  export interface IService {
28
29
  name?: string;
@@ -0,0 +1,21 @@
1
+ import type { IService, ServicesClient as IServicesClient } from './types';
2
+ import { Command } from 'clipanion';
3
+ export declare class UninstrumentCommand extends Command {
4
+ static paths: string[][];
5
+ static usage: import("clipanion").Usage;
6
+ private dryRun;
7
+ private project;
8
+ private services;
9
+ private interactive;
10
+ private region;
11
+ private sidecarName;
12
+ private sharedVolumeName;
13
+ private fips;
14
+ private fipsIgnoreError;
15
+ private fipsConfig;
16
+ execute(): Promise<0 | 1>;
17
+ uninstrumentSidecar(project: string, services: string[], region: string): Promise<void>;
18
+ uninstrumentService(client: IServicesClient, existingService: IService, serviceName: string): Promise<void>;
19
+ createUninstrumentedServiceConfig(service: IService): IService;
20
+ private updateAppContainer;
21
+ }
@@ -0,0 +1,187 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.UninstrumentCommand = void 0;
16
+ const chalk_1 = __importDefault(require("chalk"));
17
+ const clipanion_1 = require("clipanion");
18
+ const constants_1 = require("../../constants");
19
+ const env_1 = require("../../helpers/env");
20
+ const fips_1 = require("../../helpers/fips");
21
+ const renderer_1 = require("../../helpers/renderer");
22
+ const constants_2 = require("./constants");
23
+ const prompt_1 = require("./prompt");
24
+ const renderer_2 = require("./renderer");
25
+ const utils_1 = require("./utils");
26
+ // XXX temporary workaround for @google-cloud/run ESM/CJS module issues
27
+ const { ServicesClient } = require('@google-cloud/run');
28
+ class UninstrumentCommand extends clipanion_1.Command {
29
+ constructor() {
30
+ var _a, _b;
31
+ super(...arguments);
32
+ this.dryRun = clipanion_1.Option.Boolean('-d,--dry,--dry-run', false);
33
+ this.project = clipanion_1.Option.String('-p,--project', {
34
+ description: 'GCP project ID',
35
+ });
36
+ this.services = clipanion_1.Option.Array('-s,--service,--services', [], {
37
+ description: 'Cloud Run service(s) to instrument',
38
+ });
39
+ this.interactive = clipanion_1.Option.Boolean('-i,--interactive', false, {
40
+ description: 'Prompt for flags one at a time',
41
+ });
42
+ this.region = clipanion_1.Option.String('-r,--region', {
43
+ description: 'GCP region your service(s) are deployed in',
44
+ });
45
+ this.sidecarName = clipanion_1.Option.String('--sidecar-name', constants_2.DEFAULT_SIDECAR_NAME, {
46
+ description: `The name of the sidecar container to remove. Specify if you have a different sidecar name. Defaults to '${constants_2.DEFAULT_SIDECAR_NAME}'`,
47
+ });
48
+ this.sharedVolumeName = clipanion_1.Option.String('--shared-volume-name', constants_2.DEFAULT_VOLUME_NAME, {
49
+ description: `The name of the shared volume to remove. Specify if you have a different shared volume name. Defaults to '${constants_2.DEFAULT_VOLUME_NAME}'`,
50
+ });
51
+ this.fips = clipanion_1.Option.Boolean('--fips', false);
52
+ this.fipsIgnoreError = clipanion_1.Option.Boolean('--fips-ignore-error', false);
53
+ this.fipsConfig = {
54
+ fips: (_a = (0, env_1.toBoolean)(process.env[constants_1.FIPS_ENV_VAR])) !== null && _a !== void 0 ? _a : false,
55
+ fipsIgnoreError: (_b = (0, env_1.toBoolean)(process.env[constants_1.FIPS_IGNORE_ERROR_ENV_VAR])) !== null && _b !== void 0 ? _b : false,
56
+ };
57
+ }
58
+ execute() {
59
+ return __awaiter(this, void 0, void 0, function* () {
60
+ (0, fips_1.enableFips)(this.fips || this.fipsConfig.fips, this.fipsIgnoreError || this.fipsConfig.fipsIgnoreError);
61
+ this.context.stdout.write(`\n${(0, renderer_2.dryRunPrefix)(this.dryRun)}🐶 ${chalk_1.default.bold('Uninstrumenting Cloud Run service(s)')}\n\n`);
62
+ if (this.interactive) {
63
+ if (!this.project) {
64
+ this.project = yield (0, prompt_1.requestGCPProject)();
65
+ }
66
+ if (!this.region) {
67
+ this.region = yield (0, prompt_1.requestGCPRegion)();
68
+ }
69
+ if (this.services.length === 0) {
70
+ const serviceName = yield (0, prompt_1.requestServiceName)();
71
+ this.services = [serviceName];
72
+ }
73
+ }
74
+ // Validate required variables
75
+ if (!this.project) {
76
+ this.context.stdout.write(chalk_1.default.yellow('Invalid or missing project. Please use the --project flag.\n'));
77
+ }
78
+ if (this.services.length === 0) {
79
+ this.context.stdout.write(chalk_1.default.yellow('Invalid or missing service(s). Please use the --service flag.\n'));
80
+ }
81
+ if (!this.region) {
82
+ this.context.stdout.write(chalk_1.default.yellow('Invalid or missing region. Please use the --region flag.\n'));
83
+ }
84
+ if (!this.project || !this.services || !this.services.length || !this.region) {
85
+ return 1;
86
+ }
87
+ this.context.stdout.write(chalk_1.default.green('✔ Required flags verified\n'));
88
+ // Verify GCP credentials
89
+ this.context.stdout.write(chalk_1.default.bold('\n🔑 Verifying GCP credentials...\n'));
90
+ const authenticated = yield (0, utils_1.checkAuthentication)();
91
+ if (!authenticated) {
92
+ this.context.stderr.write((0, renderer_2.renderAuthenticationInstructions)());
93
+ return 1;
94
+ }
95
+ this.context.stdout.write(chalk_1.default.green('✔ GCP credentials verified!\n\n'));
96
+ // Instrument services with sidecar
97
+ try {
98
+ yield this.uninstrumentSidecar(this.project, this.services, this.region);
99
+ }
100
+ catch (error) {
101
+ this.context.stderr.write((0, renderer_2.dryRunPrefix)(this.dryRun) + (0, renderer_1.renderError)(`Uninstrumentation failed: ${error}\n`));
102
+ return 1;
103
+ }
104
+ if (!this.dryRun) {
105
+ this.context.stdout.write('\n✅ Cloud Run uninstrumentation completed successfully!\n');
106
+ }
107
+ return 0;
108
+ });
109
+ }
110
+ uninstrumentSidecar(project, services, region) {
111
+ return __awaiter(this, void 0, void 0, function* () {
112
+ const client = new ServicesClient();
113
+ this.context.stdout.write(chalk_1.default.bold(`\n${(0, renderer_2.dryRunPrefix)(this.dryRun)}⬇️ Fetching existing service configurations from Cloud Run...\n`));
114
+ const existingServiceConfigs = yield (0, utils_1.fetchServiceConfigs)(client, project, region, services);
115
+ this.context.stdout.write(chalk_1.default.bold(`\n${(0, renderer_2.dryRunPrefix)(this.dryRun)}🚀 Uninstrumenting Cloud Run services with sidecar...\n`));
116
+ for (let i = 0; i < existingServiceConfigs.length; i++) {
117
+ const serviceConfig = existingServiceConfigs[i];
118
+ const serviceName = services[i];
119
+ try {
120
+ yield this.uninstrumentService(client, serviceConfig, serviceName);
121
+ }
122
+ catch (error) {
123
+ this.context.stderr.write((0, renderer_2.dryRunPrefix)(this.dryRun) + (0, renderer_1.renderError)(`Failed to instrument service ${serviceName}: ${error}\n`));
124
+ throw error;
125
+ }
126
+ }
127
+ });
128
+ }
129
+ uninstrumentService(client, existingService, serviceName) {
130
+ return __awaiter(this, void 0, void 0, function* () {
131
+ const updatedService = this.createUninstrumentedServiceConfig(existingService);
132
+ this.context.stdout.write((0, utils_1.generateConfigDiff)(existingService, updatedService));
133
+ if (this.dryRun) {
134
+ this.context.stdout.write(`\n\n${(0, renderer_2.dryRunPrefix)(this.dryRun)}Would have updated service ${chalk_1.default.bold(serviceName)} with the above changes.\n`);
135
+ return;
136
+ }
137
+ else if (this.interactive) {
138
+ const confirmed = yield (0, prompt_1.requestConfirmation)('\nDo you want to apply the changes?');
139
+ if (!confirmed) {
140
+ throw new Error('Uninstrumentation cancelled by user.');
141
+ }
142
+ }
143
+ yield (0, renderer_2.withSpinner)(`Uninstrumenting service ${chalk_1.default.bold(serviceName)}...`, () => __awaiter(this, void 0, void 0, function* () {
144
+ const [operation] = yield client.updateService({
145
+ service: updatedService,
146
+ });
147
+ yield operation.promise();
148
+ }), `Uninstrumented service ${chalk_1.default.bold(serviceName)}`);
149
+ });
150
+ }
151
+ createUninstrumentedServiceConfig(service) {
152
+ const template = service.template || {};
153
+ const containers = template.containers || [];
154
+ const volumes = template.volumes || [];
155
+ let updatedContainers = containers.filter((c) => c.name !== this.sidecarName);
156
+ const updatedVolumes = volumes.filter((v) => v.name !== this.sharedVolumeName);
157
+ if (updatedContainers.length === containers.length) {
158
+ this.context.stdout.write((0, renderer_1.renderSoftWarning)(`Sidecar container '${this.sidecarName}' not found, so no container was removed. Specify the container name with --sidecar-name.
159
+ `));
160
+ }
161
+ if (updatedVolumes.length === volumes.length) {
162
+ this.context.stdout.write((0, renderer_1.renderSoftWarning)(`Shared volume '${this.sharedVolumeName}' not found, so no shared volume was removed. Specify the shared volume name with --shared-volume-name.
163
+ `));
164
+ }
165
+ updatedContainers = updatedContainers.map((c) => this.updateAppContainer(c));
166
+ return Object.assign(Object.assign({}, service), { template: Object.assign(Object.assign({}, template), { containers: updatedContainers, volumes: updatedVolumes,
167
+ // Let GCR generate the next revision name
168
+ revision: undefined }) });
169
+ }
170
+ // Remove volume mount and add required env vars
171
+ updateAppContainer(appContainer) {
172
+ const existingVolumeMounts = appContainer.volumeMounts || [];
173
+ const updatedVolumeMounts = existingVolumeMounts.filter((v) => v.name !== this.sharedVolumeName);
174
+ const existingEnvVars = appContainer.env || [];
175
+ // Remove env vars beginning with DD_
176
+ const updatedEnvVars = existingEnvVars.filter((v) => !v.name.startsWith('DD_'));
177
+ return Object.assign(Object.assign({}, appContainer), { volumeMounts: updatedVolumeMounts, env: updatedEnvVars });
178
+ }
179
+ }
180
+ exports.UninstrumentCommand = UninstrumentCommand;
181
+ // TODO add to docs: https://github.com/DataDog/datadog-ci#cloud-run
182
+ UninstrumentCommand.paths = [['cloud-run', 'uninstrument']];
183
+ UninstrumentCommand.usage = clipanion_1.Command.Usage({
184
+ category: 'Serverless',
185
+ description: 'Revert Datadog instrumentation in a Cloud Run app.',
186
+ });
187
+ //# sourceMappingURL=uninstrument.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstrument.js","sourceRoot":"","sources":["../../../src/commands/cloud-run/uninstrument.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,15 @@
1
+ import type { IService, ServicesClient as IServicesClient } from './types';
1
2
  /**
2
3
  * Check if the user is authenticated with GCP.
3
4
  * @returns true if the user is authenticated, false otherwise
4
5
  */
5
6
  export declare const checkAuthentication: () => Promise<boolean>;
7
+ /**
8
+ * Generate a git diff-style comparison between two configurations
9
+ * TODO(@nhulston): update Lambda and AAS instrument to show this diff
10
+ * @param original The original configuration object
11
+ * @param updated The updated configuration object
12
+ * @returns A formatted diff string with colors
13
+ */
14
+ export declare const generateConfigDiff: (original: any, updated: any) => string;
15
+ export declare const fetchServiceConfigs: (client: IServicesClient, project: string, region: string, services: string[]) => Promise<IService[]>;
@@ -8,9 +8,15 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
11
14
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.checkAuthentication = void 0;
15
+ exports.fetchServiceConfigs = exports.generateConfigDiff = exports.checkAuthentication = void 0;
16
+ const chalk_1 = __importDefault(require("chalk"));
13
17
  const google_auth_library_1 = require("google-auth-library");
18
+ const jest_diff_1 = require("jest-diff");
19
+ const renderer_1 = require("./renderer");
14
20
  /**
15
21
  * Check if the user is authenticated with GCP.
16
22
  * @returns true if the user is authenticated, false otherwise
@@ -26,4 +32,78 @@ const checkAuthentication = () => __awaiter(void 0, void 0, void 0, function* ()
26
32
  }
27
33
  });
28
34
  exports.checkAuthentication = checkAuthentication;
35
+ /**
36
+ * Recursively sort object keys to ensure consistent ordering
37
+ */
38
+ const sortObjectKeys = (obj) => {
39
+ if (!obj) {
40
+ return obj;
41
+ }
42
+ if (Array.isArray(obj)) {
43
+ return obj.map(sortObjectKeys);
44
+ }
45
+ if (typeof obj === 'object') {
46
+ const sorted = {};
47
+ Object.keys(obj)
48
+ .sort()
49
+ .forEach((key) => {
50
+ sorted[key] = sortObjectKeys(obj[key]);
51
+ });
52
+ return sorted;
53
+ }
54
+ return obj;
55
+ };
56
+ /**
57
+ * Obfuscate sensitive values in a line if it contains a key with "_KEY"
58
+ */
59
+ const obfuscateSensitiveValues = (line) => {
60
+ // Match hex strings of 16, 32, or 64 characters (common API key/token lengths)
61
+ return line
62
+ .replace(/("[0-9a-fA-F]{16}"|"[0-9a-fA-F]{32}"|"[0-9a-fA-F]{64}")/g, '"***"')
63
+ .replace(/('[0-9a-fA-F]{16}'|'[0-9a-fA-F]{32}'|'[0-9a-fA-F]{64}')/g, "'***'");
64
+ };
65
+ /**
66
+ * Generate a git diff-style comparison between two configurations
67
+ * TODO(@nhulston): update Lambda and AAS instrument to show this diff
68
+ * @param original The original configuration object
69
+ * @param updated The updated configuration object
70
+ * @returns A formatted diff string with colors
71
+ */
72
+ const generateConfigDiff = (original, updated) => {
73
+ // Sort keys consistently before comparison
74
+ const sortedOriginal = sortObjectKeys(original);
75
+ const sortedUpdated = sortObjectKeys(updated);
76
+ const originalJson = JSON.stringify(sortedOriginal, undefined, 2);
77
+ const updatedJson = JSON.stringify(sortedUpdated, undefined, 2);
78
+ const obfuscatedOriginal = originalJson.split('\n').map(obfuscateSensitiveValues).join('\n');
79
+ const obfuscatedUpdated = updatedJson.split('\n').map(obfuscateSensitiveValues).join('\n');
80
+ const configDiff = (0, jest_diff_1.diff)(obfuscatedOriginal, obfuscatedUpdated, {
81
+ aColor: chalk_1.default.red,
82
+ bColor: chalk_1.default.green,
83
+ omitAnnotationLines: true,
84
+ });
85
+ if (!configDiff || configDiff.includes('no visual difference')) {
86
+ return chalk_1.default.gray('No changes detected.');
87
+ }
88
+ return configDiff;
89
+ };
90
+ exports.generateConfigDiff = generateConfigDiff;
91
+ const fetchServiceConfigs = (client, project, region, services) => __awaiter(void 0, void 0, void 0, function* () {
92
+ const existingServiceConfigs = [];
93
+ for (const serviceName of services) {
94
+ const servicePath = client.servicePath(project, region, serviceName);
95
+ const existingService = yield (0, renderer_1.withSpinner)(`Fetching configuration for ${chalk_1.default.bold(serviceName)}...`, () => __awaiter(void 0, void 0, void 0, function* () {
96
+ try {
97
+ const [serv] = yield client.getService({ name: servicePath });
98
+ return serv;
99
+ }
100
+ catch (error) {
101
+ throw new Error(`Service ${serviceName} not found in project ${project}, region ${region}.\n\nNo services were instrumented.\n`);
102
+ }
103
+ }), `Fetched service configuration for ${chalk_1.default.bold(serviceName)}`);
104
+ existingServiceConfigs.push(existingService);
105
+ }
106
+ return existingServiceConfigs;
107
+ });
108
+ exports.fetchServiceConfigs = fetchServiceConfigs;
29
109
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/commands/cloud-run/utils.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6DAA8C;AAE9C;;;GAGG;AACI,MAAM,mBAAmB,GAAG,GAAS,EAAE;IAC5C,MAAM,IAAI,GAAG,IAAI,gCAAU,EAAE,CAAA;IAC7B,IAAI;QACF,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAA;QAElC,OAAO,IAAI,CAAA;KACZ;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,KAAK,CAAA;KACb;AACH,CAAC,CAAA,CAAA;AATY,QAAA,mBAAmB,uBAS/B"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/commands/cloud-run/utils.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,11 @@
1
+ import { SpanTags } from '../../helpers/interfaces';
1
2
  import { Payload } from './interfaces';
2
3
  export declare const renderFileReadError: (filePath: string, errorMessage: string) => string;
3
4
  export declare const renderInvalidFile: (filePath: string, errorMessage: string) => string;
4
5
  export declare const renderFailedUpload: (payload: Payload, errorMessage: string) => string;
5
6
  export declare const renderRetriedUpload: (payload: Payload, errorMessage: string, attempt: number) => string;
6
7
  export declare const renderSuccessfulUpload: (dryRun: boolean, fileCount: number, duration: number) => string;
7
- export declare const renderSuccessfulUploadCommand: () => string;
8
+ export declare const renderSuccessfulUploadCommand: (spanTags: SpanTags) => string;
8
9
  export declare const renderDryRunUpload: (payload: Payload) => string;
9
10
  export declare const renderUpload: (payload: Payload) => string;
10
11
  export declare const renderCommandInfo: (basePaths: string[], dryRun: boolean) => string;
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.renderFailedGitDBSync = exports.renderSuccessfulGitDBSync = exports.renderCommandInfo = exports.renderUpload = exports.renderDryRunUpload = exports.renderSuccessfulUploadCommand = exports.renderSuccessfulUpload = exports.renderRetriedUpload = exports.renderFailedUpload = exports.renderInvalidFile = exports.renderFileReadError = void 0;
7
7
  const chalk_1 = __importDefault(require("chalk"));
8
8
  const upath_1 = __importDefault(require("upath"));
9
+ const utils_1 = require("./utils");
9
10
  const ICONS = {
10
11
  FAILED: '❌',
11
12
  SUCCESS: '✅',
@@ -35,13 +36,17 @@ const renderSuccessfulUpload = (dryRun, fileCount, duration) => {
35
36
  return chalk_1.default.green(`${dryRun ? '[DRYRUN] ' : ''}${ICONS.SUCCESS} Uploaded ${fileCount} files in ${duration} seconds.`);
36
37
  };
37
38
  exports.renderSuccessfulUpload = renderSuccessfulUpload;
38
- // TODO add some Datadog links to the output
39
- const renderSuccessfulUploadCommand = () => {
40
- let fullStr = '';
41
- fullStr += chalk_1.default.green('=================================================================================================\n');
42
- fullStr += chalk_1.default.green('* Code coverage report(s) upload successful\n');
43
- fullStr += chalk_1.default.green('=================================================================================================\n');
44
- return fullStr;
39
+ const renderSuccessfulUploadCommand = (spanTags) => {
40
+ const coverageDetailsUrl = (0, utils_1.getCoverageDetailsUrl)(spanTags);
41
+ if (coverageDetailsUrl) {
42
+ let fullStr = '';
43
+ fullStr += chalk_1.default.green('=================================================================================================\n');
44
+ fullStr += chalk_1.default.green('* View detailed coverage report in Datadog (it can take a few minutes to become available)\n');
45
+ fullStr += chalk_1.default.green(`* ${coverageDetailsUrl}\n`);
46
+ fullStr += chalk_1.default.green('=================================================================================================\n');
47
+ return fullStr;
48
+ }
49
+ return '';
45
50
  };
46
51
  exports.renderSuccessfulUploadCommand = renderSuccessfulUploadCommand;
47
52
  const renderDryRunUpload = (payload) => `[DRYRUN] ${(0, exports.renderUpload)(payload)}`;
@@ -1 +1 @@
1
- {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../../src/commands/coverage/renderer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../../src/commands/coverage/renderer.ts"],"names":[],"mappings":"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"}
@@ -116,9 +116,6 @@ class UploadCodeCoverageReportCommand extends clipanion_1.Command {
116
116
  this.logger.debug('Not syncing git metadata (skip git upload flag detected)');
117
117
  }
118
118
  yield this.uploadCodeCoverageReports();
119
- if (!this.dryRun) {
120
- this.context.stdout.write((0, renderer_1.renderSuccessfulUploadCommand)());
121
- }
122
119
  });
123
120
  }
124
121
  uploadToGitDB(opts) {
@@ -134,8 +131,9 @@ class UploadCodeCoverageReportCommand extends clipanion_1.Command {
134
131
  // Normalizing the basePath to resolve .. and .
135
132
  this.basePaths = this.basePaths.map((basePath) => upath_1.default.normalize(basePath));
136
133
  this.logger.info((0, renderer_1.renderCommandInfo)(this.basePaths, this.dryRun));
134
+ const spanTags = yield this.getSpanTags();
137
135
  const api = this.getApiHelper();
138
- const payloads = yield this.generatePayloads();
136
+ const payloads = yield this.generatePayloads(spanTags);
139
137
  let fileCount = 0;
140
138
  const initialTime = new Date().getTime();
141
139
  for (const payload of payloads) {
@@ -144,6 +142,9 @@ class UploadCodeCoverageReportCommand extends clipanion_1.Command {
144
142
  }
145
143
  const totalTimeSeconds = (Date.now() - initialTime) / 1000;
146
144
  this.logger.info((0, renderer_1.renderSuccessfulUpload)(this.dryRun, fileCount, totalTimeSeconds));
145
+ if (!this.dryRun) {
146
+ this.context.stdout.write((0, renderer_1.renderSuccessfulUploadCommand)(spanTags));
147
+ }
147
148
  });
148
149
  }
149
150
  getApiHelper() {
@@ -153,9 +154,8 @@ class UploadCodeCoverageReportCommand extends clipanion_1.Command {
153
154
  }
154
155
  return (0, api_2.apiConstructor)(api_2.intakeUrl, this.config.apiKey);
155
156
  }
156
- generatePayloads() {
157
+ generatePayloads(spanTags) {
157
158
  return __awaiter(this, void 0, void 0, function* () {
158
- const spanTags = yield this.getSpanTags();
159
159
  const customTags = this.getCustomTags();
160
160
  const customMeasures = this.getCustomMeasures();
161
161
  if (!!customTags['resolved']) {