@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.
- package/README.md +1 -1
- package/dist/commands/aas/common.d.ts +3 -4
- package/dist/commands/aas/common.js +28 -10
- package/dist/commands/aas/common.js.map +1 -1
- package/dist/commands/aas/instrument.d.ts +7 -2
- package/dist/commands/aas/instrument.js +51 -10
- package/dist/commands/aas/instrument.js.map +1 -1
- package/dist/commands/aas/interfaces.d.ts +3 -0
- package/dist/commands/cloud-run/constants.d.ts +2 -0
- package/dist/commands/cloud-run/constants.js +3 -1
- package/dist/commands/cloud-run/constants.js.map +1 -1
- package/dist/commands/cloud-run/flare.js +1 -0
- package/dist/commands/cloud-run/flare.js.map +1 -1
- package/dist/commands/cloud-run/instrument.d.ts +15 -8
- package/dist/commands/cloud-run/instrument.js +260 -138
- package/dist/commands/cloud-run/instrument.js.map +1 -1
- package/dist/commands/cloud-run/interfaces.d.ts +0 -19
- package/dist/commands/cloud-run/prompt.d.ts +5 -0
- package/dist/commands/cloud-run/prompt.js +86 -0
- package/dist/commands/cloud-run/prompt.js.map +1 -0
- package/dist/commands/cloud-run/renderer.d.ts +1 -2
- package/dist/commands/cloud-run/renderer.js +3 -11
- package/dist/commands/cloud-run/renderer.js.map +1 -1
- package/dist/commands/cloud-run/types.d.ts +3 -2
- package/dist/commands/cloud-run/uninstrument.d.ts +21 -0
- package/dist/commands/cloud-run/uninstrument.js +187 -0
- package/dist/commands/cloud-run/uninstrument.js.map +1 -0
- package/dist/commands/cloud-run/utils.d.ts +10 -0
- package/dist/commands/cloud-run/utils.js +81 -1
- package/dist/commands/cloud-run/utils.js.map +1 -1
- package/dist/commands/coverage/renderer.d.ts +2 -1
- package/dist/commands/coverage/renderer.js +12 -7
- package/dist/commands/coverage/renderer.js.map +1 -1
- package/dist/commands/coverage/upload.js +6 -6
- package/dist/commands/coverage/upload.js.map +1 -1
- package/dist/commands/coverage/utils.d.ts +8 -2
- package/dist/commands/coverage/utils.js +119 -4
- package/dist/commands/coverage/utils.js.map +1 -1
- package/dist/commands/dsyms/interfaces.d.ts +5 -5
- package/dist/commands/dsyms/interfaces.js +1 -1
- package/dist/commands/dsyms/interfaces.js.map +1 -1
- package/dist/commands/dsyms/renderer.d.ts +2 -2
- package/dist/commands/dsyms/renderer.js +6 -6
- package/dist/commands/dsyms/renderer.js.map +1 -1
- package/dist/commands/dsyms/upload.d.ts +17 -12
- package/dist/commands/dsyms/upload.js +177 -145
- package/dist/commands/dsyms/upload.js.map +1 -1
- package/dist/commands/junit/utils.d.ts +2 -2
- package/dist/commands/junit/utils.js +9 -11
- package/dist/commands/junit/utils.js.map +1 -1
- package/dist/commands/lambda/constants.d.ts +0 -7
- package/dist/commands/lambda/constants.js +3 -15
- package/dist/commands/lambda/constants.js.map +1 -1
- package/dist/commands/lambda/flare.js +1 -0
- package/dist/commands/lambda/flare.js.map +1 -1
- package/dist/commands/lambda/functions/instrument.js +9 -9
- package/dist/commands/lambda/functions/instrument.js.map +1 -1
- package/dist/commands/lambda/functions/uninstrument.js +6 -6
- package/dist/commands/lambda/functions/uninstrument.js.map +1 -1
- package/dist/commands/lambda/instrument.d.ts +0 -3
- package/dist/commands/lambda/instrument.js +4 -51
- package/dist/commands/lambda/instrument.js.map +1 -1
- package/dist/commands/react-native/xcode.d.ts +23 -0
- package/dist/commands/react-native/xcode.js +166 -10
- package/dist/commands/react-native/xcode.js.map +1 -1
- package/dist/commands/sarif/renderer.js +2 -2
- package/dist/commands/sarif/renderer.js.map +1 -1
- package/dist/commands/sbom/api.js +2 -2
- package/dist/commands/sbom/api.js.map +1 -1
- package/dist/commands/sbom/renderer.js +3 -3
- package/dist/commands/sbom/renderer.js.map +1 -1
- package/dist/commands/synthetics/api.d.ts +7 -3
- package/dist/commands/synthetics/api.js +20 -3
- package/dist/commands/synthetics/api.js.map +1 -1
- package/dist/commands/synthetics/base-command.d.ts +8 -2
- package/dist/commands/synthetics/base-command.js +34 -32
- package/dist/commands/synthetics/base-command.js.map +1 -1
- package/dist/commands/synthetics/batch.d.ts +4 -3
- package/dist/commands/synthetics/batch.js +27 -14
- package/dist/commands/synthetics/batch.js.map +1 -1
- package/dist/commands/synthetics/errors.d.ts +1 -1
- package/dist/commands/synthetics/errors.js +1 -1
- package/dist/commands/synthetics/errors.js.map +1 -1
- package/dist/commands/synthetics/interfaces.d.ts +13 -2
- package/dist/commands/synthetics/interfaces.js.map +1 -1
- package/dist/commands/synthetics/reporters/default.js +16 -2
- package/dist/commands/synthetics/reporters/default.js.map +1 -1
- package/dist/commands/synthetics/reporters/junit.d.ts +1 -0
- package/dist/commands/synthetics/reporters/junit.js +2 -0
- package/dist/commands/synthetics/reporters/junit.js.map +1 -1
- package/dist/commands/synthetics/run-tests-lib.js +17 -3
- package/dist/commands/synthetics/run-tests-lib.js.map +1 -1
- package/dist/commands/synthetics/test.d.ts +2 -2
- package/dist/commands/synthetics/test.js +15 -2
- package/dist/commands/synthetics/test.js.map +1 -1
- package/dist/commands/synthetics/utils/internal.d.ts +2 -2
- package/dist/commands/synthetics/utils/internal.js.map +1 -1
- package/dist/commands/synthetics/utils/public.js +9 -2
- package/dist/commands/synthetics/utils/public.js.map +1 -1
- package/dist/constants.d.ts +7 -0
- package/dist/constants.js +14 -1
- package/dist/constants.js.map +1 -1
- package/dist/helpers/app.d.ts +1 -0
- package/dist/helpers/app.js +7 -1
- package/dist/helpers/app.js.map +1 -1
- package/dist/helpers/flare.d.ts +2 -0
- package/dist/helpers/flare.js +13 -1
- package/dist/helpers/flare.js.map +1 -1
- package/dist/helpers/git/instrument-helpers.d.ts +13 -0
- package/dist/helpers/git/instrument-helpers.js +60 -0
- package/dist/helpers/git/instrument-helpers.js.map +1 -0
- package/dist/helpers/version.d.ts +1 -0
- package/dist/helpers/version.js +17 -1
- package/dist/helpers/version.js.map +1 -1
- 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
|
|
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.
|
|
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
|
|
58
|
-
|
|
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;
|
|
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
|
|
3
|
-
value
|
|
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":";;;;;;;;;;;;;;;AAEA,kDAAyB;AACzB,yCAAyC;AAEzC,+CAAuE;AACvE,2CAA2C;AAC3C,6CAA6C;AAC7C,qDAAqE;AAErE,2CAAqE;AACrE,qCAAqG;AACrG,yCAAsF;AACtF,mCAAoF;AAEpF,uEAAuE;AACvE,MAAM,EAAC,cAAc,EAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAA;AAErD,MAAa,mBAAoB,SAAQ,mBAAO;IAAhD;;;QASU,WAAM,GAAG,kBAAM,CAAC,OAAO,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAA;QACpD,YAAO,GAAG,kBAAM,CAAC,MAAM,CAAC,cAAc,EAAE;YAC9C,WAAW,EAAE,gBAAgB;SAC9B,CAAC,CAAA;QACM,aAAQ,GAAG,kBAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,EAAE,EAAE;YAC7D,WAAW,EAAE,oCAAoC;SAClD,CAAC,CAAA;QACM,gBAAW,GAAG,kBAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,KAAK,EAAE;YAC9D,WAAW,EAAE,gCAAgC;SAC9C,CAAC,CAAA;QACM,WAAM,GAAG,kBAAM,CAAC,MAAM,CAAC,aAAa,EAAE;YAC5C,WAAW,EAAE,4CAA4C;SAC1D,CAAC,CAAA;QACM,gBAAW,GAAG,kBAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,gCAAoB,EAAE;YAC1E,WAAW,EAAE,2GAA2G,gCAAoB,GAAG;SAChJ,CAAC,CAAA;QACM,qBAAgB,GAAG,kBAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE,+BAAmB,EAAE;YACpF,WAAW,EAAE,6GAA6G,+BAAmB,GAAG;SACjJ,CAAC,CAAA;QACM,SAAI,GAAG,kBAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;QACtC,oBAAe,GAAG,kBAAM,CAAC,OAAO,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAA;QAE9D,eAAU,GAAG;YACnB,IAAI,EAAE,MAAA,IAAA,eAAS,EAAC,OAAO,CAAC,GAAG,CAAC,wBAAY,CAAC,CAAC,mCAAI,KAAK;YACnD,eAAe,EAAE,MAAA,IAAA,eAAS,EAAC,OAAO,CAAC,GAAG,CAAC,qCAAyB,CAAC,CAAC,mCAAI,KAAK;SAC5E,CAAA;IA4KH,CAAC;IA1Kc,OAAO;;YAClB,IAAA,iBAAU,EAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAA;YAEtG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,KAAK,IAAA,uBAAY,EAAC,IAAI,CAAC,MAAM,CAAC,MAAM,eAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,MAAM,CAC7F,CAAA;YAED,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;oBACjB,IAAI,CAAC,OAAO,GAAG,MAAM,IAAA,0BAAiB,GAAE,CAAA;iBACzC;gBAED,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;oBAChB,IAAI,CAAC,MAAM,GAAG,MAAM,IAAA,yBAAgB,GAAE,CAAA;iBACvC;gBAED,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;oBAC9B,MAAM,WAAW,GAAG,MAAM,IAAA,2BAAkB,GAAE,CAAA;oBAC9C,IAAI,CAAC,QAAQ,GAAG,CAAC,WAAW,CAAC,CAAA;iBAC9B;aACF;YAED,8BAA8B;YAC9B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,MAAM,CAAC,8DAA8D,CAAC,CAAC,CAAA;aACxG;YACD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC9B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,MAAM,CAAC,iEAAiE,CAAC,CAAC,CAAA;aAC3G;YACD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBAChB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,MAAM,CAAC,4DAA4D,CAAC,CAAC,CAAA;aACtG;YAED,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBAC5E,OAAO,CAAC,CAAA;aACT;YACD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAA;YAErE,yBAAyB;YACzB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC,CAAA;YAC5E,MAAM,aAAa,GAAG,MAAM,IAAA,2BAAmB,GAAE,CAAA;YACjD,IAAI,CAAC,aAAa,EAAE;gBAClB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAA,2CAAgC,GAAE,CAAC,CAAA;gBAE7D,OAAO,CAAC,CAAA;aACT;YACD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAA;YAEzE,mCAAmC;YACnC,IAAI;gBACF,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;aACzE;YAAC,OAAO,KAAK,EAAE;gBACd,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAA,uBAAY,EAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAA,sBAAW,EAAC,6BAA6B,KAAK,IAAI,CAAC,CAAC,CAAA;gBAE1G,OAAO,CAAC,CAAA;aACT;YAED,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBAChB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAA;aACvF;YAED,OAAO,CAAC,CAAA;QACV,CAAC;KAAA;IAEY,mBAAmB,CAAC,OAAe,EAAE,QAAkB,EAAE,MAAc;;YAClF,MAAM,MAAM,GAAoB,IAAI,cAAc,EAAE,CAAA;YAEpD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,eAAK,CAAC,IAAI,CAAC,KAAK,IAAA,uBAAY,EAAC,IAAI,CAAC,MAAM,CAAC,iEAAiE,CAAC,CAC5G,CAAA;YACD,MAAM,sBAAsB,GAAG,MAAM,IAAA,2BAAmB,EAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;YAE3F,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,eAAK,CAAC,IAAI,CAAC,KAAK,IAAA,uBAAY,EAAC,IAAI,CAAC,MAAM,CAAC,yDAAyD,CAAC,CACpG,CAAA;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,sBAAsB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACtD,MAAM,aAAa,GAAG,sBAAsB,CAAC,CAAC,CAAC,CAAA;gBAC/C,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;gBAC/B,IAAI;oBACF,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,CAAC,CAAA;iBACnE;gBAAC,OAAO,KAAK,EAAE;oBACd,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,IAAA,uBAAY,EAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAA,sBAAW,EAAC,gCAAgC,WAAW,KAAK,KAAK,IAAI,CAAC,CACnG,CAAA;oBACD,MAAM,KAAK,CAAA;iBACZ;aACF;QACH,CAAC;KAAA;IAEY,mBAAmB,CAAC,MAAuB,EAAE,eAAyB,EAAE,WAAmB;;YACtG,MAAM,cAAc,GAAG,IAAI,CAAC,iCAAiC,CAAC,eAAe,CAAC,CAAA;YAC9E,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAA,0BAAkB,EAAC,eAAe,EAAE,cAAc,CAAC,CAAC,CAAA;YAC9E,IAAI,IAAI,CAAC,MAAM,EAAE;gBACf,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,OAAO,IAAA,uBAAY,EAAC,IAAI,CAAC,MAAM,CAAC,8BAA8B,eAAK,CAAC,IAAI,CACtE,WAAW,CACZ,4BAA4B,CAC9B,CAAA;gBAED,OAAM;aACP;iBAAM,IAAI,IAAI,CAAC,WAAW,EAAE;gBAC3B,MAAM,SAAS,GAAG,MAAM,IAAA,4BAAmB,EAAC,qCAAqC,CAAC,CAAA;gBAClF,IAAI,CAAC,SAAS,EAAE;oBACd,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;iBACxD;aACF;YAED,MAAM,IAAA,sBAAW,EACf,2BAA2B,eAAK,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EACvD,GAAS,EAAE;gBACT,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC;oBAC7C,OAAO,EAAE,cAAc;iBACxB,CAAC,CAAA;gBACF,MAAM,SAAS,CAAC,OAAO,EAAE,CAAA;YAC3B,CAAC,CAAA,EACD,0BAA0B,eAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CACpD,CAAA;QACH,CAAC;KAAA;IAEM,iCAAiC,CAAC,OAAiB;QACxD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAA;QACvC,MAAM,UAAU,GAAiB,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAA;QAC1D,MAAM,OAAO,GAAc,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAA;QAEjD,IAAI,iBAAiB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,CAAC,CAAA;QAC7E,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,gBAAgB,CAAC,CAAA;QAE9E,IAAI,iBAAiB,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,EAAE;YAClD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,IAAA,4BAAiB,EAAC,sBAAsB,IAAI,CAAC,WAAW;CAC/D,CAAC,CACK,CAAA;SACF;QAED,IAAI,cAAc,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE;YAC5C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,IAAA,4BAAiB,EAAC,kBAAkB,IAAI,CAAC,gBAAgB;CAChE,CAAC,CACK,CAAA;SACF;QAED,iBAAiB,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAA;QAE5E,uCACK,OAAO,KACV,QAAQ,kCACH,QAAQ,KACX,UAAU,EAAE,iBAAiB,EAC7B,OAAO,EAAE,cAAc;gBACvB,0CAA0C;gBAC1C,QAAQ,EAAE,SAAS,OAEtB;IACH,CAAC;IAED,gDAAgD;IACxC,kBAAkB,CAAC,YAAwB;QACjD,MAAM,oBAAoB,GAAG,YAAY,CAAC,YAAY,IAAI,EAAE,CAAA;QAC5D,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,gBAAgB,CAAC,CAAA;QAEhG,MAAM,eAAe,GAAG,YAAY,CAAC,GAAG,IAAI,EAAE,CAAA;QAC9C,qCAAqC;QACrC,MAAM,cAAc,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAA;QAE/E,uCACK,YAAY,KACf,YAAY,EAAE,mBAAmB,EACjC,GAAG,EAAE,cAAc,IACpB;IACH,CAAC;;AA7MH,kDA8MC;AA7MC,oEAAoE;AACtD,yBAAK,GAAG,CAAC,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,AAAlC,CAAkC;AAEvC,yBAAK,GAAG,mBAAO,CAAC,KAAK,CAAC;IAClC,QAAQ,EAAE,YAAY;IACtB,WAAW,EAAE,oDAAoD;CAClE,CAAC,AAHiB,CAGjB"}
|
|
@@ -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":"
|
|
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
|
-
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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":";;;;;;AAAA,kDAAyB;AACzB,kDAAyB;
|
|
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']) {
|