Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .config/dotnet-tools.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,18 @@
"isRoot": true,
"tools": {
"csharpier": {
"version": "1.2.5",
"version": "1.3.0",
"commands": [
"csharpier"
],
"rollForward": false
},
"dotnet-coverage": {
"version": "18.3.1",
"version": "18.11.2",
"commands": [
"dotnet-coverage"
],
"rollForward": false
}
}
}
}
6 changes: 3 additions & 3 deletions .github/workflows/core_build_publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ on:
workflow_dispatch:

env:
DOTNET_VERSION: 10.0.100
DOTNET_VERSION: 11.0.100-rc.1.26425.128
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1
DOTNET_CLI_TELEMETRY_OPTOUT: 1

Expand Down Expand Up @@ -121,7 +121,7 @@ jobs:
ports:
- "1433:1433"
postgres:
image: postgres:15
image: postgres:18
env:
POSTGRES_PASSWORD: Passw12#
ports:
Expand Down Expand Up @@ -152,7 +152,7 @@ jobs:
CORELIB_TESTS_AZURE_BLOB_STORAGE_CONTAINER_NAME: ${{ secrets.CORELIB_TESTS_AZURE_BLOB_STORAGE_CONTAINER_NAME }}
CORELIB_TESTS_AZURE_TABLE_STORAGE_TABLE_NAME: ${{ secrets.CORELIB_TESTS_AZURE_TABLE_STORAGE_TABLE_NAME }}
- name: Integration Test - SQL Server
run: dotnet test --no-build --configuration Release -- --explicit on --filter-query '/[(category=integration)&(database!=postgres)]'
run: dotnet test --no-build --configuration Release -- --explicit on --filter-trait 'category=integration'
env:
SqlServer__ConnectionStringBase: Server=localhost,1433;User Id=sa;Password=Passw12#;Encrypt=false
LeanCodeIntegrationTests__Database: sqlserver
Expand Down
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

<LangVersion>preview</LangVersion>
<OutputType>library</OutputType>
<TargetFramework>net10.0</TargetFramework>
<TargetFramework>net11.0</TargetFramework>
<DebugType>portable</DebugType>
<EnableNETAnalyzers>true</EnableNETAnalyzers>
<ImplicitUsings>enable</ImplicitUsings>
Expand Down
92 changes: 49 additions & 43 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,23 @@
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>

<EntityFrameworkCoreVersion>10.0.0</EntityFrameworkCoreVersion>
<AspNetCoreVersion>10.0.0</AspNetCoreVersion>
<ExtensionsVersion>10.0.0</ExtensionsVersion>
<EntityFrameworkCoreVersion>11.0.0-rc.1.26431.118</EntityFrameworkCoreVersion>
<AspNetCoreVersion>11.0.0-rc.1.26425.128</AspNetCoreVersion>
<ExtensionsVersion>11.0.0-rc.1.26431.118</ExtensionsVersion>

<MassTransitVersion>8.5.7</MassTransitVersion>
<!-- Do not update to v9, as it changed license that is mostly unusable for us -->
<MassTransitVersion>8.5.10</MassTransitVersion>

<OpenTelemetryCoreVersion>1.18.0</OpenTelemetryCoreVersion>
<SwashbuckleVersion>10.2.3</SwashbuckleVersion>
<XunitVersion>4.0.1</XunitVersion>

<!-- Do not bump these dependencies if you don't want to force users to use newer .NET Core SDK -->
<!-- Keep the major.minor values at exactly the one listed here: https://github.com/dotnet/roslyn/blob/main/docs/wiki/NuGet-packages.md -->
<CodeAnalysisVersion>5.0.0</CodeAnalysisVersion>
<!-- TODO: Once .NET 11 is fully released, update Roslyn here if appropriate. -->
<CodeAnalysisVersion>5.9.0</CodeAnalysisVersion>

<DomainModelsTestsNetCoreAppRefVersion>10.0.0</DomainModelsTestsNetCoreAppRefVersion>
<DomainModelsTestsNetCoreAppRefVersion>11.0.0-rc.1.26425.128</DomainModelsTestsNetCoreAppRefVersion>
</PropertyGroup>

<ItemGroup>
Expand All @@ -21,41 +27,41 @@
</ItemGroup>

<ItemGroup>
<PackageVersion Include="LeanCode.Contracts" Version="2.1.0" />
<PackageVersion Include="LeanCode.Contracts" Version="2.1.1" />
</ItemGroup>

<ItemGroup>
<PackageVersion Include="Autofac" Version="9.0.0" />
<PackageVersion Include="Autofac.Extensions.DependencyInjection" Version="10.0.0" />
<PackageVersion Include="Autofac" Version="9.3.2" />
<PackageVersion Include="Autofac.Extensions.DependencyInjection" Version="11.0.2" />

<PackageVersion Include="Azure.Extensions.AspNetCore.Configuration.Secrets" Version="1.4.0" />
<PackageVersion Include="Azure.Data.Tables" Version="12.11.0" />
<PackageVersion Include="Azure.Storage.Blobs" Version="12.26.0" />
<PackageVersion Include="Azure.Identity" Version="1.17.1" />
<PackageVersion Include="Azure.Security.KeyVault.Secrets" Version="4.8.0" />
<PackageVersion Include="Azure.Extensions.AspNetCore.Configuration.Secrets" Version="1.5.2" />
<PackageVersion Include="Azure.Data.Tables" Version="12.12.0" />
<PackageVersion Include="Azure.Storage.Blobs" Version="12.29.2" />
<PackageVersion Include="Azure.Identity" Version="1.21.0" />
<PackageVersion Include="Azure.Security.KeyVault.Secrets" Version="4.11.1" />

<PackageVersion Include="Serilog" Version="4.3.0" />
<PackageVersion Include="Serilog" Version="4.4.0" />
<PackageVersion Include="Serilog.Extensions.Logging" Version="10.0.0" />
<PackageVersion Include="Serilog.Formatting.Compact" Version="3.0.0" />
<PackageVersion Include="Serilog.Settings.Configuration" Version="10.0.0" />
<PackageVersion Include="Serilog.Settings.Configuration" Version="10.0.1" />
<PackageVersion Include="Serilog.Sinks.Console" Version="6.1.1" />
<PackageVersion Include="Serilog.Sinks.Seq" Version="9.0.0" />
<PackageVersion Include="Serilog.Sinks.Seq" Version="9.1.0" />

<PackageVersion Include="IdentityModel" Version="7.0.0" />
<PackageVersion Include="Duende.IdentityModel" Version="8.1.0" />

<PackageVersion Include="FirebaseAdmin" Version="3.4.0" />
<PackageVersion Include="Google.Cloud.Firestore" Version="4.1.0" />
<PackageVersion Include="FirebaseAdmin" Version="3.6.0" />
<PackageVersion Include="Google.Cloud.Firestore" Version="4.4.0" />

<PackageVersion Include="Microsoft.Data.SqlClient" Version="6.1.3" />
<PackageVersion Include="Microsoft.Data.SqlClient" Version="7.0.3" />

<PackageVersion Include="ConfigCat.Client" Version="9.4.3" />
<PackageVersion Include="ConfigCat.Client" Version="10.0.0" />

<PackageVersion Include="LeanCode.Kratos.Client" Version="25.4.0" />

<PackageVersion Include="Cronos" Version="0.11.1" />
<PackageVersion Include="Dapper" Version="2.1.66" />
<PackageVersion Include="FluentValidation" Version="12.1.0" />
<PackageVersion Include="Polly" Version="8.6.5" />
<PackageVersion Include="Cronos" Version="0.13.0" />
<PackageVersion Include="Dapper" Version="2.1.86" />
<PackageVersion Include="FluentValidation" Version="12.1.1" />
<PackageVersion Include="Polly" Version="8.7.0" />
<PackageVersion Include="Semver" Version="3.0.0" />
<PackageVersion Include="Sendgrid" Version="9.29.3" />
</ItemGroup>
Expand All @@ -72,15 +78,15 @@
<PackageVersion Include="Microsoft.CodeAnalysis" Version="$(CodeAnalysisVersion)" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="$(CodeAnalysisVersion)" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="$(CodeAnalysisVersion)" />
<PackageVersion Include="Microsoft.CodeAnalysis.Analyzers" Version="3.11.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.Analyzers" Version="5.9.0" />

