Skip to content

Implement an animated Aspire CLI welcome banner#14260

Merged
davidfowl merged 6 commits intomicrosoft:mainfrom
IEvangelist:cli-banner
Feb 2, 2026
Merged

Implement an animated Aspire CLI welcome banner#14260
davidfowl merged 6 commits intomicrosoft:mainfrom
IEvangelist:cli-banner

Conversation

@IEvangelist
Copy link
Member

Animated Welcome Banner for Aspire CLI

Adds a --banner option that displays an animated ASCII art welcome banner with Aspire brand colors.

  • Displays automatically on first CLI run (unless --nologo is set)
  • Works standalone: aspire --banner
  • Works additively with commands: aspire run --banner shows banner then runs
  • Includes typing animation, logo reveal, version slide-in, and shine effect
  • All user-facing strings are localized

Final frame is as follows:

image

Checklist

  • Is this feature complete?
    • Yes. Ready to ship.
    • No. Follow-up changes expected.
  • Are you including unit tests for the changes and scenario tests if relevant?
    • Yes
    • No
  • Did you add public API?
    • Yes
      • If yes, did you have an API Review for it?
        • Yes
        • No
      • Did you add <remarks /> and <code /> elements on your triple slash comments?
        • Yes
        • No
    • No
  • Does the change make any security assumptions or guarantees?
    • Yes
      • If yes, have you done a threat model and had a security review?
        • Yes
        • No
    • No
  • Does the change require an update in our Aspire docs?

- 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.
Copilot AI review requested due to automatic review settings January 30, 2026 19:39
@github-actions
Copy link
Contributor

github-actions bot commented Jan 30, 2026

🚀 Dogfood this PR with:

⚠️ WARNING: Do not do this without first carefully reviewing the code of this PR to satisfy yourself it is safe.

curl -fsSL https://raw.githubusercontent.com/dotnet/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 14260

Or

  • Run remotely in PowerShell:
iex "& { $(irm https://raw.githubusercontent.com/dotnet/aspire/main/eng/scripts/get-aspire-cli-pr.ps1) } 14260"

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 IBannerService interface and BannerService implementation 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 --banner command-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.

@DamianEdwards
Copy link
Member

@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?

@IEvangelist
Copy link
Member Author

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

@DamianEdwards
Copy link
Member

@IEvangelist great, managed to download it and playback with the asciinema CLI on WSL:

aspire-cli-banner-first-run.mp4

@davidfowl davidfowl merged commit d15f941 into microsoft:main Feb 2, 2026
662 of 665 checks passed
@dotnet-policy-service dotnet-policy-service bot added this to the 13.2 milestone Feb 2, 2026
@github-actions github-actions bot locked and limited conversation to collaborators Mar 5, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants