@datadog/datadog-ci 3.11.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 (133) 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/cli.js +1 -1
  10. package/dist/commands/cloud-run/cli.js.map +1 -1
  11. package/dist/commands/cloud-run/constants.d.ts +2 -0
  12. package/dist/commands/cloud-run/constants.js +3 -1
  13. package/dist/commands/cloud-run/constants.js.map +1 -1
  14. package/dist/commands/cloud-run/flare.d.ts +2 -4
  15. package/dist/commands/cloud-run/flare.js +5 -3
  16. package/dist/commands/cloud-run/flare.js.map +1 -1
  17. package/dist/commands/cloud-run/instrument.d.ts +19 -6
  18. package/dist/commands/cloud-run/instrument.js +350 -32
  19. package/dist/commands/cloud-run/instrument.js.map +1 -1
  20. package/dist/commands/cloud-run/interfaces.d.ts +0 -18
  21. package/dist/commands/cloud-run/prompt.d.ts +5 -0
  22. package/dist/commands/cloud-run/prompt.js +86 -0
  23. package/dist/commands/cloud-run/prompt.js.map +1 -0
  24. package/dist/commands/cloud-run/renderer.d.ts +9 -2
  25. package/dist/commands/cloud-run/renderer.js +44 -11
  26. package/dist/commands/cloud-run/renderer.js.map +1 -1
  27. package/dist/commands/cloud-run/types.d.ts +50 -0
  28. package/dist/commands/cloud-run/types.js +5 -0
  29. package/dist/commands/cloud-run/types.js.map +1 -0
  30. package/dist/commands/cloud-run/uninstrument.d.ts +21 -0
  31. package/dist/commands/cloud-run/uninstrument.js +187 -0
  32. package/dist/commands/cloud-run/uninstrument.js.map +1 -0
  33. package/dist/commands/cloud-run/utils.d.ts +10 -0
  34. package/dist/commands/cloud-run/utils.js +81 -1
  35. package/dist/commands/cloud-run/utils.js.map +1 -1
  36. package/dist/commands/coverage/renderer.d.ts +2 -1
  37. package/dist/commands/coverage/renderer.js +12 -7
  38. package/dist/commands/coverage/renderer.js.map +1 -1
  39. package/dist/commands/coverage/upload.js +6 -6
  40. package/dist/commands/coverage/upload.js.map +1 -1
  41. package/dist/commands/coverage/utils.d.ts +8 -2
  42. package/dist/commands/coverage/utils.js +119 -4
  43. package/dist/commands/coverage/utils.js.map +1 -1
  44. package/dist/commands/dora/api.js +6 -0
  45. package/dist/commands/dora/api.js.map +1 -1
  46. package/dist/commands/dora/deployment.d.ts +2 -0
  47. package/dist/commands/dora/deployment.js +12 -0
  48. package/dist/commands/dora/deployment.js.map +1 -1
  49. package/dist/commands/dora/interfaces.d.ts +2 -0
  50. package/dist/commands/dsyms/interfaces.d.ts +5 -5
  51. package/dist/commands/dsyms/interfaces.js +1 -1
  52. package/dist/commands/dsyms/interfaces.js.map +1 -1
  53. package/dist/commands/dsyms/renderer.d.ts +2 -2
  54. package/dist/commands/dsyms/renderer.js +6 -6
  55. package/dist/commands/dsyms/renderer.js.map +1 -1
  56. package/dist/commands/dsyms/upload.d.ts +17 -12
  57. package/dist/commands/dsyms/upload.js +177 -145
  58. package/dist/commands/dsyms/upload.js.map +1 -1
  59. package/dist/commands/elf-symbols/elf.js +4 -10
  60. package/dist/commands/elf-symbols/elf.js.map +1 -1
  61. package/dist/commands/junit/utils.d.ts +2 -2
  62. package/dist/commands/junit/utils.js +9 -11
  63. package/dist/commands/junit/utils.js.map +1 -1
  64. package/dist/commands/lambda/constants.d.ts +0 -7
  65. package/dist/commands/lambda/constants.js +3 -15
  66. package/dist/commands/lambda/constants.js.map +1 -1
  67. package/dist/commands/lambda/flare.js +1 -0
  68. package/dist/commands/lambda/flare.js.map +1 -1
  69. package/dist/commands/lambda/functions/instrument.js +9 -9
  70. package/dist/commands/lambda/functions/instrument.js.map +1 -1
  71. package/dist/commands/lambda/functions/uninstrument.js +6 -6
  72. package/dist/commands/lambda/functions/uninstrument.js.map +1 -1
  73. package/dist/commands/lambda/instrument.d.ts +0 -3
  74. package/dist/commands/lambda/instrument.js +4 -51
  75. package/dist/commands/lambda/instrument.js.map +1 -1
  76. package/dist/commands/react-native/xcode.d.ts +23 -0
  77. package/dist/commands/react-native/xcode.js +166 -10
  78. package/dist/commands/react-native/xcode.js.map +1 -1
  79. package/dist/commands/sarif/renderer.js +2 -2
  80. package/dist/commands/sarif/renderer.js.map +1 -1
  81. package/dist/commands/sbom/api.js +2 -2
  82. package/dist/commands/sbom/api.js.map +1 -1
  83. package/dist/commands/sbom/language.js +3 -0
  84. package/dist/commands/sbom/language.js.map +1 -1
  85. package/dist/commands/sbom/renderer.js +3 -3
  86. package/dist/commands/sbom/renderer.js.map +1 -1
  87. package/dist/commands/sbom/types.d.ts +2 -1
  88. package/dist/commands/sbom/types.js +1 -0
  89. package/dist/commands/sbom/types.js.map +1 -1
  90. package/dist/commands/synthetics/api.d.ts +7 -3
  91. package/dist/commands/synthetics/api.js +20 -3
  92. package/dist/commands/synthetics/api.js.map +1 -1
  93. package/dist/commands/synthetics/base-command.d.ts +8 -2
  94. package/dist/commands/synthetics/base-command.js +34 -32
  95. package/dist/commands/synthetics/base-command.js.map +1 -1
  96. package/dist/commands/synthetics/batch.d.ts +4 -3
  97. package/dist/commands/synthetics/batch.js +27 -14
  98. package/dist/commands/synthetics/batch.js.map +1 -1
  99. package/dist/commands/synthetics/errors.d.ts +1 -1
  100. package/dist/commands/synthetics/errors.js +1 -1
  101. package/dist/commands/synthetics/errors.js.map +1 -1
  102. package/dist/commands/synthetics/interfaces.d.ts +50 -19
  103. package/dist/commands/synthetics/interfaces.js.map +1 -1
  104. package/dist/commands/synthetics/reporters/default.js +16 -2
  105. package/dist/commands/synthetics/reporters/default.js.map +1 -1
  106. package/dist/commands/synthetics/reporters/junit.d.ts +1 -0
  107. package/dist/commands/synthetics/reporters/junit.js +2 -0
  108. package/dist/commands/synthetics/reporters/junit.js.map +1 -1
  109. package/dist/commands/synthetics/run-tests-lib.js +17 -3
  110. package/dist/commands/synthetics/run-tests-lib.js.map +1 -1
  111. package/dist/commands/synthetics/test.d.ts +2 -2
  112. package/dist/commands/synthetics/test.js +15 -2
  113. package/dist/commands/synthetics/test.js.map +1 -1
  114. package/dist/commands/synthetics/utils/internal.d.ts +2 -2
  115. package/dist/commands/synthetics/utils/internal.js.map +1 -1
  116. package/dist/commands/synthetics/utils/public.js +9 -2
  117. package/dist/commands/synthetics/utils/public.js.map +1 -1
  118. package/dist/constants.d.ts +10 -0
  119. package/dist/constants.js +17 -1
  120. package/dist/constants.js.map +1 -1
  121. package/dist/helpers/app.d.ts +1 -0
  122. package/dist/helpers/app.js +7 -1
  123. package/dist/helpers/app.js.map +1 -1
  124. package/dist/helpers/flare.d.ts +2 -0
  125. package/dist/helpers/flare.js +13 -1
  126. package/dist/helpers/flare.js.map +1 -1
  127. package/dist/helpers/git/instrument-helpers.d.ts +13 -0
  128. package/dist/helpers/git/instrument-helpers.js +60 -0
  129. package/dist/helpers/git/instrument-helpers.js.map +1 -0
  130. package/dist/helpers/version.d.ts +1 -0
  131. package/dist/helpers/version.js +17 -1
  132. package/dist/helpers/version.js.map +1 -1
  133. package/package.json +6 -3
@@ -1,23 +1,36 @@
1
+ import type { IContainer, IService, ServicesClient as IServicesClient } from './types';
1
2
  import { Command } from 'clipanion';
2
3
  export declare class InstrumentCommand extends Command {
4
+ static paths: string[][];
3
5
  static usage: import("clipanion").Usage;
4
- private configPath;
5
6
  private dryRun;
6
7
  private environment;
7
8
  private extraTags;
8
9
  private project;
9
10
  private services;
10
11
  private interactive;
11
- private logging;
12
- private logLevel;
13
- private regExPattern;
14
12
  private region;
15
- private service;
13
+ private logLevel;
16
14
  private sourceCodeIntegration;
17
15
  private uploadGitMetadata;
18
16
  private tracing;
19
17
  private version;
20
18
  private llmobs;
21
- private config;
19
+ private healthCheckPort;
20
+ private sidecarImage;
21
+ private sidecarName;
22
+ private sharedVolumeName;
23
+ private sharedVolumePath;
24
+ private logsPath;
25
+ private sidecarCpus;
26
+ private sidecarMemory;
27
+ private fips;
28
+ private fipsIgnoreError;
29
+ private fipsConfig;
22
30
  execute(): Promise<0 | 1>;
31
+ instrumentSidecar(project: string, services: string[], region: string, ddService: string | undefined): Promise<void>;
32
+ instrumentService(client: IServicesClient, existingService: IService, serviceName: string, ddService: string): Promise<void>;
33
+ createInstrumentedServiceConfig(service: IService, ddService: string): IService;
34
+ buildSidecarContainer(existingSidecarContainer: IContainer | undefined, ddService: string): IContainer;
35
+ private updateAppContainer;
23
36
  }
@@ -15,54 +15,372 @@ Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.InstrumentCommand = void 0;
16
16
  const chalk_1 = __importDefault(require("chalk"));
17
17
  const clipanion_1 = require("clipanion");
18
- const renderer_1 = require("./renderer");
19
- const utils_1 = require("./utils");
18
+ const constants_1 = require("../../constants");
19
+ const apikey_1 = require("../../helpers/apikey");
20
+ const env_1 = require("../../helpers/env");
21
+ const fips_1 = require("../../helpers/fips");
22
+ const instrument_helpers_1 = require("../../helpers/git/instrument-helpers");
23
+ const renderer_1 = require("../../helpers/renderer");
24
+ const utils_1 = require("../../helpers/utils");
25
+ const validation_1 = require("../../helpers/validation");
26
+ const constants_2 = require("./constants");
27
+ const prompt_1 = require("./prompt");
28
+ const renderer_2 = require("./renderer");
29
+ const utils_2 = require("./utils");
30
+ // XXX temporary workaround for @google-cloud/run ESM/CJS module issues
31
+ const { ServicesClient } = require('@google-cloud/run');
32
+ // equivalent to google.cloud.run.v2.EmptyDirVolumeSource.Medium.MEMORY
33
+ const EMPTY_DIR_VOLUME_SOURCE_MEMORY = 1;
34
+ const DEFAULT_VOLUME_PATH = '/shared-volume';
35
+ const DEFAULT_LOGS_PATH = '/shared-volume/logs/*.log';
36
+ const DEFAULT_HEALTH_CHECK_PORT = 5555;
37
+ const DEFAULT_SIDECAR_IMAGE = 'gcr.io/datadoghq/serverless-init:latest';
38
+ const DEFAULT_ENV_VARS = [
39
+ { name: constants_1.SITE_ENV_VAR, value: constants_1.DATADOG_SITE_US1 },
40
+ { name: constants_1.LOGS_INJECTION_ENV_VAR, value: 'true' },
41
+ { name: constants_1.DD_TRACE_ENABLED_ENV_VAR, value: 'true' },
42
+ { name: constants_1.HEALTH_PORT_ENV_VAR, value: DEFAULT_HEALTH_CHECK_PORT.toString() },
43
+ ];
20
44
  class InstrumentCommand extends clipanion_1.Command {
21
45
  constructor() {
22
- // TODO uncomment when commnand is ready and add to docs: https://github.com/DataDog/datadog-ci#cloud-run
23
- // public static paths = [['cloud-run', 'instrument']]
46
+ var _a, _b;
24
47
  super(...arguments);
25
- this.configPath = clipanion_1.Option.String('--config'); // todo
26
- this.dryRun = clipanion_1.Option.Boolean('-d,--dry,--dry-run', false); // todo
27
- this.environment = clipanion_1.Option.String('--env'); // todo
28
- this.extraTags = clipanion_1.Option.String('--extra-tags,--extraTags'); // todo
29
- this.project = clipanion_1.Option.String('-p,--project'); // todo
30
- this.services = clipanion_1.Option.Array('-s,--service,--services', []); // todo
31
- this.interactive = clipanion_1.Option.Boolean('-i,--interactive', false); // todo
32
- this.logging = clipanion_1.Option.String('--logging'); // todo
33
- this.logLevel = clipanion_1.Option.String('--log-level,--logLevel'); // todo
34
- this.regExPattern = clipanion_1.Option.String('--services-regex,--servicesRegex'); // todo
35
- this.region = clipanion_1.Option.String('-r,--region'); // todo
36
- this.service = clipanion_1.Option.String('--service'); // todo
37
- this.sourceCodeIntegration = clipanion_1.Option.Boolean('-s,--source-code-integration,--sourceCodeIntegration', true); // todo
38
- this.uploadGitMetadata = clipanion_1.Option.Boolean('-u,--upload-git-metadata,--uploadGitMetadata', true); // todo
39
- this.tracing = clipanion_1.Option.String('--tracing'); // todo
40
- this.version = clipanion_1.Option.String('--version'); // todo
41
- this.llmobs = clipanion_1.Option.String('--llmobs'); // todo
42
- this.config = {
43
- services: [],
44
- tracing: 'true',
45
- logging: 'true',
48
+ // private configPath = Option.String('--config') implement if requested by customers
49
+ this.dryRun = clipanion_1.Option.Boolean('-d,--dry,--dry-run', false);
50
+ this.environment = clipanion_1.Option.String('--env');
51
+ this.extraTags = clipanion_1.Option.String('--extra-tags,--extraTags');
52
+ this.project = clipanion_1.Option.String('-p,--project', {
53
+ description: 'GCP project ID',
54
+ });
55
+ this.services = clipanion_1.Option.Array('-s,--service,--services', [], {
56
+ description: 'Cloud Run service(s) to instrument',
57
+ });
58
+ this.interactive = clipanion_1.Option.Boolean('-i,--interactive', false, {
59
+ description: 'Prompt for flags one at a time',
60
+ });
61
+ this.region = clipanion_1.Option.String('-r,--region', {
62
+ description: 'GCP region your service(s) are deployed in',
63
+ });
64
+ this.logLevel = clipanion_1.Option.String('--log-level,--logLevel');
65
+ this.sourceCodeIntegration = clipanion_1.Option.Boolean('--source-code-integration,--sourceCodeIntegration', true);
66
+ this.uploadGitMetadata = clipanion_1.Option.Boolean('-u,--upload-git-metadata,--uploadGitMetadata', true);
67
+ this.tracing = clipanion_1.Option.String('--tracing');
68
+ this.version = clipanion_1.Option.String('--version');
69
+ this.llmobs = clipanion_1.Option.String('--llmobs');
70
+ this.healthCheckPort = clipanion_1.Option.String('--port,--health-check-port,--healthCheckPort');
71
+ this.sidecarImage = clipanion_1.Option.String('--image,--sidecar-image', DEFAULT_SIDECAR_IMAGE, {
72
+ description: `The image to use for the sidecar container. Defaults to '${DEFAULT_SIDECAR_IMAGE}'`,
73
+ });
74
+ this.sidecarName = clipanion_1.Option.String('--sidecar-name', constants_2.DEFAULT_SIDECAR_NAME, {
75
+ description: `(Not recommended) The name to use for the sidecar container. Defaults to '${constants_2.DEFAULT_SIDECAR_NAME}'`,
76
+ });
77
+ this.sharedVolumeName = clipanion_1.Option.String('--shared-volume-name', constants_2.DEFAULT_VOLUME_NAME, {
78
+ description: `(Not recommended) The name to use for the shared volume. Defaults to '${constants_2.DEFAULT_VOLUME_NAME}'`,
79
+ });
80
+ this.sharedVolumePath = clipanion_1.Option.String('--shared-volume-path', DEFAULT_VOLUME_PATH, {
81
+ description: `(Not recommended) The path to use for the shared volume. Defaults to '${DEFAULT_VOLUME_PATH}'`,
82
+ });
83
+ this.logsPath = clipanion_1.Option.String('--logs-path', DEFAULT_LOGS_PATH, {
84
+ description: `(Not recommended) The path to use for the logs. Defaults to '${DEFAULT_LOGS_PATH}'. Must begin with the shared volume path.`,
85
+ });
86
+ this.sidecarCpus = clipanion_1.Option.String('--sidecar-cpus', '1', {
87
+ description: `The number of CPUs to allocate to the sidecar container. Defaults to 1.`,
88
+ });
89
+ this.sidecarMemory = clipanion_1.Option.String('--sidecar-memory', '512Mi', {
90
+ description: `The number of CPUs to allocate to the sidecar container. Defaults to '512Mi'.`,
91
+ });
92
+ this.fips = clipanion_1.Option.Boolean('--fips', false);
93
+ this.fipsIgnoreError = clipanion_1.Option.Boolean('--fips-ignore-error', false);
94
+ this.fipsConfig = {
95
+ fips: (_a = (0, env_1.toBoolean)(process.env[constants_1.FIPS_ENV_VAR])) !== null && _a !== void 0 ? _a : false,
96
+ fipsIgnoreError: (_b = (0, env_1.toBoolean)(process.env[constants_1.FIPS_IGNORE_ERROR_ENV_VAR])) !== null && _b !== void 0 ? _b : false,
46
97
  };
47
98
  }
48
99
  execute() {
100
+ var _a, _b;
49
101
  return __awaiter(this, void 0, void 0, function* () {
50
- // TODO FIPS
51
- this.context.stdout.write((0, renderer_1.renderCloudRunInstrumentUninstrumentHeader)(Object.getPrototypeOf(this), this.dryRun));
52
- // TODO resolve config from file
102
+ (0, fips_1.enableFips)(this.fips || this.fipsConfig.fips, this.fipsIgnoreError || this.fipsConfig.fipsIgnoreError);
103
+ this.context.stdout.write(`\n${(0, renderer_2.dryRunPrefix)(this.dryRun)}🐶 ${chalk_1.default.bold('Instrumenting Cloud Run service(s)')}\n\n`);
104
+ // Verify DD API Key
105
+ const isApiKeyValid = yield (0, apikey_1.newApiKeyValidator)({
106
+ apiKey: process.env.DD_API_KEY,
107
+ datadogSite: (_a = process.env.DD_SITE) !== null && _a !== void 0 ? _a : constants_1.DATADOG_SITE_US1,
108
+ }).validateApiKey();
109
+ if (!isApiKeyValid) {
110
+ this.context.stdout.write((0, renderer_1.renderSoftWarning)(`Invalid API Key stored in the environment variable ${chalk_1.default.bold('DD_API_KEY')}: ${(0, utils_1.maskString)((_b = process.env.DD_API_KEY) !== null && _b !== void 0 ? _b : '')}\nEnsure you copied the value and not the Key ID.`));
111
+ return 1;
112
+ }
113
+ if (this.interactive) {
114
+ if (!this.project) {
115
+ this.project = yield (0, prompt_1.requestGCPProject)();
116
+ }
117
+ if (!this.region) {
118
+ this.region = yield (0, prompt_1.requestGCPRegion)();
119
+ }
120
+ if (this.services.length === 0) {
121
+ const serviceName = yield (0, prompt_1.requestServiceName)();
122
+ this.services = [serviceName];
123
+ }
124
+ const envSite = process.env[constants_1.CI_SITE_ENV_VAR];
125
+ if (!(0, validation_1.isValidDatadogSite)(envSite)) {
126
+ process.env[constants_1.CI_SITE_ENV_VAR] = yield (0, prompt_1.requestSite)();
127
+ }
128
+ }
129
+ // Validate required variables
130
+ if (!this.project) {
131
+ this.context.stdout.write(chalk_1.default.yellow('Invalid or missing project. Please use the --project flag.\n'));
132
+ }
133
+ if (this.services.length === 0) {
134
+ this.context.stdout.write(chalk_1.default.yellow('Invalid or missing service(s). Please use the --service flag.\n'));
135
+ }
136
+ if (!this.region) {
137
+ this.context.stdout.write(chalk_1.default.yellow('Invalid or missing region. Please use the --region flag.\n'));
138
+ }
139
+ const ddService = process.env[constants_1.SERVICE_ENV_VAR];
140
+ if (!ddService) {
141
+ this.context.stdout.write((0, renderer_1.renderSoftWarning)('No DD_SERVICE env var found. Will default to the service name.'));
142
+ }
143
+ if (this.extraTags && !this.extraTags.match(constants_1.EXTRA_TAGS_REG_EXP)) {
144
+ this.context.stderr.write((0, renderer_1.renderError)('Extra tags do not comply with the <key>:<value> array.\n'));
145
+ return 1;
146
+ }
147
+ if (!this.project || !this.services || !this.services.length || !this.region) {
148
+ return 1;
149
+ }
150
+ this.context.stdout.write(chalk_1.default.green('✔ Required flags verified\n'));
53
151
  // Verify GCP credentials
54
152
  this.context.stdout.write(chalk_1.default.bold('\n🔑 Verifying GCP credentials...\n'));
55
- const authenticated = yield (0, utils_1.checkAuthentication)();
153
+ const authenticated = yield (0, utils_2.checkAuthentication)();
56
154
  if (!authenticated) {
57
- this.context.stderr.write((0, renderer_1.renderAuthenticationInstructions)());
155
+ this.context.stderr.write((0, renderer_2.renderAuthenticationInstructions)());
58
156
  return 1;
59
157
  }
60
- this.context.stdout.write('GCP credentials verified!\n');
61
- return Promise.resolve(0);
158
+ this.context.stdout.write(chalk_1.default.green('GCP credentials verified!\n\n'));
159
+ // Source code integration
160
+ if (this.sourceCodeIntegration) {
161
+ try {
162
+ const gitData = yield (0, instrument_helpers_1.getGitData)();
163
+ if (this.uploadGitMetadata) {
164
+ yield (0, instrument_helpers_1.uploadGitData)(this.context);
165
+ }
166
+ if (this.extraTags) {
167
+ this.extraTags += `,git.commit.sha:${gitData.commitSha},git.repository_url:${gitData.gitRemote}`;
168
+ }
169
+ else {
170
+ this.extraTags = `git.commit.sha:${gitData.commitSha},git.repository_url:${gitData.gitRemote}`;
171
+ }
172
+ }
173
+ catch (err) {
174
+ this.context.stdout.write((0, renderer_1.renderSoftWarning)(`Couldn't add source code integration, continuing without it. ${err}`));
175
+ }
176
+ }
177
+ // Instrument services with sidecar
178
+ try {
179
+ yield this.instrumentSidecar(this.project, this.services, this.region, ddService);
180
+ }
181
+ catch (error) {
182
+ this.context.stderr.write((0, renderer_2.dryRunPrefix)(this.dryRun) + (0, renderer_1.renderError)(`Uninstrumentation failed: ${error}\n`));
183
+ return 1;
184
+ }
185
+ if (!this.dryRun) {
186
+ this.context.stdout.write('\n✅ Cloud Run instrumentation completed successfully!\n');
187
+ }
188
+ return 0;
189
+ });
190
+ }
191
+ instrumentSidecar(project, services, region, ddService) {
192
+ return __awaiter(this, void 0, void 0, function* () {
193
+ const client = new ServicesClient();
194
+ this.context.stdout.write(chalk_1.default.bold(`\n${(0, renderer_2.dryRunPrefix)(this.dryRun)}⬇️ Fetching existing service configurations from Cloud Run...\n`));
195
+ const existingServiceConfigs = yield (0, utils_2.fetchServiceConfigs)(client, project, region, services);
196
+ this.context.stdout.write(chalk_1.default.bold(`\n${(0, renderer_2.dryRunPrefix)(this.dryRun)}🚀 Instrumenting Cloud Run services with sidecar...\n`));
197
+ for (let i = 0; i < existingServiceConfigs.length; i++) {
198
+ const serviceConfig = existingServiceConfigs[i];
199
+ const serviceName = services[i];
200
+ try {
201
+ const actualDDService = ddService !== null && ddService !== void 0 ? ddService : serviceName;
202
+ yield this.instrumentService(client, serviceConfig, serviceName, actualDDService);
203
+ }
204
+ catch (error) {
205
+ this.context.stderr.write((0, renderer_2.dryRunPrefix)(this.dryRun) + (0, renderer_1.renderError)(`Failed to instrument service ${serviceName}: ${error}\n`));
206
+ throw error;
207
+ }
208
+ }
209
+ });
210
+ }
211
+ instrumentService(client, existingService, serviceName, ddService) {
212
+ return __awaiter(this, void 0, void 0, function* () {
213
+ const updatedService = this.createInstrumentedServiceConfig(existingService, ddService);
214
+ this.context.stdout.write((0, utils_2.generateConfigDiff)(existingService, updatedService));
215
+ if (this.dryRun) {
216
+ 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`);
217
+ return;
218
+ }
219
+ else if (this.interactive) {
220
+ const confirmed = yield (0, prompt_1.requestConfirmation)('\nDo you want to apply the changes?');
221
+ if (!confirmed) {
222
+ throw new Error('Instrumentation cancelled by user.');
223
+ }
224
+ }
225
+ yield (0, renderer_2.withSpinner)(`Instrumenting service ${chalk_1.default.bold(serviceName)}...`, () => __awaiter(this, void 0, void 0, function* () {
226
+ const [operation] = yield client.updateService({
227
+ service: updatedService,
228
+ });
229
+ yield operation.promise();
230
+ }), `Instrumented service ${chalk_1.default.bold(serviceName)}`);
231
+ });
232
+ }
233
+ createInstrumentedServiceConfig(service, ddService) {
234
+ const template = service.template || {};
235
+ const containers = template.containers || [];
236
+ const volumes = template.volumes || [];
237
+ const existingSidecarContainer = containers.find((c) => c.name === this.sidecarName);
238
+ const newSidecarContainer = this.buildSidecarContainer(existingSidecarContainer, ddService);
239
+ // Update all app containers to add volume mounts and env vars if they don't have them
240
+ const updatedContainers = containers.map((container) => {
241
+ if (container.name === this.sidecarName) {
242
+ return newSidecarContainer;
243
+ }
244
+ return this.updateAppContainer(container, ddService);
62
245
  });
246
+ // Add sidecar if it doesn't exist
247
+ if (!existingSidecarContainer) {
248
+ updatedContainers.push(newSidecarContainer);
249
+ }
250
+ // Add shared volume if it doesn't exist
251
+ const hasSharedVolume = volumes.some((volume) => volume.name === this.sharedVolumeName);
252
+ const updatedVolumes = hasSharedVolume
253
+ ? volumes
254
+ : [
255
+ ...volumes,
256
+ {
257
+ name: this.sharedVolumeName,
258
+ emptyDir: {
259
+ medium: EMPTY_DIR_VOLUME_SOURCE_MEMORY,
260
+ },
261
+ },
262
+ ];
263
+ return Object.assign(Object.assign({}, service), { template: Object.assign(Object.assign({}, template), { containers: updatedContainers, volumes: updatedVolumes,
264
+ // Let GCR generate the next revision name
265
+ revision: undefined }) });
266
+ }
267
+ buildSidecarContainer(existingSidecarContainer, ddService) {
268
+ var _a, _b, _c;
269
+ const newEnvVars = {};
270
+ for (const envVar of (_a = existingSidecarContainer === null || existingSidecarContainer === void 0 ? void 0 : existingSidecarContainer.env) !== null && _a !== void 0 ? _a : []) {
271
+ newEnvVars[envVar.name] = envVar.value;
272
+ }
273
+ // Add these env vars to the container if they don't already exist,
274
+ // but leave them unchanged if they already exist in the container.
275
+ for (const { name, value } of DEFAULT_ENV_VARS) {
276
+ if (!(name in newEnvVars)) {
277
+ newEnvVars[name] = value;
278
+ }
279
+ }
280
+ // Overwrite existing env vars with these if they already exist
281
+ // and add them to the container if they don't exist yet.
282
+ newEnvVars[constants_1.API_KEY_ENV_VAR] = (_b = process.env[constants_1.API_KEY_ENV_VAR]) !== null && _b !== void 0 ? _b : '';
283
+ newEnvVars[constants_1.SERVICE_ENV_VAR] = ddService;
284
+ if (process.env[constants_1.SITE_ENV_VAR]) {
285
+ newEnvVars[constants_1.SITE_ENV_VAR] = process.env[constants_1.SITE_ENV_VAR];
286
+ }
287
+ if (this.tracing) {
288
+ newEnvVars[constants_1.DD_TRACE_ENABLED_ENV_VAR] = this.tracing;
289
+ }
290
+ if (this.environment) {
291
+ newEnvVars[constants_1.ENVIRONMENT_ENV_VAR] = this.environment;
292
+ }
293
+ if (this.version) {
294
+ newEnvVars[constants_1.VERSION_ENV_VAR] = this.version;
295
+ }
296
+ if (this.logLevel) {
297
+ newEnvVars[constants_1.DD_LOG_LEVEL_ENV_VAR] = this.logLevel;
298
+ }
299
+ if (this.extraTags) {
300
+ newEnvVars[constants_1.DD_TAGS_ENV_VAR] = this.extraTags;
301
+ }
302
+ newEnvVars[constants_1.LOGS_PATH_ENV_VAR] = this.logsPath;
303
+ // If port is specified, overwrite any existing value
304
+ // If port is not specified but already exists, leave the existing value unchanged
305
+ // If port is not specified and does not exist, default to 5555
306
+ let healthCheckPort = (_c = newEnvVars[constants_1.HEALTH_PORT_ENV_VAR]) !== null && _c !== void 0 ? _c : DEFAULT_HEALTH_CHECK_PORT.toString();
307
+ if (this.healthCheckPort) {
308
+ const newHealthCheckPort = Number(this.healthCheckPort);
309
+ if (!Number.isNaN(newHealthCheckPort)) {
310
+ healthCheckPort = newHealthCheckPort.toString();
311
+ newEnvVars[constants_1.HEALTH_PORT_ENV_VAR] = healthCheckPort;
312
+ }
313
+ }
314
+ const newEnv = Object.entries(newEnvVars).map(([name, value]) => ({ name, value }));
315
+ // Create sidecar container with volume mount and environment variables
316
+ return {
317
+ name: this.sidecarName,
318
+ image: this.sidecarImage,
319
+ volumeMounts: [
320
+ {
321
+ name: this.sharedVolumeName,
322
+ mountPath: this.sharedVolumePath,
323
+ },
324
+ ],
325
+ env: newEnv,
326
+ startupProbe: {
327
+ tcpSocket: {
328
+ port: healthCheckPort,
329
+ },
330
+ initialDelaySeconds: 0,
331
+ periodSeconds: 10,
332
+ failureThreshold: 3,
333
+ timeoutSeconds: 1,
334
+ },
335
+ resources: {
336
+ limits: {
337
+ memory: this.sidecarMemory,
338
+ cpu: this.sidecarCpus,
339
+ },
340
+ },
341
+ };
342
+ }
343
+ // Add volume mount and update required env vars
344
+ updateAppContainer(appContainer, ddService) {
345
+ var _a;
346
+ const existingVolumeMounts = appContainer.volumeMounts || [];
347
+ const hasSharedVolumeMount = existingVolumeMounts.some((mount) => mount.name === this.sharedVolumeName);
348
+ const existingEnvVars = appContainer.env || [];
349
+ const updatedContainer = Object.assign({}, appContainer);
350
+ if (!hasSharedVolumeMount) {
351
+ updatedContainer.volumeMounts = [
352
+ ...existingVolumeMounts,
353
+ {
354
+ name: this.sharedVolumeName,
355
+ mountPath: this.sharedVolumePath,
356
+ },
357
+ ];
358
+ }
359
+ // Update environment variables
360
+ const newEnvVars = {};
361
+ for (const { name, value } of existingEnvVars) {
362
+ newEnvVars[name] = value;
363
+ }
364
+ // Default to DD_LOGS_INJECTION=true, but don't overwrite existing value
365
+ if (!(constants_1.LOGS_INJECTION_ENV_VAR in newEnvVars)) {
366
+ newEnvVars[constants_1.LOGS_INJECTION_ENV_VAR] = 'true';
367
+ }
368
+ // Replace or add other env vars
369
+ newEnvVars[constants_1.SERVICE_ENV_VAR] = ddService;
370
+ newEnvVars[constants_1.API_KEY_ENV_VAR] = (_a = process.env[constants_1.API_KEY_ENV_VAR]) !== null && _a !== void 0 ? _a : '';
371
+ if (this.llmobs) {
372
+ newEnvVars[constants_1.DD_LLMOBS_ENABLED_ENV_VAR] = 'true';
373
+ newEnvVars[constants_1.DD_LLMOBS_ML_APP_ENV_VAR] = this.llmobs;
374
+ // serverless-init is installed, so agentless mode should be false
375
+ newEnvVars[constants_1.DD_LLMOBS_AGENTLESS_ENABLED_ENV_VAR] = 'false';
376
+ }
377
+ updatedContainer.env = Object.entries(newEnvVars).map(([name, value]) => ({ name, value }));
378
+ return updatedContainer;
63
379
  }
64
380
  }
65
381
  exports.InstrumentCommand = InstrumentCommand;
382
+ // TODO add to docs: https://github.com/DataDog/datadog-ci#cloud-run
383
+ InstrumentCommand.paths = [['cloud-run', 'instrument']];
66
384
  InstrumentCommand.usage = clipanion_1.Command.Usage({
67
385
  category: 'Serverless',
68
386
  description: 'Apply Datadog instrumentation to a Cloud Run app.',
@@ -1 +1 @@
1
- {"version":3,"file":"instrument.js","sourceRoot":"","sources":["../../../src/commands/cloud-run/instrument.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"instrument.js","sourceRoot":"","sources":["../../../src/commands/cloud-run/instrument.ts"],"names":[],"mappings":"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"}
@@ -25,24 +25,6 @@ export interface LogConfig {
25
25
  fileName: string;
26
26
  severityFilter?: string;
27
27
  }
28
- /**
29
- * Configuration options provided by the user through
30
- * the CLI in order to instrument properly.
31
- */
32
- export interface CloudRunConfigOptions {
33
- environment?: string;
34
- extraTags?: string;
35
- services: string[];
36
- interactive?: boolean;
37
- logging?: string;
38
- logLevel?: string;
39
- profile?: string;
40
- region?: string;
41
- service?: string;
42
- tracing?: string;
43
- version?: string;
44
- llmobs?: string;
45
- }
46
28
  /**
47
29
  * Interface for Unified Service Tagging.
48
30
  *
@@ -0,0 +1,5 @@
1
+ export declare const requestGCPProject: () => Promise<string>;
2
+ export declare const requestGCPRegion: (defaultRegion?: string) => Promise<string>;
3
+ export declare const requestServiceName: () => Promise<string>;
4
+ export declare const requestSite: () => Promise<string>;
5
+ export declare const requestConfirmation: (message: string, defaultValue?: boolean) => Promise<boolean>;
@@ -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,6 +1,13 @@
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;
6
+ /**
7
+ * Executes an async operation with a spinner
8
+ * @param text - The text to display while spinning
9
+ * @param operation - The async operation to execute
10
+ * @param successText - Success message
11
+ * @returns Promise that resolves with the operation result
12
+ */
13
+ export declare const withSpinner: <T>(text: string, operation: () => Promise<T>, successText: string) => Promise<T>;