CLI: Grouped help, command renames, and ergonomics cleanup#14599
Merged
JamesNK merged 38 commits intorelease/13.2from Feb 24, 2026
Merged
CLI: Grouped help, command renames, and ergonomics cleanup#14599JamesNK merged 38 commits intorelease/13.2from
JamesNK merged 38 commits intorelease/13.2from
Conversation
Organizes CLI commands into logical groups in the help output: - App Commands: new, init, add, update, run, stop, start - Resource Management: run, stop, start, restart, command, wait, ps, resources, logs, telemetry - Deployment: publish, deploy, do - Tools & Configuration: config, cache, doctor, docs, agent, setup Commands that span concerns (run, stop, start) appear in multiple groups. Subcommand help (e.g. 'aspire run --help') continues to use default rendering. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Commands now display their argument signatures (e.g., 'start <resource>', 'add [<integration>]', 'command <resource> <command>') derived from the actual Command.Arguments definitions. Cross-listed commands use context-sensitive overrides: 'stop' and 'start' appear without arguments in App Commands (app-level) but show their resource argument in Resource Management. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
'start' requires a resource name argument, so it only belongs in Resource Management. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Descriptions that exceed the terminal width now wrap to the next line with proper indentation aligned to the description column. Applied to both command entries and options. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Frees up -v for --version (the conventional meaning). The old flags --debug-level and -v are still accepted in the early arg parser for backward compatibility. Also fixes option label rendering to include the primary Name when it is not in the Aliases collection. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
ps lists running apphosts (app-level), not individual resources. -v now works as shorthand for --version, matching CLI conventions. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- new: 'Create a new app from an Aspire starter template.' - init: 'Initialize Aspire in an existing codebase.' - add: lowercase 'apphost', drop redundant 'Aspire' - publish: fix verb tense 'Generate' not 'Generates', drop 'Aspire' - deploy: shorter phrasing, drop 'Aspire' - run/ps/resources/logs/telemetry: drop redundant 'Aspire' prefix - Standardize on lowercase 'apphost' across all descriptions Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Renames the 'resources' command to 'status' (with 'resources' kept as an alias for backward compatibility). The description now reads 'Show status of resources in a running apphost.' Splits the former Resource Management group into: - Resource Management: start, stop, restart, wait, command - Monitoring: status, logs, telemetry Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- 'describe' (kubectl-style) replaces 'status'/'resources' for viewing resource details. Both old names kept as aliases. - 'otel' replaces 'telemetry' to clarify this is OpenTelemetry-specific data. Old name kept as alias. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
All commands that support --format now use 'Output format (Table or Json).' as their description string. RunCommand adds 'Only valid with --detach.' Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
New commands that aren't added to a group in s_groups will automatically appear under 'Other Commands:' instead of silently disappearing from help. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Doctor now auto-extracts the embedded bundle (when running from a bundled CLI binary) before running environment checks. The setup command is hidden but preserved for backward compatibility. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
These commands are behind feature flags and not user-facing. Marking them Hidden prevents them from appearing in the 'Other Commands' catch-all section. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Both describe and logs now use --follow/-f for continuous streaming, matching docker/kubectl conventions. Updated description to be cleaner. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Drop -v from --version on add/new/init (conflicts with root -v for CLI version). Drop -l from --language on new/init (conflicts with global -l for --log-level). These commands will be redesigned later. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Tests: 'resources' -> 'describe', '--watch' -> '--follow' - Docs: 'aspire telemetry' -> 'aspire otel', 'aspire resources' -> 'aspire describe', 'aspire setup' -> 'aspire doctor', '--watch' -> '--follow' - Error messages: 'aspire setup --force' -> 'aspire doctor' - All 1297 CLI tests pass Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Contributor
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/dotnet/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 14599Or
iex "& { $(irm https://raw.githubusercontent.com/dotnet/aspire/main/eng/scripts/get-aspire-cli-pr.ps1) } 14599" |
- Remove never-shipped legacy aliases (--debug-level, telemetry command) - Rename ResourcesCommand to DescribeCommand (keep resources alias) - Make GroupedHelpWriter testable via IAnsiConsole and maxWidth param - Add HelpGroup/HelpGroupOrder to BaseCommand; commands declare own group - Rewrite GroupedHelpWriter to dynamically read groups from commands - Revert setup->doctor fold-in; keep setup hidden but functional - Move NonInteractiveOption description to resource files - Fix stale command name references in scripts, agents, and docs - Add tests for help group coverage and grouped help output Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
JamesNK
reviewed
Feb 23, 2026
davidfowl
reviewed
Feb 24, 2026
davidfowl
reviewed
Feb 24, 2026
davidfowl
reviewed
Feb 24, 2026
…name renaming cleanup
ec25cb3 to
f15b0cd
Compare
Co-authored-by: David Fowler <davidfowl@gmail.com>
davidfowl
reviewed
Feb 24, 2026
Co-authored-by: David Fowler <davidfowl@gmail.com>
davidfowl
reviewed
Feb 24, 2026
davidfowl
approved these changes
Feb 24, 2026
JamesNK
reviewed
Feb 24, 2026
This was referenced Feb 24, 2026
Copilot AI
pushed a commit
that referenced
this pull request
Mar 10, 2026
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: David Fowler <davidfowl@gmail.com> Co-authored-by: James Newton-King <james@newtonking.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Overhauls the Aspire CLI user experience before the 13.2 release by reorganizing commands into logical groups, renaming commands for better discoverability, standardizing options, and cleaning up descriptions.
Grouped Help Output
Replaces the flat alphabetical command list with organized groups:
Each command declares its own group via
BaseCommand.HelpGroup/HelpGroupOrdervirtual properties, so the help writer dynamically reads groups from commands rather than maintaining a static array. A catch-all "Other Commands" section automatically shows any future commands that haven't been placed in a group, preventing silent omission.GroupedHelpWriteris now testable — it accepts aTextWriterandmaxWidthparameter instead of reading fromConsoledirectly, andGroupedHelpActiontakesIAnsiConsolefrom DI.Command Renames
aspire resourcesaspire describeaspire telemetryaspire otelresourcesis preserved as a backward-compatible alias ondescribe(shipped in 13.1)telemetryalias removed (never shipped)setupremains a separate hidden command (not folded intodoctor)ResourcesCommandrenamed toDescribeCommand(source file, test files, resource strings)ResourcesCommandStringsrenamed toDescribeCommandStrings(resx, Designer.cs, 13 xlf files)Option Standardization
--watch→--follow/-fon describe command — matcheslogs --followand docker/kubectl conventions--log-level/-l— legacy--debug-level/-vremoved (never shipped)-vnow works for--version— standard CLI convention-vfrom subcommand--version(add/new/init),-lfrom--language(new/init) — these conflicted with the global-v/-loptions--formatdescriptions — all commands now use "Output format (Table or Json)."--non-interactivedescription moved from hardcoded string to resource file (RootCommandStrings.resx + 13 xlf files)Other Improvements
start <resource>,add [<integration>])aspire <command> [options]Tests
AllVisibleCommands_HaveHelpGroup— ensures no command is missing a groupGroupedHelp_ContainsAllVisibleCommands— ensures grouped help output includes every visible commandaspire setup --force(not doctor)aspire.dev doc updates
Doc updates for aspire.dev tracked in: