Skip to content

Conversation

@alexeyzimarev
Copy link
Contributor

@alexeyzimarev alexeyzimarev commented Nov 15, 2025

Auto-created Ticket

#467

PR Type

Enhancement


Description

  • Upgrade to .NET 10 GA with stable package versions

  • Update CI/CD workflows to use .NET 10 and latest action versions

  • Replace conditional System.Linq.Async with System.Linq.AsyncEnumerable

  • Minor formatting and documentation fixes


Diagram Walkthrough

flowchart LR
  A["Previous: .NET 10 Preview"] -->|"Upgrade to GA"| B["Target: .NET 10.0 GA"]
  B -->|"Update packages"| C["Microsoft.Extensions 10.0.0"]
  B -->|"Update packages"| D["Microsoft.TestHost 10.0.0"]
  B -->|"Replace dependency"| E["System.Linq.AsyncEnumerable"]
  F["CI/CD Workflows"] -->|"Update to v5"| G["actions/setup-dotnet@v5"]
  F -->|"Update framework"| H["net10.0 tests"]
Loading

File Walkthrough

Relevant files
Documentation
SubscriptionBuilder.cs
Update XML documentation tag format                                           

src/Core/src/Eventuous.Subscriptions/Registrations/SubscriptionBuilder.cs

  • Updated XML documentation tag from to
    SubscriptionId for proper .NET 10 documentation standards
+1/-1     
Configuration changes
preview.yml
Update preview workflow to .NET 10                                             

.github/workflows/preview.yml

  • Upgrade actions/setup-dotnet from v4 to v5
  • Update target framework from net9.0 to net10.0
  • Update dotnet-version from 9.0.x to 10.0.x
+3/-3     
publish.yml
Add .NET 10 setup and Docker login                                             

.github/workflows/publish.yml

  • Add .NET 10 setup step with actions/setup-dotnet@v5
  • Add Docker Hub login step for non-fork pull requests
  • Update test framework from net9.0 to net10.0
+14/-1   
pull-request.yml
Consolidate .NET setup to GA versions                                       

.github/workflows/pull-request.yml

  • Consolidate .NET setup into single step supporting versions 8.0, 9.0,
    and 10.0
  • Remove separate .NET 10 preview setup step with dotnet-quality:
    'preview'
  • Simplify workflow by using GA version instead of preview
+0/-6     
Dependencies
Directory.Packages.props
Update to .NET 10 GA package versions                                       

Directory.Packages.props

  • Update MicrosoftTestHostVer from 10.0.0-rc.2.25502.107 to 10.0.0 (GA)
  • Update MicrosoftExtensionsVer from 10.0.0-rc.2.25502.107 to 10.0.0
    (GA)
  • Add System.Linq.AsyncEnumerable version 10.0.0 as new package
    dependency
  • Reorder package entries for alphabetical consistency
+4/-3     
Eventuous.Postgresql.csproj
Remove conditional System.Linq.Async dependency                   

src/Postgres/src/Eventuous.Postgresql/Eventuous.Postgresql.csproj

  • Remove conditional System.Linq.Async package reference for non-net10.0
    targets
  • Update formatting consistency in project file (spacing around
    attributes)
  • Simplify project configuration by removing framework-specific
    conditions
+10/-13 
Eventuous.Sql.Base.csproj
Replace System.Linq.Async with AsyncEnumerable                     

src/Relational/src/Eventuous.Sql.Base/Eventuous.Sql.Base.csproj

  • Replace conditional System.Linq.Async with unconditional
    System.Linq.AsyncEnumerable
  • Remove framework-specific condition for net10.0 target
  • Simplify project configuration for .NET 10 compatibility
+2/-2     
Eventuous.SqlServer.csproj
Remove conditional System.Linq.Async dependency                   

src/SqlServer/src/Eventuous.SqlServer/Eventuous.SqlServer.csproj

  • Remove conditional System.Linq.Async package reference for non-net10.0
    targets
  • Simplify project configuration by eliminating framework-specific
    conditions
+0/-3     

@qodo-free-for-open-source-projects
Copy link
Contributor

qodo-free-for-open-source-projects bot commented Nov 15, 2025

PR Compliance Guide 🔍

(Compliance updated until commit cc664d1)

Below is a summary of compliance checks for this PR:

Security Compliance
🟢
No security concerns identified No security vulnerabilities detected by AI analysis. Human verification advised for critical code.
Ticket Compliance
🟡
🎫 #467
🟢 Remove conditional System.Linq.Async package references for preview versions
Replace System.Linq.Async with System.Linq.AsyncEnumerable package for .NET 10 GA
compatibility
🔴 Upgrade Microsoft.Extensions packages from preview RC versions to stable 10.0.0 GA
versions
Upgrade Microsoft.TestHost from preview RC versions to stable 10.0.0 GA versions
Update CI/CD workflows from .NET 10 preview to GA release
Update GitHub action versions to latest stable releases in workflows
Update XML documentation tags to align with .NET 10 standards
Codebase Duplication Compliance
🟢
No codebase code duplication found No new components were introduced in the PR code
Custom Compliance
🟢
Generic: Comprehensive Audit Trails

