Skip to content

Update Aspire 9.4#96

Merged
foxminchan merged 1 commit into
mainfrom
feat/aspire94
Jul 30, 2025
Merged

Update Aspire 9.4#96
foxminchan merged 1 commit into
mainfrom
feat/aspire94

Conversation

@foxminchan

@foxminchan foxminchan commented Jul 29, 2025

Copy link
Copy Markdown
Owner

Pull Request Description

  • Bump Aspire CLI version from 9.3.1-preview.1.25305.6 to 9.4.0-preview.1.25367.4 in dotnet-tools.json and Directory.Packages.props.
  • Disable TreatWarningsAsErrors in Directory.Build.props for smoother builds.
  • Add additional warning suppression (NU1507) in Directory.Build.props.
  • Update AspireVersion in Directory.Packages.props to match the new CLI version.
  • Add a new NuGet package source for dotnet9 in nuget.config.
  • Enhance AppHost.cs with additional parameters for Keycloak and PostgreSQL configuration.
  • Remove obsolete YARP configuration file (yarp.json) and Quartz SQL script (quartz.sql).
  • Add dashboard support in AzureExtensions.Provision.cs.
  • Remove unnecessary RedisResourceExtensions.cs file.
  • Improve email configuration in EmailExtensions.cs with detailed descriptions for parameters.
  • Introduce new ProxyExtensions.cs for API Gateway proxy configuration.
  • Update KeycloakExtensions.cs to remove unnecessary realm import parameter.
  • Modify K6Extensions.cs to use Protocol.Http for endpoint references.
  • Clean up Components.cs by removing unused ApplicationInsights and Table constants.
  • Simplify project files by removing unnecessary PublishAot settings.
  • Remove HTTPS configurations from launchSettings.json files across multiple services for consistency.

Checklist

  • My code follows the DDD principles
  • I've used the latest C# features and idioms
  • I've added/updated unit tests for business logic
  • Service boundaries are maintained (no cross-service direct dependencies)
  • Repository pattern is used for data access
  • Domain Events are used for cross-service communication
  • I've registered new services in AppHost project (if applicable)
  • I've updated both entities and DTOs (if applicable)

Summary by CodeRabbit

  • New Features

    • Introduced a flexible API gateway proxy builder for streamlined backend service routing.
    • Added asynchronous agent creation extension for advanced RAG scenarios.
  • Improvements

    • Enhanced configuration and parameter descriptions for easier setup of email providers and database credentials.
    • Simplified and clarified build and feature enablement workflows.
    • Updated dependency and tool versions for improved stability and compatibility.
    • Streamlined API gateway and service initialization logic for better maintainability.
    • Improved OpenAPI security scheme resolution with dynamic endpoint discovery.
    • Refined OAuth and identity provider configuration to reduce dependencies.
    • Added a new GPU usage configuration option enabled by default.
    • Improved asynchronous handling and configuration of Ollama and Azure container app resources.
  • Removals

    • Eliminated all HTTPS launch profiles from service configurations, defaulting to HTTP.
    • Removed GPU-related build and runtime commands.
    • Deleted unused or legacy files, including Quartz SQL schema, Redis cache clear command, and certain extension methods and classes.
    • Removed AOT publishing settings from several projects.
    • Removed legacy Keycloak endpoint helpers and HTTP endpoint display controls.
  • Bug Fixes

    • Fixed display logic for HTTP endpoints in development environments.
  • Documentation

    • Updated prerequisites and setup instructions in the README for clarity and accuracy.

@coderabbitai

coderabbitai Bot commented Jul 29, 2025

Copy link
Copy Markdown

Walkthrough

This update introduces significant refactoring and modernization across the BookWorm codebase. It removes HTTPS launch profiles, streamlines configuration and initialization logic, enhances parameter descriptions, updates dependency versions, and simplifies gateway proxy and OAuth flows. Several obsolete files and extension methods are deleted, while new builder patterns and async flows are introduced for agent and service initialization.

Changes

