Skip to content

feat(cli): the deploy window names every component, scrolls, and survives Ctrl-C - #508

Merged
bmscomp merged 1 commit into
mainfrom
feat/deploy-wizard
Oct 26, 2026
Merged

bmscomp merged 1 commit into
mainfrom
feat/deploy-wizard

Conversation

@bmscomp

@bmscomp bmscomp commented Oct 26, 2026

Copy link
Copy Markdown
Owner

Why

Three bugs made the live deploy window unreadable once a deploy had more than a screenful of components:

  • A component that had not started showed as "◯ Pending..." with no name.
  • The components pane could not scroll, because its content was set only on View's copy of the viewport.
  • The pane followed the deploy only while the logs pane had focus, and that pane never has focus at the start. So components below the fold were never seen.

Ctrl-C closed the window and nothing else. The deploy went on with nowhere to print, and the terminal looked hung until it ended.

This is also PR 3 of plans/deploy-enhancement.md, the wizard.

What

The deploy window (deploy_dashboard.go):

  • Every row names its component and namespace, pending ones too.
  • The pane's content lives in the model. It follows the component being deployed until a key scrolls it.
  • One poll at a time. The next tick waits for the poll's answer, where before it ticked every 2 s regardless and stacked kubectl calls up. Only components that have started are polled, and the per-workload pod query is gone.
  • A workload's status comes from its ready count: Ready, or Waiting. Before, a healthy one showed its first pod's phase, "Running", in amber.
  • Ctrl-C closes the window and says the deploy goes on. Later lines print to the terminal (DashboardController.closed), and a second Ctrl-C ends kates. Stopping the deploy on the first Ctrl-C would kill Helm mid-install, and deploy has no recovery for a release left pending.
  • The header prints the percentage once, not "0% 0%".

The wizard:

  • Before the first question, it prints the platform, how it was told, the Kubernetes version and the account (detect.Platform). Admin-less runs get this line too, read from what any account may read. The admin-less overlays are unchanged.
  • Each component option shows what is installed, in any namespace: · kafka-ui-0.3.2 in kafka.
  • The namespaces are asked on two pages at most.
  • With TERM=dumb or KATES_ACCESSIBLE=1, every deploy form runs in huh's accessible mode, and the window prints plain lines.
  • Component selection says "Monitoring (Prometheus + Grafana)" where it said "Jaeger (Tracing)".

Deliberately not done

  • Merging the "Already installed" screen into the component list. The list already shows what is installed, and upgrades are still ticked on that screen.
  • Versions on the review's chips: they are listed under the chips.
  • A kept release still reads "✔ Ready" in the window. A failed one shows its failureHint only in the final summary.

Tests

New: TestDashboardComponentsPane, TestDashboardPollsOneAtATime, TestDashboardCtrlCClosesWindowOnly, TestInstalledHints, TestPlatform_ReadsOnlyWhatItNeeds.

Run locally:

  • in cli: go test -p 1 ./... -race -count=1, go vet ./..., golangci-lint run --new-from-rev=origin/main ./... (0 issues) and govulncheck ./...;
  • scripts/check-cli-style.sh and scripts/check-cli-compat.sh;
  • in kates: ./mvnw test, which CI runs on CLI changes.

Not run: the wizard and the window in a real TTY against a cluster. The window was checked by rendering it in a test.

…ives Ctrl-C

The live deploy window:
- names a component before it starts, instead of "◯ Pending...";
- keeps the components pane's content in the model, so the keys scroll
  it, and follows the component being deployed until a key scrolls it;
- polls once at a time, only components that have started, with no
  extra pod query per workload;
- reads a workload's status from its ready count, so a healthy one is
  Ready, not an amber "Running";
- on Ctrl-C, closes and says the deploy goes on; later lines print to
  the terminal, and a second Ctrl-C ends kates;
- prints the percentage once.

The wizard:
- prints the platform, how it was told, the Kubernetes version and the
  account before the first question, admin-less too (detect.Platform);
- shows beside each component what is installed, in any namespace;
- asks the namespaces on two pages at most;
- runs its forms in huh's accessible mode, and the window as plain
  lines, when TERM=dumb or KATES_ACCESSIBLE=1;
- says "Monitoring (Prometheus + Grafana)" where it said "Jaeger
  (Tracing)".
@bmscomp
bmscomp merged commit 625821b into main Oct 26, 2026
56 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant