@@ -2,7 +2,8 @@ import { ConfigIO, SecureCredentials } from '../../../lib';
22import type { AgentCoreMcpSpec , DeployedState } from '../../../schema' ;
33import { applyTargetRegionToEnv } from '../../aws' ;
44import { validateAwsCredentials } from '../../aws/account' ;
5- import { createSwitchableIoHost } from '../../cdk/toolkit-lib' ;
5+ import { CdkToolkitWrapper , createSwitchableIoHost } from '../../cdk/toolkit-lib' ;
6+ import type { SwitchableIoHost } from '../../cdk/toolkit-lib' ;
67import {
78 buildDeployedState ,
89 getStackOutputs ,
@@ -41,6 +42,7 @@ import {
4142import { setupHttpGateways } from '../../operations/deploy/post-deploy-http-gateways' ;
4243import { enableOnlineEvalConfigs } from '../../operations/deploy/post-deploy-online-evals' ;
4344import type { DeployResult } from './types' ;
45+ import { StackSelectionStrategy } from '@aws-cdk/toolkit-lib' ;
4446
4547export interface ValidatedDeployOptions {
4648 target : string ;
@@ -55,6 +57,40 @@ export interface ValidatedDeployOptions {
5557const AGENT_NEXT_STEPS = [ 'agentcore invoke' , 'agentcore status' ] ;
5658const MEMORY_ONLY_NEXT_STEPS = [ 'agentcore add agent' , 'agentcore status' ] ;
5759
60+ export async function runDiff (
61+ toolkitWrapper : CdkToolkitWrapper ,
62+ targetName : string ,
63+ switchableIoHost ?: SwitchableIoHost
64+ ) : Promise < void > {
65+ const diffIoHost = switchableIoHost ?? createSwitchableIoHost ( ) ;
66+ let hasDiffContent = false ;
67+ diffIoHost . setOnRawMessage ( ( code , _level , message ) => {
68+ if ( ! message ) return ;
69+ // I4002: formatted diff per stack, I4001: overall diff summary
70+ if ( code === 'CDK_TOOLKIT_I4002' || code === 'CDK_TOOLKIT_I4001' ) {
71+ hasDiffContent = true ;
72+ console . log ( message ) ;
73+ }
74+ } ) ;
75+ diffIoHost . setVerbose ( true ) ;
76+ // Stack names end with the target name — see src/assets/cdk/bin/cdk.ts toStackName()
77+ await toolkitWrapper . diff ( {
78+ stacks : { strategy : StackSelectionStrategy . PATTERN_MUST_MATCH , patterns : [ `*-${ targetName } ` ] } ,
79+ } ) ;
80+ if ( ! hasDiffContent ) {
81+ console . log ( 'No stack differences detected.' ) ;
82+ }
83+ diffIoHost . setVerbose ( false ) ;
84+ diffIoHost . setOnRawMessage ( null ) ;
85+ }
86+
87+ export async function runDeploy ( toolkitWrapper : CdkToolkitWrapper , targetName : string ) : Promise < void > {
88+ // Stack names end with the target name — see src/assets/cdk/bin/cdk.ts toStackName()
89+ await toolkitWrapper . deploy ( {
90+ stacks : { strategy : StackSelectionStrategy . PATTERN_MUST_MATCH , patterns : [ `*-${ targetName } ` ] } ,
91+ } ) ;
92+ }
93+
5894export async function handleDeploy ( options : ValidatedDeployOptions ) : Promise < DeployResult > {
5995 let toolkitWrapper = null ;
6096 let restoreEnv : ( ( ) => void ) | null = null ;
@@ -296,23 +332,7 @@ export async function handleDeploy(options: ValidatedDeployOptions): Promise<Dep
296332 // Diff mode: run cdk diff and exit without deploying
297333 if ( options . diff ) {
298334 startStep ( 'Run CDK diff' ) ;
299- const diffIoHost = switchableIoHost ?? createSwitchableIoHost ( ) ;
300- let hasDiffContent = false ;
301- diffIoHost . setOnRawMessage ( ( code , _level , message ) => {
302- if ( ! message ) return ;
303- // I4002: formatted diff per stack, I4001: overall diff summary
304- if ( code === 'CDK_TOOLKIT_I4002' || code === 'CDK_TOOLKIT_I4001' ) {
305- hasDiffContent = true ;
306- console . log ( message ) ;
307- }
308- } ) ;
309- diffIoHost . setVerbose ( true ) ;
310- await toolkitWrapper . diff ( ) ;
311- if ( ! hasDiffContent ) {
312- console . log ( 'No stack differences detected.' ) ;
313- }
314- diffIoHost . setVerbose ( false ) ;
315- diffIoHost . setOnRawMessage ( null ) ;
335+ await runDiff ( toolkitWrapper , target . name , switchableIoHost ) ;
316336 endStep ( 'success' ) ;
317337
318338 logger . finalize ( true ) ;
@@ -339,7 +359,7 @@ export async function handleDeploy(options: ValidatedDeployOptions): Promise<Dep
339359 switchableIoHost . setVerbose ( true ) ;
340360 }
341361
342- await toolkitWrapper . deploy ( ) ;
362+ await runDeploy ( toolkitWrapper , target . name ) ;
343363
344364 // Disable verbose output
345365 if ( switchableIoHost ) {
0 commit comments