From 2e2c6afac2fe887e1a960ac40014760a68516eb7 Mon Sep 17 00:00:00 2001 From: Aidan Daly Date: Fri, 24 Apr 2026 14:38:45 -0400 Subject: [PATCH] fix: show 'Computing diff changes...' step during deploy diff phase The deploy TUI appeared frozen for 5-15 seconds between preflight completion and 'Publish assets' while cdkToolkitWrapper.diff() ran silently with no step marked as running. Add a dedicated pre-deploy diff step that transitions running -> success around the diff call so StepProgress always has something to highlight. Closes #781 --- src/cli/tui/screens/deploy/useDeployFlow.ts | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/cli/tui/screens/deploy/useDeployFlow.ts b/src/cli/tui/screens/deploy/useDeployFlow.ts index 0da441d0..786c7076 100644 --- a/src/cli/tui/screens/deploy/useDeployFlow.ts +++ b/src/cli/tui/screens/deploy/useDeployFlow.ts @@ -122,6 +122,10 @@ export function useDeployFlow(options: DeployFlowOptions = {}): DeployFlowState const identityKmsKeyArn = preSynthesized?.identityKmsKeyArn ?? preflight.identityKmsKeyArn; const allCredentials = preSynthesized?.allCredentials ?? preflight.allCredentials; + const [preDeployDiffStep, setPreDeployDiffStep] = useState({ + label: 'Computing diff changes...', + status: 'pending', + }); const [publishAssetsStep, setPublishAssetsStep] = useState({ label: 'Publish assets', status: 'pending' }); const [deployStep, setDeployStep] = useState({ label: 'Deploy to AWS', status: 'pending' }); const [diffStep, setDiffStep] = useState({ label: 'Run CDK diff', status: 'pending' }); @@ -144,6 +148,7 @@ export function useDeployFlow(options: DeployFlowOptions = {}): DeployFlowState const streamOutputsRef = useRef | null>(null); const startDeploy = useCallback(() => { + setPreDeployDiffStep({ label: 'Computing diff changes...', status: 'pending' }); setPublishAssetsStep({ label: 'Publish assets', status: 'pending' }); setDeployStep({ label: 'Deploy to AWS', status: 'pending' }); setDeployOutput(null); @@ -327,6 +332,8 @@ export function useDeployFlow(options: DeployFlowOptions = {}): DeployFlowState if (!isDiffRunningRef.current) { isDiffRunningRef.current = true; setIsDiffLoading(true); + setPreDeployDiffStep(prev => ({ ...prev, status: 'running' })); + logger.startStep('Computing diff changes...'); switchableIoHost?.setOnRawMessage((code, _level, message, data) => { logger.logDiff(code, message); if (code === 'CDK_TOOLKIT_I4002') { @@ -345,6 +352,8 @@ export function useDeployFlow(options: DeployFlowOptions = {}): DeployFlowState switchableIoHost?.setOnRawMessage(null); isDiffRunningRef.current = false; setIsDiffLoading(false); + logger.endStep('success'); + setPreDeployDiffStep(prev => ({ ...prev, status: 'success' })); } } @@ -569,8 +578,10 @@ export function useDeployFlow(options: DeployFlowOptions = {}): DeployFlowState if (diffMode) { return skipPreflight ? [diffStep] : [...preflight.steps, diffStep]; } - return skipPreflight ? [publishAssetsStep, deployStep] : [...preflight.steps, publishAssetsStep, deployStep]; - }, [preflight.steps, publishAssetsStep, deployStep, diffStep, skipPreflight, diffMode]); + return skipPreflight + ? [preDeployDiffStep, publishAssetsStep, deployStep] + : [...preflight.steps, preDeployDiffStep, publishAssetsStep, deployStep]; + }, [preflight.steps, preDeployDiffStep, publishAssetsStep, deployStep, diffStep, skipPreflight, diffMode]); const phase: DeployPhase = useMemo(() => { const activeStep = diffMode ? diffStep : deployStep;