From 21cdaf146cb37ea4da08cfcaf5bf513edb0fbc4a Mon Sep 17 00:00:00 2001 From: Whit Waldo Date: Wed, 11 Feb 2026 04:49:44 -0600 Subject: [PATCH 1/7] Changed wait readiness strategy from console logs to Health API endpoints for each service Signed-off-by: Whit Waldo --- .../Containers/Dapr/DaprPlacementContainer.cs | 21 +++++++++----- .../Containers/Dapr/DaprSchedulerContainer.cs | 15 ++++++---- .../Containers/Dapr/DaprdContainer.cs | 29 ++++++++++--------- 3 files changed, 40 insertions(+), 25 deletions(-) diff --git a/src/Dapr.Testcontainers/Containers/Dapr/DaprPlacementContainer.cs b/src/Dapr.Testcontainers/Containers/Dapr/DaprPlacementContainer.cs index 8be913db2..830d4ab0f 100644 --- a/src/Dapr.Testcontainers/Containers/Dapr/DaprPlacementContainer.cs +++ b/src/Dapr.Testcontainers/Containers/Dapr/DaprPlacementContainer.cs @@ -12,6 +12,7 @@ // ------------------------------------------------------------------------ using System; +using System.Net; using System.Threading; using System.Threading.Tasks; using Dapr.Testcontainers.Common; @@ -59,14 +60,20 @@ public DaprPlacementContainer(DaprRuntimeOptions options, INetwork network, stri _logAttachment = ContainerLogAttachment.TryCreate(logDirectory, "placement", _containerName); //Placement service runs via port 50006 - var containerBuilder = new ContainerBuilder() - .WithImage(options.PlacementImageTag) - .WithName(_containerName) + var containerBuilder = new ContainerBuilder() + .WithImage(options.PlacementImageTag) + .WithName(_containerName) .WithNetwork(network) - .WithCommand("./placement", "-port", InternalPort.ToString()) - .WithPortBinding(InternalPort, assignRandomHostPort: true) - .WithWaitStrategy(Wait.ForUnixContainer().UntilMessageIsLogged("placement server leadership acquired")) - ; + .WithCommand("./placement", "-port", InternalPort.ToString()) + .WithPortBinding(InternalPort, assignRandomHostPort: true) + .WithWaitStrategy(Wait.ForUnixContainer() + .UntilHttpRequestIsSucceeded(endpoint => + + endpoint + .ForPort(InternalPort) + .ForPath("/v1.0/healthz") + .ForStatusCode(HttpStatusCode.OK) + )); if (_logAttachment is not null) { diff --git a/src/Dapr.Testcontainers/Containers/Dapr/DaprSchedulerContainer.cs b/src/Dapr.Testcontainers/Containers/Dapr/DaprSchedulerContainer.cs index bb81003ec..ed3cf628d 100644 --- a/src/Dapr.Testcontainers/Containers/Dapr/DaprSchedulerContainer.cs +++ b/src/Dapr.Testcontainers/Containers/Dapr/DaprSchedulerContainer.cs @@ -13,6 +13,7 @@ using System; using System.Linq; +using System.Net; using System.Threading; using System.Threading.Tasks; using Dapr.Testcontainers.Common; @@ -70,17 +71,21 @@ public DaprSchedulerContainer(DaprRuntimeOptions options, INetwork network, stri ]; _testDirectory = TestDirectoryManager.CreateTestDirectory("scheduler"); - + var containerBuilder = new ContainerBuilder() .WithImage(options.SchedulerImageTag) - .WithName(_containerName) + .WithName(_containerName) .WithNetwork(network) .WithCommand(cmd.ToArray()) - .WithPortBinding(InternalPort, assignRandomHostPort: true) + .WithPortBinding(InternalPort, assignRandomHostPort: true) // Mount an anonymous volume to /data to ensure the scheduler has write permissions .WithBindMount(_testDirectory, containerDataDir, AccessMode.ReadWrite) - .WithWaitStrategy(Wait.ForUnixContainer().UntilMessageIsLogged("api is ready")) - ; + .WithWaitStrategy(Wait.ForUnixContainer() + .UntilHttpRequestIsSucceeded(endpoint => + endpoint + .ForPort(InternalPort) + .ForPath("/v1.0/healthz") + .ForStatusCode(HttpStatusCode.OK))); if (_logAttachment is not null) { diff --git a/src/Dapr.Testcontainers/Containers/Dapr/DaprdContainer.cs b/src/Dapr.Testcontainers/Containers/Dapr/DaprdContainer.cs index 77018531b..2eeaed838 100644 --- a/src/Dapr.Testcontainers/Containers/Dapr/DaprdContainer.cs +++ b/src/Dapr.Testcontainers/Containers/Dapr/DaprdContainer.cs @@ -13,6 +13,7 @@ using System; using System.Collections.Generic; +using System.Net; using System.Net.Sockets; using System.Threading; using System.Threading.Tasks; @@ -35,7 +36,7 @@ public sealed class DaprdContainer : IAsyncStartable private const int InternalGrpcPort = 50001; private readonly IContainer _container; private readonly ContainerLogAttachment? _logAttachment; - private string _containerName = $"dapr-{Guid.NewGuid():N}"; + private readonly string _containerName = $"dapr-{Guid.NewGuid():N}"; /// /// The internal network alias/name of the container. @@ -123,28 +124,30 @@ public DaprdContainer( cmd.Add("-scheduler-host-address"); cmd.Add(""); } - - var containerBuilder = new ContainerBuilder() - .WithImage(options.RuntimeImageTag) - .WithName(_containerName) + + var containerBuilder = new ContainerBuilder() + .WithImage(options.RuntimeImageTag) + .WithName(_containerName) .WithLogger(ConsoleLogger.Instance) - .WithCommand(cmd.ToArray()) + .WithCommand(cmd.ToArray()) .WithNetwork(network) .WithExtraHost(ContainerHostAlias, "host-gateway") - .WithBindMount(componentsHostFolder, componentsPath, AccessMode.ReadOnly) - .WithWaitStrategy(Wait.ForUnixContainer() - .UntilMessageIsLogged("Internal gRPC server is running")); - //.UntilMessageIsLogged(@"^dapr initialized. Status: Running. Init Elapsed ")) + .WithBindMount(componentsHostFolder, componentsPath, AccessMode.ReadOnly) + .WithWaitStrategy(Wait.ForUnixContainer() + .UntilHttpRequestIsSucceeded(endpoint => + endpoint.ForPort(InternalHttpPort) + .ForPath("/v1.0/healthz") + .ForStatusCode(HttpStatusCode.OK))); if (_logAttachment is not null) { containerBuilder = containerBuilder.WithOutputConsumer(_logAttachment.OutputConsumer); } - containerBuilder = daprHttpPort is not null ? containerBuilder.WithPortBinding(containerPort: InternalHttpPort, hostPort: daprHttpPort.Value) : containerBuilder.WithPortBinding(port: InternalHttpPort, assignRandomHostPort: true); - containerBuilder = daprGrpcPort is not null ? containerBuilder.WithPortBinding(containerPort: InternalGrpcPort, hostPort: daprGrpcPort.Value) : containerBuilder.WithPortBinding(port: InternalGrpcPort, assignRandomHostPort: true); + containerBuilder = daprHttpPort is not null ? containerBuilder.WithPortBinding(containerPort: InternalHttpPort, hostPort: daprHttpPort.Value) : containerBuilder.WithPortBinding(port: InternalHttpPort, assignRandomHostPort: true); + containerBuilder = daprGrpcPort is not null ? containerBuilder.WithPortBinding(containerPort: InternalGrpcPort, hostPort: daprGrpcPort.Value) : containerBuilder.WithPortBinding(port: InternalGrpcPort, assignRandomHostPort: true); - _container = containerBuilder.Build(); + _container = containerBuilder.Build(); } /// From 2fa96cf180206389b0fd3e7d630832af25b03688 Mon Sep 17 00:00:00 2001 From: Whit Waldo Date: Wed, 11 Feb 2026 05:53:42 -0600 Subject: [PATCH 2/7] Placement and Scheduler are coming online and testing accurately now Signed-off-by: Whit Waldo --- .../Containers/Dapr/DaprPlacementContainer.cs | 16 ++++++++++------ .../Containers/Dapr/DaprSchedulerContainer.cs | 12 +++++++++--- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/Dapr.Testcontainers/Containers/Dapr/DaprPlacementContainer.cs b/src/Dapr.Testcontainers/Containers/Dapr/DaprPlacementContainer.cs index 830d4ab0f..ab66d0abc 100644 --- a/src/Dapr.Testcontainers/Containers/Dapr/DaprPlacementContainer.cs +++ b/src/Dapr.Testcontainers/Containers/Dapr/DaprPlacementContainer.cs @@ -17,6 +17,7 @@ using System.Threading.Tasks; using Dapr.Testcontainers.Common; using Dapr.Testcontainers.Common.Options; +using Docker.DotNet.Models; using DotNet.Testcontainers.Builders; using DotNet.Testcontainers.Containers; using DotNet.Testcontainers.Networks; @@ -45,9 +46,13 @@ public sealed class DaprPlacementContainer : IAsyncStartable /// public int ExternalPort { get; private set; } /// - /// THe contains' internal port. + /// The container's internal port. /// public const int InternalPort = 50006; + /// + /// The container's internal health port. + /// + private const int HealthPort = 8080; /// /// Initializes a new instance of the . @@ -66,14 +71,13 @@ public DaprPlacementContainer(DaprRuntimeOptions options, INetwork network, stri .WithNetwork(network) .WithCommand("./placement", "-port", InternalPort.ToString()) .WithPortBinding(InternalPort, assignRandomHostPort: true) + .WithPortBinding(HealthPort, assignRandomHostPort: true) .WithWaitStrategy(Wait.ForUnixContainer() .UntilHttpRequestIsSucceeded(endpoint => - endpoint - .ForPort(InternalPort) - .ForPath("/v1.0/healthz") - .ForStatusCode(HttpStatusCode.OK) - )); + .ForPort(HealthPort) + .ForPath("/healthz") + .ForStatusCodeMatching(code => (int)code >= 200 && (int)code < 300))); if (_logAttachment is not null) { diff --git a/src/Dapr.Testcontainers/Containers/Dapr/DaprSchedulerContainer.cs b/src/Dapr.Testcontainers/Containers/Dapr/DaprSchedulerContainer.cs index ed3cf628d..8a71dab92 100644 --- a/src/Dapr.Testcontainers/Containers/Dapr/DaprSchedulerContainer.cs +++ b/src/Dapr.Testcontainers/Containers/Dapr/DaprSchedulerContainer.cs @@ -14,6 +14,7 @@ using System; using System.Linq; using System.Net; +using System.Text; using System.Threading; using System.Threading.Tasks; using Dapr.Testcontainers.Common; @@ -53,6 +54,10 @@ public sealed class DaprSchedulerContainer : IAsyncStartable /// The container's internal port. /// public const int InternalPort = 51005; + /// + /// The container's internal health port. + /// + private const int HealthPort = 8080; /// /// Creates a new instance of a . @@ -78,14 +83,15 @@ public DaprSchedulerContainer(DaprRuntimeOptions options, INetwork network, stri .WithNetwork(network) .WithCommand(cmd.ToArray()) .WithPortBinding(InternalPort, assignRandomHostPort: true) + .WithPortBinding(HealthPort, assignRandomHostPort: true) // Allows probes to reach healthz // Mount an anonymous volume to /data to ensure the scheduler has write permissions .WithBindMount(_testDirectory, containerDataDir, AccessMode.ReadWrite) .WithWaitStrategy(Wait.ForUnixContainer() .UntilHttpRequestIsSucceeded(endpoint => endpoint - .ForPort(InternalPort) - .ForPath("/v1.0/healthz") - .ForStatusCode(HttpStatusCode.OK))); + .ForPort(HealthPort) + .ForPath("/healthz") + .ForStatusCodeMatching(code => (int)code >= 200 && (int)code < 300))); if (_logAttachment is not null) { From 2e7ebec411d5a1756e47dcb63515f998389e4dd6 Mon Sep 17 00:00:00 2001 From: Whit Waldo Date: Wed, 11 Feb 2026 05:54:51 -0600 Subject: [PATCH 3/7] Successfully tested the daprd container coming online and testing via probes Signed-off-by: Whit Waldo --- src/Dapr.Testcontainers/Containers/Dapr/DaprdContainer.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Dapr.Testcontainers/Containers/Dapr/DaprdContainer.cs b/src/Dapr.Testcontainers/Containers/Dapr/DaprdContainer.cs index 2eeaed838..b84d6d10c 100644 --- a/src/Dapr.Testcontainers/Containers/Dapr/DaprdContainer.cs +++ b/src/Dapr.Testcontainers/Containers/Dapr/DaprdContainer.cs @@ -34,6 +34,7 @@ public sealed class DaprdContainer : IAsyncStartable { private const int InternalHttpPort = 3500; private const int InternalGrpcPort = 50001; + private const int InternalHealthPort = 8080; private readonly IContainer _container; private readonly ContainerLogAttachment? _logAttachment; private readonly string _containerName = $"dapr-{Guid.NewGuid():N}"; @@ -135,9 +136,10 @@ public DaprdContainer( .WithBindMount(componentsHostFolder, componentsPath, AccessMode.ReadOnly) .WithWaitStrategy(Wait.ForUnixContainer() .UntilHttpRequestIsSucceeded(endpoint => - endpoint.ForPort(InternalHttpPort) + endpoint + .ForPort(InternalHttpPort) .ForPath("/v1.0/healthz") - .ForStatusCode(HttpStatusCode.OK))); + .ForStatusCodeMatching(code => (int)code >= 200 && (int)code < 300))); if (_logAttachment is not null) { From 39a10624b07be0c85db13b485bfe80c352ea9f3c Mon Sep 17 00:00:00 2001 From: Whit Waldo Date: Wed, 11 Feb 2026 06:02:23 -0600 Subject: [PATCH 4/7] Added 2 minute timeout to container readiness Signed-off-by: Whit Waldo --- .../Containers/Dapr/DaprPlacementContainer.cs | 14 ++++++++++---- .../Containers/Dapr/DaprSchedulerContainer.cs | 13 +++++++++---- .../Containers/Dapr/DaprdContainer.cs | 7 ++++++- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/Dapr.Testcontainers/Containers/Dapr/DaprPlacementContainer.cs b/src/Dapr.Testcontainers/Containers/Dapr/DaprPlacementContainer.cs index ab66d0abc..ae568a914 100644 --- a/src/Dapr.Testcontainers/Containers/Dapr/DaprPlacementContainer.cs +++ b/src/Dapr.Testcontainers/Containers/Dapr/DaprPlacementContainer.cs @@ -19,6 +19,7 @@ using Dapr.Testcontainers.Common.Options; using Docker.DotNet.Models; using DotNet.Testcontainers.Builders; +using DotNet.Testcontainers.Configurations; using DotNet.Testcontainers.Containers; using DotNet.Testcontainers.Networks; @@ -74,10 +75,15 @@ public DaprPlacementContainer(DaprRuntimeOptions options, INetwork network, stri .WithPortBinding(HealthPort, assignRandomHostPort: true) .WithWaitStrategy(Wait.ForUnixContainer() .UntilHttpRequestIsSucceeded(endpoint => - endpoint - .ForPort(HealthPort) - .ForPath("/healthz") - .ForStatusCodeMatching(code => (int)code >= 200 && (int)code < 300))); + endpoint + .ForPort(HealthPort) + .ForPath("/healthz") + .ForStatusCodeMatching(code => (int)code >= 200 && (int)code < 300), + mod => + mod + .WithTimeout(TimeSpan.FromMinutes(2)) + .WithInterval(TimeSpan.FromSeconds(5)) + .WithMode(WaitStrategyMode.Running))); if (_logAttachment is not null) { diff --git a/src/Dapr.Testcontainers/Containers/Dapr/DaprSchedulerContainer.cs b/src/Dapr.Testcontainers/Containers/Dapr/DaprSchedulerContainer.cs index 8a71dab92..c0499e9c9 100644 --- a/src/Dapr.Testcontainers/Containers/Dapr/DaprSchedulerContainer.cs +++ b/src/Dapr.Testcontainers/Containers/Dapr/DaprSchedulerContainer.cs @@ -88,10 +88,15 @@ public DaprSchedulerContainer(DaprRuntimeOptions options, INetwork network, stri .WithBindMount(_testDirectory, containerDataDir, AccessMode.ReadWrite) .WithWaitStrategy(Wait.ForUnixContainer() .UntilHttpRequestIsSucceeded(endpoint => - endpoint - .ForPort(HealthPort) - .ForPath("/healthz") - .ForStatusCodeMatching(code => (int)code >= 200 && (int)code < 300))); + endpoint + .ForPort(HealthPort) + .ForPath("/healthz") + .ForStatusCodeMatching(code => (int)code >= 200 && (int)code < 300), + mod => + mod + .WithTimeout(TimeSpan.FromMinutes(2)) + .WithInterval(TimeSpan.FromSeconds(5)) + .WithMode(WaitStrategyMode.Running))); if (_logAttachment is not null) { diff --git a/src/Dapr.Testcontainers/Containers/Dapr/DaprdContainer.cs b/src/Dapr.Testcontainers/Containers/Dapr/DaprdContainer.cs index b84d6d10c..b699f9c3b 100644 --- a/src/Dapr.Testcontainers/Containers/Dapr/DaprdContainer.cs +++ b/src/Dapr.Testcontainers/Containers/Dapr/DaprdContainer.cs @@ -139,7 +139,12 @@ public DaprdContainer( endpoint .ForPort(InternalHttpPort) .ForPath("/v1.0/healthz") - .ForStatusCodeMatching(code => (int)code >= 200 && (int)code < 300))); + .ForStatusCodeMatching(code => (int)code >= 200 && (int)code < 300), + mod => + mod + .WithTimeout(TimeSpan.FromMinutes(2)) + .WithInterval(TimeSpan.FromSeconds(5)) + .WithMode(WaitStrategyMode.Running))); if (_logAttachment is not null) { From c759862f0f54b730f146fcba1cac1a0f21471e2f Mon Sep 17 00:00:00 2001 From: Whit Waldo Date: Wed, 11 Feb 2026 06:20:51 -0600 Subject: [PATCH 5/7] Adding 10 minute timeout to integration tests Signed-off-by: Whit Waldo --- .github/workflows/sdk_build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/sdk_build.yml b/.github/workflows/sdk_build.yml index 433a0735a..c70e8b577 100644 --- a/.github/workflows/sdk_build.yml +++ b/.github/workflows/sdk_build.yml @@ -208,6 +208,7 @@ jobs: name: ${{ matrix.prefix }}-${{ matrix['dapr-runtime-versions'].version }}-${{ matrix.projectName }} needs: [ compute-integration-matrix ] runs-on: ${{ matrix.os }} + timeout-minutes: 10 strategy: fail-fast: false matrix: ${{ fromJson(needs.compute-integration-matrix.outputs.matrix) }} From 77ea95dadb51093bc7937239d53f9594af2a72f7 Mon Sep 17 00:00:00 2001 From: Whit Waldo Date: Wed, 11 Feb 2026 08:18:06 -0600 Subject: [PATCH 6/7] Reverting to use console message Signed-off-by: Whit Waldo --- .../Containers/Dapr/DaprdContainer.cs | 67 +++++++++++-------- .../Harnesses/BaseHarness.cs | 2 +- 2 files changed, 39 insertions(+), 30 deletions(-) diff --git a/src/Dapr.Testcontainers/Containers/Dapr/DaprdContainer.cs b/src/Dapr.Testcontainers/Containers/Dapr/DaprdContainer.cs index b699f9c3b..b5965cb23 100644 --- a/src/Dapr.Testcontainers/Containers/Dapr/DaprdContainer.cs +++ b/src/Dapr.Testcontainers/Containers/Dapr/DaprdContainer.cs @@ -135,16 +135,17 @@ public DaprdContainer( .WithExtraHost(ContainerHostAlias, "host-gateway") .WithBindMount(componentsHostFolder, componentsPath, AccessMode.ReadOnly) .WithWaitStrategy(Wait.ForUnixContainer() - .UntilHttpRequestIsSucceeded(endpoint => - endpoint - .ForPort(InternalHttpPort) - .ForPath("/v1.0/healthz") - .ForStatusCodeMatching(code => (int)code >= 200 && (int)code < 300), - mod => - mod - .WithTimeout(TimeSpan.FromMinutes(2)) - .WithInterval(TimeSpan.FromSeconds(5)) - .WithMode(WaitStrategyMode.Running))); + .UntilMessageIsLogged("Internal gRPC server is running")); + // .UntilHttpRequestIsSucceeded(endpoint => + // endpoint + // .ForPort(InternalHttpPort) + // .ForPath("/healthz") + // .ForStatusCodeMatching(code => (int)code >= 200 && (int)code < 300), + // mod => + // mod + // .WithTimeout(TimeSpan.FromMinutes(2)) + // .WithInterval(TimeSpan.FromSeconds(5)) + // .WithMode(WaitStrategyMode.Running))); if (_logAttachment is not null) { @@ -160,30 +161,38 @@ public DaprdContainer( /// public async Task StartAsync(CancellationToken cancellationToken = default) { - await _container.StartAsync(cancellationToken); + try + { + await _container.StartAsync(cancellationToken); - var mappedHttpPort = _container.GetMappedPublicPort(InternalHttpPort); - var mappedGrpcPort = _container.GetMappedPublicPort(InternalGrpcPort); + var mappedHttpPort = _container.GetMappedPublicPort(InternalHttpPort); + var mappedGrpcPort = _container.GetMappedPublicPort(InternalGrpcPort); - if (_requestedHttpPort is not null && mappedHttpPort != _requestedHttpPort.Value) - { - throw new InvalidOperationException( - $"Dapr HTTP port mapping mismatch. Requested {_requestedHttpPort.Value}, but Docker mapped {mappedHttpPort}"); - } + if (_requestedHttpPort is not null && mappedHttpPort != _requestedHttpPort.Value) + { + throw new InvalidOperationException( + $"Dapr HTTP port mapping mismatch. Requested {_requestedHttpPort.Value}, but Docker mapped {mappedHttpPort}"); + } - if (_requestedGrpcPort is not null && mappedGrpcPort != _requestedGrpcPort.Value) - { - throw new InvalidOperationException( - $"Dapr gRPC port mapping mismatch. Requested {_requestedGrpcPort.Value}, but Docker mapped {mappedGrpcPort}"); - } + if (_requestedGrpcPort is not null && mappedGrpcPort != _requestedGrpcPort.Value) + { + throw new InvalidOperationException( + $"Dapr gRPC port mapping mismatch. Requested {_requestedGrpcPort.Value}, but Docker mapped {mappedGrpcPort}"); + } - HttpPort = mappedHttpPort; - GrpcPort = mappedGrpcPort; + HttpPort = mappedHttpPort; + GrpcPort = mappedGrpcPort; - // The container log wait strategy can fire before the host port is actually accepting connections - // (especially on Windows). Ensure the ports are reachable from the test process. - await WaitForTcpPortAsync("127.0.0.1", HttpPort, TimeSpan.FromSeconds(30), cancellationToken); - await WaitForTcpPortAsync("127.0.0.1", GrpcPort, TimeSpan.FromSeconds(30), cancellationToken); + // The container log wait strategy can fire before the host port is actually accepting connections + // (especially on Windows). Ensure the ports are reachable from the test process. + await WaitForTcpPortAsync("127.0.0.1", HttpPort, TimeSpan.FromSeconds(30), cancellationToken); + await WaitForTcpPortAsync("127.0.0.1", GrpcPort, TimeSpan.FromSeconds(30), cancellationToken); + } + catch (Exception ex) + { + var msg = ex.Message; + throw; + } } private static async Task WaitForTcpPortAsync( diff --git a/src/Dapr.Testcontainers/Harnesses/BaseHarness.cs b/src/Dapr.Testcontainers/Harnesses/BaseHarness.cs index 93b6383af..240d6e463 100644 --- a/src/Dapr.Testcontainers/Harnesses/BaseHarness.cs +++ b/src/Dapr.Testcontainers/Harnesses/BaseHarness.cs @@ -229,7 +229,7 @@ DaprSchedulerExternalPort is null || DaprSchedulerAlias is null await _daprd!.StartAsync(cancellationToken); _sidecarPortsReady.TrySetResult(); }, cancellationToken); - + Task? appTask = null; if (startApp is not null) { From f2f217b1fe08d5118044c8556eac9916a28360c3 Mon Sep 17 00:00:00 2001 From: Whit Waldo Date: Wed, 11 Feb 2026 08:40:12 -0600 Subject: [PATCH 7/7] Changed timeout to 30 minutes on integration tests Signed-off-by: Whit Waldo --- .github/workflows/sdk_build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/sdk_build.yml b/.github/workflows/sdk_build.yml index c70e8b577..cdf2b241e 100644 --- a/.github/workflows/sdk_build.yml +++ b/.github/workflows/sdk_build.yml @@ -208,7 +208,7 @@ jobs: name: ${{ matrix.prefix }}-${{ matrix['dapr-runtime-versions'].version }}-${{ matrix.projectName }} needs: [ compute-integration-matrix ] runs-on: ${{ matrix.os }} - timeout-minutes: 10 + timeout-minutes: 30 strategy: fail-fast: false matrix: ${{ fromJson(needs.compute-integration-matrix.outputs.matrix) }}