Objective: To create a detailed and reliable record of critical system actions for security analysis
and compliance.

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Meaningful Naming and Self-Documenting Code

Objective: Ensure all identifiers clearly express their purpose and intent, making code
self-documenting

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Robust Error Handling and Edge Case Management

Objective: Ensure comprehensive error handling that provides meaningful context and graceful
degradation

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Secure Error Handling

Objective: To prevent the leakage of sensitive system information through error messages while
providing sufficient detail for internal debugging.

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Secure Logging Practices

Objective: To ensure logs are useful for debugging and auditing without exposing sensitive
information like PII, PHI, or cardholder data.

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Security-First Input Validation and Data Handling

Objective: Ensure all data inputs are validated, sanitized, and handled securely to prevent
vulnerabilities

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Compliance status legend 🟢 - Fully Compliant
🟡 - Partial Compliant
🔴 - Not Compliant
⚪ - Requires Further Human Verification
🏷️ - Compliance label

Previous compliance checks

Compliance check up to commit f56d97b
Security Compliance
Secret exposure risk

Description: Docker Hub credentials are exposed to pull requests from forks through the conditional
check, which only prevents login but still allows the secrets to be accessed in the
workflow context.
publish.yml [35-40]

Referred Code
name: Login to Docker Hub
if: ${{ github.event.pull_request.head.repo.fork == false }}
uses: docker/login-action@v3
with:
  username: ${{ secrets.DOCKER_USER }}
  password: ${{ secrets.DOCKER_TOKEN }}
Ticket Compliance
🎫 No ticket provided
  • Create ticket/issue
Codebase Duplication Compliance
🟢
No codebase code duplication found No new components were introduced in the PR code
Custom Compliance
🟢
Generic: Comprehensive Audit Trails

Objective: To create a detailed and reliable record of critical system actions for security analysis
and compliance.

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Meaningful Naming and Self-Documenting Code

Objective: Ensure all identifiers clearly express their purpose and intent, making code
self-documenting

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Robust Error Handling and Edge Case Management

Objective: Ensure comprehensive error handling that provides meaningful context and graceful
degradation

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Secure Error Handling

Objective: To prevent the leakage of sensitive system information through error messages while
providing sufficient detail for internal debugging.

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Secure Logging Practices

Objective: To ensure logs are useful for debugging and auditing without exposing sensitive
information like PII, PHI, or cardholder data.

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Security-First Input Validation and Data Handling

Objective: Ensure all data inputs are validated, sanitized, and handled securely to prevent
vulnerabilities

Status:
Secrets in Workflow: Docker Hub credentials are referenced using secrets which should be verified for proper
secret management practices.

Referred Code
username: ${{ secrets.DOCKER_USER }}
password: ${{ secrets.DOCKER_TOKEN }}

Learn more about managing compliance generic rules or creating your own custom rules

@qodo-free-for-open-source-projects
Copy link
Contributor

qodo-free-for-open-source-projects bot commented Nov 15, 2025

PR Code Suggestions ✨

Explore these optional code suggestions:

CategorySuggestion                                                                                                                                    Impact
General
Add explicit async LINQ dependency

For consistency with related projects and to ensure dependency clarity, add an
explicit package reference for System.Linq.AsyncEnumerable to the project file.

src/Postgres/src/Eventuous.Postgresql/Eventuous.Postgresql.csproj [1-14]

 <Project Sdk="Microsoft.NET.Sdk">
     <ItemGroup>
         <ProjectReference Include="$(CoreRoot)\Eventuous.Subscriptions\Eventuous.Subscriptions.csproj"/>
         <ProjectReference Include="$(CoreRoot)\Eventuous.Persistence\Eventuous.Persistence.csproj"/>
-        <ProjectReference Include="$(SrcRoot)\Relational\src\Eventuous.Sql.Base\Eventuous.Sql.Base.csproj"/>
+        <ProjectReference Include="$(SrcRoot)\Relational\src/Eventuous.Sql.Base\Eventuous.Sql.Base.csproj"/>
         <ProjectReference Include="$(CoreRoot)\Eventuous.Producers\Eventuous.Producers.csproj"/>
     </ItemGroup>
     <ItemGroup>
         <PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions"/>
         <PackageReference Include="Npgsql"/>
         <PackageReference Include="Npgsql.DependencyInjection"/>
+        <PackageReference Include="System.Linq.AsyncEnumerable" />
     </ItemGroup>
     <ItemGroup>
         <EmbeddedResource Include="Scripts\1_Schema.sql"/>
 ...

[To ensure code accuracy, apply this suggestion manually]

Suggestion importance[1-10]: 6

__

Why: The suggestion correctly identifies that an explicit dependency on System.Linq.AsyncEnumerable would improve dependency management, even though it is likely inherited transitively.

Low
  • Update