Cohort / File(s) Change Summary
Configuration & Dependency Updates
.aspire/settings.json, .config/dotnet-tools.json, Directory.Packages.props, Versions.props, appsettings.json
Added new Aspire features, updated .NET tool and package versions, and introduced a UseGPU setting.
Build & Project Recipes
.justfile, README.md
Added new "features" recipe, removed GPU-related commands, and updated documentation to reflect these changes.
AppHost Refactoring & Initialization
src/Aspire/BookWorm.AppHost/AppHost.cs, .../Extensions/AI/ModelExtensions.cs, .../Extensions/Infrastructure/AzureExtensions.Provision.cs, .../Extensions/Infrastructure/AzureExtensions.Run.cs, .../Extensions/Infrastructure/ScalarExtensions.cs, .../Extensions/Network/EmailExtensions.cs, .../Extensions/Security/KeycloakExtensions.cs, .../Extensions/Testing/K6Extensions.cs
Major refactoring: conditional CORS and environment setup, improved parameter handling, async Ollama initialization, simplified API gateway proxy, and enhanced email provider configuration.
API Gateway Proxy Introduction
src/Aspire/BookWorm.AppHost/Extensions/Network/ProxyExtensions.cs
Introduced a new builder-based API gateway proxy extension, encapsulating service and route configuration.
Obsolete & Redundant File Removal
.../Extensions/Infrastructure/RedisResourceExtensions.cs, .../Extensions/Network/EndpointExtensions.cs, .../Extensions/Network/LaunchProfileExtensions.cs, .../Container/proxy/yarp.json, .../Container/sql/quartz.sql, src/BuildingBlocks/BookWorm.Chassis/RAG/Agent/BookWormAgentProvider.cs, src/BuildingBlocks/BookWorm.Chassis/RAG/Extensions.cs
Deleted legacy extension methods, YARP proxy config, Quartz SQL schema, and agent provider code.
Agent & Provider Modernization
src/BuildingBlocks/BookWorm.Chassis/RAG/Agent/A2AExtensions.cs, src/Services/Chat/BookWorm.Chat/Agents/BookAgent.cs, src/Services/Chat/BookWorm.Chat/Agents/SentimentAgent.cs, src/Services/Chat/BookWorm.Chat/Agents/SummarizeAgent.cs, src/Services/Rating/BookWorm.Rating/Agents/RatingAgent.cs
Replaced custom agent provider with direct organization assignment, introduced new async agent creation extension.
Constants & Project File Simplification
src/BuildingBlocks/BookWorm.Constants/Aspire/Components.cs, src/BuildingBlocks/BookWorm.Constants/BookWorm.Constants.csproj, src/BuildingBlocks/BookWorm.SharedKernel/BookWorm.SharedKernel.csproj
Removed unused constants and AOT publishing properties.
Keycloak & OAuth Flow Refactor
src/Aspire/BookWorm.AppHost/Extensions/Security/KeycloakExtensions.cs, src/Aspire/BookWorm.AppHost/Extensions/Infrastructure/ScalarExtensions.cs, src/Aspire/BookWorm.ServiceDefaults/ApiSpecification/OpenApi/OpenApiOptionsExtensions.cs
Refactored OAuth flow to resolve endpoints dynamically, removed endpoint helper methods, improved parameter handling.
Launch Profile Simplification
src/Services/*/Properties/launchSettings.json
Removed all "https" launch profiles, standardizing on HTTP-only profiles for all services.
Keycloakify Package Update
src/Aspire/BookWorm.AppHost/Container/keycloak/keycloakify/package.json
Upgraded keycloakify and related devDependencies to latest minor versions.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant AppHost
    participant ProxyBuilder
    participant ServiceA
    participant ServiceB

    User->>AppHost: Start Application
    AppHost->>ProxyBuilder: AddApiGatewayProxy()
    ProxyBuilder->>ServiceA: Register route/service
    ProxyBuilder->>ServiceB: Register route/service
    ProxyBuilder->>AppHost: Return configured YARP proxy
    AppHost->>User: Application ready with new proxy routes
Loading
sequenceDiagram
    participant AppHost
    participant Ollama
    participant Config

    AppHost->>Ollama: await AddOllama(configure)
    Ollama->>Config: Get 'use-gpu' parameter async
    Config-->>Ollama: Return value
    Ollama-->>AppHost: Ollama initialized (with/without GPU)
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

  • Fix Keycloak Scalar #79: Both PRs modify Keycloak integration, specifically around endpoint URL handling and OAuth client secret retrieval, though in different directions.

Suggested labels

.NET

Poem

In BookWorm’s halls, the code did grow,
Old HTTPS now bids adieu,
Proxy routes and agents flow,
Async Ollama joins the crew.
Constants trimmed, configs anew,
Refactored paths for all to view—
A modern BookWorm, bold and true! 🚀

Note

⚡️ Unit Test Generation is now available in beta!

Learn more here, or try it out under "Finishing Touches" below.


📜 Recent review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0e3d27e and fcfedd4.

⛔ Files ignored due to path filters (2)
  • docs/eventcatalog/bun.lock is excluded by !**/*.lock
  • src/Aspire/BookWorm.AppHost/Container/keycloak/keycloakify/bun.lock is excluded by !**/*.lock
📒 Files selected for processing (41)
  • .aspire/settings.json (1 hunks)
  • .config/dotnet-tools.json (1 hunks)
  • .justfile (2 hunks)
  • Directory.Packages.props (1 hunks)
  • README.md (1 hunks)
  • Versions.props (1 hunks)
  • src/Aspire/BookWorm.AppHost/AppHost.cs (6 hunks)
  • src/Aspire/BookWorm.AppHost/BookWorm.AppHost.csproj (1 hunks)
  • src/Aspire/BookWorm.AppHost/Container/keycloak/keycloakify/package.json (2 hunks)
  • src/Aspire/BookWorm.AppHost/Container/proxy/yarp.json (0 hunks)
  • src/Aspire/BookWorm.AppHost/Container/sql/quartz.sql (0 hunks)
  • src/Aspire/BookWorm.AppHost/Extensions/AI/ModelExtensions.cs (3 hunks)
  • src/Aspire/BookWorm.AppHost/Extensions/Infrastructure/AzureExtensions.Provision.cs (1 hunks)
  • src/Aspire/BookWorm.AppHost/Extensions/Infrastructure/AzureExtensions.Run.cs (0 hunks)
  • src/Aspire/BookWorm.AppHost/Extensions/Infrastructure/RedisResourceExtensions.cs (0 hunks)
  • src/Aspire/BookWorm.AppHost/Extensions/Infrastructure/ScalarExtensions.cs (2 hunks)
  • src/Aspire/BookWorm.AppHost/Extensions/Network/EmailExtensions.cs (1 hunks)
  • src/Aspire/BookWorm.AppHost/Extensions/Network/EndpointExtensions.cs (0 hunks)
  • src/Aspire/BookWorm.AppHost/Extensions/Network/LaunchProfileExtensions.cs (0 hunks)
  • src/Aspire/BookWorm.AppHost/Extensions/Network/ProxyExtensions.cs (1 hunks)
  • src/Aspire/BookWorm.AppHost/Extensions/Security/KeycloakExtensions.cs (3 hunks)
  • src/Aspire/BookWorm.AppHost/Extensions/Testing/K6Extensions.cs (2 hunks)
  • src/Aspire/BookWorm.AppHost/appsettings.json (1 hunks)
  • src/Aspire/BookWorm.ServiceDefaults/ApiSpecification/OpenApi/OpenApiOptionsExtensions.cs (2 hunks)
  • src/BuildingBlocks/BookWorm.Chassis/RAG/Agent/A2AExtensions.cs (1 hunks)
  • src/BuildingBlocks/BookWorm.Chassis/RAG/Agent/BookWormAgentProvider.cs (0 hunks)
  • src/BuildingBlocks/BookWorm.Chassis/RAG/Extensions.cs (0 hunks)
  • src/BuildingBlocks/BookWorm.Constants/Aspire/Components.cs (0 hunks)
  • src/BuildingBlocks/BookWorm.Constants/BookWorm.Constants.csproj (1 hunks)
  • src/BuildingBlocks/BookWorm.SharedKernel/BookWorm.SharedKernel.csproj (0 hunks)
  • src/Services/Basket/BookWorm.Basket/Properties/launchSettings.json (0 hunks)
  • src/Services/Catalog/BookWorm.Catalog/Properties/launchSettings.json (0 hunks)
  • src/Services/Chat/BookWorm.Chat/Agents/BookAgent.cs (1 hunks)
  • src/Services/Chat/BookWorm.Chat/Agents/SentimentAgent.cs (1 hunks)
  • src/Services/Chat/BookWorm.Chat/Agents/SummarizeAgent.cs (1 hunks)
  • src/Services/Chat/BookWorm.Chat/Properties/launchSettings.json (0 hunks)
  • src/Services/Finance/BookWorm.Finance/Properties/launchSettings.json (0 hunks)
  • src/Services/Notification/BookWorm.Notification/Properties/launchSettings.json (0 hunks)
  • src/Services/Ordering/BookWorm.Ordering/Properties/launchSettings.json (0 hunks)
  • src/Services/Rating/BookWorm.Rating/Agents/RatingAgent.cs (2 hunks)
  • src/Services/Rating/BookWorm.Rating/Properties/launchSettings.json (0 hunks)
💤 Files with no reviewable changes (17)
  • src/Services/Chat/BookWorm.Chat/Properties/launchSettings.json
  • src/Services/Finance/BookWorm.Finance/Properties/launchSettings.json
  • src/BuildingBlocks/BookWorm.Chassis/RAG/Extensions.cs
  • src/Services/Catalog/BookWorm.Catalog/Properties/launchSettings.json
  • src/Services/Rating/BookWorm.Rating/Properties/launchSettings.json
  • src/Aspire/BookWorm.AppHost/Extensions/Infrastructure/RedisResourceExtensions.cs
  • src/BuildingBlocks/BookWorm.Chassis/RAG/Agent/BookWormAgentProvider.cs
  • src/Services/Notification/BookWorm.Notification/Properties/launchSettings.json
  • src/Aspire/BookWorm.AppHost/Extensions/Network/EndpointExtensions.cs
  • src/Services/Ordering/BookWorm.Ordering/Properties/launchSettings.json
  • src/Aspire/BookWorm.AppHost/Container/proxy/yarp.json
  • src/Aspire/BookWorm.AppHost/Extensions/Network/LaunchProfileExtensions.cs
  • src/Services/Basket/BookWorm.Basket/Properties/launchSettings.json
  • src/Aspire/BookWorm.AppHost/Extensions/Infrastructure/AzureExtensions.Run.cs
  • src/Aspire/BookWorm.AppHost/Container/sql/quartz.sql
  • src/BuildingBlocks/BookWorm.SharedKernel/BookWorm.SharedKernel.csproj
  • src/BuildingBlocks/BookWorm.Constants/Aspire/Components.cs
✅ Files skipped from review due to trivial changes (5)
  • Directory.Packages.props
  • src/Aspire/BookWorm.AppHost/BookWorm.AppHost.csproj
  • src/Services/Chat/BookWorm.Chat/Agents/BookAgent.cs
  • src/BuildingBlocks/BookWorm.Constants/BookWorm.Constants.csproj
  • src/Services/Chat/BookWorm.Chat/Agents/SummarizeAgent.cs
🚧 Files skipped from review as they are similar to previous changes (17)
  • .config/dotnet-tools.json
  • src/Aspire/BookWorm.AppHost/Extensions/Testing/K6Extensions.cs
  • Versions.props
  • src/Aspire/BookWorm.AppHost/Extensions/Infrastructure/ScalarExtensions.cs
  • .aspire/settings.json
  • src/Aspire/BookWorm.AppHost/Container/keycloak/keycloakify/package.json
  • src/Services/Rating/BookWorm.Rating/Agents/RatingAgent.cs
  • src/BuildingBlocks/BookWorm.Chassis/RAG/Agent/A2AExtensions.cs
  • README.md
  • src/Aspire/BookWorm.AppHost/Extensions/Network/ProxyExtensions.cs
  • src/Aspire/BookWorm.AppHost/Extensions/AI/ModelExtensions.cs
  • src/Aspire/BookWorm.AppHost/AppHost.cs
  • src/Aspire/BookWorm.ServiceDefaults/ApiSpecification/OpenApi/OpenApiOptionsExtensions.cs
  • src/Aspire/BookWorm.AppHost/Extensions/Infrastructure/AzureExtensions.Provision.cs
  • src/Aspire/BookWorm.AppHost/appsettings.json
  • src/Services/Chat/BookWorm.Chat/Agents/SentimentAgent.cs
  • src/Aspire/BookWorm.AppHost/Extensions/Network/EmailExtensions.cs
🧰 Additional context used
📓 Path-based instructions (2)
**/*.cs

