From 1fef2fdc3962735f007e1344b28ea7b369748d51 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 15 Aug 2026 23:53:35 +0000 Subject: [PATCH 01/15] Isolate .NET 11 preview lane and enable net11 sidecar testing Co-authored-by: WhitWaldo <2238529+WhitWaldo@users.noreply.github.com> --- .github/workflows/sdk_build.yml | 161 +++++++++++++++++- Directory.Packages.props | 4 +- examples/Directory.Build.props | 1 + src/Directory.Build.props | 1 + ...TimerCallbackMethodPresentAnalyzerTests.cs | 6 +- .../CSharpSourceGeneratorVerifier.cs | 6 + .../AnalyzerTest.cs | 10 ++ test/Dapr.Analyzers.Common/TestUtilities.cs | 5 + test/Dapr.Analyzers.Common/VerifyAnalyzer.cs | 6 +- test/Dapr.E2E.Test/DaprTestApp.cs | 1 + ...strationOrderRegressionIntegrationTests.cs | 6 +- .../MapDaprScheduledJobHandlerTest.cs | 5 + .../AggregatorPackageTests.cs | 2 +- test/Directory.Build.props | 1 + 14 files changed, 206 insertions(+), 9 deletions(-) diff --git a/.github/workflows/sdk_build.yml b/.github/workflows/sdk_build.yml index 86027e1c2..5da961d69 100644 --- a/.github/workflows/sdk_build.yml +++ b/.github/workflows/sdk_build.yml @@ -204,6 +204,75 @@ jobs: printf 'matrix=%s\n' "$matrix_json" >> "$GITHUB_OUTPUT" + compute-integration-matrix-net11: + runs-on: ubuntu-latest + needs: [ discover-integration-v2-tests, get-dapr-versions ] + outputs: + matrix: ${{ steps.build.outputs.matrix }} + steps: + - id: build + shell: bash + run: | + set -euo pipefail + + projects_raw='${{ needs.discover-integration-v2-tests.outputs.projects }}' + dapr_raw='${{ needs.get-dapr-versions.outputs.matrix_json }}' + + if [ -z "${projects_raw}" ] || [ "${projects_raw}" = "null" ]; then + projects_raw='[]' + fi + if [ -z "${dapr_raw}" ] || [ "${dapr_raw}" = "null" ]; then + dapr_raw='[]' + fi + + dotnets='[ + {"dotnet-version":"11.0", "display-name":".NET 11.0", "framework":"net11.0", "prefix":"net11", "install-version":"11.0.x", "upload_coverage": false} + ]' + oss='["ubuntu-latest"]' + + dapr_array=$( + jq -cn --argjson d "$dapr_raw" ' + if ($d|type) == "array" then + $d + elif ($d|type) == "object" and ($d|has("include")) then + $d.include + elif ($d|type) == "object" then + [$d] + else + [] + end + ' + ) + + matrix_json=$( + jq -cn \ + --argjson projects "$projects_raw" \ + --argjson dotnets "$dotnets" \ + --argjson oss "$oss" \ + --argjson dapr "$dapr_array" ' + [ + $projects[] as $p + | $dotnets[] as $d + | $oss[] as $o + | $dapr[] as $dv + | { + project: $p.project, + projectName: $p.projectName, + "dotnet-version": $d["dotnet-version"], + "display-name": $d["display-name"], + framework: $d.framework, + prefix: $d.prefix, + "install-version":$d["install-version"], + os: $o, + "dapr-runtime-versions": $dv + } + ] + | { include: . } + ' + ) + + printf 'matrix=%s\n' "$matrix_json" >> "$GITHUB_OUTPUT" + integration-tests-v2: name: ${{ matrix.prefix }}-${{ matrix['dapr-runtime-versions'].version }}-${{ matrix.projectName }} needs: [ compute-integration-matrix ] @@ -252,9 +321,52 @@ jobs: with: TRX_PATH: ${{ github.workspace }}/TestResults REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }} + integration-tests-net11: + name: ${{ matrix.prefix }}-${{ matrix['dapr-runtime-versions'].version }}-${{ matrix.projectName }} + needs: [ compute-integration-matrix-net11 ] + runs-on: ${{ matrix.os }} + timeout-minutes: 30 + strategy: + fail-fast: false + matrix: ${{ fromJson(needs.compute-integration-matrix-net11.outputs.matrix) }} + steps: + - uses: actions/checkout@v6 + - name: Remove global.json (use .NET 11 preview SDK) + run: rm global.json + - name: Setup ${{ matrix.display-name }} + uses: actions/setup-dotnet@v5 + with: + dotnet-version: ${{ matrix.install-version }} + dotnet-quality: 'preview' + - name: Integration Tests + id: integration-tests-net11 + continue-on-error: false + env: + DAPR_RUNTIME_VERSION: ${{ matrix.dapr-runtime-versions.version }} + DaprEnableNet11: 'true' + run: | + dotnet test "${{ matrix.project }}" \ + --configuration release \ + --framework ${{ matrix.framework }} \ + --logger "trx;LogFilePrefix=${{ matrix.prefix }}" \ + --logger "GitHubActions;report-warnings=false" \ + --logger "console;verbosity=detailed" \ + --results-directory "${{ github.workspace }}/TestResults" \ + /p:RuntimeIdentifier=linux-x64 \ + /p:CollectCoverage=true \ + /p:CoverletOutputFormat=opencover \ + /p:GITHUB_ACTIONS=false + timeout-minutes: 60 + - name: Parse Trx files + uses: NasAmin/trx-parser@v0.2.0 + id: trx-parser + if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository # does not work on PRs from forks + with: + TRX_PATH: ${{ github.workspace }}/TestResults + REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }} ci-integration-tests-gate: runs-on: ubuntu-latest - needs: [integration-tests-v2, integration-test] + needs: [integration-tests-v2, integration-test, integration-tests-net11] steps: - name: "All integration tests passed" run: echo "All unit tests passed" @@ -327,9 +439,54 @@ jobs: with: TRX_PATH: ${{ github.workspace }}/TestResults REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }} + unit-tests-net11: + name: Unit Tests .NET 11.0 / ${{ matrix.project }} + needs: discover-unit-test-projects + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + project: ${{ fromJson(needs.discover-unit-test-projects.outputs.matrix) }} + steps: + - uses: actions/checkout@v6 + - name: Remove global.json (use .NET 11 preview SDK) + run: rm global.json + - name: Setup .NET 11.0 + uses: actions/setup-dotnet@v5 + with: + dotnet-version: '11.0.x' + dotnet-quality: 'preview' + - name: Test + env: + DaprEnableNet11: 'true' + id: tests + continue-on-error: true + run: | + dotnet test "${{ matrix.project }}" \ + --configuration release \ + --framework net11.0 \ + --logger "trx;LogFilePrefix=net11" \ + --logger "GitHubActions;report-warnings=false" \ + --logger "console;verbosity=detailed" \ + --results-directory "${{ github.workspace }}/TestResults" \ + /p:RuntimeIdentifier=linux-x64 \ + /p:CollectCoverage=true \ + /p:CoverletOutputFormat=opencover \ + /p:GITHUB_ACTIONS=false + timeout-minutes: 60 + - name: Check test failure in PR + if: github.event_name == 'pull_request' && steps.tests.outcome != 'success' + run: exit 1 + - name: Parse Trx files + uses: NasAmin/trx-parser@v0.2.0 + id: trx-parser + if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository # does not work on PRs from forks + with: + TRX_PATH: ${{ github.workspace }}/TestResults + REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }} ci-unit-tests-gate: runs-on: ubuntu-latest - needs: [unit-tests] + needs: [unit-tests, unit-tests-net11] steps: - name: "All unit tests passed" run: echo "All unit tests passed" diff --git a/Directory.Packages.props b/Directory.Packages.props index bde0c47f8..0ed44d225 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -22,9 +22,11 @@ + + @@ -48,7 +50,7 @@ - + diff --git a/examples/Directory.Build.props b/examples/Directory.Build.props index f7b2ee600..a8e131175 100644 --- a/examples/Directory.Build.props +++ b/examples/Directory.Build.props @@ -3,6 +3,7 @@ net8.0;net9.0;net10.0 + $(TargetFrameworks);net11.0 $(RepoRoot)bin\$(Configuration)\examples\$(MSBuildProjectName)\ diff --git a/src/Directory.Build.props b/src/Directory.Build.props index b8fda5632..955ca5a38 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -5,6 +5,7 @@ net8.0;net9.0;net10.0 + $(TargetFrameworks);net11.0 $(RepoRoot)bin\$(Configuration)\prod\$(MSBuildProjectName)\ $(DefaultItemExcludes);**\obj\**;**\bin\** diff --git a/test/Dapr.Actors.Analyzers.Test/TimerCallbackMethodPresentAnalyzerTests.cs b/test/Dapr.Actors.Analyzers.Test/TimerCallbackMethodPresentAnalyzerTests.cs index 0def07285..4663843ad 100644 --- a/test/Dapr.Actors.Analyzers.Test/TimerCallbackMethodPresentAnalyzerTests.cs +++ b/test/Dapr.Actors.Analyzers.Test/TimerCallbackMethodPresentAnalyzerTests.cs @@ -25,6 +25,11 @@ public class TimerCallbackMethodPresentAnalyzerTests private static readonly ReferenceAssemblies assemblies = ReferenceAssemblies.Net.Net90; #elif NET10_0 private static readonly ReferenceAssemblies assemblies = ReferenceAssemblies.Net.Net100; + #elif NET11_0 + private static readonly ReferenceAssemblies assemblies = new ReferenceAssemblies( + "net11.0", + new PackageIdentity("Microsoft.NETCore.App.Ref", "11.0.0-preview.7.26381.103"), + Path.Combine("ref", "net11.0")); #endif [Fact] @@ -146,4 +151,3 @@ public async Task DoSomethingAsync() - diff --git a/test/Dapr.Actors.Generators.Test/CSharpSourceGeneratorVerifier.cs b/test/Dapr.Actors.Generators.Test/CSharpSourceGeneratorVerifier.cs index 828426818..7c179453a 100644 --- a/test/Dapr.Actors.Generators.Test/CSharpSourceGeneratorVerifier.cs +++ b/test/Dapr.Actors.Generators.Test/CSharpSourceGeneratorVerifier.cs @@ -38,6 +38,8 @@ public Test() 9; #elif NET10_0 10; +#elif NET11_0 + 11; #endif // @@ -53,7 +55,11 @@ public Test() $"net{frameworkVersion}.0", new PackageIdentity( "Microsoft.NETCore.App.Ref", +#if NET11_0 + "11.0.0-preview.7.26381.103"), +#else $"{frameworkVersion}.0.0"), +#endif Path.Combine("ref", $"net{frameworkVersion}.0")); } diff --git a/test/Dapr.Actors.Next.Analyzers.Test/AnalyzerTest.cs b/test/Dapr.Actors.Next.Analyzers.Test/AnalyzerTest.cs index 85eb0be6e..e35fa0554 100644 --- a/test/Dapr.Actors.Next.Analyzers.Test/AnalyzerTest.cs +++ b/test/Dapr.Actors.Next.Analyzers.Test/AnalyzerTest.cs @@ -108,6 +108,11 @@ private static void AddReferences(Microsoft.CodeAnalysis.Testing.Anal test.ReferenceAssemblies = ReferenceAssemblies.Net.Net90; #elif NET10_0 test.ReferenceAssemblies = ReferenceAssemblies.Net.Net100; +#elif NET11_0 + test.ReferenceAssemblies = new ReferenceAssemblies( + "net11.0", + new PackageIdentity("Microsoft.NETCore.App.Ref", "11.0.0-preview.7.26381.103"), + Path.Combine("ref", "net11.0")); #endif test.TestState.AdditionalReferences.Add(MetadataReference.CreateFromFile(typeof(Actor).Assembly.Location)); test.TestState.AdditionalReferences.Add(MetadataReference.CreateFromFile(typeof(DaprActorAttribute).Assembly.Location)); @@ -124,6 +129,11 @@ private static void AddReferences(Microsoft.CodeAnalysis.Testing.Code test.ReferenceAssemblies = ReferenceAssemblies.Net.Net90; #elif NET10_0 test.ReferenceAssemblies = ReferenceAssemblies.Net.Net100; +#elif NET11_0 + test.ReferenceAssemblies = new ReferenceAssemblies( + "net11.0", + new PackageIdentity("Microsoft.NETCore.App.Ref", "11.0.0-preview.7.26381.103"), + Path.Combine("ref", "net11.0")); #endif test.TestState.AdditionalReferences.Add(MetadataReference.CreateFromFile(typeof(Actor).Assembly.Location)); test.TestState.AdditionalReferences.Add(MetadataReference.CreateFromFile(typeof(DaprActorAttribute).Assembly.Location)); diff --git a/test/Dapr.Analyzers.Common/TestUtilities.cs b/test/Dapr.Analyzers.Common/TestUtilities.cs index 92d569974..c5936ded9 100644 --- a/test/Dapr.Analyzers.Common/TestUtilities.cs +++ b/test/Dapr.Analyzers.Common/TestUtilities.cs @@ -37,6 +37,11 @@ internal static class TestUtilities var referenceAssemblies = ReferenceAssemblies.Net.Net90; #elif NET10_0 var referenceAssemblies = ReferenceAssemblies.Net.Net100; +#elif NET11_0 + var referenceAssemblies = new ReferenceAssemblies( + "net11.0", + new PackageIdentity("Microsoft.NETCore.App.Ref", "11.0.0-preview.7.26381.103"), + Path.Combine("ref", "net11.0")); #endif // Create a new project with necessary references diff --git a/test/Dapr.Analyzers.Common/VerifyAnalyzer.cs b/test/Dapr.Analyzers.Common/VerifyAnalyzer.cs index baeeec4b3..c3f35ecc2 100644 --- a/test/Dapr.Analyzers.Common/VerifyAnalyzer.cs +++ b/test/Dapr.Analyzers.Common/VerifyAnalyzer.cs @@ -39,6 +39,11 @@ public async Task VerifyAnalyzerAsync(string source, string? program, test.ReferenceAssemblies = ReferenceAssemblies.Net.Net90; #elif NET10_0 test.ReferenceAssemblies = ReferenceAssemblies.Net.Net100; +#elif NET11_0 + test.ReferenceAssemblies = new ReferenceAssemblies( + "net11.0", + new PackageIdentity("Microsoft.NETCore.App.Ref", "11.0.0-preview.7.26381.103"), + Path.Combine("ref", "net11.0")); #endif if (program != null) @@ -78,4 +83,3 @@ public Test() } } } - diff --git a/test/Dapr.E2E.Test/DaprTestApp.cs b/test/Dapr.E2E.Test/DaprTestApp.cs index ecab50d89..83b009227 100644 --- a/test/Dapr.E2E.Test/DaprTestApp.cs +++ b/test/Dapr.E2E.Test/DaprTestApp.cs @@ -144,6 +144,7 @@ private static string GetTargetFrameworkName() ".NETCoreApp,Version=v8.0" => "net8.0", ".NETCoreApp,Version=v9.0" => "net9.0", ".NETCoreApp,Version=v10.0" => "net10.0", + ".NETCoreApp,Version=v11.0" => "net11.0", _ => throw new InvalidOperationException($"Unsupported target framework: {targetFrameworkName}") }; } diff --git a/test/Dapr.IntegrationTest.Workflow.Versioning/RegistrationOrderRegressionIntegrationTests.cs b/test/Dapr.IntegrationTest.Workflow.Versioning/RegistrationOrderRegressionIntegrationTests.cs index 8d59db4b4..360948c27 100644 --- a/test/Dapr.IntegrationTest.Workflow.Versioning/RegistrationOrderRegressionIntegrationTests.cs +++ b/test/Dapr.IntegrationTest.Workflow.Versioning/RegistrationOrderRegressionIntegrationTests.cs @@ -23,7 +23,7 @@ using Grpc.Core; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; -#if NET10_0 +#if NET10_0_OR_GREATER using System.Diagnostics; using System.IO.Compression; using System.Xml.Linq; @@ -90,7 +90,7 @@ public async Task SchedulingCanonicalWorkflowNameShouldRunLatestGeneratedVersion Assert.Equal("v3:runtime", state.ReadOutputAs()); } -#if NET10_0 +#if NET10_0_OR_GREATER [Fact] public void PackedDaprWorkflowPackageShouldExposeVersioningAndRouteCanonicalNameToLatest() { @@ -274,7 +274,7 @@ private static async Task WaitForSidecarAsync(DaprTestApplication app, TimeSpan private static bool IsTransientRpc(RpcException ex) => ex.StatusCode is StatusCode.Unavailable or StatusCode.DeadlineExceeded; -#if NET10_0 +#if NET10_0_OR_GREATER private static string FindRepoRoot() { var current = new DirectoryInfo(AppContext.BaseDirectory); diff --git a/test/Dapr.Jobs.Analyzer.Test/MapDaprScheduledJobHandlerTest.cs b/test/Dapr.Jobs.Analyzer.Test/MapDaprScheduledJobHandlerTest.cs index eaa49c9ad..f57097f05 100644 --- a/test/Dapr.Jobs.Analyzer.Test/MapDaprScheduledJobHandlerTest.cs +++ b/test/Dapr.Jobs.Analyzer.Test/MapDaprScheduledJobHandlerTest.cs @@ -12,6 +12,11 @@ public class DaprJobsAnalyzerAnalyzerTests private static readonly ReferenceAssemblies referenceAssemblies = ReferenceAssemblies.Net.Net90; #elif NET10_0 private static readonly ReferenceAssemblies referenceAssemblies = ReferenceAssemblies.Net.Net100; +#elif NET11_0 + private static readonly ReferenceAssemblies referenceAssemblies = new ReferenceAssemblies( + "net11.0", + new PackageIdentity("Microsoft.NETCore.App.Ref", "11.0.0-preview.7.26381.103"), + Path.Combine("ref", "net11.0")); #endif [Fact] diff --git a/test/Dapr.Packaging.Test/AggregatorPackageTests.cs b/test/Dapr.Packaging.Test/AggregatorPackageTests.cs index c466ed78f..1f3676a09 100644 --- a/test/Dapr.Packaging.Test/AggregatorPackageTests.cs +++ b/test/Dapr.Packaging.Test/AggregatorPackageTests.cs @@ -2,7 +2,7 @@ namespace Dapr.Packaging.Test; -#if NET10_0 +#if NET10_0_OR_GREATER public sealed class AggregatorPackageTests { public static TheoryData PackagesWithBundledAssets => new() diff --git a/test/Directory.Build.props b/test/Directory.Build.props index 0e07a0a47..b113479d3 100644 --- a/test/Directory.Build.props +++ b/test/Directory.Build.props @@ -4,6 +4,7 @@ net8.0;net9.0;net10.0 + $(TargetFrameworks);net11.0 $(RepoRoot)bin\$(Configuration)\test\$(MSBuildProjectName)\ From 237b9f8ec99d832c2e28cde7233d5bcce62fac50 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 15 Aug 2026 23:54:39 +0000 Subject: [PATCH 02/15] Adjust net11 integration job timeout to match step runtime Co-authored-by: WhitWaldo <2238529+WhitWaldo@users.noreply.github.com> --- .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 5da961d69..a70450385 100644 --- a/.github/workflows/sdk_build.yml +++ b/.github/workflows/sdk_build.yml @@ -325,7 +325,7 @@ jobs: name: ${{ matrix.prefix }}-${{ matrix['dapr-runtime-versions'].version }}-${{ matrix.projectName }} needs: [ compute-integration-matrix-net11 ] runs-on: ${{ matrix.os }} - timeout-minutes: 30 + timeout-minutes: 60 strategy: fail-fast: false matrix: ${{ fromJson(needs.compute-integration-matrix-net11.outputs.matrix) }} From cbd513d6c57db0e6e98ab77b0cc65e44c29aded7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 15 Aug 2026 23:55:54 +0000 Subject: [PATCH 03/15] Harden net11 sidecar job failure behavior in CI Co-authored-by: WhitWaldo <2238529+WhitWaldo@users.noreply.github.com> --- .github/workflows/sdk_build.yml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/.github/workflows/sdk_build.yml b/.github/workflows/sdk_build.yml index a70450385..1aeeec568 100644 --- a/.github/workflows/sdk_build.yml +++ b/.github/workflows/sdk_build.yml @@ -226,7 +226,7 @@ jobs: fi dotnets='[ - {"dotnet-version":"11.0", "display-name":".NET 11.0", "framework":"net11.0", "prefix":"net11", "install-version":"11.0.x", "upload_coverage": false} + {"dotnet-version":"11.0", "display-name":".NET 11.0", "framework":"net11.0", "prefix":"net11", "install-version":"11.0.x"} ]' oss='["ubuntu-latest"]' @@ -460,7 +460,7 @@ jobs: env: DaprEnableNet11: 'true' id: tests - continue-on-error: true + continue-on-error: false run: | dotnet test "${{ matrix.project }}" \ --configuration release \ @@ -474,9 +474,6 @@ jobs: /p:CoverletOutputFormat=opencover \ /p:GITHUB_ACTIONS=false timeout-minutes: 60 - - name: Check test failure in PR - if: github.event_name == 'pull_request' && steps.tests.outcome != 'success' - run: exit 1 - name: Parse Trx files uses: NasAmin/trx-parser@v0.2.0 id: trx-parser From a6dff63a0e75a27915cb34aee0ade366ca495f1b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 16 Aug 2026 00:00:04 +0000 Subject: [PATCH 04/15] Add explicit token permissions to new net11 CI jobs Co-authored-by: WhitWaldo <2238529+WhitWaldo@users.noreply.github.com> --- .github/workflows/sdk_build.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/sdk_build.yml b/.github/workflows/sdk_build.yml index 1aeeec568..1576a00f6 100644 --- a/.github/workflows/sdk_build.yml +++ b/.github/workflows/sdk_build.yml @@ -206,6 +206,8 @@ jobs: compute-integration-matrix-net11: runs-on: ubuntu-latest + permissions: + contents: read needs: [ discover-integration-v2-tests, get-dapr-versions ] outputs: matrix: ${{ steps.build.outputs.matrix }} @@ -325,6 +327,8 @@ jobs: name: ${{ matrix.prefix }}-${{ matrix['dapr-runtime-versions'].version }}-${{ matrix.projectName }} needs: [ compute-integration-matrix-net11 ] runs-on: ${{ matrix.os }} + permissions: + contents: read timeout-minutes: 60 strategy: fail-fast: false @@ -443,6 +447,8 @@ jobs: name: Unit Tests .NET 11.0 / ${{ matrix.project }} needs: discover-unit-test-projects runs-on: ubuntu-latest + permissions: + contents: read strategy: fail-fast: false matrix: From 4d06ad3dde882a5c8ad5de57f1d2a2a7c75dac15 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 16 Aug 2026 00:11:54 +0000 Subject: [PATCH 05/15] Fix .NET 11 package version conflicts in central package management Co-authored-by: WhitWaldo <2238529+WhitWaldo@users.noreply.github.com> --- Directory.Packages.props | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 0ed44d225..77cdf493a 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -42,15 +42,17 @@ - + + - + + - + From a5e92bbb81ceaed8aa3d42678826fa31aaef2053 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 16 Aug 2026 01:43:01 +0000 Subject: [PATCH 06/15] Add .NET 11 package versions for Microsoft.Extensions dependencies Co-authored-by: WhitWaldo <2238529+WhitWaldo@users.noreply.github.com> --- Directory.Packages.props | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 77cdf493a..34afd7294 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -38,14 +38,20 @@ - - - - + + + + + + + + - - + + + + From ffd53fd036686e06a44d19f5d2564f092584de09 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 16 Aug 2026 03:08:01 +0000 Subject: [PATCH 07/15] Exclude test platform pin from .NET 11 Co-authored-by: WhitWaldo <2238529+WhitWaldo@users.noreply.github.com> --- Directory.Packages.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 34afd7294..36f898587 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -58,7 +58,7 @@ - + From 4c29f17997ee332f0b1ad0fd7d18c0d8d10e7099 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 16 Aug 2026 19:45:44 +0000 Subject: [PATCH 08/15] Pin net11 test platform to 2.0.0 Co-authored-by: WhitWaldo <2238529+WhitWaldo@users.noreply.github.com> --- Directory.Packages.props | 1 + 1 file changed, 1 insertion(+) diff --git a/Directory.Packages.props b/Directory.Packages.props index 36f898587..c8fa0ca9c 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -59,6 +59,7 @@ + From 87f4fecc907d9c1be7587a6620f74bde2e2aca33 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 16 Aug 2026 20:11:36 +0000 Subject: [PATCH 09/15] Align net11 xUnit test platform dependencies Co-authored-by: WhitWaldo <2238529+WhitWaldo@users.noreply.github.com> --- Directory.Packages.props | 1 - test/Directory.Build.props | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index c8fa0ca9c..36f898587 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -59,7 +59,6 @@ - diff --git a/test/Directory.Build.props b/test/Directory.Build.props index b113479d3..083f62923 100644 --- a/test/Directory.Build.props +++ b/test/Directory.Build.props @@ -19,7 +19,7 @@ - + From 4b6f1e9ce35b3b18da0ca73cf9a57979e665b90d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 16 Aug 2026 20:12:48 +0000 Subject: [PATCH 10/15] Remove unavailable logger from net11 CI Co-authored-by: WhitWaldo <2238529+WhitWaldo@users.noreply.github.com> --- .github/workflows/sdk_build.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/sdk_build.yml b/.github/workflows/sdk_build.yml index 1576a00f6..cb4fe56c5 100644 --- a/.github/workflows/sdk_build.yml +++ b/.github/workflows/sdk_build.yml @@ -353,7 +353,6 @@ jobs: --configuration release \ --framework ${{ matrix.framework }} \ --logger "trx;LogFilePrefix=${{ matrix.prefix }}" \ - --logger "GitHubActions;report-warnings=false" \ --logger "console;verbosity=detailed" \ --results-directory "${{ github.workspace }}/TestResults" \ /p:RuntimeIdentifier=linux-x64 \ @@ -472,7 +471,6 @@ jobs: --configuration release \ --framework net11.0 \ --logger "trx;LogFilePrefix=net11" \ - --logger "GitHubActions;report-warnings=false" \ --logger "console;verbosity=detailed" \ --results-directory "${{ github.workspace }}/TestResults" \ /p:RuntimeIdentifier=linux-x64 \ From a53e4495adb14c57bb9d6032cff73fd3227d24bf Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 16 Aug 2026 20:25:37 +0000 Subject: [PATCH 11/15] Allow .NET 11 jobs to publish TRX checks Co-authored-by: WhitWaldo <2238529+WhitWaldo@users.noreply.github.com> --- .github/workflows/sdk_build.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/sdk_build.yml b/.github/workflows/sdk_build.yml index cb4fe56c5..26e96a1a6 100644 --- a/.github/workflows/sdk_build.yml +++ b/.github/workflows/sdk_build.yml @@ -328,6 +328,7 @@ jobs: needs: [ compute-integration-matrix-net11 ] runs-on: ${{ matrix.os }} permissions: + checks: write contents: read timeout-minutes: 60 strategy: @@ -447,6 +448,7 @@ jobs: needs: discover-unit-test-projects runs-on: ubuntu-latest permissions: + checks: write contents: read strategy: fail-fast: false From 5b45753930023fc09b3635e4d8631ed1a4d92626 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 16 Aug 2026 20:41:48 +0000 Subject: [PATCH 12/15] Disable Coverlet for .NET 11 CI tests Co-authored-by: WhitWaldo <2238529+WhitWaldo@users.noreply.github.com> --- .github/workflows/sdk_build.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/sdk_build.yml b/.github/workflows/sdk_build.yml index 26e96a1a6..dc7a61a42 100644 --- a/.github/workflows/sdk_build.yml +++ b/.github/workflows/sdk_build.yml @@ -357,8 +357,6 @@ jobs: --logger "console;verbosity=detailed" \ --results-directory "${{ github.workspace }}/TestResults" \ /p:RuntimeIdentifier=linux-x64 \ - /p:CollectCoverage=true \ - /p:CoverletOutputFormat=opencover \ /p:GITHUB_ACTIONS=false timeout-minutes: 60 - name: Parse Trx files @@ -476,8 +474,6 @@ jobs: --logger "console;verbosity=detailed" \ --results-directory "${{ github.workspace }}/TestResults" \ /p:RuntimeIdentifier=linux-x64 \ - /p:CollectCoverage=true \ - /p:CoverletOutputFormat=opencover \ /p:GITHUB_ACTIONS=false timeout-minutes: 60 - name: Parse Trx files From 56c0fd17a77329a383f95a53157cacddb1a2df50 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 17 Aug 2026 00:35:30 +0000 Subject: [PATCH 13/15] Add .NET 11 legacy integration tests Co-authored-by: WhitWaldo <2238529+WhitWaldo@users.noreply.github.com> --- .github/workflows/itests.yml | 49 +++++++++++++++++++++++++++--------- 1 file changed, 37 insertions(+), 12 deletions(-) diff --git a/.github/workflows/itests.yml b/.github/workflows/itests.yml index 3521124dc..a33c13f3c 100644 --- a/.github/workflows/itests.yml +++ b/.github/workflows/itests.yml @@ -10,26 +10,36 @@ jobs: strategy: fail-fast: false matrix: - dotnet-version: ['8.0', '9.0', '10.0'] + dotnet-version: ['8.0', '9.0', '10.0', '11.0'] include: - dotnet-version: '8.0' display-name: '.NET 8.0' framework: 'net8.0' prefix: 'net8' install-version: '8.0.x' + quality: 'ga' upload_coverage: false - dotnet-version: '9.0' display-name: '.NET 9.0' framework: 'net9.0' prefix: 'net9' install-version: '9.0.x' + quality: 'ga' upload_coverage: false - dotnet-version: '10.0' display-name: '.NET 10.0' framework: 'net10.0' prefix: 'net10' install-version: '10.0.x' + quality: 'ga' upload_coverage: true + - dotnet-version: '11.0' + display-name: '.NET 11.0' + framework: 'net11.0' + prefix: 'net11' + install-version: '11.0.x' + quality: 'preview' + upload_coverage: false env: NUPKG_OUTDIR: bin/Release/nugets GOVER: 1.20.3 @@ -40,6 +50,7 @@ jobs: DAPR_RUNTIME_VER: 1.16.6 DAPR_INSTALL_URL: https://raw.githubusercontent.com/dapr/cli/release-1.16/install/install.sh DAPR_CLI_REF: '' + DaprEnableNet11: ${{ matrix.framework == 'net11.0' }} steps: - name: Set up Dapr CLI run: wget -q ${{ env.DAPR_INSTALL_URL }} -O - | /bin/bash -s ${{ env.DAPR_CLI_VER }} @@ -99,7 +110,7 @@ jobs: uses: actions/setup-dotnet@v3 with: dotnet-version: ${{ matrix.install-version }} - dotnet-quality: 'ga' # Prefer a GA release, but use the RC if not available + dotnet-quality: ${{ matrix.quality }} - name: Setup .NET 8 (required) uses: actions/setup-dotnet@v3 if: ${{ matrix.install-version != '8.0.x' }} @@ -141,33 +152,47 @@ jobs: id: tests continue-on-error: true # proceed if tests fail, the report step will report the failure with more details. run: | + test_args=( + --logger "trx;LogFilePrefix=${{ matrix.prefix }}" + --logger "console;verbosity=detailed" + ) + if [[ "${{ matrix.framework }}" != "net11.0" ]]; then + test_args+=( + --logger "GitHubActions;report-warnings=false" + /p:CollectCoverage=true + /p:CoverletOutputFormat=opencover + ) + fi dotnet test ${{ github.workspace }}/test/Dapr.E2E.Test/Dapr.E2E.Test.csproj \ --configuration Release \ --framework ${{ matrix.framework }} \ --no-build \ --no-restore \ - --logger "trx;LogFilePrefix=${{ matrix.prefix }}" \ - --logger "GitHubActions;report-warnings=false" \ - --logger "console;verbosity=detailed" \ --results-directory "${{ github.workspace }}/TestResults" \ - /p:CollectCoverage=true \ - /p:CoverletOutputFormat=opencover \ + "${test_args[@]}" \ /p:GITHUB_ACTIONS=false - name: Run Generators Integration Tests id: generator-tests continue-on-error: true # proceed if tests fail, the report step will report the failure with more details. run: | + test_args=( + --logger "trx;LogFilePrefix=${{ matrix.prefix }}" + --logger "console;verbosity=detailed" + ) + if [[ "${{ matrix.framework }}" != "net11.0" ]]; then + test_args+=( + --logger "GitHubActions;report-warnings=false" + /p:CollectCoverage=true + /p:CoverletOutputFormat=opencover + ) + fi dotnet test ${{ github.workspace }}/test/Dapr.E2E.Test.Actors.Generators/Dapr.E2E.Test.Actors.Generators.csproj \ --configuration Release \ --framework ${{ matrix.framework }} \ --no-build \ --no-restore \ - --logger "trx;LogFilePrefix=${{ matrix.prefix }}" \ - --logger "GitHubActions;report-warnings=false" \ - --logger "console;verbosity=detailed" \ --results-directory "${{ github.workspace }}/TestResults" \ - /p:CollectCoverage=true \ - /p:CoverletOutputFormat=opencover \ + "${test_args[@]}" \ /p:GITHUB_ACTIONS=false - name: Check test failure in PR if: github.event_name == 'pull_request' && (steps.tests.outcome != 'success' || steps.generator-tests.outcome != 'success') From fcc3d5d431d24216bbb94b943776fb2c7d203654 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 17 Aug 2026 03:26:29 +0000 Subject: [PATCH 14/15] Use preview SDK for .NET 11 integration tests Co-authored-by: WhitWaldo <2238529+WhitWaldo@users.noreply.github.com> --- .github/workflows/itests.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/itests.yml b/.github/workflows/itests.yml index a33c13f3c..80226da70 100644 --- a/.github/workflows/itests.yml +++ b/.github/workflows/itests.yml @@ -106,6 +106,9 @@ jobs: - uses: actions/checkout@v1 - name: Parse release version run: python ./.github/scripts/get_release_version.py + - name: Remove global.json (use .NET 11 preview SDK) + if: ${{ matrix.framework == 'net11.0' }} + run: rm global.json - name: Setup ${{ matrix.display-name }} uses: actions/setup-dotnet@v3 with: From ac89a81256191546de47fafc3bde68849d397a7f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 17 Aug 2026 21:14:54 +0000 Subject: [PATCH 15/15] Synchronize optional secret reload test Co-authored-by: WhitWaldo <2238529+WhitWaldo@users.noreply.github.com> --- .../DaprSecretStoreConfigurationProviderTest.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/test/Dapr.Extensions.Configuration.Test/DaprSecretStoreConfigurationProviderTest.cs b/test/Dapr.Extensions.Configuration.Test/DaprSecretStoreConfigurationProviderTest.cs index 54536896e..4dcdd402b 100644 --- a/test/Dapr.Extensions.Configuration.Test/DaprSecretStoreConfigurationProviderTest.cs +++ b/test/Dapr.Extensions.Configuration.Test/DaprSecretStoreConfigurationProviderTest.cs @@ -963,6 +963,7 @@ public async Task LoadSecrets_OptionalWithDescriptors_PopulatesConfig() var storeName = "store"; var secretKey = "mySecret"; var secretValue = "myValue"; + var continueSecretFetch = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); var daprClient = new Mock(); // Sidecar ready immediately @@ -972,7 +973,11 @@ public async Task LoadSecrets_OptionalWithDescriptors_PopulatesConfig() daprClient .Setup(c => c.GetSecretAsync(storeName, secretKey, It.IsAny>(), It.IsAny())) - .ReturnsAsync(new Dictionary { { secretKey, secretValue } }); + .Returns(async () => + { + await continueSecretFetch.Task; + return new Dictionary { { secretKey, secretValue } }; + }); var secretDescriptors = new[] { new DaprSecretDescriptor(secretKey) }; @@ -983,6 +988,7 @@ public async Task LoadSecrets_OptionalWithDescriptors_PopulatesConfig() // Wait for the reload token to fire, indicating background load completed var reloaded = new TaskCompletionSource(); config.GetReloadToken().RegisterChangeCallback(_ => reloaded.TrySetResult(true), null); + continueSecretFetch.SetResult(true); await reloaded.Task.WaitAsync(TimeSpan.FromSeconds(5), TestContext.Current.CancellationToken); config[secretKey].ShouldBe(secretValue);