Update Aspire 9.4#96
Conversation
WalkthroughThis 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
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
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)
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Possibly related PRs
Suggested labels
Poem
Note ⚡️ Unit Test Generation is now available in beta!Learn more here, or try it out under "Finishing Touches" below. 📜 Recent review detailsConfiguration used: .coderabbit.yaml ⛔ Files ignored due to path filters (2)
📒 Files selected for processing (41)
💤 Files with no reviewable changes (17)
✅ Files skipped from review due to trivial changes (5)
🚧 Files skipped from review as they are similar to previous changes (17)
🧰 Additional context used📓 Path-based instructions (2)**/*.cs📄 CodeRabbit Inference Engine (.github/copilot-instructions.md)
Files:
src/Aspire/**⚙️ CodeRabbit Configuration File
Files:
🔇 Additional comments (7)
✨ Finishing Touches
🧪 Generate unit tests
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. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed 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)
Other keywords and placeholders
Documentation and Community
|
✅ Deploy Preview for bookwormdev canceled.
|
f6e0843 to
0e3d27e
Compare
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
Actionable comments posted: 6
🧹 Nitpick comments (5)
src/BuildingBlocks/BookWorm.Chassis/RAG/Agent/A2AExtensions.cs (1)
8-8: Consider more specific extension targetExtending
stringdirectly 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 innuget.configand 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 consistencyWhile 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 configurableThe hard-coded identity route might limit flexibility. Consider making it configurable through the builder pattern for better extensibility.
Add a method to
ApiGatewayProxyBuilderto configure the identity route:public ApiGatewayProxyBuilder WithIdentityRoute(string path = "/identity/{**remainder}") { _identityRoutePath = path; return this; }
60-65: Consider using record type for better value semanticsSince
Serviceis 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
⛔ Files ignored due to path filters (2)
docs/eventcatalog/bun.lockis excluded by!**/*.locksrc/Aspire/BookWorm.AppHost/Container/keycloak/keycloakify/bun.lockis 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.jsonsrc/Aspire/BookWorm.AppHost/BookWorm.AppHost.csprojsrc/Aspire/BookWorm.AppHost/Extensions/Infrastructure/AzureExtensions.Provision.cssrc/Aspire/BookWorm.AppHost/Container/keycloak/keycloakify/package.jsonsrc/Aspire/BookWorm.AppHost/Extensions/AI/ModelExtensions.cssrc/Aspire/BookWorm.AppHost/Extensions/Network/EmailExtensions.cssrc/Aspire/BookWorm.AppHost/Extensions/Testing/K6Extensions.cssrc/Aspire/BookWorm.ServiceDefaults/ApiSpecification/OpenApi/OpenApiOptionsExtensions.cssrc/Aspire/BookWorm.AppHost/AppHost.cssrc/Aspire/BookWorm.AppHost/Extensions/Network/ProxyExtensions.cssrc/Aspire/BookWorm.AppHost/Extensions/Security/KeycloakExtensions.cssrc/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., afterif,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.
Usenameofinstead of string literals when referring to member names.
Place private class declarations at the bottom of the file.
Usevarwhen the type is obvious.
UsePrimary Constructorfor classes with immutable properties.
UseExpression-bodied membersfor methods and properties.
Declare variables non-nullable, and check fornullat entry points.
Always useis nulloris not nullinstead of== nullor!= 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.cssrc/Services/Chat/BookWorm.Chat/Agents/SentimentAgent.cssrc/Services/Rating/BookWorm.Rating/Agents/RatingAgent.cssrc/Services/Chat/BookWorm.Chat/Agents/SummarizeAgent.cssrc/BuildingBlocks/BookWorm.Chassis/RAG/Agent/A2AExtensions.cssrc/Aspire/BookWorm.AppHost/Extensions/Infrastructure/AzureExtensions.Provision.cssrc/Aspire/BookWorm.AppHost/Extensions/AI/ModelExtensions.cssrc/Aspire/BookWorm.AppHost/Extensions/Network/EmailExtensions.cssrc/Aspire/BookWorm.AppHost/Extensions/Testing/K6Extensions.cssrc/Aspire/BookWorm.ServiceDefaults/ApiSpecification/OpenApi/OpenApiOptionsExtensions.cssrc/Aspire/BookWorm.AppHost/AppHost.cssrc/Aspire/BookWorm.AppHost/Extensions/Network/ProxyExtensions.cssrc/Aspire/BookWorm.AppHost/Extensions/Security/KeycloakExtensions.cssrc/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 aTargetFrameworkis provided elsewhereWith the property group removed, this project now relies entirely on central MSBuild files (e.g.,
Directory.Build.props) for critical metadata such asTargetFramework/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>containingTargetFramework = net8.0(or the appropriate TFM).src/Services/Chat/BookWorm.Chat/Agents/BookAgent.cs (1)
2-2: LGTM - Consistent namespace refactoringThe namespace update from
BookWorm.Chassis.RAGtoBookWorm.Chassis.RAG.Agentaligns 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 creationThe change from
BookWormAgentProvider.Create()to an anonymous object withOrganization = nameof(BookWorm)simplifies the provider creation pattern and removes dependency on the removedBookWormAgentProviderclass. 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 simplificationThe 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 alignmentThe addition of
BookWorm.Chassis.RAG.Agentimport aligns with the architectural refactoring and supports the new agent creation patterns.
107-107: LGTM - Provider pattern consistencyThe Provider property simplification maintains consistency across all agent classes while reducing dependency on the removed
BookWormAgentProviderfactory class.Versions.props (1)
5-6: Verify test-tooling versions propagate correctlyBumping
MsTestVersionto 1.8.0 andAspireUnstableVersionto a newer preview is sensible, but please confirm:
- All consumers in
Directory.Packages.propsresolve to this exact version (no drift).- 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 hygieneOnly
ASPIREINTERACTION001is 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 whenTreatWarningsAsErrorsis turned on again..config/dotnet-tools.json (1)
27-35: Toolchain bump looks good – mind host prerequisitesUpgrading 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
appHostPathproperly 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
featurescommand 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 setcommands. The dependency onrestoreensures tools are available before configuration.
49-49: Build dependency chain properly structured.Changing the build dependency from
restoretofeaturescreates 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 documentationThe enhanced parameter definitions with detailed descriptions and SendGrid documentation links provide excellent developer experience. The use of
WithCustomInputfor UI configuration is a thoughtful addition.src/Aspire/BookWorm.AppHost/Extensions/Testing/K6Extensions.cs (2)
29-29: Fixed HTTP protocol may limit testing scenariosThe change from dynamic launch profile to
Protocol.Httpaligns 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 K6Adding
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-zeroThe conversion to async and the use of
PublishAsAzureContainerAppwith 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 modeMoving 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 relationshipsThe 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 initializationThe await on
AddOllamaproperly handles the asynchronous initialization introduced in the extension method.
209-216: Clean API gateway configuration with service registrationThe 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 implementedThe async transformation with
ServiceEndpointResolverenables 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 simplificationGood simplification of the
WithRealmImportAPI by removing the unnecessary boolean parameter.
140-150: Well-documented HTTP/2 workaround with proper URL display configurationExcellent documentation of the HTTP/2 issue with relevant issue links. The URL display configuration to
DetailsOnlyis a good UX improvement for development mode.
177-207: Excellent architectural improvement with proper async handlingGreat refactoring that:
- Properly separates HTTP configuration concerns to the Keycloak resource
- Uses the
OnResourceEndpointsAllocatedcallback 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.
- 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.
0e3d27e to
fcfedd4
Compare
|



Pull Request Description
Checklist
Summary by CodeRabbit
New Features
Improvements
Removals
Bug Fixes
Documentation