Skip to content

Conversation

@vbreuss
Copy link
Member

@vbreuss vbreuss commented Aug 15, 2025

This PR adds support for .NET 10 by upgrading the .NET SDK version and integrating new .NET 10 features across the codebase. The changes include updating build configurations, feature flags, test frameworks, and implementing new APIs introduced in .NET 10.

Key Changes

  • Added .NET 10 target framework support and new .NET 10 feature flags for UTF-8 GUID parsing, random string generation, and async compression operations

  • Implemented new API methods for random string generation

    • IRandom.GetHexString(int, bool)
    • IRandom.GetHexString(Span<char>, bool)
    • IRandom.GetString(ReadOnlySpan<char>, int)

    for UTF-8 GUID parsing

    • Guid.Parse(ReadOnlySpan<byte>)
    • Guid.Parse(ReadOnlySpan<byte>, IFormatProvider)
    • Guid.TryParse(ReadOnlySpan<byte>, out Guid)
    • Guid.TryParse(ReadOnlySpan<byte>, IFormatProvider, out Guid)

    and the async compression operations

    • IZipArchive.CreateEntryFromFileAsync(string, string, CancellationToken)
    • IZipArchive.CreateEntryFromFileAsync(string, string, CompressionLevel, CancellationToken)
    • IZipArchive.ExtractToDirectoryAsync(string, CancellationToken)
    • IZipArchive.ExtractToDirectoryAsync(string, bool, CancellationToken)
    • IZipArchiveEntry.ExtractToFileAsync(string, CancellationToken)
    • IZipArchiveEntry.ExtractToFileAsync(string, bool, CancellationToken)
    • IZipArchiveEntry.OpenAsync(CancellationToken)
    • IZipFile.CreateFromDirectoryAsync(string, Stream, CancellationToken)
    • IZipFile.CreateFromDirectoryAsync(string, Stream, CompressionLevel , bool, CancellationToken)
    • IZipFile.CreateFromDirectoryAsync(string, Stream, CompressionLevel , bool, Encoding, CancellationToken)
    • IZipFile.CreateFromDirectoryAsync(string, string, CancellationToken)
    • IZipFile.CreateFromDirectoryAsync(string, string, CompressionLevel , bool, CancellationToken)
    • IZipFile.CreateFromDirectoryAsync(string, string, CompressionLevel , bool, Encoding, CancellationToken)
    • IZipFile.ExtractToDirectoryAsync(Stream, string, CancellationToken)
    • IZipFile.ExtractToDirectoryAsync(Stream, string, bool, CancellationToken)
    • IZipFile.ExtractToDirectoryAsync(Stream, string, Encoding, CancellationToken)
    • IZipFile.ExtractToDirectoryAsync(Stream, string, Encoding, bool, CancellationToken)
    • IZipFile.ExtractToDirectoryAsync(string, string, CancellationToken)
    • IZipFile.ExtractToDirectoryAsync(string, string, bool, CancellationToken)
    • IZipFile.ExtractToDirectoryAsync(string, string, Encoding, CancellationToken)
    • IZipFile.ExtractToDirectoryAsync(string, string, Encoding, bool, CancellationToken)
    • IZipFile.OpenAsync(string, ZipArchiveMode, CancellationToken)
    • IZipFile.OpenAsync(string, ZipArchiveMode, Encoding?, CancellationToken)
    • IZipFile.OpenReadAsync(string, CancellationToken)
  • Added tests for the new features

  • Updated build pipeline and CI/CD workflows to include .NET 10 support

@vbreuss vbreuss self-assigned this Aug 15, 2025
@vbreuss vbreuss added the enhancement New feature or request label Aug 15, 2025
@github-actions
Copy link

github-actions bot commented Aug 15, 2025

Test Results

     52 files  +    15       52 suites  +15   30m 56s ⏱️ + 9m 46s
 62 883 tests +18 460   59 579 ✅ +17 585   3 304 💤 +  875  0 ❌ ±0 
128 852 runs  +42 687  115 427 ✅ +38 305  13 425 💤 +4 382  0 ❌ ±0 

Results for commit 7e1b012. ± Comparison against base commit dc6eee1.

This pull request removes 36453 and adds 54913 tests. Note that renamed tests count towards both.
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path053dd13c-831f-44dd-a0db-a8722a5f9cc9")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path195badc9-6159-474d-9a91-399c14ad5f40")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path19a9f556-8b39-4d4c-aa85-60ca492ee72d")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path2228e783-c417-424f-8517-c46d0cda4938")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "pathb78f0287-dc03-47db-9a97-023ce1c9b61c")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "pathd3f89574-770c-4f6c-ad04-d3770b3e33e3")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "pathfb6b46ed-b774-49fe-85dc-972697c76acb")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+RealFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path11b78e21-88b7-4c87-858e-91dcbd3c95b8")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+RealFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path23a86b26-ca73-47f5-8260-6f941970f32c")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+RealFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path2f1c13b2-518b-4e01-a755-064b4384839e")
…
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path09b54511-5e60-44a5-a1c5-58320f8b51c9")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path184b4469-7531-46be-8b77-04009c813561")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path27dd8a3f-886d-4d49-a11c-67bc59484c07")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path32f3269f-2829-49e1-a2a6-75e56364c1f4")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path3f6feefe-fb32-417d-a509-62b78b7af6d7")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path637907b0-9726-4c5c-8e53-bf405b8d3de5")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path6db177c5-f612-4428-9587-9fab1f06db12")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path7f388be0-4916-4ee9-b555-3547d4ddaee5")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "pathac71ff26-4d75-45d1-994c-31aec13e9b79")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "pathe0aa07d1-bd73-4254-a733-269749e3460c")
…
This pull request removes 1784 skipped tests and adds 2659 skipped tests. Note that renamed tests count towards both.
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path195badc9-6159-474d-9a91-399c14ad5f40")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path19a9f556-8b39-4d4c-aa85-60ca492ee72d")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path2228e783-c417-424f-8517-c46d0cda4938")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "pathd3f89574-770c-4f6c-ad04-d3770b3e33e3")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+RealFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path11b78e21-88b7-4c87-858e-91dcbd3c95b8")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+RealFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path2f1c13b2-518b-4e01-a755-064b4384839e")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+RealFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "pathcf5b928b-1cd6-4c00-b41a-15811c84f652")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+RealFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "pathdbeb31b0-2622-4319-a72a-cbd8f4e4b5cf")
Testably.Abstractions.Testing.Tests.FileSystem.FileMockTests ‑ GetUnixFileMode_SafeFileHandle_ShouldThrowPlatformNotSupportedExceptionOnWindows(path: "pathba550f58-5b0e-4c87-89ae-736730bb9b3d")
Testably.Abstractions.Testing.Tests.FileSystem.FileMockTests ‑ GetUnixFileMode_SafeFileHandle_ShouldThrowPlatformNotSupportedExceptionOnWindows(path: "pathbd224cad-3c74-4ac9-a39b-a450a6732d3e")
…
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path184b4469-7531-46be-8b77-04009c813561")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path32f3269f-2829-49e1-a2a6-75e56364c1f4")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path637907b0-9726-4c5c-8e53-bf405b8d3de5")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path6db177c5-f612-4428-9587-9fab1f06db12")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path7f388be0-4916-4ee9-b555-3547d4ddaee5")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+MockFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "pathe0aa07d1-bd73-4254-a733-269749e3460c")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+RealFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path3be8239f-2781-4e4a-ac49-6f8860d5a73e")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+RealFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path45dbcd95-52da-442d-8b22-e2825c155e6d")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+RealFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path5597982b-cda1-4019-894e-717eefe615b6")
Testably.Abstractions.AccessControl.Tests.DirectoryInfoAclExtensionsTests+RealFileSystemTests ‑ SetAccessControl_ShouldNotUpdateTimes(path: "path960dcbea-c101-4849-b42a-529be9d5daea")
…

♻️ This comment has been updated with latest results.

@vbreuss vbreuss force-pushed the topic/support-net10 branch 2 times, most recently from 540df20 to af5ab32 Compare August 15, 2025 13:21
@vbreuss vbreuss marked this pull request as ready for review August 15, 2025 14:56
Copilot AI review requested due to automatic review settings August 15, 2025 14:56
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR adds support for .NET 10 by upgrading the .NET SDK version and integrating new .NET 10 features across the codebase. The changes include updating build configurations, feature flags, test frameworks, and implementing new APIs introduced in .NET 10.

Key Changes

  • Upgraded .NET SDK from 9.0.304 to 10.0.100-preview.7 and added .NET 10 target framework support
  • Added new .NET 10 feature flags for UTF-8 GUID parsing, random string generation, and async compression operations
  • Implemented new API methods for random string generation (GetHexString, GetString) and UTF-8 GUID parsing
  • Updated build pipeline and CI/CD workflows to include .NET 10 support

Reviewed Changes

Copilot reviewed 49 out of 49 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
global.json Updated .NET SDK version to 10.0.100-preview.7
Feature.Flags.props Added .NET 10 feature flags for new APIs
Source/Directory.Build.props Added net10.0 target framework and switched to preview language version
Tests/Directory.Build.props Added net10.0 to test target frameworks
Pipeline/Build.cs Modified build pipeline targets for packaging
.github/workflows/*.yml Updated CI/CD workflows to include .NET 10 SDK
Tests/Testably.Abstractions.Tests/RandomSystem/RandomTests.cs Added comprehensive tests for new random string generation features
Tests/Testably.Abstractions.Tests/RandomSystem/GuidTests.cs Added tests for new UTF-8 GUID parsing capabilities and reorganized existing tests
Source/Testably.Abstractions.Interface/RandomSystem/IRandom.cs Added interface definitions for new random string methods
Source/Testably.Abstractions.Interface/RandomSystem/IGuid.cs Added interface definitions for UTF-8 GUID parsing methods
Source/Testably.Abstractions.Interface/Helpers/*.cs Implemented new random and GUID methods in wrapper classes
Source/Testably.Abstractions.Testing/RandomSystem/RandomMock.cs Added mock implementations for new random string generation
Source/Testably.Abstractions.Compression/*.cs Added async compression methods and interfaces
Tests/Api/*.txt Updated API baselines for .NET 10 compatibility

Copy link
Member Author

@vbreuss vbreuss left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wait for .NET 10 Release (estimated November 2025)


<PropertyGroup>
<LangVersion>latest</LangVersion>
<LangVersion>preview</LangVersion>
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wait for .NET 10 Release (estimated November 2025) and revert it back to:

Suggested change
<LangVersion>preview</LangVersion>
<LangVersion>latest</LangVersion>


<PropertyGroup>
<LangVersion>latest</LangVersion>
<LangVersion>preview</LangVersion>
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wait for .NET 10 Release (estimated November 2025) and revert it back to:

Suggested change
<LangVersion>preview</LangVersion>
<LangVersion>latest</LangVersion>

@vbreuss vbreuss force-pushed the topic/support-net10 branch from 91a52b2 to c83ddd2 Compare September 10, 2025 18:33
@vbreuss vbreuss force-pushed the topic/support-net10 branch from c83ddd2 to 7e1b012 Compare September 16, 2025 13:43
@sonarqubecloud
Copy link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants