Implement an animated Aspire CLI welcome banner#14260
Implement an animated Aspire CLI welcome banner#14260davidfowl merged 6 commits intomicrosoft:mainfrom
Conversation
- Introduced a new `BannerService` to handle the display of an animated welcome banner. - Created an `IBannerService` interface for banner functionality. - Updated localization files to include new banner-related strings in multiple languages. - Modified `RootCommandTests` to include tests for banner display logic. - Implemented a `TestBannerService` for testing purposes. - Refactored existing methods to support asynchronous banner display.
…ectly in RootCommand
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/dotnet/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 14260Or
iex "& { $(irm https://raw.githubusercontent.com/dotnet/aspire/main/eng/scripts/get-aspire-cli-pr.ps1) } 14260" |
There was a problem hiding this comment.
Pull request overview
This PR implements an animated ASCII art welcome banner for the Aspire CLI that displays on first run or when explicitly requested with the --banner option. The banner features the ASPIRE logo in brand colors with typing animation, logo reveal, version slide-in, and shine effects.
Changes:
- Adds
IBannerServiceinterface andBannerServiceimplementation with animated banner rendering using Spectre.Console - Integrates banner display into the first-time-use notice flow, showing banner on first run unless suppressed by
--nologo - Adds
--bannercommand-line option to display the banner on demand - Includes comprehensive test coverage for banner display logic and test infrastructure
Reviewed changes
Copilot reviewed 21 out of 22 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| src/Aspire.Cli/Interaction/IBannerService.cs | Defines the IBannerService interface for displaying the banner |
| src/Aspire.Cli/Interaction/BannerService.cs | Implements animated banner with ASCII art, colors, and animation frames |
| src/Aspire.Cli/Commands/RootCommand.cs | Adds --banner option and handler for standalone banner display |
| src/Aspire.Cli/Program.cs | Integrates banner service registration and first-time-use display logic |
| src/Aspire.Cli/Resources/RootCommandStrings.resx | Adds localized strings for banner text (welcome message, version format) |
| src/Aspire.Cli/Resources/RootCommandStrings.Designer.cs | Auto-generated designer code for new resource strings |
| src/Aspire.Cli/Resources/xlf/*.xlf | Translation files for banner strings (marked as "new" pending localization) |
| tests/Aspire.Cli.Tests/TestServices/TestBannerService.cs | Test implementation of IBannerService for unit testing |
| tests/Aspire.Cli.Tests/Utils/CliTestHelper.cs | Updates test helper to support banner service factory injection |
| tests/Aspire.Cli.Tests/Commands/RootCommandTests.cs | Adds comprehensive tests for banner display behavior and first-run logic |
Files not reviewed (1)
- src/Aspire.Cli/Resources/RootCommandStrings.Designer.cs: Language not supported
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
@IEvangelist can we ensure there's a CLI E2E test that covers the scenario where this shows up (first run, etc.) so we get asciinema recordings of it? |
…first run and explicit flag scenarios
…etter banner visibility
|
Hi @DamianEdwards - I added several end-to-end tests, and I did see the asciinema recordings (after manually downloading the uploaded artifacts). I attempted to manually run the Add CLI E2E Recording Comment workflow with the run id, but it didn't work. Here's the download link for the artifacts: https://github.com/dotnet/aspire/actions/runs/21547242898/artifacts/5329439867 |
|
@IEvangelist great, managed to download it and playback with the asciinema CLI on WSL: aspire-cli-banner-first-run.mp4 |
Animated Welcome Banner for Aspire CLI
Adds a
--banneroption that displays an animated ASCII art welcome banner with Aspire brand colors.--nologois set)aspire --banneraspire run --bannershows banner then runsFinal frame is as follows:
Checklist
<remarks />and<code />elements on your triple slash comments?doc-ideatemplatebreaking-changetemplatediagnostictemplate