diff --git a/CHANGELOG.md b/CHANGELOG.md index 6c1d04e..12c927f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,15 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.0.1] - 2026-06-20 + +### Added +- DI registration extensions in `MaksIT.HAMode.Extensions.ServiceCollectionExtensions` for runtime instance id and backend-specific lease service wiring (`PostgreSql`, `Redis`, `Etcd`). + +### Changed +- Updated package/release setup to publish `MaksIT.HAMode` as the primary distributable library for version `1.0.1`. +- Updated several dependency versions across HAMode projects. + ## [1.0.0] - 2026-06-20 ### Added diff --git a/README.md b/README.md index 2c1c14f..a56e6bc 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ Reusable high-availability runtime coordination library for MaksIT services. ## Packages - `MaksIT.HAMode` (single NuGet package) + - `MaksIT.HAMode.Extensions.ServiceCollectionExtensions` - `MaksIT.HAMode.Abstractions` namespace: - `IRuntimeInstanceId` - `IRuntimeLeaseService` @@ -46,52 +47,50 @@ Reusable high-availability runtime coordination library for MaksIT services. ```xml - + ``` ### Shared runtime instance id ```csharp -using MaksIT.HAMode.Abstractions; +using MaksIT.HAMode.Extensions; -builder.Services.AddSingleton(); +builder.Services.AddHAModeRuntimeInstanceId(); ``` ### PostgreSQL backend ```csharp using MaksIT.HAMode.Abstractions; -using MaksIT.HAMode.PostgreSql; +using MaksIT.HAMode.Extensions; public sealed class MyPgLeaseConnectionProvider(IConfiguration cfg) : IRuntimeLeaseConnectionStringProvider { public string ConnectionString => cfg["Configuration:Engine:ConnectionString"]!; } -builder.Services.AddSingleton(); -builder.Services.AddSingleton(); +builder.Services.AddHAModePostgreSql(); ``` ### Redis backend ```csharp using MaksIT.HAMode.Abstractions; -using MaksIT.HAMode.Redis; +using MaksIT.HAMode.Extensions; public sealed class MyRedisLeaseConnectionProvider(IConfiguration cfg) : IRuntimeLeaseRedisConnectionProvider { public string Configuration => cfg["Configuration:Redis:ConnectionString"]!; public string KeyPrefix => "my-app/runtime-leases:"; } -builder.Services.AddSingleton(); -builder.Services.AddSingleton(); +builder.Services.AddHAModeRedis(); ``` ### etcd backend ```csharp using MaksIT.HAMode.Abstractions; -using MaksIT.HAMode.Etcd; +using MaksIT.HAMode.Extensions; public sealed class MyEtcdLeaseConnectionProvider(IConfiguration cfg) : IRuntimeLeaseEtcdConnectionProvider { public string Endpoints => cfg["Configuration:Etcd:Endpoints"]!; // ex: http://etcd:2379 @@ -100,8 +99,7 @@ public sealed class MyEtcdLeaseConnectionProvider(IConfiguration cfg) : IRuntime public string KeyPrefix => "my-app/runtime-leases/"; } -builder.Services.AddSingleton(); -builder.Services.AddSingleton(); +builder.Services.AddHAModeEtcd(); ``` ### Runtime acquire/release flow @@ -147,7 +145,7 @@ In `MaksIT.Vault.Engine.csproj`: ```xml - + ``` @@ -209,7 +207,7 @@ In `MaksIT.CertsUI.Engine.csproj`: ```xml - + ``` diff --git a/src/MaksIT.HAMode.Abstractions/MaksIT.HAMode.Abstractions.csproj b/src/MaksIT.HAMode.Abstractions/MaksIT.HAMode.Abstractions.csproj index 73a315d..fda7c6b 100644 --- a/src/MaksIT.HAMode.Abstractions/MaksIT.HAMode.Abstractions.csproj +++ b/src/MaksIT.HAMode.Abstractions/MaksIT.HAMode.Abstractions.csproj @@ -34,6 +34,7 @@ + diff --git a/src/MaksIT.HAMode.Etcd/MaksIT.HAMode.Etcd.csproj b/src/MaksIT.HAMode.Etcd/MaksIT.HAMode.Etcd.csproj index 02550c0..a27cc0a 100644 --- a/src/MaksIT.HAMode.Etcd/MaksIT.HAMode.Etcd.csproj +++ b/src/MaksIT.HAMode.Etcd/MaksIT.HAMode.Etcd.csproj @@ -34,9 +34,9 @@ - + - + diff --git a/src/MaksIT.HAMode.PostgreSql/MaksIT.HAMode.PostgreSql.csproj b/src/MaksIT.HAMode.PostgreSql/MaksIT.HAMode.PostgreSql.csproj index 1ca8d55..dcba7a2 100644 --- a/src/MaksIT.HAMode.PostgreSql/MaksIT.HAMode.PostgreSql.csproj +++ b/src/MaksIT.HAMode.PostgreSql/MaksIT.HAMode.PostgreSql.csproj @@ -34,7 +34,7 @@ - + diff --git a/src/MaksIT.HAMode.Redis/MaksIT.HAMode.Redis.csproj b/src/MaksIT.HAMode.Redis/MaksIT.HAMode.Redis.csproj index cb9c8ae..05f2923 100644 --- a/src/MaksIT.HAMode.Redis/MaksIT.HAMode.Redis.csproj +++ b/src/MaksIT.HAMode.Redis/MaksIT.HAMode.Redis.csproj @@ -34,8 +34,8 @@ - - + + diff --git a/src/MaksIT.HAMode.Tests/MaksIT.HAMode.Tests.csproj b/src/MaksIT.HAMode.Tests/MaksIT.HAMode.Tests.csproj index 6d2bdac..6f06e32 100644 --- a/src/MaksIT.HAMode.Tests/MaksIT.HAMode.Tests.csproj +++ b/src/MaksIT.HAMode.Tests/MaksIT.HAMode.Tests.csproj @@ -14,11 +14,11 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/src/MaksIT.HAMode/Extensions/ServiceCollectionExtensions.cs b/src/MaksIT.HAMode/Extensions/ServiceCollectionExtensions.cs new file mode 100644 index 0000000..32b6241 --- /dev/null +++ b/src/MaksIT.HAMode/Extensions/ServiceCollectionExtensions.cs @@ -0,0 +1,80 @@ +using MaksIT.HAMode.Abstractions; +using MaksIT.HAMode.Etcd; +using MaksIT.HAMode.PostgreSql; +using MaksIT.HAMode.Redis; +using Microsoft.Extensions.DependencyInjection; + +namespace MaksIT.HAMode.Extensions; + +/// +/// DI registration helpers for HAMode abstractions and backend implementations. +/// +public static class ServiceCollectionExtensions { + /// + /// Registers default runtime instance id provider as singleton. + /// + public static IServiceCollection AddHAModeRuntimeInstanceId(this IServiceCollection services) { + services.AddSingleton(); + return services; + } + + /// + /// Registers only PostgreSQL-backed runtime lease service. + /// + public static IServiceCollection AddHAModePostgreSqlLease(this IServiceCollection services) + where TConnectionProvider : class, IRuntimeLeaseConnectionStringProvider { + services.AddSingleton(); + services.AddSingleton(); + return services; + } + + /// + /// Registers full PostgreSQL HA mode scenario. + /// + public static IServiceCollection AddHAModePostgreSql(this IServiceCollection services) + where TConnectionProvider : class, IRuntimeLeaseConnectionStringProvider { + return services + .AddHAModeRuntimeInstanceId() + .AddHAModePostgreSqlLease(); + } + + /// + /// Registers only Redis-backed runtime lease service. + /// + public static IServiceCollection AddHAModeRedisLease(this IServiceCollection services) + where TConnectionProvider : class, IRuntimeLeaseRedisConnectionProvider { + services.AddSingleton(); + services.AddSingleton(); + return services; + } + + /// + /// Registers full Redis HA mode scenario. + /// + public static IServiceCollection AddHAModeRedis(this IServiceCollection services) + where TConnectionProvider : class, IRuntimeLeaseRedisConnectionProvider { + return services + .AddHAModeRuntimeInstanceId() + .AddHAModeRedisLease(); + } + + /// + /// Registers only etcd-backed runtime lease service. + /// + public static IServiceCollection AddHAModeEtcdLease(this IServiceCollection services) + where TConnectionProvider : class, IRuntimeLeaseEtcdConnectionProvider { + services.AddSingleton(); + services.AddSingleton(); + return services; + } + + /// + /// Registers full etcd HA mode scenario. + /// + public static IServiceCollection AddHAModeEtcd(this IServiceCollection services) + where TConnectionProvider : class, IRuntimeLeaseEtcdConnectionProvider { + return services + .AddHAModeRuntimeInstanceId() + .AddHAModeEtcdLease(); + } +} diff --git a/src/MaksIT.HAMode/MaksIT.HAMode.csproj b/src/MaksIT.HAMode/MaksIT.HAMode.csproj index da8729c..56ff5f4 100644 --- a/src/MaksIT.HAMode/MaksIT.HAMode.csproj +++ b/src/MaksIT.HAMode/MaksIT.HAMode.csproj @@ -6,10 +6,10 @@ enable true $(NoWarn);CS1591 - false + true MaksIT.HAMode - 1.0.0 + 1.0.1 Maksym Sadovnychyy MAKS-IT MaksIT.HAMode @@ -32,34 +32,19 @@ - - - - + + + + - + - + - - - - - - - - +