From 1fd70ee04112fd94e2dcbbfe13d740ef7aaa35e6 Mon Sep 17 00:00:00 2001 From: David Negstad <50252651+danegsta@users.noreply.github.com> Date: Wed, 25 Mar 2026 13:25:33 -0700 Subject: [PATCH 1/2] Allow filtering endpoints from the default reference set (#15558) * Allow filtering endpoints from the default reference set * Update snapshots for codegen * Update the property to ExcludeReferenceEndpoint and make it false by default * Update test snapshot with outdated containerApps API version --- .../AzureCosmosDBExtensions.cs | 1 + .../AzureEventHubsExtensions.cs | 1 + .../AzureServiceBusExtensions.cs | 1 + .../KeycloakResourceBuilderExtensions.cs | 1 + .../ApplicationModel/EndpointAnnotation.cs | 14 ++ .../ApplicationModel/EndpointReference.cs | 9 ++ .../ResourceBuilderExtensions.cs | 37 ++++- ...TwoPassScanningGeneratedAspire.verified.go | 12 ++ ...oPassScanningGeneratedAspire.verified.java | 7 + ...TwoPassScanningGeneratedAspire.verified.py | 5 + ...TwoPassScanningGeneratedAspire.verified.rs | 8 ++ ...TwoPassScanningGeneratedAspire.verified.ts | 10 ++ .../WithReferenceTests.cs | 129 ++++++++++++++++++ 13 files changed, 229 insertions(+), 6 deletions(-) diff --git a/src/Aspire.Hosting.Azure.CosmosDB/AzureCosmosDBExtensions.cs b/src/Aspire.Hosting.Azure.CosmosDB/AzureCosmosDBExtensions.cs index e9cb111cb1c..1a622f91dfc 100644 --- a/src/Aspire.Hosting.Azure.CosmosDB/AzureCosmosDBExtensions.cs +++ b/src/Aspire.Hosting.Azure.CosmosDB/AzureCosmosDBExtensions.cs @@ -136,6 +136,7 @@ private static IResourceBuilder RunAsEmulator(this IResou if (useVNextPreview) { builder.WithHttpEndpoint(name: EmulatorHealthEndpointName, targetPort: 8080) + .WithEndpoint(EmulatorHealthEndpointName, e => e.ExcludeReferenceEndpoint = true) .WithHttpHealthCheck(endpointName: EmulatorHealthEndpointName, path: "/ready") .WithUrlForEndpoint(EmulatorHealthEndpointName, u => u.DisplayLocation = UrlDisplayLocation.DetailsOnly); diff --git a/src/Aspire.Hosting.Azure.EventHubs/AzureEventHubsExtensions.cs b/src/Aspire.Hosting.Azure.EventHubs/AzureEventHubsExtensions.cs index 32e08696395..3513f5d7c04 100644 --- a/src/Aspire.Hosting.Azure.EventHubs/AzureEventHubsExtensions.cs +++ b/src/Aspire.Hosting.Azure.EventHubs/AzureEventHubsExtensions.cs @@ -258,6 +258,7 @@ public static IResourceBuilder RunAsEmulator(this IResou builder .WithEndpoint(name: "emulator", targetPort: 5672) .WithHttpEndpoint(name: EmulatorHealthEndpointName, targetPort: 5300) + .WithEndpoint(EmulatorHealthEndpointName, e => e.ExcludeReferenceEndpoint = true) .WithHttpHealthCheck(endpointName: EmulatorHealthEndpointName, path: "/health") .WithAnnotation(new ContainerImageAnnotation { diff --git a/src/Aspire.Hosting.Azure.ServiceBus/AzureServiceBusExtensions.cs b/src/Aspire.Hosting.Azure.ServiceBus/AzureServiceBusExtensions.cs index 72a72514b83..9c9e41b7311 100644 --- a/src/Aspire.Hosting.Azure.ServiceBus/AzureServiceBusExtensions.cs +++ b/src/Aspire.Hosting.Azure.ServiceBus/AzureServiceBusExtensions.cs @@ -402,6 +402,7 @@ public static IResourceBuilder RunAsEmulator(this IReso builder .WithEndpoint(name: "emulator", targetPort: 5672) .WithHttpEndpoint(name: EmulatorHealthEndpointName, targetPort: 5300) + .WithEndpoint(EmulatorHealthEndpointName, e => e.ExcludeReferenceEndpoint = true) .WithAnnotation(new ContainerImageAnnotation { Registry = ServiceBusEmulatorContainerImageTags.Registry, diff --git a/src/Aspire.Hosting.Keycloak/KeycloakResourceBuilderExtensions.cs b/src/Aspire.Hosting.Keycloak/KeycloakResourceBuilderExtensions.cs index f05bccee709..a36b1b4af52 100644 --- a/src/Aspire.Hosting.Keycloak/KeycloakResourceBuilderExtensions.cs +++ b/src/Aspire.Hosting.Keycloak/KeycloakResourceBuilderExtensions.cs @@ -70,6 +70,7 @@ public static IResourceBuilder AddKeycloak( .WithImageTag(KeycloakContainerImageTags.Tag) .WithHttpEndpoint(port: port, targetPort: DefaultContainerPort) .WithHttpEndpoint(targetPort: ManagementInterfaceContainerPort, name: ManagementEndpointName) + .WithEndpoint(ManagementEndpointName, e => e.ExcludeReferenceEndpoint = true) .WithHttpHealthCheck(endpointName: ManagementEndpointName, path: "/health/ready") .WithOtlpExporter() .WithEnvironment(context => diff --git a/src/Aspire.Hosting/ApplicationModel/EndpointAnnotation.cs b/src/Aspire.Hosting/ApplicationModel/EndpointAnnotation.cs index 4ed71ad3b52..e5afeaa80f5 100644 --- a/src/Aspire.Hosting/ApplicationModel/EndpointAnnotation.cs +++ b/src/Aspire.Hosting/ApplicationModel/EndpointAnnotation.cs @@ -185,6 +185,20 @@ public string Transport /// Defaults to true. public bool IsProxied { get; set; } = true; + /// + /// Gets or sets a value indicating whether this endpoint is excluded from the default set when referencing the resource's endpoints + /// via WithReference(resource). When true, the endpoint is excluded from the default set and must be + /// referenced explicitly using WithReference(resource.GetEndpoint("name")). + /// + /// + /// Defaults to false. + /// + /// This is useful for resources that expose auxiliary endpoints (e.g., management dashboards, health check ports) + /// that should not be included in service discovery by default. + /// + /// + public bool ExcludeReferenceEndpoint { get; set; } + /// /// Gets or sets a value indicating whether TLS is enabled for this endpoint. /// diff --git a/src/Aspire.Hosting/ApplicationModel/EndpointReference.cs b/src/Aspire.Hosting/ApplicationModel/EndpointReference.cs index 271e080d34b..9ced43243de 100644 --- a/src/Aspire.Hosting/ApplicationModel/EndpointReference.cs +++ b/src/Aspire.Hosting/ApplicationModel/EndpointReference.cs @@ -69,6 +69,15 @@ public sealed class EndpointReference : IManifestExpressionProvider, IValueProvi /// public bool TlsEnabled => Exists && EndpointAnnotation.TlsEnabled; + /// + /// Gets a value indicating whether this endpoint is excluded from the default set when referencing the resource's endpoints. + /// + /// + /// Returns if the endpoint annotation has not been added to the resource yet. + /// Once the annotation exists, this property delegates to . + /// + public bool ExcludeReferenceEndpoint => Exists && EndpointAnnotation.ExcludeReferenceEndpoint; + string IManifestExpressionProvider.ValueExpression => GetExpression(); /// diff --git a/src/Aspire.Hosting/ResourceBuilderExtensions.cs b/src/Aspire.Hosting/ResourceBuilderExtensions.cs index d0568f41e28..e4df1c11681 100644 --- a/src/Aspire.Hosting/ResourceBuilderExtensions.cs +++ b/src/Aspire.Hosting/ResourceBuilderExtensions.cs @@ -526,9 +526,12 @@ private static Action CreateEndpointReferenceEnviron } var endpointName = endpoint.EndpointName; - if (!annotation.UseAllEndpoints && !annotation.EndpointNames.Contains(endpointName)) + var isExplicitlyNamed = annotation.EndpointNames.Contains(endpointName); + var isIncludedByDefault = annotation.UseAllEndpoints && !endpoint.ExcludeReferenceEndpoint; + + if (!isExplicitlyNamed && !isIncludedByDefault) { - // Skip this endpoint since it's not in the list of endpoints we want to reference. + // Skip this endpoint since it's not explicitly named and not a default reference endpoint. continue; } @@ -810,14 +813,25 @@ public static ReferenceExpression GetConnectionProperty(this IResourceWithConnec } /// - /// Injects service discovery and endpoint information as environment variables from the project resource into the destination resource, using the source resource's name as the service name. - /// Each endpoint defined on the project resource will be injected using the format defined by the on the destination resource, i.e. + /// Injects service discovery and endpoint information as environment variables from the source resource into the destination resource, using the source resource's name as the service name. + /// Each non-excluded endpoint (where is false) defined on the source resource will be injected using the format defined by + /// the on the destination resource, i.e. /// either "services__{sourceResourceName}__{endpointScheme}__{endpointIndex}={uriString}" for .NET service discovery, or "{RESOURCE_ENDPOINT}={uri}" for endpoint injection. /// /// The destination resource. /// The resource where the service discovery information will be injected. /// The resource from which to extract service discovery information. /// The . + /// + /// + /// All endpoints are included in the default reference set unless explicitly excluded. + /// Resource authors can opt out individual endpoints by setting to true + /// (for example, using .WithEndpoint("endpointName", e => e.ExcludeReferenceEndpoint = true)) to exclude them from this method's behavior. + /// Endpoints that have been excluded (such as management or health check endpoints) can still be referenced explicitly using + /// + /// with . + /// + /// [AspireExportIgnore(Reason = "Polyglot app hosts use the generic withReference export.")] public static IResourceBuilder WithReference(this IResourceBuilder builder, IResourceBuilder source) where TDestination : IResourceWithEnvironment @@ -830,8 +844,9 @@ public static IResourceBuilder WithReference(this IR } /// - /// Injects service discovery and endpoint information as environment variables from the project resource into the destination resource, using the source resource's name as the service name. - /// Each endpoint defined on the project resource will be injected using the format defined by the on the destination resource, i.e. + /// Injects service discovery and endpoint information as environment variables from the source resource into the destination resource, using the source resource's name as the service name. + /// Each non-excluded endpoint (where is false) defined on the source resource will be injected using the format defined by + /// the on the destination resource, i.e. /// either "services__{name}__{endpointScheme}__{endpointIndex}={uriString}" for .NET service discovery, or "{name}_{ENDPOINT}={uri}" for endpoint injection. /// /// The destination resource. @@ -839,6 +854,16 @@ public static IResourceBuilder WithReference(this IR /// The resource from which to extract service discovery information. /// The name of the resource for the environment variable. /// The . + /// + /// + /// All endpoints are included in the default reference set unless explicitly excluded. + /// Resource authors can opt out individual endpoints by setting to true + /// (for example, using .WithEndpoint("endpointName", e => e.ExcludeReferenceEndpoint = true)) to exclude them from this method's behavior. + /// Endpoints that have been excluded (such as management or health check endpoints) can still be referenced explicitly using + /// + /// with . + /// + /// [AspireExportIgnore(Reason = "Polyglot app hosts use the generic withReference export.")] public static IResourceBuilder WithReference(this IResourceBuilder builder, IResourceBuilder source, string name) where TDestination : IResourceWithEnvironment diff --git a/tests/Aspire.Hosting.CodeGeneration.Go.Tests/Snapshots/TwoPassScanningGeneratedAspire.verified.go b/tests/Aspire.Hosting.CodeGeneration.Go.Tests/Snapshots/TwoPassScanningGeneratedAspire.verified.go index 215bc231ff3..b63084eea8b 100644 --- a/tests/Aspire.Hosting.CodeGeneration.Go.Tests/Snapshots/TwoPassScanningGeneratedAspire.verified.go +++ b/tests/Aspire.Hosting.CodeGeneration.Go.Tests/Snapshots/TwoPassScanningGeneratedAspire.verified.go @@ -6064,6 +6064,18 @@ func (s *EndpointReference) TlsEnabled() (*bool, error) { return result.(*bool), nil } +// ExcludeReferenceEndpoint gets the ExcludeReferenceEndpoint property +func (s *EndpointReference) ExcludeReferenceEndpoint() (*bool, error) { + reqArgs := map[string]any{ + "context": SerializeValue(s.Handle()), + } + result, err := s.Client().InvokeCapability("Aspire.Hosting.ApplicationModel/EndpointReference.excludeReferenceEndpoint", reqArgs) + if err != nil { + return nil, err + } + return result.(*bool), nil +} + // Port gets the Port property func (s *EndpointReference) Port() (*float64, error) { reqArgs := map[string]any{ diff --git a/tests/Aspire.Hosting.CodeGeneration.Java.Tests/Snapshots/TwoPassScanningGeneratedAspire.verified.java b/tests/Aspire.Hosting.CodeGeneration.Java.Tests/Snapshots/TwoPassScanningGeneratedAspire.verified.java index 37325d58db8..e696b870cf5 100644 --- a/tests/Aspire.Hosting.CodeGeneration.Java.Tests/Snapshots/TwoPassScanningGeneratedAspire.verified.java +++ b/tests/Aspire.Hosting.CodeGeneration.Java.Tests/Snapshots/TwoPassScanningGeneratedAspire.verified.java @@ -4370,6 +4370,13 @@ public boolean tlsEnabled() { return (boolean) getClient().invokeCapability("Aspire.Hosting.ApplicationModel/EndpointReference.tlsEnabled", reqArgs); } + /** Gets the ExcludeReferenceEndpoint property */ + public boolean excludeReferenceEndpoint() { + Map reqArgs = new HashMap<>(); + reqArgs.put("context", AspireClient.serializeValue(getHandle())); + return (boolean) getClient().invokeCapability("Aspire.Hosting.ApplicationModel/EndpointReference.excludeReferenceEndpoint", reqArgs); + } + /** Gets the Port property */ public double port() { Map reqArgs = new HashMap<>(); diff --git a/tests/Aspire.Hosting.CodeGeneration.Python.Tests/Snapshots/TwoPassScanningGeneratedAspire.verified.py b/tests/Aspire.Hosting.CodeGeneration.Python.Tests/Snapshots/TwoPassScanningGeneratedAspire.verified.py index 1ed8d96fecd..5a8337affcb 100644 --- a/tests/Aspire.Hosting.CodeGeneration.Python.Tests/Snapshots/TwoPassScanningGeneratedAspire.verified.py +++ b/tests/Aspire.Hosting.CodeGeneration.Python.Tests/Snapshots/TwoPassScanningGeneratedAspire.verified.py @@ -3061,6 +3061,11 @@ def tls_enabled(self) -> bool: args: Dict[str, Any] = { "context": serialize_value(self._handle) } return self._client.invoke_capability("Aspire.Hosting.ApplicationModel/EndpointReference.tlsEnabled", args) + def exclude_reference_endpoint(self) -> bool: + """Gets the ExcludeReferenceEndpoint property""" + args: Dict[str, Any] = { "context": serialize_value(self._handle) } + return self._client.invoke_capability("Aspire.Hosting.ApplicationModel/EndpointReference.excludeReferenceEndpoint", args) + def port(self) -> float: """Gets the Port property""" args: Dict[str, Any] = { "context": serialize_value(self._handle) } diff --git a/tests/Aspire.Hosting.CodeGeneration.Rust.Tests/Snapshots/TwoPassScanningGeneratedAspire.verified.rs b/tests/Aspire.Hosting.CodeGeneration.Rust.Tests/Snapshots/TwoPassScanningGeneratedAspire.verified.rs index d1ba5360ef7..74126f7ea54 100644 --- a/tests/Aspire.Hosting.CodeGeneration.Rust.Tests/Snapshots/TwoPassScanningGeneratedAspire.verified.rs +++ b/tests/Aspire.Hosting.CodeGeneration.Rust.Tests/Snapshots/TwoPassScanningGeneratedAspire.verified.rs @@ -5351,6 +5351,14 @@ impl EndpointReference { Ok(serde_json::from_value(result)?) } + /// Gets the ExcludeReferenceEndpoint property + pub fn exclude_reference_endpoint(&self) -> Result> { + let mut args: HashMap = HashMap::new(); + args.insert("context".to_string(), self.handle.to_json()); + let result = self.client.invoke_capability("Aspire.Hosting.ApplicationModel/EndpointReference.excludeReferenceEndpoint", args)?; + Ok(serde_json::from_value(result)?) + } + /// Gets the Port property pub fn port(&self) -> Result> { let mut args: HashMap = HashMap::new(); diff --git a/tests/Aspire.Hosting.CodeGeneration.TypeScript.Tests/Snapshots/TwoPassScanningGeneratedAspire.verified.ts b/tests/Aspire.Hosting.CodeGeneration.TypeScript.Tests/Snapshots/TwoPassScanningGeneratedAspire.verified.ts index 11d33822cad..8eb9945b420 100644 --- a/tests/Aspire.Hosting.CodeGeneration.TypeScript.Tests/Snapshots/TwoPassScanningGeneratedAspire.verified.ts +++ b/tests/Aspire.Hosting.CodeGeneration.TypeScript.Tests/Snapshots/TwoPassScanningGeneratedAspire.verified.ts @@ -1200,6 +1200,16 @@ export class EndpointReference { }, }; + /** Gets the ExcludeReferenceEndpoint property */ + excludeReferenceEndpoint = { + get: async (): Promise => { + return await this._client.invokeCapability( + 'Aspire.Hosting.ApplicationModel/EndpointReference.excludeReferenceEndpoint', + { context: this._handle } + ); + }, + }; + /** Gets the Port property */ port = { get: async (): Promise => { diff --git a/tests/Aspire.Hosting.Tests/WithReferenceTests.cs b/tests/Aspire.Hosting.Tests/WithReferenceTests.cs index 2c63f9472d9..bbfc60d94fb 100644 --- a/tests/Aspire.Hosting.Tests/WithReferenceTests.cs +++ b/tests/Aspire.Hosting.Tests/WithReferenceTests.cs @@ -801,6 +801,135 @@ private sealed class TestResource(string name) : Resource(name), IResourceWithCo ReferenceExpression.Create($"{ConnectionString}"); } + [Fact] + public async Task ExcludedReferenceEndpointExcludedFromUseAllEndpoints() + { + using var builder = TestDistributedApplicationBuilder.Create(); + + var projectA = builder.AddProject("projecta") + .WithHttpEndpoint(1000, 2000, "api") + .WithEndpoint("api", e => e.AllocatedEndpoint = new AllocatedEndpoint(e, "localhost", 2000)) + .WithHttpEndpoint(1000, 3000, "management") + .WithEndpoint("management", e => + { + e.ExcludeReferenceEndpoint = true; + e.AllocatedEndpoint = new AllocatedEndpoint(e, "localhost", 3000); + }); + + var projectB = builder.AddProject("projectb") + .WithReference(projectA); + + var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout(); + + // The "api" endpoint should be included (it's not excluded) + Assert.Equal("http://localhost:2000", config["services__projecta__http__0"]); + Assert.Equal("http://localhost:2000", config["PROJECTA_API"]); + + // The "management" endpoint should NOT be included (ExcludeReferenceEndpoint = true) + Assert.False(config.ContainsKey("services__projecta__http__1")); + Assert.False(config.ContainsKey("PROJECTA_MANAGEMENT")); + } + + [Fact] + public async Task ExcludedReferenceEndpointCanBeReferencedExplicitly() + { + using var builder = TestDistributedApplicationBuilder.Create(); + + var projectA = builder.AddProject("projecta") + .WithHttpEndpoint(1000, 2000, "api") + .WithEndpoint("api", e => e.AllocatedEndpoint = new AllocatedEndpoint(e, "localhost", 2000)) + .WithHttpEndpoint(1000, 3000, "management") + .WithEndpoint("management", e => + { + e.ExcludeReferenceEndpoint = true; + e.AllocatedEndpoint = new AllocatedEndpoint(e, "localhost", 3000); + }); + + // Explicitly reference the excluded endpoint + var projectB = builder.AddProject("projectb") + .WithReference(projectA.GetEndpoint("management")); + + var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout(); + + // The "management" endpoint should be included because it was explicitly referenced + Assert.Equal("http://localhost:3000", config["services__projecta__http__0"]); + Assert.Equal("http://localhost:3000", config["PROJECTA_MANAGEMENT"]); + + // The "api" endpoint should NOT be included (wasn't referenced) + Assert.False(config.ContainsKey("PROJECTA_API")); + } + + [Fact] + public async Task CombinedWithReferenceAndExplicitEndpointIncludesBoth() + { + using var builder = TestDistributedApplicationBuilder.Create(); + + var projectA = builder.AddProject("projecta") + .WithHttpEndpoint(1000, 2000, "api") + .WithEndpoint("api", e => e.AllocatedEndpoint = new AllocatedEndpoint(e, "localhost", 2000)) + .WithHttpEndpoint(1000, 3000, "management") + .WithEndpoint("management", e => + { + e.ExcludeReferenceEndpoint = true; + e.AllocatedEndpoint = new AllocatedEndpoint(e, "localhost", 3000); + }); + + // Reference all default endpoints AND the excluded management endpoint explicitly + var projectB = builder.AddProject("projectb") + .WithReference(projectA) + .WithReference(projectA.GetEndpoint("management")); + + var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(projectB.Resource, DistributedApplicationOperation.Run, TestServiceProvider.Instance).DefaultTimeout(); + + // Both endpoints should be included + Assert.Equal("http://localhost:2000", config["services__projecta__http__0"]); + Assert.Equal("http://localhost:3000", config["services__projecta__http__1"]); + Assert.Equal("http://localhost:2000", config["PROJECTA_API"]); + Assert.Equal("http://localhost:3000", config["PROJECTA_MANAGEMENT"]); + } + + [Fact] + public void ExcludeReferenceEndpointDefaultsToFalse() + { + using var builder = TestDistributedApplicationBuilder.Create(); + + var container = builder.AddContainer("mycontainer", "myimage") + .WithHttpEndpoint(targetPort: 8080); + + var endpoint = container.Resource.Annotations.OfType().Single(); + Assert.False(endpoint.ExcludeReferenceEndpoint); + } + + [Fact] + public void WithEndpointCallbackCanSetExcludeReferenceEndpoint() + { + using var builder = TestDistributedApplicationBuilder.Create(); + + var container = builder.AddContainer("mycontainer", "myimage") + .WithHttpEndpoint(targetPort: 8080, name: "api") + .WithEndpoint("api", e => e.ExcludeReferenceEndpoint = true); + + var endpoint = container.Resource.Annotations.OfType().Single(); + Assert.True(endpoint.ExcludeReferenceEndpoint); + } + + [Fact] + public void EndpointReferenceReflectsExcludeReferenceEndpoint() + { + using var builder = TestDistributedApplicationBuilder.Create(); + + var container = builder.AddContainer("mycontainer", "myimage") + .WithHttpEndpoint(targetPort: 8080, name: "primary") + .WithHttpEndpoint(targetPort: 9000, name: "management") + .WithEndpoint("management", e => e.ExcludeReferenceEndpoint = true); + + var primaryRef = container.GetEndpoint("primary"); + var managementRef = container.GetEndpoint("management"); + + Assert.False(primaryRef.ExcludeReferenceEndpoint); + Assert.True(managementRef.ExcludeReferenceEndpoint); + } + private sealed class TestResourceWithConnectionStringAndServiceDiscovery(string name) : ContainerResource(name), IResourceWithConnectionString, IResourceWithServiceDiscovery { public string? ConnectionString { get; set; } From 793e26b8b968b30968efd3b45abe190c98705ffb Mon Sep 17 00:00:00 2001 From: David Negstad Date: Wed, 25 Mar 2026 16:49:57 -0700 Subject: [PATCH 2/2] release/13.2 --version check returns 13.2.1 now --- .../Aspire.Cli.EndToEnd.Tests/Helpers/CliE2EAutomatorHelpers.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Aspire.Cli.EndToEnd.Tests/Helpers/CliE2EAutomatorHelpers.cs b/tests/Aspire.Cli.EndToEnd.Tests/Helpers/CliE2EAutomatorHelpers.cs index de3bf127406..c921ca48e51 100644 --- a/tests/Aspire.Cli.EndToEnd.Tests/Helpers/CliE2EAutomatorHelpers.cs +++ b/tests/Aspire.Cli.EndToEnd.Tests/Helpers/CliE2EAutomatorHelpers.cs @@ -163,7 +163,7 @@ internal static async Task VerifyAspireCliVersionAsync( // is just "13.2.0" with no commit SHA suffix. When not stabilized, it includes // the SHA (e.g., "13.2.0-preview.1.g"). In both cases, "13.2.0" is present. // TODO: This change should be reverted on the integration to the main branch. - await auto.WaitUntilTextAsync("13.2.0", timeout: TimeSpan.FromSeconds(10)); + await auto.WaitUntilTextAsync("13.2.1", timeout: TimeSpan.FromSeconds(10)); await auto.WaitForSuccessPromptAsync(counter); }