📄 CodeRabbit Inference Engine (.github/copilot-instructions.md)

**/*.cs: Always use the latest version C#, currently C# 13 features.
Apply code-formatting style defined in .editorconfig.
Prefer file-scoped namespace declarations and single-line using directives.
Insert a newline before the opening curly brace of any code block (e.g., after if, for, while, foreach, using, try, etc.).
Ensure that the final return statement of a method is on its own line.
Use pattern matching and switch expressions wherever possible.
Use nameof instead of string literals when referring to member names.
Place private class declarations at the bottom of the file.
Use var when the type is obvious.
Use Primary Constructor for classes with immutable properties.
Use Expression-bodied members for methods and properties.
Declare variables non-nullable, and check for null at entry points.
Always use is null or is not null instead of == null or != null.
Trust the C# null annotations and don't add null checks when the type system says a value cannot be null.

Files:

  • src/Aspire/BookWorm.AppHost/Extensions/Security/KeycloakExtensions.cs
src/Aspire/**

⚙️ CodeRabbit Configuration File

src/Aspire/**: .NET Aspire orchestration review:

  • Service discovery and configuration
  • Health checks and observability
  • Resource allocation and scaling
  • Development environment setup

Files:

  • src/Aspire/BookWorm.AppHost/Extensions/Security/KeycloakExtensions.cs
🔇 Additional comments (7)
.justfile (3)

21-21: LGTM! Clear documentation for the new features command.

The help text follows the established pattern and clearly describes the purpose of the new features recipe.


41-45: Well-structured Aspire feature configuration.

The new features recipe properly:

  • Depends on restore to ensure CLI tools are available
  • Uses appropriate dotnet aspire config set commands
  • Enables features that align with the Aspire 9.4 upgrade objectives
  • Follows established justfile patterns with clear documentation

49-49: Excellent dependency chain improvement.

Changing the build dependency from restore to features ensures proper initialization order:

  1. restore → Install tools/packages
  2. features → Configure Aspire settings
  3. build → Compile with proper configuration

This follows Clean Architecture principles by ensuring the build environment is properly configured before compilation.

src/Aspire/BookWorm.AppHost/Extensions/Security/KeycloakExtensions.cs (4)

37-37: LGTM! Clean API simplification.

The removal of the boolean parameter from WithRealmImport streamlines the method call and reduces unnecessary complexity. This aligns well with the broader theme of simplification across the Aspire configuration.


146-150: Excellent endpoint visibility configuration.

The addition of WithUrlForEndpoint to hide HTTP endpoints from the main dashboard view while keeping them accessible in details is a thoughtful UX improvement. This prevents cluttering the dashboard with insecure endpoints while maintaining developer access for debugging purposes.


153-153: Perfect adherence to coding guidelines.

The return statement is now properly formatted on its own line, following the established coding guidelines for consistency and readability.


178-207: Excellent async resource configuration pattern.

This refactoring significantly improves the architecture by:

  1. Solving timing issues: Deferring client URL assignment until endpoint allocation prevents race conditions
  2. Proper encapsulation: Environment variables are set directly on the Keycloak resource builder
  3. Mode-aware configuration: Correctly handles publish vs. run mode differences for URL resolution
  4. Clean async patterns: Uses OnResourceEndpointsAllocated with proper Task.CompletedTask return

The increased complexity is justified by the architectural benefits and follows .NET Aspire best practices for dynamic resource configuration.

✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/aspire94

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai generate unit tests to generate unit tests for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@foxminchan foxminchan self-assigned this Jul 29, 2025
@netlify

netlify Bot commented Jul 29, 2025

Copy link
Copy Markdown

Deploy Preview for bookwormdev canceled.

Name Link
🔨 Latest commit fcfedd4
🔍 Latest deploy log https://app.netlify.com/projects/bookwormdev/deploys/6889e95251c65f00083adf23

@foxminchan foxminchan linked an issue Jul 29, 2025 that may be closed by this pull request
@github-actions

github-actions Bot commented Jul 29, 2025

Copy link
Copy Markdown

Test Results

950 tests  ±0   950 ✅ ±0   4m 50s ⏱️ - 1m 38s
  7 suites ±0     0 💤 ±0 
  7 files   ±0     0 ❌ ±0 

Results for commit fcfedd4. ± Comparison against base commit 11416e3.

♻️ This comment has been updated with latest results.

@foxminchan foxminchan changed the title Update Aspire and related configurations Update Aspire 9.4 Jul 29, 2025
@foxminchan
foxminchan marked this pull request as ready for review July 30, 2025 09:24
Copilot AI review requested due to automatic review settings July 30, 2025 09:24

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

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 updates the BookWorm application to use Aspire 9.4, making it the primary focus of the upgrade. Key infrastructure and configuration changes are made to support the new version while cleaning up obsolete components and improving the development experience.

  • Updates Aspire CLI and packages from version 9.3.1-preview to 9.4.0
  • Removes HTTPS launch profiles from all services for consistency and simplifies development configuration
  • Refactors agent implementations and proxy configuration with new extension patterns

Reviewed Changes

Copilot reviewed 41 out of 43 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
Directory.Packages.props Updates Aspire version to 9.4.0 and Scalar.Aspire to 0.2.0
.config/dotnet-tools.json Updates Aspire CLI to version 9.4.0 and SonarScanner to 10.3.0
Multiple launchSettings.json Removes HTTPS launch profiles from all services
Agent files Updates agent provider usage and removes obsolete dependencies
AppHost.cs Adds new parameter descriptions and switches to new proxy configuration
ProxyExtensions.cs Introduces new API Gateway proxy builder pattern
Various extension files Removes obsolete files and updates configuration patterns

Comment thread src/Services/Chat/BookWorm.Chat/Agents/BookAgent.cs
Comment thread src/Aspire/BookWorm.AppHost/Extensions/AI/ModelExtensions.cs
Comment thread src/Aspire/BookWorm.AppHost/AppHost.cs

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 6

🧹 Nitpick comments (5)
src/BuildingBlocks/BookWorm.Chassis/RAG/Agent/A2AExtensions.cs (1)

8-8: Consider more specific extension target

Extending string directly makes this extension available globally, which might lead to naming conflicts or confusion. Consider creating a more specific type or using a static factory method instead.

-public static async Task<A2AAgent> CreateAgentAsync(this string agentUri)
+public static async Task<A2AAgent> CreateAgentAsync(this Uri agentUri, HttpClient httpClient)

Or create a dedicated factory class:

public static class A2AAgentFactory
{
    public static async Task<A2AAgent> CreateAsync(string agentUri, HttpClient httpClient)
    {
        // implementation
    }
}
Directory.Packages.props (1)

6-6: Mixed stable vs. preview Aspire feeds

<AspireVersion> is now 9.4.0 (stable) while several individual packages still reference $(AspireUnstableVersion) (preview). Ensure both feeds are enabled in nuget.config and that runtime assemblies don’t diverge at minor revision boundaries – subtle binding redirects are painful later.

Also applies to: 10-11

src/Aspire/BookWorm.ServiceDefaults/ApiSpecification/OpenApi/OpenApiOptionsExtensions.cs (1)

152-152: Consider dynamic resolution for token URL consistency

While the static construction works, consider using the same dynamic resolution pattern for the token URL to maintain consistency.

-        var tokenUrl = $"{baseUrl}/protocol/openid-connect/token";
+        var tokenUrl = await resolver.ResolveServiceEndpointUrl(
+            $"{baseUrl}",
+            "/protocol/openid-connect/token",
+            Protocol.Http,
+            cancellationToken
+        );
src/Aspire/BookWorm.AppHost/Extensions/Network/ProxyExtensions.cs (2)

50-54: Consider making the identity route configurable

The hard-coded identity route might limit flexibility. Consider making it configurable through the builder pattern for better extensibility.

Add a method to ApiGatewayProxyBuilder to configure the identity route:

public ApiGatewayProxyBuilder WithIdentityRoute(string path = "/identity/{**remainder}")
{
    _identityRoutePath = path;
    return this;
}

60-65: Consider using record type for better value semantics

Since Service is a simple data container with immutable properties, consider converting it to a record for better value semantics and built-in equality members.

-public sealed class Service
-{
-    public required string Name { get; init; }
-    public required IResourceBuilder<ProjectResource> Resource { get; init; }
-    public bool UseProtobuf { get; init; }
-}
+public sealed record Service
+{
+    public required string Name { get; init; }
+    public required IResourceBuilder<ProjectResource> Resource { get; init; }
+    public bool UseProtobuf { get; init; }
+}
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 11416e3 and 0e3d27e.

⛔ Files ignored due to path filters (2)
  • docs/eventcatalog/bun.lock is excluded by !**/*.lock
  • src/Aspire/BookWorm.AppHost/Container/keycloak/keycloakify/bun.lock is excluded by !**/*.lock
📒 Files selected for processing (41)
  • .aspire/settings.json (1 hunks)
  • .config/dotnet-tools.json (1 hunks)
  • .justfile (2 hunks)
  • Directory.Packages.props (1 hunks)
  • README.md (1 hunks)
  • Versions.props (1 hunks)
  • src/Aspire/BookWorm.AppHost/AppHost.cs (6 hunks)
  • src/Aspire/BookWorm.AppHost/BookWorm.AppHost.csproj (1 hunks)
  • src/Aspire/BookWorm.AppHost/Container/keycloak/keycloakify/package.json (2 hunks)
  • src/Aspire/BookWorm.AppHost/Container/proxy/yarp.json (0 hunks)
  • src/Aspire/BookWorm.AppHost/Container/sql/quartz.sql (0 hunks)
  • src/Aspire/BookWorm.AppHost/Extensions/AI/ModelExtensions.cs (3 hunks)
  • src/Aspire/BookWorm.AppHost/Extensions/Infrastructure/AzureExtensions.Provision.cs (1 hunks)
  • src/Aspire/BookWorm.AppHost/Extensions/Infrastructure/AzureExtensions.Run.cs (0 hunks)
  • src/Aspire/BookWorm.AppHost/Extensions/Infrastructure/RedisResourceExtensions.cs (0 hunks)
  • src/Aspire/BookWorm.AppHost/Extensions/Infrastructure/ScalarExtensions.cs (2 hunks)
  • src/Aspire/BookWorm.AppHost/Extensions/Network/EmailExtensions.cs (1 hunks)
  • src/Aspire/BookWorm.AppHost/Extensions/Network/EndpointExtensions.cs (0 hunks)
  • src/Aspire/BookWorm.AppHost/Extensions/Network/LaunchProfileExtensions.cs (0 hunks)
  • src/Aspire/BookWorm.AppHost/Extensions/Network/ProxyExtensions.cs (1 hunks)
  • src/Aspire/BookWorm.AppHost/Extensions/Security/KeycloakExtensions.cs (3 hunks)
  • src/Aspire/BookWorm.AppHost/Extensions/Testing/K6Extensions.cs (2 hunks)
  • src/Aspire/BookWorm.AppHost/appsettings.json (1 hunks)
  • src/Aspire/BookWorm.ServiceDefaults/ApiSpecification/OpenApi/OpenApiOptionsExtensions.cs (2 hunks)
  • src/BuildingBlocks/BookWorm.Chassis/RAG/Agent/A2AExtensions.cs (1 hunks)
  • src/BuildingBlocks/BookWorm.Chassis/RAG/Agent/BookWormAgentProvider.cs (0 hunks)
  • src/BuildingBlocks/BookWorm.Chassis/RAG/Extensions.cs (0 hunks)
  • src/BuildingBlocks/BookWorm.Constants/Aspire/Components.cs (0 hunks)
  • src/BuildingBlocks/BookWorm.Constants/BookWorm.Constants.csproj (1 hunks)
  • src/BuildingBlocks/BookWorm.SharedKernel/BookWorm.SharedKernel.csproj (0 hunks)
  • src/Services/Basket/BookWorm.Basket/Properties/launchSettings.json (0 hunks)
  • src/Services/Catalog/BookWorm.Catalog/Properties/launchSettings.json (0 hunks)
  • src/Services/Chat/BookWorm.Chat/Agents/BookAgent.cs (1 hunks)
  • src/Services/Chat/BookWorm.Chat/Agents/SentimentAgent.cs (1 hunks)
  • src/Services/Chat/BookWorm.Chat/Agents/SummarizeAgent.cs (1 hunks)
  • src/Services/Chat/BookWorm.Chat/Properties/launchSettings.json (0 hunks)
  • src/Services/Finance/BookWorm.Finance/Properties/launchSettings.json (0 hunks)
  • src/Services/Notification/BookWorm.Notification/Properties/launchSettings.json (0 hunks)
  • src/Services/Ordering/BookWorm.Ordering/Properties/launchSettings.json (0 hunks)
  • src/Services/Rating/BookWorm.Rating/Agents/RatingAgent.cs (2 hunks)
  • src/Services/Rating/BookWorm.Rating/Properties/launchSettings.json (0 hunks)
💤 Files with no reviewable changes (17)
  • src/Services/Chat/BookWorm.Chat/Properties/launchSettings.json
  • src/BuildingBlocks/BookWorm.SharedKernel/BookWorm.SharedKernel.csproj
  • src/Services/Catalog/BookWorm.Catalog/Properties/launchSettings.json
  • src/Services/Finance/BookWorm.Finance/Properties/launchSettings.json
  • src/Services/Notification/BookWorm.Notification/Properties/launchSettings.json
  • src/Aspire/BookWorm.AppHost/Extensions/Infrastructure/AzureExtensions.Run.cs
  • src/Services/Basket/BookWorm.Basket/Properties/launchSettings.json
  • src/Services/Rating/BookWorm.Rating/Properties/launchSettings.json
  • src/BuildingBlocks/BookWorm.Constants/Aspire/Components.cs
  • src/Services/Ordering/BookWorm.Ordering/Properties/launchSettings.json
  • src/BuildingBlocks/BookWorm.Chassis/RAG/Agent/BookWormAgentProvider.cs
  • src/BuildingBlocks/BookWorm.Chassis/RAG/Extensions.cs
  • src/Aspire/BookWorm.AppHost/Extensions/Network/LaunchProfileExtensions.cs
  • src/Aspire/BookWorm.AppHost/Extensions/Infrastructure/RedisResourceExtensions.cs
  • src/Aspire/BookWorm.AppHost/Container/proxy/yarp.json
  • src/Aspire/BookWorm.AppHost/Container/sql/quartz.sql
  • src/Aspire/BookWorm.AppHost/Extensions/Network/EndpointExtensions.cs
🧰 Additional context used
📓 Path-based instructions (2)
src/Aspire/**

⚙️ CodeRabbit Configuration File

src/Aspire/**: .NET Aspire orchestration review:

  • Service discovery and configuration
  • Health checks and observability
  • Resource allocation and scaling
  • Development environment setup

Files:

  • src/Aspire/BookWorm.AppHost/appsettings.json
  • src/Aspire/BookWorm.AppHost/BookWorm.AppHost.csproj
  • src/Aspire/BookWorm.AppHost/Extensions/Infrastructure/AzureExtensions.Provision.cs
  • src/Aspire/BookWorm.AppHost/Container/keycloak/keycloakify/package.json
  • src/Aspire/BookWorm.AppHost/Extensions/AI/ModelExtensions.cs
  • src/Aspire/BookWorm.AppHost/Extensions/Network/EmailExtensions.cs
  • src/Aspire/BookWorm.AppHost/Extensions/Testing/K6Extensions.cs
  • src/Aspire/BookWorm.ServiceDefaults/ApiSpecification/OpenApi/OpenApiOptionsExtensions.cs
  • src/Aspire/BookWorm.AppHost/AppHost.cs
  • src/Aspire/BookWorm.AppHost/Extensions/Network/ProxyExtensions.cs
  • src/Aspire/BookWorm.AppHost/Extensions/Security/KeycloakExtensions.cs
  • src/Aspire/BookWorm.AppHost/Extensions/Infrastructure/ScalarExtensions.cs
**/*.cs

