Skip to content

Commit 822ce01

Browse files
authored
feat: add .NET 10 support and refactor package management (#147)
* feat: add .NET 10 support and refactor package management - Add .NET 10.0 target framework support across all projects - Update global.json to use .NET 10.0 RC SDK with latestFeature rollForward - Refactor package management: * Move framework-specific package references to dedicated Dependencies.props file * Centralize package versions in Directory.Packages.props * Remove conditional logic from main project files - Add integration testing pipeline with separate test configuration - Update build versioning logic for better local development experience - Fix .NET 10 compatibility issues in HttpClientTests (SelectAwait -> Select) - Add conditional System.Linq.Async reference (not needed for .NET 10) - Update package versions for .NET 10 RC dependencies Breaking changes: - Requires .NET 10.0 RC SDK for full functionality - Integration tests now run in separate configuration * GHA: Install .NET 9 SDK
1 parent 54e1dcd commit 822ce01

File tree

8 files changed

+112
-27
lines changed

8 files changed

+112
-27
lines changed

.github/workflows/build.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,12 @@ jobs:
2626
with:
2727
fetch-depth: 0
2828

29-
- name: Install .NET SDK 8.0.x
29+
- name: Install .NET SDK 8.0.x & 9.0.x
3030
uses: actions/setup-dotnet@v5
3131
with:
3232
dotnet-version: |
3333
8.0.x
34+
9.0.x
3435
3536
- name: Install .NET SDK
3637
uses: actions/setup-dotnet@v5

build.cake

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,14 @@ Setup(
1919
var buildDate = DateTime.UtcNow;
2020
var runNumber = gh.IsRunningOnGitHubActions
2121
? gh.Environment.Workflow.RunNumber
22-
: (short)((buildDate - buildDate.Date).TotalSeconds/3);
22+
: 0;
23+
24+
var suffix = runNumber == 0
25+
? $"-{(short)((buildDate - buildDate.Date).TotalSeconds/3)}"
26+
: string.Empty;
2327

2428
var version = FormattableString
25-
.Invariant($"{buildDate:yyyy.M.d}.{runNumber}");
29+
.Invariant($"{buildDate:yyyy.M.d}.{runNumber}{suffix}");
2630

2731
context.Information("Building version {0} (Branch: {1}, IsMain: {2})",
2832
version,
@@ -144,6 +148,34 @@ Task("Clean")
144148
.UploadArtifact(data.ArtifactsPath, $"Artifact_{gh.Environment.Runner.ImageOS ?? gh.Environment.Runner.OS}_{context.Environment.Runtime.BuiltFramework.Identifier}_{context.Environment.Runtime.BuiltFramework.Version}")
145149
: throw new Exception("GitHubActions not available")
146150
)
151+
.Then("Prepare-Integration-Test")
152+
.Does<BuildData>(
153+
static (context, data) => {
154+
context.CopyDirectory(data.ProjectRoot.Combine("Devlead.Testing.MockHttp.Tests"), data.IntegrationTestPath);
155+
context.CopyFile(data.ProjectRoot.CombineWithFilePath("Directory.Packages.props"), data.IntegrationTestPath.CombineWithFilePath("Directory.Packages.props"));
156+
context.CopyFile("nuget.config", data.IntegrationTestPath.CombineWithFilePath("nuget.config"));
157+
context.DotNetAddPackage(
158+
"Devlead.Testing.MockHttp",
159+
new DotNetPackageAddSettings {
160+
EnvironmentVariables = { { "Configuration", "IntegrationTest" } },
161+
WorkingDirectory = data.IntegrationTestPath,
162+
Version = data.Version,
163+
Source = data.NuGetOutputPath.FullPath
164+
}
165+
);
166+
}
167+
)
168+
.Then("Integration-Test")
169+
.Does<BuildData>(
170+
static (context, data) => {
171+
context.DotNetTest(
172+
data.IntegrationTestPath.FullPath,
173+
new DotNetTestSettings {
174+
Configuration = "IntegrationTest"
175+
}
176+
);
177+
}
178+
)
147179
.Default()
148180
.Then("Push-GitHub-Packages")
149181
.WithCriteria<BuildData>( (context, data) => data.ShouldPushGitHubPackages())

global.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"sdk": {
3-
"rollForward": "latestMinor",
4-
"version": "9.0.306"
3+
"rollForward": "latestFeature",
4+
"version": "10.0.100-rc.2.25502.107"
55
}
66
}

src/Devlead.Testing.MockHttp.Tests/Devlead.Testing.MockHttp.Tests.csproj

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFrameworks>net9.0;net8.0</TargetFrameworks>
4+
<TargetFrameworks>net10.0;net9.0;net8.0</TargetFrameworks>
55
<LangVersion>latest</LangVersion>
66
<ImplicitUsings>enable</ImplicitUsings>
77
<Nullable>enable</Nullable>
@@ -27,20 +27,18 @@
2727
<PackageReference Include="NUnit" />
2828
<PackageReference Include="NUnit.Analyzers" />
2929
<PackageReference Include="NUnit3TestAdapter" />
30-
<PackageReference Include="System.Linq.Async" />
30+
<PackageReference Include="System.Linq.Async" Condition="'$(TargetFramework)' != 'net10.0'" />
3131
<PackageReference Include="Verify.NUnit" />
32-
<PackageReference Include="System.Text.Json" />
33-
<PackageReference Include="Verify.Http" VersionOverride="6.6.0" Condition="'$(TargetFramework)' != 'net9.0'" />
34-
<PackageReference Include="Verify.Http" Condition="'$(TargetFramework)' == 'net9.0'" />
35-
<PackageReference Include="Microsoft.Extensions.TimeProvider.Testing" />
3632
</ItemGroup>
3733

3834
<ItemGroup>
3935
<Using Include="NUnit.Framework" />
4036
</ItemGroup>
4137

38+
39+
<Import Project="../Devlead.Testing.MockHttp/Devlead.Testing.MockHttp.Dependencies.props" Condition="'$(Configuration)' != 'IntegrationTest'" />
4240
<ItemGroup>
43-
<Compile Include="../Devlead.Testing.MockHttp/**/*.cs" Exclude="../Devlead.Testing.MockHttp/obj/**;../Devlead.Testing.MockHttp/bin/**">
41+
<Compile Include="../Devlead.Testing.MockHttp/**/*.cs" Exclude="../Devlead.Testing.MockHttp/obj/**;../Devlead.Testing.MockHttp/bin/**" Condition="'$(Configuration)' != 'IntegrationTest'">
4442
<Link>Devlead/%(RecursiveDir)%(Filename)%(Extension)</Link>
4543
</Compile>
4644
</ItemGroup>

src/Devlead.Testing.MockHttp.Tests/Unit/HttpClientTests.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,14 @@ public async Task Send(params string[] methods)
9292
// When
9393
var result = await methods
9494
.ToAsyncEnumerable()
95+
#if NET10_0_OR_GREATER
96+
.Select(
97+
async (method, _, _)
98+
#else
9599
.SelectAwait(
96-
async method => await httpClient.SendAsync(
100+
async method
101+
#endif
102+
=> await httpClient.SendAsync(
97103
new HttpRequestMessage(
98104
new HttpMethod(method),
99105
Constants.Uris.New_Txt
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
<Project>
2+
<ItemGroup>
3+
<PackageReference Include="Argon.Xml" />
4+
<PackageReference Include="Verify" />
5+
</ItemGroup>
6+
7+
<ItemGroup Condition="'$(TargetFramework)' == 'net8.0'">
8+
<PackageReference Include="Verify.Http" VersionOverride="6.4.1" Pack="false" />
9+
<PackageFile PackFolder="Dependency" Include="Verify.Http" Version="6.4.1" />
10+
11+
<PackageReference Include="Microsoft.Extensions.Http" VersionOverride="8.0.1" Pack="false" />
12+
<PackageFile PackFolder="Dependency" Include="Microsoft.Extensions.Http" Version="8.0.1" />
13+
14+
<PackageReference Include="Microsoft.Net.Http.Headers" VersionOverride="8.0.21" Pack="false" />
15+
<PackageFile PackFolder="Dependency" Include="Microsoft.Net.Http.Headers" Version="8.0.21" />
16+
17+
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" VersionOverride="8.0.3" Pack="false" />
18+
<PackageFile PackFolder="Dependency" Include="Microsoft.Extensions.Logging.Abstractions" Version="8.0.3" />
19+
20+
<PackageReference Include="Microsoft.Extensions.TimeProvider.Testing" VersionOverride="8.10.0" Pack="false" />
21+
<PackageFile PackFolder="Dependency" Include="Microsoft.Extensions.TimeProvider.Testing" Version="8.10.0" />
22+
</ItemGroup>
23+
24+
<ItemGroup Condition="'$(TargetFramework)' == 'net9.0'">
25+
<PackageReference Include="Verify.Http" VersionOverride="7.0.0" Pack="false" />
26+
<PackageFile PackFolder="Dependency" Include="Verify.Http" Version="7.0.0" />
27+
28+
<PackageReference Include="Microsoft.Extensions.Http" VersionOverride="9.0.10" Pack="false" />
29+
<PackageFile PackFolder="Dependency" Include="Microsoft.Extensions.Http" Version="9.0.10" />
30+
31+
<PackageReference Include="Microsoft.Net.Http.Headers" VersionOverride="9.0.10" Pack="false" />
32+
<PackageFile PackFolder="Dependency" Include="Microsoft.Net.Http.Headers" Version="9.0.10" />
33+
34+
<PackageReference Include="Microsoft.Extensions.TimeProvider.Testing" VersionOverride="9.10.0" Pack="false" />
35+
<PackageFile PackFolder="Dependency" Include="Microsoft.Extensions.TimeProvider.Testing" Version="9.10.0" />
36+
</ItemGroup>
37+
38+
<ItemGroup Condition="'$(TargetFramework)' == 'net10.0'">
39+
<PackageReference Include="Verify.Http" VersionOverride="7.0.0" Pack="false" />
40+
<PackageFile PackFolder="Dependency" Include="Verify.Http" Version="7.0.0" />
41+
42+
<PackageReference Include="Microsoft.Extensions.Http" VersionOverride="10.0.0-rc.2.25502.107" Pack="false" />
43+
<PackageFile PackFolder="Dependency" Include="Microsoft.Extensions.Http" Version="10.0.0-rc.2.25502.107" />
44+
45+
<PackageReference Include="Microsoft.Net.Http.Headers" VersionOverride="10.0.0-rc.2.25502.107" Pack="false" />
46+
<PackageFile PackFolder="Dependency" Include="Microsoft.Net.Http.Headers" Version="10.0.0-rc.2.25502.107" />
47+
48+
<PackageReference Include="Microsoft.Extensions.TimeProvider.Testing" VersionOverride="9.10.0" Pack="false" />
49+
<PackageFile PackFolder="Dependency" Include="Microsoft.Extensions.TimeProvider.Testing" Version="9.10.0" />
50+
</ItemGroup>
51+
</Project>
Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFrameworks>net8.0;net9.0</TargetFrameworks>
4+
<TargetFrameworks>net8.0;net9.0;net10.0</TargetFrameworks>
55
<ImplicitUsings>enable</ImplicitUsings>
66
<Nullable>enable</Nullable>
77
<PackageReadmeFile>README.md</PackageReadmeFile>
@@ -16,19 +16,15 @@
1616
<PackageFile Condition="'$(Configuration)'!='Debug'" Include="**/*.cs" Exclude="obj/**;bin/**" PackagePath="$(ContentTargetFolders)\cs\$(TargetFramework)\Devlead\%(RelativeDir)%(Filename)%(Extension)" />
1717
</ItemGroup>
1818

19-
<ItemGroup>
20-
<PackageReference Include="NuGetizer" PrivateAssets="all" />
21-
<PackageReference Include="Microsoft.Extensions.TimeProvider.Testing" />
22-
<PackageReference Include="Verify.Http" Condition="'$(TargetFramework)' == 'net9.0'" Pack="false" />
23-
<PackageReference Include="Verify.Http" VersionOverride="6.6.0" Condition="'$(TargetFramework)' != 'net9.0'" Pack="false" />
24-
<PackageFile PackFolder="Dependency" Include="Verify.Http" Version="7.0.0" Condition=" '$(TargetFramework)' == 'net9.0' " />
25-
<PackageFile PackFolder="Dependency" Include="Verify.Http" Version="6.6.0" Condition=" '$(TargetFramework)' != 'net9.0' " />
26-
</ItemGroup>
27-
2819
<ItemGroup>
2920
<PackageFile Include="../../icon/LICENSE.md" PackagePath="icon/LICENSE.md" />
3021
<PackageFile Include="../../icon/devlead.testing.mockhttp.png" PackagePath="icon/devlead.testing.mockhttp.png" />
3122
<PackageFile Include="../../README.md" PackagePath="README.md" />
3223
</ItemGroup>
33-
</Project>
3424

25+
<ItemGroup>
26+
<PackageReference Include="NuGetizer" PrivateAssets="all" />
27+
</ItemGroup>
28+
29+
<Import Project="Devlead.Testing.MockHttp.Dependencies.props" />
30+
</Project>

src/Directory.Packages.props

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@
44
<CentralPackageTransitivePinningEnabled>false</CentralPackageTransitivePinningEnabled>
55
</PropertyGroup>
66
<ItemGroup>
7+
<PackageVersion Include="Argon.Xml" Version="0.32.0" />
8+
<PackageVersion Include="Verify" Version="31.0.1" />
79
<PackageVersion Include="Azure.Identity" Version="1.17.0" />
810
<PackageVersion Include="coverlet.collector" Version="6.0.4" />
9-
<PackageVersion Include="Microsoft.Extensions.Http" Version="9.0.10" />
10-
<PackageVersion Include="Microsoft.Extensions.Logging" Version="9.0.10" />
11-
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="9.0.10" />
1211
<PackageVersion Include="Microsoft.Extensions.TimeProvider.Testing" Version="9.10.0" />
12+
<PackageVersion Include="Microsoft.Net.Http.Headers" Version="9.0.10" />
13+
<PackageVersion Include="Microsoft.Extensions.Http " Version="9.0.10" />
1314
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.0.0" />
1415
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="8.0.0" />
1516
<PackageVersion Include="MimeTypes" Version="2.5.2" />

0 commit comments

Comments
 (0)