<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="$(EntityFrameworkCoreVersion)" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.InMemory" Version="$(EntityFrameworkCoreVersion)" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="$(EntityFrameworkCoreVersion)" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="$(EntityFrameworkCoreVersion)" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="$(EntityFrameworkCoreVersion)" />

<PackageVersion Include="Microsoft.Extensions.AI.Abstractions" Version="10.0.1" />
<PackageVersion Include="Microsoft.Extensions.AI.Abstractions" Version="10.10.0" />
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="$(ExtensionsVersion)" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Binder" Version="$(ExtensionsVersion)" />
<PackageVersion Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="$(ExtensionsVersion)" />
Expand All @@ -97,36 +103,36 @@
<PackageVersion Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="$(ExtensionsVersion)" />

<PackageVersion Include="Microsoft.Extensions.Telemetry.Testing" Version="8.0.0-rc.2.23510.2" />

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

No bump for this one?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

This is already the newest version: https://www.nuget.org/packages/Microsoft.Extensions.Telemetry.Testing

I'm not sure what we need this for, but the package appears to be kind of abandoned. Didn't want to touch this during the bump though.

<PackageVersion Include="Microsoft.Extensions.TimeProvider.Testing" Version="10.0.0" />
<PackageVersion Include="Microsoft.Extensions.TimeProvider.Testing" Version="10.10.0" />

<PackageVersion Include="Microsoft.Extensions.WebEncoders" Version="$(AspNetCoreVersion)" />

<PackageVersion Include="ModelContextProtocol" Version="0.4.0-preview.3" />
<PackageVersion Include="ModelContextProtocol" Version="2.2.0" />

<PackageVersion Include="Npgsql" Version="10.0.1" />
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="10.0.0" />
<PackageVersion Include="Npgsql" Version="10.0.3" />
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="11.0.0-rc.1" />

<PackageVersion Include="MassTransit" Version="$(MassTransitVersion)" />
<PackageVersion Include="MassTransit.EntityFrameworkCore" Version="$(MassTransitVersion)" />

<PackageVersion Include="OpenTelemetry" Version="1.14.0" />
<PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="1.14.0" />
<PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.14.0" />
<PackageVersion Include="OpenTelemetry" Version="$(OpenTelemetryCoreVersion)" />
<PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="$(OpenTelemetryCoreVersion)" />
<PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.18.0" />

<PackageVersion Include="Swashbuckle.AspNetCore.ReDoc" Version="10.1.0" />
<PackageVersion Include="Swashbuckle.AspNetCore.SwaggerUI" Version="10.1.0" />
<PackageVersion Include="Swashbuckle.AspNetCore.ReDoc" Version="$(SwashbuckleVersion)" />
<PackageVersion Include="Swashbuckle.AspNetCore.SwaggerUI" Version="$(SwashbuckleVersion)" />

<PackageVersion Include="NUlid" Version="1.7.3" />
</ItemGroup>

<ItemGroup>
<PackageVersion Include="AwesomeAssertions" Version="9.6.0" />
<PackageVersion Include="NSubstitute" Version="5.3.0" />
<PackageVersion Include="Microsoft.Testing.Extensions.CodeCoverage" Version="18.1.0" />
<PackageVersion Include="xunit.analyzers" Version="1.26.0" />
<PackageVersion Include="xunit.v3.assert" Version="3.2.1" />
<PackageVersion Include="xunit.v3.extensibility.core" Version="3.2.1" />
<PackageVersion Include="xunit.v3.mtp-v2" Version="3.2.1" />
<PackageVersion Include="NSubstitute" Version="6.2.0" />
<PackageVersion Include="Microsoft.Testing.Extensions.CodeCoverage" Version="18.11.2" />
<PackageVersion Include="xunit.analyzers" Version="2.1.0" />
<PackageVersion Include="xunit.v3.assert" Version="$(XunitVersion)" />
<PackageVersion Include="xunit.v3.extensibility.core" Version="$(XunitVersion)" />
<PackageVersion Include="xunit.v3.mtp-v2" Version="$(XunitVersion)" />

<PackageVersion Include="Microsoft.NETCore.App.Ref" Version="$(DomainModelsTestsNetCoreAppRefVersion)" />
</ItemGroup>
Expand Down
11 changes: 6 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
![Corelibrary Build & Publish](https://github.com/leancodepl/corelibrary/workflows/Corelibrary%20Build%20&%20Publish/badge.svg)
[![Nuget](https://img.shields.io/nuget/vpre/LeanCode.Components)](https://www.nuget.org/packages/LeanCode.Components)
[![feedz.io](https://img.shields.io/badge/endpoint.svg?url=https%3A%2F%2Ff.feedz.io%2Fleancode%2Fpublic%2Fshield%2FLeanCode.Components%2Flatest)](https://feedz.io/org/leancode/repository/public/packages/LeanCode.Components)
[![codecov](https://codecov.io/gh/leancodepl/corelibrary/branch/v10.0-preview/graph/badge.svg?token=ROFNA3WTTD)](https://codecov.io/gh/leancodepl/corelibrary)
[![codecov](https://codecov.io/gh/leancodepl/corelibrary/branch/v11.0-preview/graph/badge.svg?token=ROFNA3WTTD)](https://codecov.io/gh/leancodepl/corelibrary)
[![License](https://img.shields.io/badge/License-Apache_2.0-green.svg)](https://www.apache.org/licenses/LICENSE-2.0)

The LeanCode Core Library is a set of helper libraries developed at [our company](https://leancode.co/) that aids our day-to-day development. Not only does it serve as a facilitator in our day-to-day coding activities, but it also encapsulates comprehensive guidelines, gathers our collective knowledge on application architecture and development best practices.
Expand Down Expand Up @@ -50,7 +50,7 @@ All of the libraries that are part of the CoreLib are versioned together and req

## Supported versions

Here is the list of available major versions of the library (as of 2024-08-16):
Here is the list of available major versions of the library (as of 2026-09-14):

| CoreLib | .NET Core | Under development | Stable | Notes |
|---------|-----------|-------------------|------------|-------------------|
Expand All @@ -65,7 +65,8 @@ Here is the list of available major versions of the library (as of 2024-08-16):
| v8.0 | 8.0 | | | Unmaintained |
| v8.1 | 8.0 | | &#x2714; | |
| v9.0 | 9.0 | | &#x2714; | |
| v10.0 | 10.0 | &#x2714; | | |
| v10.0 | 10.0 | | &#x2714; | |
| v11.0 | 11.0 | &#x2714; | | Release candidate |

## Building & Testing

Expand Down Expand Up @@ -95,9 +96,9 @@ It has a `docker` folder that contains necessary configuration. You can run the

```sh
# For running tests with SQL Server
$ DB=sqlserver docker-compose run test
$ DB=sqlserver docker compose run test
# For running tests with PostgreSQL
$ DB=postgres docker-compose run test
$ DB=postgres docker compose run test
```

### Publishing
Expand Down
2 changes: 1 addition & 1 deletion cloud-tests-infrastructure/postgres.tf
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ resource "azurerm_postgresql_flexible_server" "server" {
location = var.location

name = var.postgres_server_name
version = "14"
version = "18"
sku_name = "B_Standard_B1ms"
storage_mb = "32768"

Expand Down
4 changes: 2 additions & 2 deletions global.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"sdk": {
"version": "10.0.100",
"allowPrerelease": false,
"version": "11.0.100-rc.1.26425.128",
"allowPrerelease": true,
"rollForward": "latestMinor"
},
"test": {
Expand Down
47 changes: 47 additions & 0 deletions nuget.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<clear />
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
<add key="dotnet11" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet11/nuget/v3/index.json" />
</packageSources>
<!-- Source mapping matches IDs, not versions. These IDs are used in stable versions from
nuget.org and in daily .NET 11 versions, so they must be mapped to both sources. -->
<packageSourceMapping>
<packageSource key="nuget.org">
<package pattern="*" />
<package pattern="Microsoft.EntityFrameworkCore*" />
<package pattern="Microsoft.Data.Sqlite.Core" />
<package pattern="Microsoft.Extensions.Caching.Memory" />
<package pattern="Microsoft.Extensions.Configuration" />
<package pattern="Microsoft.Extensions.Configuration.Binder" />
<package pattern="Microsoft.Extensions.DependencyInjection" />
<package pattern="Microsoft.Extensions.DependencyInjection.Abstractions" />
<package pattern="Microsoft.Extensions.DependencyModel" />
<package pattern="Microsoft.Extensions.Diagnostics" />
<package pattern="Microsoft.Extensions.Hosting.Abstractions" />
<package pattern="Microsoft.Extensions.Http" />
<package pattern="Microsoft.Extensions.Logging" />
<package pattern="Microsoft.Extensions.Logging.Configuration" />
<package pattern="Microsoft.Extensions.Logging.Console" />
<package pattern="Microsoft.Extensions.Options.ConfigurationExtensions" />
</packageSource>
<packageSource key="dotnet11">
<package pattern="Microsoft.EntityFrameworkCore*" />
<package pattern="Microsoft.Data.Sqlite.Core" />
<package pattern="Microsoft.Extensions.Caching.Memory" />
<package pattern="Microsoft.Extensions.Configuration" />
<package pattern="Microsoft.Extensions.Configuration.Binder" />
<package pattern="Microsoft.Extensions.DependencyInjection" />
<package pattern="Microsoft.Extensions.DependencyInjection.Abstractions" />
<package pattern="Microsoft.Extensions.DependencyModel" />
<package pattern="Microsoft.Extensions.Diagnostics" />
<package pattern="Microsoft.Extensions.Hosting.Abstractions" />
<package pattern="Microsoft.Extensions.Http" />
<package pattern="Microsoft.Extensions.Logging" />
<package pattern="Microsoft.Extensions.Logging.Configuration" />
<package pattern="Microsoft.Extensions.Logging.Console" />
<package pattern="Microsoft.Extensions.Options.ConfigurationExtensions" />
</packageSource>
</packageSourceMapping>
</configuration>
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework />
<TargetFrameworks>net8.0;net9.0;net10.0</TargetFrameworks>
<TargetFrameworks>net8.0;net9.0;net10.0;net11.0</TargetFrameworks>
</PropertyGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public static DbContextOptionsBuilder AddSqlServerTypedIdMappingPlugins(this DbC
}
}

internal class TypedIdDbContextOptionsExtension : IDbContextOptionsExtension
internal sealed class TypedIdDbContextOptionsExtension : IDbContextOptionsExtension
{
private readonly ITypedIdStoreTypeProvider storeTypeProvider;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ public sealed class TimestampTzExpressionRewriter : ExpressionVisitor
{
private static readonly Type TimestampTzType = typeof(TimestampTz);
private static readonly Type TimeZoneInfoType = typeof(TimeZoneInfo);
private static readonly Type DateTimeType = typeof(DateTime);
private static readonly Type DateTimeOffsetType = typeof(DateTimeOffset);

public static readonly PropertyInfo LocalTimestampWithoutOffsetProperty =
Expand All @@ -27,6 +28,10 @@ public sealed class TimestampTzExpressionRewriter : ExpressionVisitor
DateTimeOffsetType.GetProperty(nameof(DateTimeOffset.UtcDateTime))
?? throw new MissingMemberException(DateTimeOffsetType.FullName, nameof(DateTimeOffset.UtcDateTime));

public static readonly MethodInfo ToUniversalTimeMethod =
DateTimeType.GetMethod(nameof(DateTime.ToUniversalTime), Type.EmptyTypes)
?? throw new MissingMemberException(DateTimeType.FullName, nameof(DateTime.ToUniversalTime));

public static readonly MethodInfo ConvertDateTimeBySystemTimeZoneIdMethod =
TimeZoneInfoType.GetMethod(
nameof(TimeZoneInfo.ConvertTimeBySystemTimeZoneId),
Expand All @@ -44,7 +49,15 @@ protected override Expression VisitMember(MemberExpression node)
return Expression.Call(
null,
ConvertDateTimeBySystemTimeZoneIdMethod,
Expression.Property(Expression.Property(node.Expression, UtcTimestampProperty), UtcDateTimeProperty),
// Npgsql 11 translates UtcDateTime as a no-op which retains DateTimeOffset as the SQL
// expression's CLR type. ToUniversalTime retags it as DateTime, which the outer translator requires.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

You can also link your issue here (shows blocker explicitly): npgsql/efcore.pg#3912. 😄

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

IIRC I committed that before I made this issue 🙃

Expression.Call(
Expression.Property(
Expression.Property(node.Expression, UtcTimestampProperty),
UtcDateTimeProperty
),
ToUniversalTimeMethod
),
Expression.Property(node.Expression, TimeZoneIdProperty)
);
}
Expand Down
Loading
Loading