📄 CodeRabbit Inference Engine (.github/copilot-instructions.md)

**/*.cs: Always use the latest version C#, currently C# 13 features.
Apply code-formatting style defined in .editorconfig.
Prefer file-scoped namespace declarations and single-line using directives.
Insert a newline before the opening curly brace of any code block (e.g., after if, for, while, foreach, using, try, etc.).
Ensure that the final return statement of a method is on its own line.
Use pattern matching and switch expressions wherever possible.
Use nameof instead of string literals when referring to member names.
Place private class declarations at the bottom of the file.
Use var when the type is obvious.
Use Primary Constructor for classes with immutable properties.
Use Expression-bodied members for methods and properties.
Declare variables non-nullable, and check for null at entry points.
Always use is null or is not null instead of == null or != null.
Trust the C# null annotations and don't add null checks when the type system says a value cannot be null.

Files:

  • src/Services/Chat/BookWorm.Chat/Agents/BookAgent.cs
  • src/Services/Chat/BookWorm.Chat/Agents/SentimentAgent.cs
  • src/Services/Rating/BookWorm.Rating/Agents/RatingAgent.cs
  • src/Services/Chat/BookWorm.Chat/Agents/SummarizeAgent.cs
  • src/BuildingBlocks/BookWorm.Chassis/RAG/Agent/A2AExtensions.cs
  • src/Aspire/BookWorm.AppHost/Extensions/Infrastructure/AzureExtensions.Provision.cs
  • src/Aspire/BookWorm.AppHost/Extensions/AI/ModelExtensions.cs
  • src/Aspire/BookWorm.AppHost/Extensions/Network/EmailExtensions.cs
  • src/Aspire/BookWorm.AppHost/Extensions/Testing/K6Extensions.cs
  • src/Aspire/BookWorm.ServiceDefaults/ApiSpecification/OpenApi/OpenApiOptionsExtensions.cs
  • src/Aspire/BookWorm.AppHost/AppHost.cs
  • src/Aspire/BookWorm.AppHost/Extensions/Network/ProxyExtensions.cs
  • src/Aspire/BookWorm.AppHost/Extensions/Security/KeycloakExtensions.cs
  • src/Aspire/BookWorm.AppHost/Extensions/Infrastructure/ScalarExtensions.cs
🧠 Learnings (4)
src/Aspire/BookWorm.AppHost/appsettings.json (1)

Learnt from: CR
PR: foxminchan/BookWorm#0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-07-24T07:14:55.246Z
Learning: Never change global.json unless explicitly asked to.

.config/dotnet-tools.json (4)

Learnt from: CR
PR: foxminchan/BookWorm#0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-07-24T07:14:55.246Z
Learning: Never change nuget.config files unless explicitly asked to.

Learnt from: CR
PR: foxminchan/BookWorm#0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-07-24T07:14:55.246Z
Learning: Never change global.json unless explicitly asked to.

Learnt from: CR
PR: foxminchan/BookWorm#0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-07-24T07:14:55.246Z
Learning: Applies to **/*.cs : Always use the latest version C#, currently C# 13 features.

Learnt from: CR
PR: foxminchan/BookWorm#0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-06-23T18:48:43.455Z
Learning: When reviewing C# code in files matching **/*.cs, always use the latest available C# language features (currently C# 13) to ensure modern syntax and best practices.

src/Aspire/BookWorm.AppHost/BookWorm.AppHost.csproj (1)

Learnt from: CR
PR: foxminchan/BookWorm#0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-07-24T07:14:55.246Z
Learning: Applies to **/*.cs : Prefer file-scoped namespace declarations and single-line using directives.

src/BuildingBlocks/BookWorm.Constants/BookWorm.Constants.csproj (1)

Learnt from: CR
PR: foxminchan/BookWorm#0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-07-24T07:14:55.246Z
Learning: Applies to **/*.cs : Prefer file-scoped namespace declarations and single-line using directives.

🧬 Code Graph Analysis (1)
src/Aspire/BookWorm.AppHost/Extensions/Testing/K6Extensions.cs (2)
src/BuildingBlocks/BookWorm.Constants/Aspire/Protocol.cs (1)
  • Protocol (3-11)
src/Aspire/BookWorm.AppHost/Extensions/ProjectExtensions.cs (2)
  • AddK6 (76-92)
  • ProjectExtensions (6-93)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: Analyzers
  • GitHub Check: Security Scan
  • GitHub Check: Build and analyze