@github-actions
Copy link

github-actions bot commented Nov 15, 2025

Test Results

 51 files  + 34   51 suites  +34   34m 21s ⏱️ + 22m 1s
279 tests + 10  279 ✅ + 10  0 💤 ±0  0 ❌ ±0 
840 runs  +560  840 ✅ +560  0 💤 ±0  0 ❌ ±0 

Results for commit cc664d1. ± Comparison against base commit ed86ec4.

This pull request removes 5 and adds 15 tests. Note that renamed tests count towards both.
Eventuous.Tests.Azure.ServiceBus.IsSerialisableByServiceBus ‑ Passes(11/15/2025 2:37:41 PM +00:00)
Eventuous.Tests.Azure.ServiceBus.IsSerialisableByServiceBus ‑ Passes(11/15/2025 2:37:41 PM)
Eventuous.Tests.Azure.ServiceBus.IsSerialisableByServiceBus ‑ Passes(e6ce6ff1-d4d0-44a1-aeba-a1bcc348920f)
Eventuous.Tests.Subscriptions.SequenceTests ‑ ShouldReturnFirstBefore(CommitPosition { Position: 0, Sequence: 1, Timestamp: 2025-11-15T14:37:41.1011365+00:00 }, CommitPosition { Position: 0, Sequence: 2, Timestamp: 2025-11-15T14:37:41.1011365+00:00 }, CommitPosition { Position: 0, Sequence: 4, Timestamp: 2025-11-15T14:37:41.1011365+00:00 }, CommitPosition { Position: 0, Sequence: 6, Timestamp: 2025-11-15T14:37:41.1011365+00:00 }, CommitPosition { Position: 0, Sequence: 2, Timestamp: 2025-11-15T14:37:41.1011365+00:00 })
Eventuous.Tests.Subscriptions.SequenceTests ‑ ShouldReturnFirstBefore(CommitPosition { Position: 0, Sequence: 1, Timestamp: 2025-11-15T14:37:41.1011365+00:00 }, CommitPosition { Position: 0, Sequence: 2, Timestamp: 2025-11-15T14:37:41.1011365+00:00 }, CommitPosition { Position: 0, Sequence: 6, Timestamp: 2025-11-15T14:37:41.1011365+00:00 }, CommitPosition { Position: 0, Sequence: 8, Timestamp: 2025-11-15T14:37:41.1011365+00:00 }, CommitPosition { Position: 0, Sequence: 2, Timestamp: 2025-11-15T14:37:41.1011365+00:00 })
Eventuous.Tests.Azure.ServiceBus.IsSerialisableByServiceBus ‑ Passes(11/15/2025 3:22:24 PM +00:00)
Eventuous.Tests.Azure.ServiceBus.IsSerialisableByServiceBus ‑ Passes(11/15/2025 3:22:24 PM)
Eventuous.Tests.Azure.ServiceBus.IsSerialisableByServiceBus ‑ Passes(11/15/2025 3:22:29 PM +00:00)
Eventuous.Tests.Azure.ServiceBus.IsSerialisableByServiceBus ‑ Passes(11/15/2025 3:22:29 PM)
Eventuous.Tests.Azure.ServiceBus.IsSerialisableByServiceBus ‑ Passes(11/15/2025 3:22:49 PM +00:00)
Eventuous.Tests.Azure.ServiceBus.IsSerialisableByServiceBus ‑ Passes(11/15/2025 3:22:49 PM)
Eventuous.Tests.Azure.ServiceBus.IsSerialisableByServiceBus ‑ Passes(714de72f-d9c7-47f4-a61d-1abd7719d90c)
Eventuous.Tests.Azure.ServiceBus.IsSerialisableByServiceBus ‑ Passes(89cc542b-d5c3-4166-acb9-8a2751329457)
Eventuous.Tests.Azure.ServiceBus.IsSerialisableByServiceBus ‑ Passes(f204d3b9-1a91-4bda-86d5-cd259a00b9fd)
Eventuous.Tests.Subscriptions.SequenceTests ‑ ShouldReturnFirstBefore(CommitPosition { Position: 0, Sequence: 1, Timestamp: 2025-11-15T15:22:23.9943054+00:00 }, CommitPosition { Position: 0, Sequence: 2, Timestamp: 2025-11-15T15:22:23.9943054+00:00 }, CommitPosition { Position: 0, Sequence: 4, Timestamp: 2025-11-15T15:22:23.9943054+00:00 }, CommitPosition { Position: 0, Sequence: 6, Timestamp: 2025-11-15T15:22:23.9943054+00:00 }, CommitPosition { Position: 0, Sequence: 2, Timestamp: 2025-11-15T15:22:23.9943054+00:00 })
…

♻️ This comment has been updated with latest results.

@alexeyzimarev alexeyzimarev merged commit 20e513c into dev Nov 15, 2025
5 checks passed
@alexeyzimarev alexeyzimarev deleted the dotnet-10-ga branch November 15, 2025 16:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants