From 47eb3c7261028eade627c3d677d5a1f0f65a7739 Mon Sep 17 00:00:00 2001 From: Kaizen Conroy Date: Wed, 6 Aug 2025 12:59:12 -0400 Subject: [PATCH 1/6] this commit was used to hit the endpoint successfully --- .../aws-cdk/lib/cli/io-host/cli-io-host.ts | 50 ++++++++++++------- .../lib/cli/telemetry/sink/endpoint-sink.ts | 9 +++- 2 files changed, 40 insertions(+), 19 deletions(-) diff --git a/packages/aws-cdk/lib/cli/io-host/cli-io-host.ts b/packages/aws-cdk/lib/cli/io-host/cli-io-host.ts index 1a3fc59c0..24ead412e 100644 --- a/packages/aws-cdk/lib/cli/io-host/cli-io-host.ts +++ b/packages/aws-cdk/lib/cli/io-host/cli-io-host.ts @@ -15,6 +15,10 @@ import type { EventType } from '../telemetry/schema'; import { TelemetrySession } from '../telemetry/session'; import { FileTelemetrySink } from '../telemetry/sink/file-sink'; import { isCI } from '../util/ci'; +import { ITelemetrySink } from '../telemetry/sink/sink-interface'; +import { canCollectTelemetry } from '../telemetry/collect-telemetry'; +import { EndpointTelemetrySink } from '../telemetry/sink/endpoint-sink'; +import { Funnel } from '../telemetry/sink/funnel'; export type { IIoHost, IoMessage, IoMessageCode, IoMessageLevel, IoRequest }; @@ -168,32 +172,42 @@ export class CliIoHost implements IIoHost { this.logLevel = props.logLevel ?? 'info'; this.isCI = props.isCI ?? isCI(); this.requireDeployApproval = props.requireDeployApproval ?? RequireApproval.BROADENING; - this.stackProgress = props.stackProgress ?? StackActivityProgress.BAR; } - public async startTelemetry(args: any, context: Context, _proxyAgent?: Agent) { - let sink; + public async startTelemetry(args: any, context: Context, proxyAgent?: Agent) { + let sinks: ITelemetrySink[] = []; const telemetryFilePath = args['telemetry-file']; if (telemetryFilePath) { - sink = new FileTelemetrySink({ - ioHost: this, - logFilePath: telemetryFilePath, - }); + try { + sinks.push(new FileTelemetrySink({ + ioHost: this, + logFilePath: telemetryFilePath, + })); + await this.asIoHelper().defaults.trace(`File Telemetry connected`); + } catch (e: any) { + await this.asIoHelper().defaults.trace(`File Telemetry instantiation failed: ${e.message}`); + } } - // TODO: uncomment this at launch - // if (canCollectTelemetry(args, context)) { - // sink = new EndpointTelemetrySink({ - // ioHost: this, - // agent: proxyAgent, - // endpoint: '', // TODO: add endpoint - // }); - // } - - if (sink) { + + const telemetryEndpoint = process.env.TELEMETRY_ENDPOINT; + if (canCollectTelemetry(args, context) && telemetryEndpoint) { + try { + sinks.push(new EndpointTelemetrySink({ + ioHost: this, + agent: proxyAgent, + endpoint: telemetryEndpoint, + })); + await this.asIoHelper().defaults.trace(`Endpoint Telemetry connected`); + } catch (e: any) { + await this.asIoHelper().defaults.trace(`Endpoint Telemetry instantiation failed: ${e.message}`); + } + } + + if (sinks.length > 0) { this.telemetry = new TelemetrySession({ ioHost: this, - client: sink, + client: new Funnel({ sinks }), arguments: args, context: context, }); diff --git a/packages/aws-cdk/lib/cli/telemetry/sink/endpoint-sink.ts b/packages/aws-cdk/lib/cli/telemetry/sink/endpoint-sink.ts index 772089a61..5fa2042fd 100644 --- a/packages/aws-cdk/lib/cli/telemetry/sink/endpoint-sink.ts +++ b/packages/aws-cdk/lib/cli/telemetry/sink/endpoint-sink.ts @@ -45,6 +45,11 @@ export class EndpointTelemetrySink implements ITelemetrySink { public constructor(props: EndpointTelemetrySinkProps) { this.endpoint = parse(props.endpoint); + + if (!this.endpoint.hostname || !this.endpoint.pathname) { + throw new ToolkitError(`Telemetry Endpoint malformed. Received hostname: ${this.endpoint.hostname}, pathname: ${this.endpoint.pathname}`); + } + this.ioHelper = IoHelper.fromActionAwareIoHost(props.ioHost); this.agent = props.agent; @@ -78,7 +83,7 @@ export class EndpointTelemetrySink implements ITelemetrySink { } } catch (e: any) { // Never throw errors, just log them via ioHost - await this.ioHelper.defaults.trace(`Failed to add telemetry event: ${e.message}`); + await this.ioHelper.defaults.trace(`Failed to send telemetry event: ${e.message}`); } } @@ -94,10 +99,12 @@ export class EndpointTelemetrySink implements ITelemetrySink { // Successfully posted if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) { + await this.ioHelper.defaults.trace('Telemetry Sent Succesfully'); return true; } await this.ioHelper.defaults.trace(`Telemetry Unsuccessful: POST ${url.hostname}${url.pathname}: ${res.statusCode}:${res.statusMessage}`); + await this.ioHelper.defaults.trace(`Data: ${JSON.stringify(body)}`); return false; } catch (e: any) { From e174526823ec21a5ddf113ee3d17e84cae1f2fe7 Mon Sep 17 00:00:00 2001 From: Kaizen Conroy Date: Wed, 6 Aug 2025 14:51:14 -0400 Subject: [PATCH 2/6] update integ tests to ensure telemetry sent with 200 status code returned --- .../cli-integ/lib/with-cdk-app.ts | 7 ++++++- .../deploy/cdk-deploy-telemetry.integtest.ts | 7 ++++++- ...k-synth-telemetry-with-errors.integtest.ts | 14 +++++++------ .../synth/cdk-synth-telemetry.integtest.ts | 20 ++++++++++++------- .../lib/cli/telemetry/sink/endpoint-sink.ts | 3 +-- 5 files changed, 34 insertions(+), 17 deletions(-) diff --git a/packages/@aws-cdk-testing/cli-integ/lib/with-cdk-app.ts b/packages/@aws-cdk-testing/cli-integ/lib/with-cdk-app.ts index 8c33ca29b..972ff95db 100644 --- a/packages/@aws-cdk-testing/cli-integ/lib/with-cdk-app.ts +++ b/packages/@aws-cdk-testing/cli-integ/lib/with-cdk-app.ts @@ -572,7 +572,12 @@ export class TestFixture extends ShellHelper { await this.cli.makeCliAvailable(); - return this.shell(['cdk', ...(verbose ? ['-v'] : []), ...args], { + return this.shell([ + 'cdk', + ...(verbose ? ['-v'] : []), + ...args, + ...(options?.options ?? []), + ], { ...options, modEnv: { ...this.cdkShellEnv(), diff --git a/packages/@aws-cdk-testing/cli-integ/tests/cli-integ-tests/deploy/cdk-deploy-telemetry.integtest.ts b/packages/@aws-cdk-testing/cli-integ/tests/cli-integ-tests/deploy/cdk-deploy-telemetry.integtest.ts index 5e489c404..ac49a603b 100644 --- a/packages/@aws-cdk-testing/cli-integ/tests/cli-integ-tests/deploy/cdk-deploy-telemetry.integtest.ts +++ b/packages/@aws-cdk-testing/cli-integ/tests/cli-integ-tests/deploy/cdk-deploy-telemetry.integtest.ts @@ -10,9 +10,14 @@ integTest( const telemetryFile = path.join(fixture.integTestDir, 'telemetry.json'); // Deploy stack while collecting telemetry - await fixture.cdkDeploy('test-1', { + const deployOutput = await fixture.cdkDeploy('test-1', { telemetryFile, + options: ['-vvv'], // force trace mode }); + + // Check the trace that telemetry was executed successfully + expect(deployOutput).toContain("Telemetry Sent Successfully"); + const json = fs.readJSONSync(telemetryFile); expect(json).toEqual([ expect.objectContaining({ diff --git a/packages/@aws-cdk-testing/cli-integ/tests/cli-integ-tests/synth/cdk-synth-telemetry-with-errors.integtest.ts b/packages/@aws-cdk-testing/cli-integ/tests/cli-integ-tests/synth/cdk-synth-telemetry-with-errors.integtest.ts index 6b0631268..3e69b4129 100644 --- a/packages/@aws-cdk-testing/cli-integ/tests/cli-integ-tests/synth/cdk-synth-telemetry-with-errors.integtest.ts +++ b/packages/@aws-cdk-testing/cli-integ/tests/cli-integ-tests/synth/cdk-synth-telemetry-with-errors.integtest.ts @@ -13,18 +13,21 @@ integTest( modEnv: { INTEG_STACK_SET: 'stage-with-errors', }, + options: ['-vvv'], // force trace mode }); expect(output).toContain('This is an error'); + // Check the trace that telemetry was executed successfully despite error in synth + expect(output).toContain("Telemetry Sent Successfully"); + const json = fs.readJSONSync(telemetryFile); expect(json).toEqual([ expect.objectContaining({ event: expect.objectContaining({ command: expect.objectContaining({ path: ['synth'], - parameters: { - verbose: 1, + parameters: expect.objectContaining({ unstable: '', ['telemetry-file']: '', lookups: true, @@ -37,7 +40,7 @@ integTest( ci: expect.anything(), // changes based on where this is called validation: true, quiet: false, - }, + }), config: { context: {}, }, @@ -72,8 +75,7 @@ integTest( event: expect.objectContaining({ command: expect.objectContaining({ path: ['synth'], - parameters: { - verbose: 1, + parameters: expect.objectContaining({ unstable: '', ['telemetry-file']: '', lookups: true, @@ -86,7 +88,7 @@ integTest( ci: expect.anything(), // changes based on where this is called validation: true, quiet: false, - }, + }), config: { context: {}, }, diff --git a/packages/@aws-cdk-testing/cli-integ/tests/cli-integ-tests/synth/cdk-synth-telemetry.integtest.ts b/packages/@aws-cdk-testing/cli-integ/tests/cli-integ-tests/synth/cdk-synth-telemetry.integtest.ts index b694a2d8e..01ec8246c 100644 --- a/packages/@aws-cdk-testing/cli-integ/tests/cli-integ-tests/synth/cdk-synth-telemetry.integtest.ts +++ b/packages/@aws-cdk-testing/cli-integ/tests/cli-integ-tests/synth/cdk-synth-telemetry.integtest.ts @@ -8,15 +8,22 @@ integTest( 'cdk synth with telemetry data', withDefaultFixture(async (fixture) => { const telemetryFile = path.join(fixture.integTestDir, `telemetry-${Date.now()}.json`); - await fixture.cdk(['synth', fixture.fullStackName('test-1'), '--unstable=telemetry', `--telemetry-file=${telemetryFile}`]); + + const synthOutput = await fixture.cdk( + ['synth', fixture.fullStackName('test-1'), '--unstable=telemetry', `--telemetry-file=${telemetryFile}`], + { options: ['-vvv']}, // force trace mode + ); + + // Check the trace that telemetry was executed successfully + expect(synthOutput).toContain("Telemetry Sent Successfully"); + const json = fs.readJSONSync(telemetryFile); expect(json).toEqual([ expect.objectContaining({ event: expect.objectContaining({ command: expect.objectContaining({ path: ['synth', '$STACKS_1'], - parameters: { - verbose: 1, + parameters: expect.objectContaining({ unstable: '', ['telemetry-file']: '', lookups: true, @@ -29,7 +36,7 @@ integTest( ci: expect.anything(), // changes based on where this is called validation: true, quiet: false, - }, + }), config: { context: {}, }, @@ -65,8 +72,7 @@ integTest( event: expect.objectContaining({ command: expect.objectContaining({ path: ['synth', '$STACKS_1'], - parameters: { - verbose: 1, + parameters: expect.objectContaining({ unstable: '', ['telemetry-file']: '', lookups: true, @@ -79,7 +85,7 @@ integTest( ci: expect.anything(), // changes based on where this is called validation: true, quiet: false, - }, + }), config: { context: {}, }, diff --git a/packages/aws-cdk/lib/cli/telemetry/sink/endpoint-sink.ts b/packages/aws-cdk/lib/cli/telemetry/sink/endpoint-sink.ts index 5fa2042fd..67fd718fa 100644 --- a/packages/aws-cdk/lib/cli/telemetry/sink/endpoint-sink.ts +++ b/packages/aws-cdk/lib/cli/telemetry/sink/endpoint-sink.ts @@ -99,12 +99,11 @@ export class EndpointTelemetrySink implements ITelemetrySink { // Successfully posted if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) { - await this.ioHelper.defaults.trace('Telemetry Sent Succesfully'); + await this.ioHelper.defaults.trace('Telemetry Sent Successfully'); return true; } await this.ioHelper.defaults.trace(`Telemetry Unsuccessful: POST ${url.hostname}${url.pathname}: ${res.statusCode}:${res.statusMessage}`); - await this.ioHelper.defaults.trace(`Data: ${JSON.stringify(body)}`); return false; } catch (e: any) { From 18b72006a6f41db289cc0624f7266816489a471a Mon Sep 17 00:00:00 2001 From: Kaizen Conroy Date: Wed, 6 Aug 2025 14:53:18 -0400 Subject: [PATCH 3/6] todo --- packages/aws-cdk/lib/cli/io-host/cli-io-host.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/aws-cdk/lib/cli/io-host/cli-io-host.ts b/packages/aws-cdk/lib/cli/io-host/cli-io-host.ts index 24ead412e..98dbb87c6 100644 --- a/packages/aws-cdk/lib/cli/io-host/cli-io-host.ts +++ b/packages/aws-cdk/lib/cli/io-host/cli-io-host.ts @@ -190,7 +190,7 @@ export class CliIoHost implements IIoHost { } } - const telemetryEndpoint = process.env.TELEMETRY_ENDPOINT; + const telemetryEndpoint = process.env.TELEMETRY_ENDPOINT; // TODO: replace with endpoint at launch if (canCollectTelemetry(args, context) && telemetryEndpoint) { try { sinks.push(new EndpointTelemetrySink({ From 63dd4a9d00f0c37bc2c1f06968351935b6845843 Mon Sep 17 00:00:00 2001 From: github-actions Date: Wed, 6 Aug 2025 19:03:56 +0000 Subject: [PATCH 4/6] chore: self mutation Signed-off-by: github-actions --- .../deploy/cdk-deploy-telemetry.integtest.ts | 2 +- .../cdk-synth-telemetry-with-errors.integtest.ts | 2 +- .../synth/cdk-synth-telemetry.integtest.ts | 4 ++-- packages/aws-cdk/lib/cli/io-host/cli-io-host.ts | 12 ++++++------ 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/@aws-cdk-testing/cli-integ/tests/cli-integ-tests/deploy/cdk-deploy-telemetry.integtest.ts b/packages/@aws-cdk-testing/cli-integ/tests/cli-integ-tests/deploy/cdk-deploy-telemetry.integtest.ts index ac49a603b..61de9ea05 100644 --- a/packages/@aws-cdk-testing/cli-integ/tests/cli-integ-tests/deploy/cdk-deploy-telemetry.integtest.ts +++ b/packages/@aws-cdk-testing/cli-integ/tests/cli-integ-tests/deploy/cdk-deploy-telemetry.integtest.ts @@ -16,7 +16,7 @@ integTest( }); // Check the trace that telemetry was executed successfully - expect(deployOutput).toContain("Telemetry Sent Successfully"); + expect(deployOutput).toContain('Telemetry Sent Successfully'); const json = fs.readJSONSync(telemetryFile); expect(json).toEqual([ diff --git a/packages/@aws-cdk-testing/cli-integ/tests/cli-integ-tests/synth/cdk-synth-telemetry-with-errors.integtest.ts b/packages/@aws-cdk-testing/cli-integ/tests/cli-integ-tests/synth/cdk-synth-telemetry-with-errors.integtest.ts index 3e69b4129..54e8f475a 100644 --- a/packages/@aws-cdk-testing/cli-integ/tests/cli-integ-tests/synth/cdk-synth-telemetry-with-errors.integtest.ts +++ b/packages/@aws-cdk-testing/cli-integ/tests/cli-integ-tests/synth/cdk-synth-telemetry-with-errors.integtest.ts @@ -19,7 +19,7 @@ integTest( expect(output).toContain('This is an error'); // Check the trace that telemetry was executed successfully despite error in synth - expect(output).toContain("Telemetry Sent Successfully"); + expect(output).toContain('Telemetry Sent Successfully'); const json = fs.readJSONSync(telemetryFile); expect(json).toEqual([ diff --git a/packages/@aws-cdk-testing/cli-integ/tests/cli-integ-tests/synth/cdk-synth-telemetry.integtest.ts b/packages/@aws-cdk-testing/cli-integ/tests/cli-integ-tests/synth/cdk-synth-telemetry.integtest.ts index 01ec8246c..2c675a399 100644 --- a/packages/@aws-cdk-testing/cli-integ/tests/cli-integ-tests/synth/cdk-synth-telemetry.integtest.ts +++ b/packages/@aws-cdk-testing/cli-integ/tests/cli-integ-tests/synth/cdk-synth-telemetry.integtest.ts @@ -11,11 +11,11 @@ integTest( const synthOutput = await fixture.cdk( ['synth', fixture.fullStackName('test-1'), '--unstable=telemetry', `--telemetry-file=${telemetryFile}`], - { options: ['-vvv']}, // force trace mode + { options: ['-vvv'] }, // force trace mode ); // Check the trace that telemetry was executed successfully - expect(synthOutput).toContain("Telemetry Sent Successfully"); + expect(synthOutput).toContain('Telemetry Sent Successfully'); const json = fs.readJSONSync(telemetryFile); expect(json).toEqual([ diff --git a/packages/aws-cdk/lib/cli/io-host/cli-io-host.ts b/packages/aws-cdk/lib/cli/io-host/cli-io-host.ts index 98dbb87c6..dec40dde0 100644 --- a/packages/aws-cdk/lib/cli/io-host/cli-io-host.ts +++ b/packages/aws-cdk/lib/cli/io-host/cli-io-host.ts @@ -9,16 +9,16 @@ import * as promptly from 'promptly'; import type { IoHelper, ActivityPrinterProps, IActivityPrinter } from '../../../lib/api-private'; import { asIoHelper, IO, isMessageRelevantForLevel, CurrentActivityPrinter, HistoryActivityPrinter } from '../../../lib/api-private'; import { StackActivityProgress } from '../../commands/deploy'; +import { canCollectTelemetry } from '../telemetry/collect-telemetry'; import type { EventResult } from '../telemetry/messages'; import { CLI_PRIVATE_IO, CLI_TELEMETRY_CODES } from '../telemetry/messages'; import type { EventType } from '../telemetry/schema'; import { TelemetrySession } from '../telemetry/session'; -import { FileTelemetrySink } from '../telemetry/sink/file-sink'; -import { isCI } from '../util/ci'; -import { ITelemetrySink } from '../telemetry/sink/sink-interface'; -import { canCollectTelemetry } from '../telemetry/collect-telemetry'; import { EndpointTelemetrySink } from '../telemetry/sink/endpoint-sink'; +import { FileTelemetrySink } from '../telemetry/sink/file-sink'; import { Funnel } from '../telemetry/sink/funnel'; +import type { ITelemetrySink } from '../telemetry/sink/sink-interface'; +import { isCI } from '../util/ci'; export type { IIoHost, IoMessage, IoMessageCode, IoMessageLevel, IoRequest }; @@ -184,7 +184,7 @@ export class CliIoHost implements IIoHost { ioHost: this, logFilePath: telemetryFilePath, })); - await this.asIoHelper().defaults.trace(`File Telemetry connected`); + await this.asIoHelper().defaults.trace('File Telemetry connected'); } catch (e: any) { await this.asIoHelper().defaults.trace(`File Telemetry instantiation failed: ${e.message}`); } @@ -198,7 +198,7 @@ export class CliIoHost implements IIoHost { agent: proxyAgent, endpoint: telemetryEndpoint, })); - await this.asIoHelper().defaults.trace(`Endpoint Telemetry connected`); + await this.asIoHelper().defaults.trace('Endpoint Telemetry connected'); } catch (e: any) { await this.asIoHelper().defaults.trace(`Endpoint Telemetry instantiation failed: ${e.message}`); } From 61e3f3c538210b9f2747c7c1655bb17c37219398 Mon Sep 17 00:00:00 2001 From: Kaizen Conroy Date: Wed, 13 Aug 2025 11:53:02 -0400 Subject: [PATCH 5/6] extra integ test --- ...-telemetry-disable-sends-no-data.integtest.ts | 16 ++++++++++++++++ packages/aws-cdk/lib/cli/io-host/cli-io-host.ts | 2 ++ .../lib/cli/telemetry/collect-telemetry.ts | 3 ++- .../test/cli/telemetry/collect-telemetry.test.ts | 4 ++++ 4 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 packages/@aws-cdk-testing/cli-integ/tests/cli-integ-tests/cli-telemetry/cdk-cli-telemetry-disable-sends-no-data.integtest.ts diff --git a/packages/@aws-cdk-testing/cli-integ/tests/cli-integ-tests/cli-telemetry/cdk-cli-telemetry-disable-sends-no-data.integtest.ts b/packages/@aws-cdk-testing/cli-integ/tests/cli-integ-tests/cli-telemetry/cdk-cli-telemetry-disable-sends-no-data.integtest.ts new file mode 100644 index 000000000..55e4fbd87 --- /dev/null +++ b/packages/@aws-cdk-testing/cli-integ/tests/cli-integ-tests/cli-telemetry/cdk-cli-telemetry-disable-sends-no-data.integtest.ts @@ -0,0 +1,16 @@ +import { integTest, withDefaultFixture } from '../../../lib'; + +jest.setTimeout(2 * 60 * 60_000); // Includes the time to acquire locks, worst-case single-threaded runtime + +integTest( + 'CLI Telemetry --disable does not send to endpoint', + withDefaultFixture(async (fixture) => { + const output = await fixture.cdk(['cli-telemetry', '--disable'], { options: ['-vvv'] }); + + // Check the trace that telemetry was not executed successfully + expect(output).not.toContain('Telemetry Sent Successfully'); + + // Check the trace that endpoint telemetry was never connected + expect(output).toContain('Endpoint Telemetry NOT connected'); + }), +); diff --git a/packages/aws-cdk/lib/cli/io-host/cli-io-host.ts b/packages/aws-cdk/lib/cli/io-host/cli-io-host.ts index dec40dde0..78eeaf11e 100644 --- a/packages/aws-cdk/lib/cli/io-host/cli-io-host.ts +++ b/packages/aws-cdk/lib/cli/io-host/cli-io-host.ts @@ -202,6 +202,8 @@ export class CliIoHost implements IIoHost { } catch (e: any) { await this.asIoHelper().defaults.trace(`Endpoint Telemetry instantiation failed: ${e.message}`); } + } else { + await this.asIoHelper().defaults.trace('Endpoint Telemetry NOT connected'); } if (sinks.length > 0) { diff --git a/packages/aws-cdk/lib/cli/telemetry/collect-telemetry.ts b/packages/aws-cdk/lib/cli/telemetry/collect-telemetry.ts index 497006502..e8dea396c 100644 --- a/packages/aws-cdk/lib/cli/telemetry/collect-telemetry.ts +++ b/packages/aws-cdk/lib/cli/telemetry/collect-telemetry.ts @@ -6,7 +6,8 @@ import type { Context } from '../../api/context'; export function canCollectTelemetry(args: any, context: Context): boolean { if ((['true', '1'].includes(process.env.CDK_DISABLE_CLI_TELEMETRY ?? '')) || ['false', false].includes(context.get('cli-telemetry')) || - (args['version-reporting'] !== undefined && !args['version-reporting'])) /* aliased with telemetry option */ { + (args['version-reporting'] !== undefined && !args['version-reporting']) || /* aliased with telemetry option */ + (args._ === 'cli-telemetry' && args.disable)) /* special case for `cdk cli-telemetry --disable` */ { return false; } diff --git a/packages/aws-cdk/test/cli/telemetry/collect-telemetry.test.ts b/packages/aws-cdk/test/cli/telemetry/collect-telemetry.test.ts index e8815c6ae..2bca6ac9e 100644 --- a/packages/aws-cdk/test/cli/telemetry/collect-telemetry.test.ts +++ b/packages/aws-cdk/test/cli/telemetry/collect-telemetry.test.ts @@ -48,4 +48,8 @@ describe(canCollectTelemetry, () => { test('returns false if no-version-reporting is set', async () => { expect(canCollectTelemetry({ 'version-reporting': false }, context)).toBeFalsy(); }); + + test('special case for cli-telemetry --disable', async () => { + expect(canCollectTelemetry({ _: 'cli-telemetry', disable: true }, context)).toBeFalsy(); + }); }); From b45506e2694afa5520e9d3c7477acc2f46f4c35f Mon Sep 17 00:00:00 2001 From: Kaizen Conroy Date: Wed, 13 Aug 2025 12:01:25 -0400 Subject: [PATCH 6/6] fix test --- packages/aws-cdk/lib/cli/telemetry/collect-telemetry.ts | 2 +- packages/aws-cdk/test/cli/telemetry/collect-telemetry.test.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/aws-cdk/lib/cli/telemetry/collect-telemetry.ts b/packages/aws-cdk/lib/cli/telemetry/collect-telemetry.ts index e8dea396c..7695bff33 100644 --- a/packages/aws-cdk/lib/cli/telemetry/collect-telemetry.ts +++ b/packages/aws-cdk/lib/cli/telemetry/collect-telemetry.ts @@ -7,7 +7,7 @@ export function canCollectTelemetry(args: any, context: Context): boolean { if ((['true', '1'].includes(process.env.CDK_DISABLE_CLI_TELEMETRY ?? '')) || ['false', false].includes(context.get('cli-telemetry')) || (args['version-reporting'] !== undefined && !args['version-reporting']) || /* aliased with telemetry option */ - (args._ === 'cli-telemetry' && args.disable)) /* special case for `cdk cli-telemetry --disable` */ { + (Array.isArray(args._) && args._.includes('cli-telemetry') && args.disable)) /* special case for `cdk cli-telemetry --disable` */ { return false; } diff --git a/packages/aws-cdk/test/cli/telemetry/collect-telemetry.test.ts b/packages/aws-cdk/test/cli/telemetry/collect-telemetry.test.ts index 2bca6ac9e..4d2a4019e 100644 --- a/packages/aws-cdk/test/cli/telemetry/collect-telemetry.test.ts +++ b/packages/aws-cdk/test/cli/telemetry/collect-telemetry.test.ts @@ -50,6 +50,6 @@ describe(canCollectTelemetry, () => { }); test('special case for cli-telemetry --disable', async () => { - expect(canCollectTelemetry({ _: 'cli-telemetry', disable: true }, context)).toBeFalsy(); + expect(canCollectTelemetry({ _: ['cli-telemetry'], disable: true }, context)).toBeFalsy(); }); });