🔇 Additional comments (29)
src/BuildingBlocks/BookWorm.Constants/BookWorm.Constants.csproj (1)

1-1: Verify that a TargetFramework is provided elsewhere

With the property group removed, this project now relies entirely on central MSBuild files (e.g., Directory.Build.props) for critical metadata such as TargetFramework/TargetFrameworks.
If those values are missing, the project will not load or build.

Please confirm the central props file (or another imported file) supplies the required properties; otherwise, add a minimal <PropertyGroup> containing TargetFramework = net8.0 (or the appropriate TFM).

src/Services/Chat/BookWorm.Chat/Agents/BookAgent.cs (1)

2-2: LGTM - Consistent namespace refactoring

The namespace update from BookWorm.Chassis.RAG to BookWorm.Chassis.RAG.Agent aligns with the architectural refactoring that centralizes agent-related functionality. This maintains clean separation of concerns within the RAG module.

src/Services/Chat/BookWorm.Chat/Agents/SentimentAgent.cs (1)

75-75: LGTM - Simplified provider creation

The change from BookWormAgentProvider.Create() to an anonymous object with Organization = nameof(BookWorm) simplifies the provider creation pattern and removes dependency on the removed BookWormAgentProvider class. This is a clean refactoring that maintains functionality while reducing complexity.

src/Services/Chat/BookWorm.Chat/Agents/SummarizeAgent.cs (1)

76-76: LGTM - Consistent provider simplification

The Provider property change maintains consistency with the refactoring pattern applied across all agent classes. Using nameof(BookWorm) provides type safety and refactoring resilience compared to string literals.

src/Services/Rating/BookWorm.Rating/Agents/RatingAgent.cs (2)

1-1: LGTM - Consistent namespace alignment

The addition of BookWorm.Chassis.RAG.Agent import aligns with the architectural refactoring and supports the new agent creation patterns.


107-107: LGTM - Provider pattern consistency

The Provider property simplification maintains consistency across all agent classes while reducing dependency on the removed BookWormAgentProvider factory class.

Versions.props (1)

5-6: Verify test-tooling versions propagate correctly

Bumping MsTestVersion to 1.8.0 and AspireUnstableVersion to a newer preview is sensible, but please confirm:

  1. All consumers in Directory.Packages.props resolve to this exact version (no drift).
  2. CI agents cache the new MsTest packages; otherwise, test runs will silently fall back.

Also applies to: 10-10

src/Aspire/BookWorm.AppHost/BookWorm.AppHost.csproj (1)

7-7: Changed warning suppression – double-check build hygiene

Only ASPIREINTERACTION001 is now suppressed. Make sure the previously ignored warnings (ASPIREAZURE001, ASPIRECOMPUTE001, NU1603) are really fixed rather than just re-enabled, otherwise the build may start failing when TreatWarningsAsErrors is turned on again.

.config/dotnet-tools.json (1)

27-35: Toolchain bump looks good – mind host prerequisites

Upgrading SonarScanner to 10.3.0 and Aspire CLI to 9.4.0 aligns with the package versions—nice. Just confirm build agents have the matching .NET SDK installed; SonarScanner 10.3.0 requires ≥ .NET 8.

README.md (1)

58-59: Documentation reordering looks good.

The reordering of prerequisites with Docker moved below Node.js and Gitleaks added as a new prerequisite improves the logical flow and ensures all security tooling is documented.

.aspire/settings.json (1)

2-6: Well-structured Aspire feature configuration.

The addition of feature flags for deploy and exec commands follows proper Aspire configuration patterns. The boolean values are correctly formatted as strings, and the trailing comma on appHostPath properly accommodates the new properties.

src/Aspire/BookWorm.AppHost/Extensions/Infrastructure/AzureExtensions.Provision.cs (1)

142-144: Dashboard integration properly implemented.

The addition of .WithDashboard() to the Azure Container App Environment provisioning follows the correct builder pattern flow and enhances monitoring capabilities. The method is appropriately positioned before infrastructure configuration.

src/Aspire/BookWorm.AppHost/Container/keycloak/keycloakify/package.json (2)

17-17: Keycloakify version bump appropriate.

The upgrade from 11.8.51 to 11.8.56 is a conservative patch version update that should maintain compatibility while providing bug fixes and improvements.


26-44: DevDependency updates follow good practices.

The ESLint and TypeScript tooling updates use conservative version increments that provide improved tooling capabilities while minimizing breaking change risks. All updates maintain consistency across the TypeScript ecosystem packages.

.justfile (3)

21-21: Help documentation updated correctly.

The help recipe properly reflects the addition of the new features command while removing references to the deprecated GPU functionality.


43-46: Features recipe implements proper Aspire configuration.

The new recipe correctly enables Aspire features using the standard dotnet aspire config set commands. The dependency on restore ensures tools are available before configuration.


49-49: Build dependency chain properly structured.

Changing the build dependency from restore to features creates a logical flow: restore → features → build. This ensures Aspire features are enabled before compilation, which aligns with the new configuration approach.

src/Aspire/BookWorm.AppHost/Extensions/Network/EmailExtensions.cs (1)

24-93: Well-crafted parameter configuration with excellent documentation

The enhanced parameter definitions with detailed descriptions and SendGrid documentation links provide excellent developer experience. The use of WithCustomInput for UI configuration is a thoughtful addition.

src/Aspire/BookWorm.AppHost/Extensions/Testing/K6Extensions.cs (2)

29-29: Fixed HTTP protocol may limit testing scenarios

The change from dynamic launch profile to Protocol.Http aligns with the removal of launch profile extensions. However, this limits K6 to testing only HTTP endpoints.

Consider whether HTTPS endpoint testing might be needed in the future. If so, you may want to make the protocol configurable via a parameter.


38-39: Explicit start control added for K6

Adding WithExplicitStart() provides better control over when K6 begins load testing, which is beneficial for ensuring all dependencies are fully ready.

src/Aspire/BookWorm.AppHost/Extensions/AI/ModelExtensions.cs (1)

10-29: Excellent modernization to async pattern with scale-to-zero

The conversion to async and the use of PublishAsAzureContainerApp with minimum replicas set to 0 enables cost-effective scaling. The async GPU check aligns well with the configuration retrieval pattern.

src/Aspire/BookWorm.AppHost/AppHost.cs (4)

3-7: Appropriate conditional configuration for publish mode

Moving CORS and Azure Container App environment configuration to publish mode only is the correct approach, avoiding unnecessary overhead in development.


9-52: Excellent parameter enhancement with descriptions and relationships

The detailed parameter descriptions and parent-child relationships significantly improve the developer experience. The password complexity requirements are well-defined.


93-100: Correct async/await pattern for Ollama initialization

The await on AddOllama properly handles the asynchronous initialization introduced in the extension method.


209-216: Clean API gateway configuration with service registration

The new AddApiGatewayProxy() builder pattern with fluent service registration is much cleaner than the previous manual configuration approach.

src/Aspire/BookWorm.ServiceDefaults/ApiSpecification/OpenApi/OpenApiOptionsExtensions.cs (1)

131-151: Dynamic endpoint resolution properly implemented

The async transformation with ServiceEndpointResolver enables proper service discovery for the OAuth2 authorization URL. The reference to Scalar issue #6225 explains the HTTP protocol usage.

src/Aspire/BookWorm.AppHost/Extensions/Security/KeycloakExtensions.cs (3)

37-37: Clean API simplification

Good simplification of the WithRealmImport API by removing the unnecessary boolean parameter.


140-150: Well-documented HTTP/2 workaround with proper URL display configuration

Excellent documentation of the HTTP/2 issue with relevant issue links. The URL display configuration to DetailsOnly is a good UX improvement for development mode.


177-207: Excellent architectural improvement with proper async handling

Great refactoring that:

  • Properly separates HTTP configuration concerns to the Keycloak resource
  • Uses the OnResourceEndpointsAllocated callback pattern correctly for endpoint-dependent configuration
  • Maintains clean async/await pattern without blocking
  • Appropriately handles different execution contexts (publish vs development)

This is a significant improvement over the previous inline approach.

Comment thread src/Aspire/BookWorm.AppHost/appsettings.json
Comment thread src/Aspire/BookWorm.AppHost/Extensions/AI/ModelExtensions.cs
Comment thread src/Aspire/BookWorm.AppHost/Extensions/Network/ProxyExtensions.cs
Comment thread src/Aspire/BookWorm.AppHost/Extensions/Network/ProxyExtensions.cs
Comment thread src/BuildingBlocks/BookWorm.Chassis/RAG/Agent/A2AExtensions.cs
- Bump Aspire CLI version from 9.3.1-preview.1.25305.6 to 9.4.0-preview.1.25367.4 in dotnet-tools.json and Directory.Packages.props.
- Disable TreatWarningsAsErrors in Directory.Build.props for smoother builds.
- Add additional warning suppression (NU1507) in Directory.Build.props.
- Update AspireVersion in Directory.Packages.props to match the new CLI version.
- Add a new NuGet package source for dotnet9 in nuget.config.
- Enhance AppHost.cs with additional parameters for Keycloak and PostgreSQL configuration.
- Remove obsolete YARP configuration file (yarp.json) and Quartz SQL script (quartz.sql).
- Add dashboard support in AzureExtensions.Provision.cs.
- Remove unnecessary RedisResourceExtensions.cs file.
- Improve email configuration in EmailExtensions.cs with detailed descriptions for parameters.
- Introduce new ProxyExtensions.cs for API Gateway proxy configuration.
- Update KeycloakExtensions.cs to remove unnecessary realm import parameter.
- Modify K6Extensions.cs to use Protocol.Http for endpoint references.
- Clean up Components.cs by removing unused ApplicationInsights and Table constants.
- Simplify project files by removing unnecessary PublishAot settings.
- Remove HTTPS configurations from launchSettings.json files across multiple services for consistency.
@sonarqubecloud

Copy link
Copy Markdown

@foxminchan
foxminchan merged commit e63e6d1 into main Jul 30, 2025
17 checks passed
@foxminchan
foxminchan deleted the feat/aspire94 branch July 30, 2025 09:54
This was referenced Sep 27, 2025
@coderabbitai coderabbitai Bot mentioned this pull request Oct 27, 2025
11 tasks
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.

Upgrade to Aspire 9.4

2 participants