From be5260fb363755ec9f23cb61c7e282ee85f763cd Mon Sep 17 00:00:00 2001 From: Gilles TOURREAU Date: Thu, 4 Sep 2025 09:18:50 +0200 Subject: [PATCH 01/27] Initial version --- .editorconfig | 15 ++ Directory.Build.props | 49 ++++++ Directory.Packages.props | 16 ++ PosInformatique.Database.Updater.sln | 81 ++++++++++ src/Database.Updater/Database.Updater.csproj | 25 +++ .../DatabaseUpdaterBuilder.cs | 150 ++++++++++++++++++ .../EntityFrameworkDatabaseUpdater.cs | 69 ++++++++ src/Database.Updater/IDatabaseUpdater.cs | 22 +++ src/Database.Updater/Icon.png | Bin 0 -> 386382 bytes .../SqlServerConnectionStringArgument.cs | 39 +++++ src/Directory.Build.props | 28 ++++ stylecop.json | 9 ++ tests/.editorconfig | 12 ++ .../Database.Updater.IntegrationTests.csproj | 13 ++ .../Program.cs | 22 +++ .../Properties/launchSettings.json | 16 ++ ...se.Updater.Tests.MigrationsAssembly.csproj | 15 ++ .../DbContext/Person.cs | 17 ++ .../DbContext/PersonDbContext.cs | 28 ++++ .../DbContext/PersonDbContextFactory.cs | 22 +++ .../PersonDbContextModelSnapshot.cs | 47 ++++++ .../Migrations/Version1.cs | 29 ++++ .../Migrations/Version2.cs | 27 ++++ ...dater.Tests.MigrationsErrorAssembly.csproj | 15 ++ .../DbContext/Person.cs | 17 ++ .../DbContext/PersonDbContext.cs | 28 ++++ .../DbContext/PersonDbContextFactory.cs | 22 +++ .../PersonDbContextModelSnapshot.cs | 47 ++++++ .../Migrations/Version1.cs | 29 ++++ .../Migrations/Version2.cs | 29 ++++ .../Database.Updater.Tests.csproj | 29 ++++ .../DatabaseUpdaterBuilderTest.cs | 33 ++++ .../DatabaseUpdaterTest.cs | 88 ++++++++++ tests/Directory.Build.props | 6 + 34 files changed, 1094 insertions(+) create mode 100644 .editorconfig create mode 100644 Directory.Build.props create mode 100644 Directory.Packages.props create mode 100644 PosInformatique.Database.Updater.sln create mode 100644 src/Database.Updater/Database.Updater.csproj create mode 100644 src/Database.Updater/DatabaseUpdaterBuilder.cs create mode 100644 src/Database.Updater/EntityFrameworkDatabaseUpdater.cs create mode 100644 src/Database.Updater/IDatabaseUpdater.cs create mode 100644 src/Database.Updater/Icon.png create mode 100644 src/Database.Updater/SqlServer/SqlServerConnectionStringArgument.cs create mode 100644 src/Directory.Build.props create mode 100644 stylecop.json create mode 100644 tests/.editorconfig create mode 100644 tests/Database.Updater.IntegrationTests/Database.Updater.IntegrationTests.csproj create mode 100644 tests/Database.Updater.IntegrationTests/Program.cs create mode 100644 tests/Database.Updater.IntegrationTests/Properties/launchSettings.json create mode 100644 tests/Database.Updater.Tests.MigrationsAssembly/Database.Updater.Tests.MigrationsAssembly.csproj create mode 100644 tests/Database.Updater.Tests.MigrationsAssembly/DbContext/Person.cs create mode 100644 tests/Database.Updater.Tests.MigrationsAssembly/DbContext/PersonDbContext.cs create mode 100644 tests/Database.Updater.Tests.MigrationsAssembly/DbContext/PersonDbContextFactory.cs create mode 100644 tests/Database.Updater.Tests.MigrationsAssembly/Migrations/PersonDbContextModelSnapshot.cs create mode 100644 tests/Database.Updater.Tests.MigrationsAssembly/Migrations/Version1.cs create mode 100644 tests/Database.Updater.Tests.MigrationsAssembly/Migrations/Version2.cs create mode 100644 tests/Database.Updater.Tests.MigrationsErrorAssembly/Database.Updater.Tests.MigrationsErrorAssembly.csproj create mode 100644 tests/Database.Updater.Tests.MigrationsErrorAssembly/DbContext/Person.cs create mode 100644 tests/Database.Updater.Tests.MigrationsErrorAssembly/DbContext/PersonDbContext.cs create mode 100644 tests/Database.Updater.Tests.MigrationsErrorAssembly/DbContext/PersonDbContextFactory.cs create mode 100644 tests/Database.Updater.Tests.MigrationsErrorAssembly/Migrations/PersonDbContextModelSnapshot.cs create mode 100644 tests/Database.Updater.Tests.MigrationsErrorAssembly/Migrations/Version1.cs create mode 100644 tests/Database.Updater.Tests.MigrationsErrorAssembly/Migrations/Version2.cs create mode 100644 tests/Database.Updater.Tests/Database.Updater.Tests.csproj create mode 100644 tests/Database.Updater.Tests/DatabaseUpdaterBuilderTest.cs create mode 100644 tests/Database.Updater.Tests/DatabaseUpdaterTest.cs create mode 100644 tests/Directory.Build.props diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..f70829e --- /dev/null +++ b/.editorconfig @@ -0,0 +1,15 @@ +[*.csproj] +indent_style = space +indent_size = 2 + +[*.cs] +indent_style = space +indent_size = 4 + +# Visual Studio + +# IDE0130: Namespace does not match folder structure +dotnet_diagnostic.IDE0130.severity = none + +# IDE0290: Use primary constructor +dotnet_diagnostic.IDE0290.severity = none \ No newline at end of file diff --git a/Directory.Build.props b/Directory.Build.props new file mode 100644 index 0000000..1178601 --- /dev/null +++ b/Directory.Build.props @@ -0,0 +1,49 @@ + + + + + Gilles TOURREAU + P.O.S Informatique + P.O.S Informatique + Copyright (c) P.O.S Informatique. All rights reserved. + https://github.com/PosInformatique/PosInformatique.Database.Updater + git + + + latest + + + enable + + + false + + + $(NoWarn);SA0001 + + + PosInformatique.$(MSBuildProjectName) + PosInformatique.$(MSBuildProjectName.Replace(" ", "_")) + + + + + stylecop.json + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + \ No newline at end of file diff --git a/Directory.Packages.props b/Directory.Packages.props new file mode 100644 index 0000000..2510b72 --- /dev/null +++ b/Directory.Packages.props @@ -0,0 +1,16 @@ + + + true + + + + + + + + + + + + + \ No newline at end of file diff --git a/PosInformatique.Database.Updater.sln b/PosInformatique.Database.Updater.sln new file mode 100644 index 0000000..54d8b51 --- /dev/null +++ b/PosInformatique.Database.Updater.sln @@ -0,0 +1,81 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.36408.4 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Database.Updater", "src\Database.Updater\Database.Updater.csproj", "{961D82E3-18B9-4CB4-B290-8146D874AB39}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}" + ProjectSection(SolutionItems) = preProject + .editorconfig = .editorconfig + .gitignore = .gitignore + Directory.Build.props = Directory.Build.props + Directory.Packages.props = Directory.Packages.props + LICENSE = LICENSE + README.md = README.md + stylecop.json = stylecop.json + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Database.Updater.Tests", "tests\Database.Updater.Tests\Database.Updater.Tests.csproj", "{8788FC9A-8CAE-4A45-8832-18E29AF38838}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Database.Updater.IntegrationTests", "tests\Database.Updater.IntegrationTests\Database.Updater.IntegrationTests.csproj", "{64B1BA81-69E9-AE03-F57A-BE4A0B20A9E8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Database.Updater.Tests.MigrationsAssembly", "tests\Database.Updater.Tests.MigrationsAssembly\Database.Updater.Tests.MigrationsAssembly.csproj", "{FFFBF4C0-674C-EA8E-7714-76A92E6973E3}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{DF126F11-BF03-4B7E-B2F2-3A23E7FE6BF0}" + ProjectSection(SolutionItems) = preProject + tests\.editorconfig = tests\.editorconfig + tests\Directory.Build.props = tests\Directory.Build.props + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{BF73C1D5-EF4C-4F34-9944-0D74667BE6A8}" + ProjectSection(SolutionItems) = preProject + src\Directory.Build.props = src\Directory.Build.props + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{E9100678-42A3-461A-B8F0-DF12DA892979}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Database.Updater.Tests.MigrationsErrorAssembly", "tests\Database.Updater.Tests.MigrationsErrorAssembly\Database.Updater.Tests.MigrationsErrorAssembly.csproj", "{6C0F0292-EB9E-EB63-C1D8-1C8B63E59FC8}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {961D82E3-18B9-4CB4-B290-8146D874AB39}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {961D82E3-18B9-4CB4-B290-8146D874AB39}.Debug|Any CPU.Build.0 = Debug|Any CPU + {961D82E3-18B9-4CB4-B290-8146D874AB39}.Release|Any CPU.ActiveCfg = Release|Any CPU + {961D82E3-18B9-4CB4-B290-8146D874AB39}.Release|Any CPU.Build.0 = Release|Any CPU + {8788FC9A-8CAE-4A45-8832-18E29AF38838}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8788FC9A-8CAE-4A45-8832-18E29AF38838}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8788FC9A-8CAE-4A45-8832-18E29AF38838}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8788FC9A-8CAE-4A45-8832-18E29AF38838}.Release|Any CPU.Build.0 = Release|Any CPU + {64B1BA81-69E9-AE03-F57A-BE4A0B20A9E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {64B1BA81-69E9-AE03-F57A-BE4A0B20A9E8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {64B1BA81-69E9-AE03-F57A-BE4A0B20A9E8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {64B1BA81-69E9-AE03-F57A-BE4A0B20A9E8}.Release|Any CPU.Build.0 = Release|Any CPU + {FFFBF4C0-674C-EA8E-7714-76A92E6973E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FFFBF4C0-674C-EA8E-7714-76A92E6973E3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FFFBF4C0-674C-EA8E-7714-76A92E6973E3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FFFBF4C0-674C-EA8E-7714-76A92E6973E3}.Release|Any CPU.Build.0 = Release|Any CPU + {6C0F0292-EB9E-EB63-C1D8-1C8B63E59FC8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6C0F0292-EB9E-EB63-C1D8-1C8B63E59FC8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6C0F0292-EB9E-EB63-C1D8-1C8B63E59FC8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6C0F0292-EB9E-EB63-C1D8-1C8B63E59FC8}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {8788FC9A-8CAE-4A45-8832-18E29AF38838} = {E9100678-42A3-461A-B8F0-DF12DA892979} + {64B1BA81-69E9-AE03-F57A-BE4A0B20A9E8} = {E9100678-42A3-461A-B8F0-DF12DA892979} + {FFFBF4C0-674C-EA8E-7714-76A92E6973E3} = {E9100678-42A3-461A-B8F0-DF12DA892979} + {DF126F11-BF03-4B7E-B2F2-3A23E7FE6BF0} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} + {BF73C1D5-EF4C-4F34-9944-0D74667BE6A8} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} + {6C0F0292-EB9E-EB63-C1D8-1C8B63E59FC8} = {E9100678-42A3-461A-B8F0-DF12DA892979} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {30DF5A1B-3B00-40E8-90F0-FA6F5846B215} + EndGlobalSection +EndGlobal diff --git a/src/Database.Updater/Database.Updater.csproj b/src/Database.Updater/Database.Updater.csproj new file mode 100644 index 0000000..e11b915 --- /dev/null +++ b/src/Database.Updater/Database.Updater.csproj @@ -0,0 +1,25 @@ + + + + net8.0 + True + + A simple console tool to apply Entity Framework Core migrations. Focused on SQL Server with support for AccessToken authentication. Outputs logs to the console, ideal for CI/CD scenarios. + database sqlserver efcore migration ci cd console + + + + + + + + + + + + + + + + + diff --git a/src/Database.Updater/DatabaseUpdaterBuilder.cs b/src/Database.Updater/DatabaseUpdaterBuilder.cs new file mode 100644 index 0000000..addad0b --- /dev/null +++ b/src/Database.Updater/DatabaseUpdaterBuilder.cs @@ -0,0 +1,150 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) P.O.S Informatique. All rights reserved. +// +//----------------------------------------------------------------------- + +namespace PosInformatique.Database.Updater +{ + using System.CommandLine; + using System.CommandLine.Hosting; + using System.CommandLine.NamingConventionBinder; + using System.Reflection; + using System.Threading; + using System.Threading.Tasks; + using Microsoft.Data.SqlClient; + using Microsoft.EntityFrameworkCore.Migrations; + using Microsoft.Extensions.Hosting; + using PosInformatique.Database.Updater.SqlServer; + + /// + /// Allows to setup builder which will create instance + /// to perform the migration of the database. + /// + /// By default the will configure and create instances + /// with the following behavior: + /// + /// It will use the calling assembly as the assembly which contains the to execute if the methods is not used. + /// It will use SQL Server provider for the migration. + /// + /// + /// + /// + public sealed class DatabaseUpdaterBuilder + { + private static readonly int DefaultCommandTimeout = new SqlConnectionStringBuilder().CommandTimeout; + + private readonly string applicationName; + + private readonly Assembly callingAssembly; + + private readonly IList migrationsAssemblies = new List(); + + /// + /// Initializes a new instance of the class. + /// + /// Name of the application which the database will be updated for. + /// If the specified argument is . + /// If the specified argument is empty or contains only white spaces. + public DatabaseUpdaterBuilder(string applicationName) + { + ArgumentException.ThrowIfNullOrWhiteSpace(applicationName); + + this.callingAssembly = Assembly.GetCallingAssembly(); + + this.applicationName = applicationName; + this.migrationsAssemblies = new List(); + } + + /// + /// Use a specific Entity Framework Core assembly which contains the to execute. + /// + /// Name of the assembly which contains the to execute. + /// The current instance to continue the configuration. + public DatabaseUpdaterBuilder UseMigrationsAssembly(string assembly) + { + this.migrationsAssemblies.Add(assembly); + + return this; + } + + /// + /// Use a specific Entity Framework Core assembly which contains the to execute. + /// + /// which contains the to execute. + /// The current instance to continue the configuration. + public DatabaseUpdaterBuilder UseMigrationsAssembly(Assembly assembly) + { + return this.UseMigrationsAssembly(assembly.GetName().Name!); + } + + /// + /// Builds an instance of the to perform the migration of the database. + /// + /// An instance of the to perform the migration of the database. + public IDatabaseUpdater Build() + { + var rootCommand = new RootCommand($"Upgrade the {this.applicationName} database.") + { + new SqlServerConnectionStringArgument("connection-string") + { + Description = "The connection string to the database to upgrade", + }, + }; + + rootCommand.Options.Add(new Option("--access-token") + { + Description = "Access token to connect to the SQL database.", + Required = false, + }); + + rootCommand.Options.Add(new Option("--command-timeout") + { + DefaultValueFactory = _ => DefaultCommandTimeout, + Description = "Maximum time in seconds to execute each SQL statements.", + Required = false, + }); + + // Gets the migration assembly and add the current assembly if not specified. + var migrationsAssemblies = this.migrationsAssemblies.ToList(); + + if (migrationsAssemblies.Count == 0) + { + migrationsAssemblies.Add(this.callingAssembly.GetName().Name!); + } + + var databaseUpdater = new EntityFrameworkDatabaseUpdater(migrationsAssemblies); + + rootCommand.Action = CommandHandler.Create(databaseUpdater.UpgradeAsync); + + var commandLine = new CommandLineConfiguration(rootCommand) + .UseHost( + _ => Host.CreateDefaultBuilder(), + hostBuilder => + { + hostBuilder.ConfigureServices(services => + { + }); + }); + + return new CommandLineDatabaseUpdater(commandLine); + } + + private sealed class CommandLineDatabaseUpdater : IDatabaseUpdater + { + private readonly CommandLineConfiguration commandLine; + + public CommandLineDatabaseUpdater(CommandLineConfiguration commandLine) + { + this.commandLine = commandLine; + } + + public async Task UpgradeAsync(IReadOnlyList args, CancellationToken cancellationToken = default) + { + var parseResult = this.commandLine.Parse(args); + + return await parseResult.InvokeAsync(cancellationToken); + } + } + } +} diff --git a/src/Database.Updater/EntityFrameworkDatabaseUpdater.cs b/src/Database.Updater/EntityFrameworkDatabaseUpdater.cs new file mode 100644 index 0000000..70f514d --- /dev/null +++ b/src/Database.Updater/EntityFrameworkDatabaseUpdater.cs @@ -0,0 +1,69 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) P.O.S Informatique. All rights reserved. +// +//----------------------------------------------------------------------- + +namespace PosInformatique.Database.Updater +{ + using Microsoft.Data.SqlClient; + using Microsoft.EntityFrameworkCore; + using Microsoft.Extensions.DependencyInjection; + using Microsoft.Extensions.Hosting; + using Microsoft.Extensions.Logging; + + internal sealed class EntityFrameworkDatabaseUpdater + { + private readonly IReadOnlyList migrationsAssemblies; + + public EntityFrameworkDatabaseUpdater(IReadOnlyList migrationsAssemblies) + { + this.migrationsAssemblies = migrationsAssemblies; + } + + public async Task UpgradeAsync(string connectionString, int commandTimeout, string accessToken, IHost host, CancellationToken cancellationToken) + { + var loggerFactory = host.Services.GetRequiredService(); + var logger = loggerFactory.CreateLogger(); + + var connectionStringBuilder = new SqlConnectionStringBuilder(connectionString); + connectionStringBuilder.CommandTimeout = commandTimeout; + + using (var connection = new SqlConnection(connectionStringBuilder.ToString())) + { + connection.AccessToken = accessToken; + + var builder = new DbContextOptionsBuilder(); + builder.UseSqlServer( + connection, + opt => + { + foreach (var assembly in this.migrationsAssemblies) + { + opt.MigrationsAssembly(assembly); + } + + opt.CommandTimeout(commandTimeout); + }); + + builder.UseLoggerFactory(loggerFactory); + + using (var context = new DbContext(builder.Options)) + { + try + { + await context.Database.MigrateAsync(cancellationToken); + } + catch (Exception exception) + { + logger.LogError(exception, exception.Message); + + return 99; + } + } + } + + return 0; + } + } +} diff --git a/src/Database.Updater/IDatabaseUpdater.cs b/src/Database.Updater/IDatabaseUpdater.cs new file mode 100644 index 0000000..d0345c8 --- /dev/null +++ b/src/Database.Updater/IDatabaseUpdater.cs @@ -0,0 +1,22 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) P.O.S Informatique. All rights reserved. +// +//----------------------------------------------------------------------- + +namespace PosInformatique.Database.Updater +{ + /// + /// Allows to perform the migration of the database. + /// + public interface IDatabaseUpdater + { + /// + /// Performs the migration of the database. + /// + /// Command line argument of the migration tool. + /// which allows to cancel the asynchronous operation. + /// An instance of which represents the asynchronous operation. + Task UpgradeAsync(IReadOnlyList args, CancellationToken cancellationToken = default); + } +} diff --git a/src/Database.Updater/Icon.png b/src/Database.Updater/Icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ca541c4aac134815d16a3aeaff4eb4d5ba9d32fb GIT binary patch literal 386382 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%0D%liw~& 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%0Df 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

RF0I{M^?rj7Zb|Av zC-IuZ^+|R0Uc4V>D#wuLBxwloE4?kBU-wxd-H7j5Cj~4+3qvw&L9RjQsUO8z2VG6L19Oxj$~&kGeV$fvYp<5qVKvsZDBXS66qxSs-J z)=^jZiN^i**V#dr4O3~1m{2qu41WRikL+`1=Z)xUe1&t_Bmri?I1U>o_ zsytTUC*>68;Ck=Yl}~k46Qhx^#VZcd-l=RUU@~dH=}YBjd}wJ=IV=cj3*Yejn0I>8 zH{OodV5GxoXi@UGe(3jMXqZzUXfu6M$+NWt4 z7~Un@J)K%WLfXi5=s&Q{$>txVEp_{nM%KUQ*gm3Vg6^GlMtr>U+c6fW|6?u#Uw;Bs zz^;zf?j;I=Occ>BpfjJ`HSg1tFt?ITh#nD7be|2YDi>N%3L^*Yt>iNohTI8s+=!w$S5{87D}&2pmL$R=aosOjG5yBqTPxPN?H5kCB7 zvV1_2U-8eGRw)$)Z&4sA?~FHkacrq)fC7+GpGwklTZo^ zZ{>wDA^^-X(^k3Q+4PisalfBXWMk* zqRN&-xPs)XC8U8ltG;qq)-wpjw~IjJHI4Nql#X;=J>L4%`r6w1R(Wu?oWtMHb_nlKt^ zWi&Fz2?KPuq73!tS#6M4Z*R9Mr0J}0Z?iZ(FA^nrTp;z!&j&*O-NFbQ`^ulNU0RgK zRe#@+CqL({@#y0JEyMx*Bvqt+NGJ;9?{E9AU9nX){~D!4suo6?|4kx=lQXBiQO$YE z>~|QZby=)w4oGY@$s7g}J?r4?fPM`Dd;e9Kwpv6&mzt@vsusEA`RQ|S-M&tH@_+Zr zH36`c;GNeV@PjH+K78noPeMNtMlf`ffbkpK-0(%Es&(OInuynum_SlSHLAcx6YQ}< zfY<(()wkw&W^XqhTEVu)N5PTv`hzB)xr~X_A`E`1iqCTsWIHU_JmG zF|H#oT~E*p!Nc^c4+zicBsCz7NwpywiF zy)L0C|C=yXnS&H#xhYeafaJ2hvibgk`kfESS5@BF-kn-R9lRs`YWD~*`tWNEGC%bS zg#Qm)-x<&5|3)2qi`sis)v8r$6Qixs5=Ci^rb>&dRl7v&__bDR)r>t_v-S*9v?z+A zR;2dcB4j-IKX0Bl&)agq3yg@#3WKO)%!MM(_b!c|W4Apa6~m?PK1VzuwrXv*BFK2XUvvj3;X;yxZ>rY% z7XH_G*a}i`(SuM{ans~FqMYN3k}k2dn8+);Rc)1!VzCiZ{&0YPa>8zYyACWJ(M99* z8Xg4BwQy&pDDjEKiO2xntaiqyECq)oNn2E&^ayM!SwJni`;Lwusacd*?D)QWk8n0l zm;Uoxv2oaYE}ZunmGhmnPiJBg0_5tNHYP?2HmY<#&AAl6FGU{=WzzcWWH_G5Qy6l= z0t_92-oT@0ayjD{>pEIZFsq;A?iF&zq&%t407T^E*uQDs2Pk+USh=k4QAkUy-`nD( zGIg>Ut!sVyoXoR486g|m7IHqnpEst|xXjkEev9$u0QHJ=x zKy=8(z=cRRypeULnLUNEj*+(i28|x$zS@EJ*_pjL4G^eLP`F+0XBNyK^jRB&=`Qy- zW-)HN5_$rw$mw?3U#LV$=H9L%n0*gl?r!4dp9X*L-CRBjzNc(&t zCO0KYD0-1C?maCjVrSl>>%bpwRdS3Szi~OHt(~`n=EL9=0HVYr*kuk2&1bGEi#mYM zy&jA8Tz*FTo$Oj6loWwW&KgsS49ZcyMa9$BY;Pwy zwZpCU4u;zZ2gMmAeVw9j=5&5Pm+fS*9sMtSceW#c*9{a+@b6T2#CbO@KJWNl%}0d8 z>7GpPVrSCtmCC+p61Yf3c2UDmk0aGGy?NaRFPFou-W{S18{Cf%eAcPQl!>7T0`!;R zH_Dz~lws}z3Q>-k316)J-AjYT(^Bs+p&PYiQe!?bi6AZmsDPnA0lz&p;}y^Ab_|B{ z-B408D|y_WR6QpdWRy^2B5<0tV!m%PO02}?Mh4%=_y@q zrR_VbB<5BD4p~;NaRG9z>0U!lI9-sn#IglYv&P^=hB){BHz^7L8AIqsPf5cYADT06 z)tgZAF0$c z?ZwUF&YS}k3(Pa0qfTsQx6qRaDbw`bNLuAcEsK+&- zaig!ay2@%zrlHBNp;%NViIa)4V4&XFOlC=awK zapAJR^Gq^qA$;e|L<(?|eCphrF>mwEG2#Lg0@`2E0Q#NLa)86wyz}Pi{crlhie?ng zgBB>CM|<++wdShB-qca{*agjPveoMc%!-;{(^INy%A*L|B(j|fIcgb1y-gq=xyTQh zf)h}Ay1ss@)*O?X13x$wI#@o(4cEWXGuz)=A$>kPIXuR8A6fN-R{W2TIci7h2C1wkZ z)ZMQ+Q;qe)SKsLs-m3|DkD2KD@B#JzdD>q{UEjXqy1+G55og0!sLOA5)tZG1Zx)(D z$){ZiGQ9uwiup=yv%PVtX0%sNz>B=&#h<|Tn#nVTite3^FwB!3P5`;EMv<=uSX>6p z@smdwK#ve@Fg1-H0xuvAfv;}xUSYK03&P)Ew@3~D_tTDH1U&faj=zz&=RQV8G#^6u z)mjhQC;l-!w4mSVd?8b+&dYW7fWYfYMA6AAfR8^X0CqG6vG>TP zxG4?TrbMWJ-}qEO`Hl?3ay`HHSA=%A91wp8u!=akx{99@vJrjZq{+>h??d*K5ju|& zv*a_R0c62(x9MSX=WV`~G=g4Xh7_mH>rlSWQP$G;vjjtcd( z5#)`n>N{V)L@Di;_?aR#y9gbezyAE^e2r?axQYAz=jrzq7%I#}$s72d(T~|Dr3=X5 z)=s|7Lng5Ts8bb}!?XR&dkmE~s(fcCI=W7|4NQ!mHXeTzS$$otPd?N+7bFe@HuS%3 zy4zGu-jxXaxVoR3}3%La?wGBpxTNKd#s5A=XvJs`*9 zwB^?9lmj;`@D$AXkv|c0o<sETT zq@J@}2aAkay!!|W8y3pwSQXkl-`HeZxEZw9f(jfe%aMt4^HP8-O1Ztl^j-io{|6KLo zszm9>X4;4tHuf(*bO(G0A5#hg&NF?eoo&-MfUb8F89gLU%l$@M+mp!`Uh<4vu0r;q z@LbEd@FwT46?t6v>&)*j_&fdCeIhH{N7chi#Rw2BqNZOE!?CfRZnY?_^QQ1P^U9Kv zUglqa34@%7ksFB86saMcw&m6XLa3j-p3fU z88W7KbU(g$%9Ls2^;Bh?ndok@zuovCRaf(<<=dI8wBGUx8Mrcv`?KS{yC1)yJLR~wAz=zyewiq&M^O;K^)cKtSgY6M5?M~@3c1c0VfU(pT}7WPy@{^^Y#Lw+ zS)-LSH6ny80lOVBKfbYY1|hr|mWjMbc=9Nq0-tZB`#G81f4Z4>3ju68_JG$;ylEue z6UFX@uwq%>*gcx%{H2EPiK)d!*s*D^Z<0%uXkwCTN5UN2GlZZk z?VQNyP>J;g1}^gYij9_x=)GP_J=Dosobnm^@232H6 z2wI?X)hAn8kyvzIQj_y=l)Y1DmCncaM2rTIY0p_Rdw>a*N;dG5hqH>2`jAQ|(A{JP z$Ozdqt^ZeBD0F>+l;X=6F)?g)bc+k{Pt+bTUg?Z#B+TBUV9TJBF9#L^3U0e6m=9E~ zfW)^*`RCZ1vH-i?8o(jZuC+AVx=wRH@3ZwgLD?{8GVCb>pccCQ;yR1qb;=wh_$F8Q z^k2r<4{W!gw0c#k|4_R%VggAh3nHU*fq44og&^DaG%TSmU}W4qeMSHbt#pma)=_wy zHOFsKE~Jb?uZ3gWXe1e0LD*T{33oSBDeY}*Nu~r;C0NY{&z)tRQ22~!hk>2MslqO+ z$F%V|$4Gg&K3#|uUK;x|VZ^=czoGi$+X?XEKasAkfJ0VRc)0}5Y>M$FCXHpF!|Z+W zVb@~=kH7lF7SzMC!durO+fLy$jP8qO+twlk$L*%u-^aEYF=-4S;)T_oFrc#)${_uK zGxoK)Z6-U}eO0EVug5KMXzWntw>(Fl4=~Vl{wo#0--h15MN07*)`iu_O6Io z=*DDi65Vjnx`IM6##@OL+*X(_dg{G*P+R`>I3D+lvi&X98|R0P8596h1Nyapm5XL~ z93MXvRJ=WpK|4Y(G4HxwH1*Dd)IbH*gO_ee9h}h>yy0`KSuWM)d|? zT;ex;{Pv$ALY@S+%{x#$kM$4v`ajo@VBoOpXGA_d`GJR;~#rLFZg(wCOIuJA{Kxicq)gD>5i5^v?L}#24?1C zLm4#qj!dTf`fb%6+zvnAK0c)80`PuZGIRIY7cw9#yih8YMAy)s{|!vTrR#oxFZI0U9pgNgq*GC&@A zML(rQ+xKHJ`|9es}I#oZ7eh zO5r3LCF|)CrophX)d$t3(R-*G6!zeUJu47=k(0*Wx4{=x_vmw@QuVjTB;7~dLVvU^ zd_LWB%j4sGWAc9Pz@(U0`bx=9CesN=7ibN*@SZ=!sxF`(h}*1RTb0O4?xs!gHKmCt zwqLT_tpr2>Q$rUR=c@oc%9a52zZ2tu$yc((e+bepxt8`0GXek`WO5^V%2qvu_u|UM z5|hkntakG6RZjv~wkIIt7Kl1!_w>7DzXj0}Wfbk*UDPvC&7|@po}urDPMM)B=Orz7 z=2rmy$&5eE&0%!m>HP<}>Oo|@&|_(XRQT&BOt|LT;Y{%3Jvq6Bu&!r@T%CB94IZ){ zz|+Ie5@3OCbR<-luW z>1~N})25a`3k&j^`)$Y?0@;&N24pYc3H?>XRz&tHC(03qXx>R){H0liJ!wJtEBA_4 zgFmv}Hl^rskrufThkUy8YCAD7I?&l4I{sQJRPL9Z`-=IR8f|j&@PJP1&i)rqnmwfQ zfXX~i7idnFt*VL5K;N{*h}UQ4aXZ>wi{WQ*OE$|{f^SD|d^<|Yp6p_ayW=t z>oOtFSsCszF`aAQk2Ct7cTwgoRqB*PGpXgURBa9w)*tWOSf{fD#JEokrVw=fa<~A| zr)Nerk0|ue%~vcaoRz}SfjcN9+$!WPiHuBnJOadgMcW--<{m1@0$9JdaRM5R>VU$u zMBOaw3n&%eC3zsKW)XFS+t8CwJUkWTtri+bIJ@ePo8O|Izb8||9UWtlRe)J?yNp*$ zS;QA2Urn)(*FeqPgu|VmZX^)%-omPIHJEawT?f@(MX?E07^^LSZS(*`8_iJ$d_ojc zL7PxSl#p_p4@v;WC_=hH-;*GQI5x_A7}|@kf4nnYMkhjD6k)70grN4P3N>-^NJn+71J}E#*rH zWqsiC`JA{Ll|cuY$UQ@1=+YbeqlP>-vE*@woa%AqZMO4Xc8G3e&nBH_IZaB%?ar=` z?$S;Bx)vhX+(u0q|hos;2M*i1La; zOoBX<*-LO^4_(ReOgv_YV~&S7UTViC%OJqFnH&IIGP4BG|8`8uVZYsJu>W8WA_mY*ah% zI7o0#Lrq(+C^#;})WRrg7(#SxiS$Hi-7tus)^FDya}(WP%1M9RnHiwV2Hbkz(8|v4+`w@-zHpfJiX8 zf6uWx89h71mtKl2)mV}4{FZAM6TQMk1?<8~@lzo#_{lRLoc3|<=L=3RPnqUwNd^b)O z3_(}4%9hIBe_8sJ?p?6> zHCR<>Nq~W9nEFC4XavTm&B$o_#2AKbPT{uU<#l@QN#oIki1f`<6<=tIz^s^0Z^MGa zk0ohH`JjOy;c7tDfx3O`Q%w%R=hWzBsn(YU^>n?0S~~ADxNxqJiqzj&e}<<1flL;N z`FO6PIWQ=B@MDhOcITN;kcXpW>z#|^tAs_QBRK|(_k<0P9oHs1_Tue(HQzZe&|}c> zgN5Dk)Be9tlv{7)j^si6P5l|EJOT&>wIlq!`CdlZ6P-FKpPKT#JpI6XWnBAn)(Sma zjE|oMwp|&tP9ocKphqp;ogJ#zQ!+o+{Z0s!Te)BE!SltwKJ2FQCAQ|UGyb>hvkgdc z2(uW0g^u`FB!h@Cr9|vI3F0R09{*PU%AXYry{c@3>9Qyv|50Uk!xdlAu~#``DD6 z5_NWisrkGZi|*QWm**ELq0&JJ#=hBe=YSmyL4uBym=oF(txH9=&~4miZ4d~ZIBO9| za)Urxb>CUl&cplID}99dbqD?d4`9cxG7C_1&vjB>)CLc1;xtndK!qD!UTJ>97vD$l z28oA-XInTA@R_oeE)ahGFKN{4Kv`(i|Mtz7#4UQ)fATb6N*t)hkUt$%9X2h)O*MlG z2XjfIznsr0U~^3f2Byq`32dPT5aNc&Njw6nY#{wk-bu^nY}I~YByTvn60FlQLNrM|a~tx;h9>BPYD`7J388=864@oa=sFD^+;PwC8s+4&_rSp9c--DU+<` zfYTA0`x}CY?ui4#L!n!O21o9t@|y=~u93H(s0QFb8G8I>SzJf8dB!QEQE25a@wI5Uf=c-zOYG#`SH~#qVUUcZO0me0^fhLiR{QB%>SatZRu|Wc z0*|F#h+P-I+VwlJzAPKLcek6o8F^sncd5gzOVlE(`oLv22D+Y7i%F=LXT_6;`VM4M zelX;n%lUe6A69#O!t(W#?b0T34X~as>)OR>Ha~*Arq7-_u=tTF8~{r_49vh1EF~>X%k& znCnNt1iC>IeH1v0Py>6aiabU%E<*Q4?iv&FT5k{5S~)TcrIfajUL(^KeJ)+yN0%)Si!HfZGR8Y9Q%!rqPW=RdA`@?j z`SlsSr=V2caFH^gP9e1K+o*aQPq*KR*wv~1ChQ{f)yCzBGX~U1IMktOo6ICa)kAyV zGl0I%wI>!6YqGd<_`{FktMriT2i+dqTS^njt7cM0WwStZb(0rEGszqmJ>%xxdevnz zNffgFJIxo=?I?;^&9vl>Y0Us2}3)P{T~tCV~)}iB`Fn+S_IH5;ch={-zk^Y zlnARDaPfcKV&EA_1wE*X8$)UIhhHpR2F;E!c~PYFQz|@zCZkDPARl|)*?@dJH{&pC zR&gC$Av)6-0!!GI%9@k|oC=!_x`oZJO9x*b1w~z<&tfg%Mo{RfPFq$N&bGoxU%H3^w4&Lv4! za<|vKw_ZP>`lah2Qe!o%oyjx?vNd^1qwzu*9BV7zQ2zFXWR#q!<=lA&8}UN1W1vST zyyZCo@+!z-?mRP6OgY#o_wrRdbPvJ(SG(z4^L%$W7@Pbt{HjsFI=>>CvXO48viHpT zA|ihQj03ONACAk=WS6c3^$!Xm2C5sC2~H1*u~+)IXt(*>-S{8Zh`?UDJtw>Gq9+#n z8L_rKhHsBwRkKv}4R11q#Pz)O1>3*MD{dmAG_U}Z;>P9m%)a{JzfT$u zX1PoYE%vR0f)wWiq$0`;&JrgOGaxT>;GW|e@}&L2ffMm9*6`#rsW4;+cI^BE|M@)R z!s_tU>@Q*)6hxXm-}^Y}ZF_~+Vy*7mZUAxbf!E7DmX;T9!rUX!uA_8kSM2MMTj8hX zN9B!K+1+;?!q4Y0v-L>LPBv`jn9thdC&;#~`;tg+bqVbfFkY zHTa10IRm3%E01m?&jXlnwrIT_h9lY`B;_I1G` zUZaE!q}7wSkz{ueH&GggcmW|LdqM;?2xW6dCA%@>Se28}J@6e#Y?IRXfd8x0t-O&f zHAaD74@KT95^l!ATrSW5mRk`9XMwgiE$q&4U@$_X4UIkYN!97T9x+0Hsh0K8p!a+P z&#{28zWB*Po{|1a8Vmcy+KSX4iv0t@E=NqZEXi*A`^Y~LIUJlsUF_DD@&+z9Yc!w~ z;$kT)Md$Q)NRTzNdqcnlay#HZ=C9XSs8JMRXpj-u72KO2`bK>Ld5EENcqo=24*W{7 zO}WB9UiRWyX3tjN349PyPGeN}ws&!PjIB@P?Oog3cG3%mwkoC+#@NJbH3@bq$U&@6 zGX`U#WBA0`G3zAUUi$UDez74M$V-EnxTbI>euf!bS=Wnw%n@cx%!ZmCvmXGuo11#b zC9_*Npv=s4;P%__`|d7fP^PjAtq7~w8#OSkt-s2uIV#-Y#bxZviA%$!i%DGxB=n%A zk-ZP}El8vz)D0-}hlYOyPIWap;RkyM3x+_0KY^|hRZq2&?Jpd6u_;Qp!A0-b8FW?3 zvE=tS0ul6;=ZbbgTO3_lfS{QZaR)iztBzkKJQTJx0lUFuMx@?bAN)sE}uzM$=ROX9$*+|f3P z9+oJ_)=U7qT6wuGf?lHzS;PRD2ool(=9q0aEzbAjh zYzZtSn%g_rVQ0&CfuB#%Z5qFr<1h!Su;<;f9hYN!LMUA|reC;&1w0!Oe*QD8A}n^_ z?@H;!r!shvh~qLe9hy$i#YZ3tV5u5VfdPe67~};8xR@M^DBrWV99Y;01iB+gORh_F z-Un_Hw0TeUhWH9J9_5R_;{@E50*2s&TSG2F@K>`lxyzUp;>qC=8hhs;8aCsKAS*`G zv&`Ee!nHh^0K{F5yCSzICCWWO-|{_wHP%hIuTa|;DNnIENIpE7(qLL{{hpEg)=%>; zJm*@u4dwSCimn6MH!%m+52SY@0bPEeG5yce-~8^GkrOLj2K4r*(UWMbx#tIKM$5{K zPsX(CVRd8kiFJg3ud+razn{78q*D+zBmGR?eD@RGeV>y+-N4DO z1RdxietS3?eBEPFADaG0-tk7GWfHAHf*USvod^Bk`-)A?&p|;QWLAeKwV! zY+iH`LD6LGW_j@UK9S}z!*l0#=ZS;Q=S|afmIa4<_G|Mk%}^_>?Zvi&hi6wpPM?0D zvxWNjQL(4_nJicMGf*-M5Z%26-n!!=+#vG8Ck5WmV=U#;>P?mlo?ro_c7`m;CGu2OUSWa*(J{Cme3cR3%_ra`1RjjOE*j3ppF4 zeaW#z-H;mN@+{+uL8@iWY|1#>~)Kx+A=ngRxV=NEgEPN7LFf^R0$v*X) zsfGSjnrV6QfzDtQ(|;B|4bx&S`p5xMri4WO^FiI2BsQ5~YHDl3cz2k`-IF?sQZ~kc_-P_x zuKF4nn-FpGb~J3SL$%Xfc6oE9#cu${9OfUaA+bSip}!nD45yd%Sg)fOE5uvgcV>=B zW9zk)!eA>VvREwRGjL++WtPunrqrLzbGzJ_?HgE0iOJLdxEUcl0rOmtVGkcWu1R1Z zasJ5j`R`dCs5kYtNGQ->C>(+AT8|W%T@l_*gYJ{8Es1{E5WMAjH+T+bbX^yAtvI}H{Fxy<{sY=k%7#s#OI;{#QR88tx84n zK4)n6)aMS=PNrE5tO75X{p6y~=yH-75Bs?U3$(8l-zeOqicqdTj9ZlZxhGz^nDOSP zYc3jAJBi)#KhR+PCLw7ebiPmaTKSht?E?bbp z_*SclTXnYwlFFh~C@tAhgK^Wn7sA&BJ^N0qcHkv61^y~*=P@zT%CAP$*kJ9gGL7cD8gPAEaLYrXkiu~B8PG3U4I%hk1^GZm8y z8iU9uJ1gD{XI-L`MjQ(yS>h#N@5MJr)~L)O1;UyRHaGw9vefl>ELL(51#IGo46F~) zwZdhNzB&d;gbjgs@>7@~$C>gQV67jPs28^`u-e|7-jn%u&X44l|JJlHqY(e){~ir+ zoT=Dp54j1eG^{LW$kZ6p zB1u9RK2SiN&08n??>ziZSjWh%J^2$OIXe6&bF;JIlB{%|w(^ZU{4-5lm%qk1^>;*S zw6w2U$e@tGuJG@YR5s%A(xaykYIljpSI-rdbej$&KcQ~s1w&-7$uKM4!2i_?*iXr4 z{9B&tsYziPBE?1WKzoyNJ+8Z=o)O1cxU3AJ7&#o$$aVJaIIm6N9AzV_ik2Cs#BV5Sbm;GDK4Hwoa`rZjj zd8^v3sQ%VeTdQA1#5|9p=$Tdu`P#s#@R+Y38YE4Z4&;o62f%&`Jc@g)M zdANAAv~{?GPQ?Z|pyC^Jb#Ggxo@e07NxJfi0gYeNDES!66xloXU*bC*G!73>?I#io z@dqnoABSbV=|q|oU9@jM+)zVcZ!S=Z;&lFYza@$=y>~?)N|$W=F{atDzzno`6AQUf z_~`5rP})D9GlcA%>gMe>l25e(W%U}AA*Aw{2h5Pfz zxDsR|>gSdcI}@$tJ<0X7uVmM72=$~lPcp4kh_&>WXIcU=*CL;K1^s*ZuF-0Yr_Lb- zL~AYlzJmj)m@SFYyEU{0m4TJKuEqV1NI)_x43AB&;Zj1D!&kv$+R&%nwJc@?pY(le z!Wv$@wyzeT4TWlAZp6TfkN9#0hn16n+X~-P5$&U3A(FI`-!Ahgt^3o@5mb?7CSLc2 z;SR|apHG@%Yvs7h`ueO7n_@pq=mLCHwaE+Nm0#9z^%!w+?1HG|@WzukrIdtdYFuh6 zbA|sZm^nZ?oKk7F?6zV$!)X~CiTBdaE!Y4h>NZ5oI>P33Gr~3JMZ2Q z|BHO{??3;j{7|A2TH9PVKTOc-R1SC2dF(9}{vx~7jC-pU#8#t3JztnZDe`#l4#UJs zR*0q*7?Id<9=z&(BDDW4*X+ZaMn{SjmTKtZhf@k;L@$hJF^b_u0dI`Vl%yDb(q3@DNI;my4*A81$O? zPB2fb*P54%)|OPE-JM_f`;jy4A2xG8`M!9>JB*&tTN27rD7ijH&zuO?H~v(d%FmhB zQlB(8BMrEZRpD7}xQk-zXQ&=tWj7SD9)IVQ_WHBV7M53C#W7vcMUCcr zW^sWyLo9;VqA!~sRsXt)tNNXH6+%eQPiNgG%Dk>oK|jp5TDvrAXTQ|8n`t_%X}WfA z+LD!~_CRn9pCa{#f5Xx2#VsKY-MJFCeC(=P1^Q>b!eAG+duv0RIjFbYYDZYW(DUq1 zB)__Uu43@ZVx-$chY@=L?l6~9^nVm;w7G6gRMNLZ6Su!ie;sfW&GXev+}0_4y2?)V z{m*-Tcdw4w#mpXU)qIcc2L*4__kA;n6D&A!-(-K*DOmQQZ;L^kWM;O%x)iBRXv{MB zzd(Gz%EzN*8t7P1d))ENI3#1#f>@pbdaV1sVYc#cH4YEvd$vxpcqoT_2#L!ivY$H2 zhnqs|ddu@p>oIUVyf5<@V(>MrM#ko9`pwv z`#SJf*U$f%-P^s}yC7KQcX&;g`PQo%E@0~6=G6OdmGsT=fMy+}I$?!KM*Ne6<9);U?&}jjoD2U0om-jLT8hGku;VRYt`*x*eFUB2i+xecr7l? zMx?>Xc${)1uLlPWRbz@&*%%Fw$^a1MQk8T3;iB|QC$_s>Q(;(<#_V0zu?dV(nff^M zL!?6<*y#Pti-T1;LtsME<9EU8!BWMA310a)wZWLGlSxq|3RrjPJr@DZdCfzF4#5U` zMYS9U@0$Yj;;0c!mL7F{5E^#sD$z&hx)qACNwxn|3*kqekvqVBdsDZY3&DxG%wXng zj>;R*)^}wq2Sp$yMY>x*pbI8qv=M<}t)Lg}@l2Z`*K}^x`7ZU=uTXqTgpW@tUwihu znMLfTxZ+XALY8?pXB-~OfH0f~IR}5!%=r&8ZDyr=P$a2_6ylwouK2@8b(fJt>$f&PL@ zkko(B-ME&fSifpBHdFFAp|hbv-&%|}P%Ojqytm^pmWSgMOLgvS#lIK09;R7 z3guMJS6fDpUJAcY?l}REu`wkd@s>FmTF59hGj44Ju1j~utg5NI zgsh#29m>;JsJD(I??r*0o3A6ZYPkxys<3rSRCW||cb|RErI)m!|3-ArD-d){Ul95_ zG@q2Z!?LBI)SUOjES6beW$0IXW!O)aT+Yk08BK|cxBn&?j_G4|Lyt9R-glT7W({a; zgQ`Yq+GM(R(wNM`Io5fG}e&lkz@9(~mKFa*| zPun9!%w?fXv8Xo3W?Ky^sqz{zU3I*SML`04rI(meFv+K~|EfekAnSUdgmGNLr4V)| zJFk-KdyXK^Dr~}x6=Zp0xL%v43k7is|7Y^r^g@hO_C{$5`g>Jw`jPYLn}2-wzSQnh zJ`W?h;G}f7G}pkba7KlBqf1%ey!q~eU~p{Vu?gsDcbe9#i$Y>;u}m04+r`>d8j^eZ ziV!aZ+XBWoy65xU;Qo6m2Q?fcA6suCe_yKVq{c-g3pZuXFeJ##Al$%)tagbjul$E#6R zOB{%k4Fd~_q+3!q1^*FZV3Q->*TZqz)cLf)F+}#hQg@GQp6^+6XRTy#ZVr(85B_QAfzq4UksPBWT6Jb%A0ADl;44fDYx zxt9_j9exy0Qnssr9eHPV|*z_qY9aE}tJs zaan(@YB>C&)vF2ka@$GMzxk2X*mbc03FdV8vDw++oohWqT&8L8oA+?DK)W2;t@hN{ zhHXUjRJs%d)E$PS=;;sp>09!G*vQB}opV+-&tU38V7DZG+t+XjoowlZwu%^W z*eVCL>!FH<+ACGnkzt7~AQBaCgYhBHQI?1-C;kEJZE&fp=ol=aU(B{JHIY5Kk0p?!t+}oOg&13vAgbu6ZKuB&A%T^*o`P!#B&#ERt@t_ zt-o}eS%Z=*f(F~6&juF|$kddr6LHE3h`~CHUbC=L@tlup&5V$ND^x#^u zQds#_0%gFD@!#_d@mF74rH;k-f2YxZF#1z*I^IK0Byh5c`1z?b0aB^%q(OJ!;GBrF zun39M3y}<}YD7?NYHy}B(~1{8eq8t-+p`|%)N_Rp{c`;9mPS^28H}+gr{T7l*AEfB z9FhSjD?418^sT!T)aF32xYU4U5ewbsydjsOb4X6&_%SH(!V;IS$tp*(Vu0{PzsGGT z2H-1OuO6!UNwErx{4)<6Li9`uGLjLO|FU1>wXzh1pUK9yH&=Mr=T5rda9R_z%SVQa zm}!|s6h9oU{ZhN@?rG>%f@D;^ z)@d?a@KKn_GW9==YaiGf0^dmWTXz_-z3`#E#qVj|C&i7iC^H;Ta~??GOJ*s0fFEfG z=W2)?8@<4oomk6gGmJ_L()FWOHvF{ZVm2SD^n;yVYHJJi#{j;Cu}?sBt-_|C2G3lI z%QG^ZYT3d{o_;*>&Zon-y`n8rg}=(CdA?@!hGS?)w;=Du9WmA+5W8o7)cb5IYR0kQ zBkO|n*Hfg*(aNP{if7N3;&hW}2CpU~3IO6e;RF7wjgqF6wa(Ww;pIt3);IdDe2`yt zd!OeVH9oSlu!Q}nOftKt{Cl2Xbt%ELi?Q5vo+vpJ{AhkxAB6EP+nwVh{?Uq^-*9F)@MhGIOLUkiApi^8@_K*``7RYGN| zo_zS*Zv-oXGyUlz=hxNZiLrzOYvLzj)*&^c!lU<)B5U2tn;WEA%u8HZ226%E5kfu) z$%-(p!DKN18&gU3c(6Q_GIq?JJ`FF;n$Hc+>9)6Ky7h%7*RRgE{4KLo*keBHboa+U zSN60Td&>OXBf9w~k23P29xhBk1YOK=*7V+B++sgN6;7UIFc^US)pwqoL=ZOCI zOk9cwx}H9;&OuApfmcNNoa(HF9d@|T>we~(34ZW3*MCF8w%GFMjh|m2ZLfPEICwN& zbnKR~Z4~}lJNxD>)3H044x7`LxDxTzrQuK=Lrp@%RoC0^r=ghGVdzX7!}CL%2yNp( z0-Y=0PHy3e&c6-}GXiodHtP4*I04lZ)dExzrm-D%m1Ebx#A%>Gev^J2`XQ?E?7p>5 z{}4$V18KK=iGUA~kW3%X4t57WY&oM`xymi;l^g0xTY72W^TB3FGgN*}ia5}$|HjGy zMK4QU*^j+?`}7?4PetWyk9c+|j~Sf2&^UDP4W_d@d$2eYJGCwZcS2`B~IK zey+HENPz88n6kHi->Rpbs#B=Gq9Y}y@OnD*GAV4RKjNG0xx#Gm9bTZ&*=6_rmU|JA}Zty6!}xau<`4-?NY$i1W}FkRe_Y{-XN z?)u_?$WhD6Q4bQAjm`EY9<`q=pN<_W`Kiz!p5DRy4B;amaV*P&!{Ol!2`d+QSI@!L zU|V?(2rI0_PyRy_RmsRPvsrjouRhMLMwNUwhq&ZX_d6~L_vPVyz zIMcb;gHxqAEyqmskGXgA)gGleJ~~3%ImPe{AxK?89+x{f^;~M%q6&WrJ6s{|dR)aw z5qxI-IsozM%%Vc}xT|PkL?bsyzf48=Q|z=o^Zst5{IWNWdt92{T2_b_c#%93}ozf`50(cvx z1!1|Q$A5j)1_3FG=6l zZ26+(N2wxX5Sp&(EHY#V!N(=G5ETAh`dR5S@$eyj-vjkQ|3{&;DJh+q7aFjvHzSg# zC?(Qw*lP8TOZzXeVbCp)m{XIV<@QP~_NM9&tw4z}G7;Ig}X66eot{GD!xa1TQuY^KL7OgGlb0gjknXqXCoNt{;UVopQRX!@-|khD<^R zro!J=VqX(39}|kUFe7Y-4$J^I*i-E1Se5^rE(W_fvOd49L0e znd1WZHJNjiX^tPNZFSygjUjxFL9Yk}<4G zmM#y3$k%Arn2(ZYUKK|gzV9~&zoX*eLQ=g3`mWIHgIWe3Da)^dm~|1GfA4U!L8t^H z-(#apCN12(Hjd^h`#i9wA>TqA4-Bh4T9{nwGt(Ty!Hu2krChKl5n2ZilLbdbxqub_ zFYJ}Kj=rh6Zv9oX0!4%G0g;*my$ceq?Y)<)kc2TPsHdGv)AR;e>c2bk5nOJO&x99q zXAK-J5yU_3$x{M2_ktJR7dun6mFAPolw!iFY#GQ>tXno);p?)$aIENeDk0{$QKj8C zz&OO=)Eh^rlB5nSI~7ls&c^+#k-}vVQA{Vwec#088*L0o9&2$`ox1M5eRsV&125Qn z2Ip}KAq~=q4ijCL)c%Ay4HVMyS8gTOq_!c^Y;mu{eCyo0es}dGO0eJVrt3VDQ$B}& z3Z@KSy|pM#;Qldq_<2%YdFXs4nOHfs4SdgHm%5?q#j%n3 zkZRc4G*7QJXx@cm=;B`rr}ovmfRHkIAb`69ZNh~L;UWHuyLJV(P9;%)m_-!5#ErTI z?afUmOm9g!rVpga1E1g#Cu=_$2CL)40vPP(qcb+mTlDId2OL^`goggb6Wgi2$T~7klG!Lx|J#I~j>*x8emi01 z!JV-Ozb;birfKx|>q=j`0OMs`dkeME0en;$_~}5yAD33|dF>-pB8l#Km?$`KDMLQs zMYU#OeW|M!WeZN!Rc^^-oY^5+O7d86FaHPd6iD}KuutX`pR;b5x@oAvZvZn;Vk;1d zI2Ag390U=emso6Agns{99JpE3I(tAzh+1YFDLP8l;WhCU^$2sOY?_}QkoVSjdKJ24 z!3fQ*L0F(v@(*?Ho@9_WOReU(NLw{NIbBp%WZUell;v5l6m1@;h>ka@klR|2?%C1V zSd>ZbVRl-*>}=-F@;$wd%$vjsCK@!I2k2c?a;aL>9hAX*HodrteX5?;@Yqhsy-F1j z@cB1Y4e-%O+6p<^-ow+cbmMy7%5$YwYA$41u+lI$NDy9XiH! zA-&fJd(vhuj45(eoVQD}F=4Ds_XA05Z&g-lKc*2;wIm&P! z=3^Kx?p}@ET@=I@AD3fzNxpT?5pr+Le~s~x8DnqN#e~p~=ieiLr-K(0)B`#Hi_7Y4 zb#4gDp%$b0!c?e@x=jVV%I9-fZKsqxULQkV&lf#ZZ9X%oUUBgm-5*&#?bPimGSqtC zdOLhS9P#3M_m)8dirLK9_(n3DvrY>GlEm4(XFK8c9o{_?%P ze*r3+Qb+c;A?PRQ5wr+uEZ|v=f%U6=Ht%4bSQ~6oxrs3TZO9Ea9l65WO(oX+YO{Iw zp42|}f?J)wbX*oJQW{zrli66JFuxkk%BE6e-#+Hp4xk)TxY^FHtVk|6`i}eG9|S*B zM*ZOLI2&mB72MIm6;tr3c-f@$>4U>~gG?yrrss$I$`OO1!#;czQ*7|SrjzkDfj4iS zTE|@{C2`*3s@A%nI9GI|y+-z*V5$z*H1UtQ5?`h2GvIND_p{oraQcYJwcl?IW-@R6 zyXAQY^u}!vR{dt(3-@hhD>#Vnz%G*31mT5~#mV4Ok-<<*n!#%QGUGNg*03r+;TU#Vm3ReB{{`U_l}^`wzCmb#vL1cLFk7+@?k>O zoS9ULvaIs+2C1s%WxsS&w>QHEbsj#IoT^l*b4yy7{TbxGZ`H(KJW({%okICF<|AThV8?D$)`6ItdrRn-_7H_8SfnIvtI|}u1xngtl zGISZRxt(a50gOo-Md2aE~ zyt0}fNf6E~42mCIEJiGX5XBq!R7s6xeYe*Nda)O5gg7ZeZZE%wxA%-tVzrm(fYBrC z@XT~SHM8vZ%>0bSA^3~1dka8da* z{<9=d2`39xT^ckh?l4PbxoU4wH`F~2Nr54R?$yO<1s-Kf%p+VEK~xH_USjX5{#oe_ z9-IXWYW&Uq75}1+|G1@$PFzDnY;M4Y_j&Fj7x^UAchzl{4h>%f(bC~KMNibvZ74K^`SgIUm6tO4*(_J;RV%?R{C?UCew>8@lyTI+g5U3JMI9Hw z{2EdNZI0Aj=8`T`yF~^78|R7bK?#eCcSCSUBD>BI?dSgfubkAghI_lI>O&aVzJH#| zhdHh7!koUoyvm1Al^+kDBE(58S|>$QT3|^@cnh3xM$Z^-@Vt^&l8~#QLdDt1g11~B z8{j`-IxW2B;VlVxiJ1h=@d1RB?jy>itQT8t@{gv_Klfpct;Le({hJU`TGWHG;W!pa(`2SDLVn zQ+*5oP29q^m+rq(9SujJvYqQ~_sFdHmrq&AfSa&yxQC)Zk+DpP-HgLTn{UL|dO%YW z)2uMTrx_N)`r~qi7$8*r&Frj_n zPh`uM9J?FNZaS{f9I>SO-a0s{I-hT-sSbWv{Xv;7#`V(;tYD03Rv5oQ%t*7H!Iwu# zrb4$!0#;%U*bR%2-YAaKJFI45JJUV>o$1aAPHGD-pP$?%RJh{VBT?w^f8gp>4bR(8 zR??rJLJ2${|1F@%v&1W_-uWNd!lSzrl^^kjL=(X)tMs{`LTY-6K|-d_EAQBTFVUZ$ zTALLf+(EJK(Z?j#BTPL`uV2@Z{$jXpW${Cbj~dOb6erKYtpc9%U-5hWY$XNx#*?I^ zY&UK)+k2(@mS^zovWKpyw;m~GR(}%Gljl!0jN?RT7q+Vv&XWHplpfxCzVrQnp6q0G z>z0kYMZWhm)Ro<)4jX@2xc_-f73DTu4Z$J8-o9e|xa7eK=}XqZkry{aK|~niGBmad zE43@8N)|;NH{HuE0&g;_JhddzG+6t=?8lkyh(H%m>_WS97hW5}yDIt>=vPoLv{tWM zDM9zeN;+kkAMNL9!rTTlFYfMxYW}+MC#R#Cm`d4XU^X99?BADOYW3^S-jM;HDoQ`} z5*ZYTOQ8uHDyY`S>=wTMUS#|l(IgL|~h zj!~VZ1sv#y+5^4C8(&C}d3gA?F>1s^nKs6figi|WZ{%1_YULV5*(DU4y`6q;O%1w@ zoxc1AV?bq3TD}b#3KJCEqw}0@_Yf zs$t;nGZVM81NX2oAwYQOm>{Sa(JaE8UKyY!9*vj!T=_NI*#Fe%CG2}85F}<{?+FPI zKJj>qGd}q{5@YZ2lt1-y{!)eqwsjc@0X8IIn%~vi&j=EYsqE0VRqBgjlSeK>e9CU! zn<;aKiu#$Mt({dJ8L`tqs>?k9eIBiY$}s!mJ2tD#(bAK;`BH3mSAt*43v-MIinw&; z4HBM!3`U+h(kynAU(LX-Ey<+M{sbnbH0*w8PHhK;4^_+OvFQ>n(Vpol zpqa>~<3K~$@AdO% zFc+O(RK*~t7+PVl!NWthtcM=A&e8%ZkS}>B`Vcew%tRh+_I4&t)`q@~u+GX5 z90)Eok%adl4kxHMSoRSa1aNNG+7qmu*NgNcFi9))RB>@j}QE(`y34Oy7|hlWVA4yzQquRB{QzS=Mh zinSwe{!Tx~rNUmvwend}NwvKTwf#oChPA_1o*4LIQM&P2lO|mfpKe&2=mSez%H*xG z1F%VX>I$#J)u5Tr!f&30j@*88HUCcYtG~jup4YiFnZl{>ZEC>Fv~VWn^Y@&Top|79 z<~cL=LHP7LmvREo1x&@TZ8Dsw^zXDu?+j>)&TN9H%*bHV8mE+98ETV1Zr^)_s!-BP zhs}p2)z4Fw9e-1Q8A6Kgw8XqmJ;+W5Gz<0acxZ)RJTKWOVR^DqP6@aWSH{%SuDYix z*sz}}7v-#e9nwKQ-j@%P%j z=WW0_312trgmol7z%$~R4c4JQ{=3hF@n9K+F!aMtsbUtq`6Y<{bkn3?Zb%tzQDV0R ziWVdaKjT|C7zp6z^iDrdKLe44IB1P_uO|KC4^7vu#v0;;uO1=WVm=T90ycQd$E<{u zcS$Kb$7YSF*#upn$cVKwMfKwsx0-j*q4LK%6|4FkB{xN&sY(HE&sX-jwqrVYc2S=Qpo&Zu2K2WxFGV}YW@aJ9CQe0H3niAgaC0hP z3+--~$Og`qt2kw z*(9wRzTO@US_kXJs&}g?QqgY?Iu03nNmi?+l~oaW8dye4ipQB$3N#&qfB%w?Y%@P* z&BnQ~ z{_DN2fxxZgVj@jCe!qX)a;uMw4PR152#greiy^Es6C+7YN-X$AO~Zal*_nMa!8|wR z{T0NJ%G^?2^gwEkoCo>k74x}Qt4}A@H)y#$pkh*@ajmCGY2(6N_sj4B?C0gz2A<4n zUAlc4-yMr<-a}0KZGfRNRGOBgiHqD|PxsU~jO&X)PlMY2Q-vDEa`l$Q;DGPo$FD;$ zSJkCt(iw1z>zhYiSJ5>Zgt>vZ*o_fXt%y!hKyARm173G6&a>aS9v@7ydIwY^2eS-! z>{`BygS294M9wS2ptpujwDZe25!8MgK>*jlg9uR_b2Z~=+4CS=dMrZfHF^1=s zr%*0@=TN_$0c;D@g7e0eAAiGq!wsO|DS$pV@KIxeK;aIns#m5?0s@7GpA z$Ew$I!%1?{k0X;S7E+=xR|vBJD?EYW0=>5gGaM&x{n^$Z)HpB(xj1t%y`&u$kGv?d z(%Pfe;PMf|)vot4s}0!dBe`!~LHY2DV3k6)&C|Od-MT;5d_SCV1(0lb3KyVh^LDbH z$|5vAt~A}YIFx<{5C~>87|i?p>7MBi^3YS1x?+-{&F>{*J zZkrCvlW_h!;7Ln`qm`Akj>V)?Z8UXPJt8Meq>!Qg9Kr}*3pv62>$)tABHQc#B%`PJ z+S{#dR&6%X`)vN-{gXcJFmgGtbISi+Q6Bg26S=V|eocjvVmEy1oClvKhU{7mq~wrq z=lSjF16}L{VeZGYjO|Pm9M|!DHk)TM zcz9_>SRHOKE9F!QmcDB89`v|V5E7KabW-_f-|mn}On4u9Dm0aA7Ix1R9~aAj(E@3_ zBQkj!z3Ky~+K?>OU*@h{bM8XJI<~qNssXN{A6rxEb{` z&S@W$moL{iif5mZNJ?)NQCUztFs8o+0F3^+?E|9JGrkr?fCJxKoA78yI>OF0b@7We zWHk-Xe;cQ%BQYq@UqA0o%NQ3=a=px`#d#N48=?Xt?O=6I|CF}|>=ys?dNx2BThve`>16Xm5Bz_+ZfxZx#S$)HI@!!v6ePB6((c%KrhBWQKRW zR_}*ef6bhP&_e3_==sLirC8c|g<1JxuDbW5Fngew^!4`hrw%u_L*^ZnZ2BUQrO}R) z*@U~4;oL;am<1q^lWYlO3eM|d%QIdiU+!vJ+DFvWc042f!{oMB;?Y?!M+TX=0qEnR zhzDf;a*v(1achVIz&STFAkcUAn+*7q_NVYq*}58i#AQMC8!6joEkGpZV78YL zM$dDb&=X0xPkkhw&d0Nq%|gq5_9%Yt!DQ5z#_b8G&_0YdPlekKJs98MZP@MLX|?Au9sf#^e-@^gI11@ zZJJ)AQAopa09>SFH-Ns8p>)aBMAnYYL#tIjkb6k8@(`Q=>ATh%s?x2=Q^*kpw?9kp6-Sy?JjbH}mP)AT< z(11C~ml2kp+l?F8kLO>QZ8ONjQ(R4BN9RxEIOLU>^#HSkPyu~h8#&;>Rp36U#XWS& z7y0V+_TE^R!^wQ=jqGV)KD#(aJ6hyuiTLh&A!Mx}?E{tvBt_LX_-`NDwx6hdcp!U! zOPOARHw6k^cjcg)h}a8#M$$zrhOwlK6s2SL8}HD4jvxe4gEmI8r3#cT$!2Po9;ByY zV>Gvaqi%TNItncu?#u`$O9v2^3-MA(IV%=pzUL=hf;Wd`II3Np;FkCy)yTmeJjXif zOv99-s%Yf$TbRMRIhN{1Z{>c9!0HHm$zK+7dM#;ytu2?*N8c>O$92qE)_b&EE+|DW~cG+n|DIvl^Jq^#gsp z*;T`#Vg)WJEC!9)IV4ovs=cm1yIh-l{H(#nkx#UiSHZotWQn%X9hdSl?L57kuE24~ zuK+KXO$JYfIPO}4xzfF$ft%$HN$MNxMM_lV=i1*drYLox?F-LI|MHjPErzZtN*=(Z zCB2kl$N~6R@LUsv3m}htvqssKiq}|^x16*`H9zk~xqP;Bok+vVk@n@(`} zZDqJk?{BTd1VMbVfb=>@K@I<;|G`|s@=F|@I=>^WX~*^2cvJP~>y2@OZoOdGCT z#$T~uiT+u3YSQl*2g<;S+*_W!M;K@bxnYJq5cG7x@^j%h1UkRTvf9GJl4e{Z`ek_} z7T$d)Xi7bccQ==6^4)1q#GG#=TsVfGERu9sxMl}YZ=u0~?DcH)u`z}x!$`wb!!Z23 z>BJu;7O!Q!P=~jwCKPkW?^cv&d?O)YAJ*Q?j5aO>sQsdh-+e&N50o))=f`=6l3U-O z33Khpufdz&?*&rP1i#qe>Y`IWj-oqeIMKc}(Ho34W3%L4J}%HZ;)K*w=e)+952fJZ zjL0u;-gO4a{(W+m%6M?k4GX79Z#M&k6Qp^zN14JgQrJVeEtUIJ&qjY&y^hRV!S(g{ zJ;&S!k(#LNJ%(*}Biw&d^AU7DwQHjdrW~2JEA=g`gW-2*>v|~^l5BHjgSKq~F*n`c zkvcb)BuLjRZ)SE%Wz=t_L}2*uhP zM~3hvR1;3u&}$g-&OdJ3ANhEhfw-jD{J8_)uU9au-ag(}efJ+U0$!dc43kYXC{WpG z!jL!yraK%=eB!xZ2$r7|#}jzXi{)rD+1sJ5`p?l*bf{h7vbRI2Mjz6s&+CG2k zhb(Gf-Z0t96r0>U($lKQS58%^^BJQuI9NH4kb6k>tG4-72)(B=K*VCYdmg^7#*C4f&7{5s za;lDXj7aPGq4V28(mrVO8Y!mXP%*Oo8`ERf10Nu)&CdyFe=eZ|wk5`^g#A(gV4eEQp2+oC8Lf44o)gJ@>($R zFmsJfNFib;-XY9rWUpi!V(8<*A#1A*!;^9YnCq4pCIfw}QFZTG|65nW1gG5Qviw;p z=F#h)sr4u}sb2E%5PFdr6aMASccq#vX|^9BN-YQLIt9qL0A-ms%0vGzpg+;HV>KRC z2!xBZa%wi%?+RJ*hFN646=df*Bz|u3(#Z0c_r%8EgygBa0)}J33<$I?EI{~Vm@t8u zs69k9CG?en_OU5`nCW5UKLO@xey5)XLg5ybMM0yCY`KLjJP(F&vYf_veTEq`yo3|O zlZ;Gu>zbVj(*86;p+fYmj@R%I#QM?x*Nvs8(BTLgU@ej{ypHIWkc8wj*;#|`z?7ix z|HT{qSCn~sM=ie_6ym2txOo>)SGW01*sUpQcxESQz8rggmT{UL_QEGd?wc|f$*Wr* zJNG2#7u6JSeNIlK)JVHYMRf8M%;JhZ=!Q4Dk0kwjxh?thB}@ADL*UjUK`L zf;Z6Q5KQhzl>?URL4;ms;d0fxjIDKP=(#9HMqnzNU_uPi#s9t25sj3Jf#Wm;b$ARR z1TSpx{B*dBqKra=eh3ZXnq<)X6^>)v8v;fVbfQ9;JL;z!A(Xabgj7p%bJq`xWnOj89 zOa6F^4mF)&o@oAP`Jq$+6s>kXAG*5b1W9w5biXp5MVNKyRlv3;!Vr3tKv`Os8H$g$ zq&^d!{x8oi6VR-E@lRZ_yCQ6iIQ-ad_JD(MQt8v9Y;H;S_TSy4q6B_~R^+XCvjR$| zaU@hgMq~K*M>hl{03fMXm-1`>`T04Kc6eC3S?G78M=N%`E@XvhC2Zv?vH*#gVBi;z zh)R-ScFGwJw?3&rc+rLo^S{TyG3oloJ+y-zgTYde8O5ck`!MX~eK9Qf0E#vpg>l#} znIk$7Pb1(@_RZIPV%SpKf{#p+EKsH*crZHKlp1;lipJ4WdDyT34f)f;h=_E6$P8$DfbrkH||pcULpVg010x^n7E`*MHMw` z1(DwNYS;CqfONCMdQ7liylPh0h*Iy#)3tPmcd1(|V;l^FZ{5n`Wl(2`+gie-_l!B% zH>b)x**VS2O(od0$WB9|8XNDiC3Kk{((tpJpZU^4g`4*0OP4Pa32)-cK z#^WWMHAa}Hy!v5UA|(vb(-m)yeUIzD9Ud`DJ{r47BGQrYooeXnGDczjnYDA21abLe zA=(_l^`fRh2m7y9^&Vjj-L;nNzxp8*1#PVb;L6_<3^ZATOsSZWm5|>;;b_>M(sw^* z$a6ez{`*y#wH7MPvl?Y&^20g#7Z(s}By?qV6PZeo)O^?V3V%WteZx*e5N$=qf z1N8=Y4&>k);kR7A-HR!wTB+L~QM6+yA;4IQ+(uTbE7g>ygB7}6r%Mc9$PYJcR^;H{N+rt>bIHo z50_hB)J+WOpCdlNetDQ^zVG6r{>#tcJJ^@Aqp(o)%;LY))BJ+3XR^aXEwX zoOV_*@;B!j2l8&TY|JmzS&S0CkT7kIAo-TOea14>TDifo&d^=F$Nyn)6yMN0<<47Q zDVABk1##v1)G3a);2~s>E0JL*8jLht$vyrMO_HXbcvn%K5%q&tPXh*vSRhn`E--LU zc2}-jISZk6Wg8)zJ@D9B{qf|ACOW3nM$NUJf<3fyWAQ9CWSXQ`FGAl(R`Js;r;ujk z!;)-A9y=O=7OO=(uLa8|4HmS`xHrXtWyzQIdl?5m>Uo=9{dGQ!9OUdypsC0waJEpzV*)sU`p2ojOV|>wQyLo!b%+3xcJc8ib^p6I%^dCKqm(z`L@v1h} z!L3xXvwsLu;8zdPV$md>e%GnWju6!I*;<%;tXFcP0uS}6o>i(pT zvDu1aSK~qPt1ZD801kH!INv9L=28u|^_OhKiA2pQO`HP$!(|Y;v|9_=7~x&(Q^Qa> zg1o$*LK$sV0$Q@0WI|Zy0a?6SlfTKs6Y-|Uyc6|w^6X{NL>lj8zdX5{?>6e;=^1f$ zCMUv5o5K6!s>m@%j*s2W8xMIfZdV+8iJNvFNMr}xdUB=N?;LJGz$02J%b+P9h0Xicq5aD+oxxhku6;UJ6{4|8^JVQLv&wTKQi_rEA zSX8}9SguQUeA_|%Jxa|mY`0;EbBwN|8J-2Pb=f`8$88CY%Ml02A}LvA#GUS?AN3w_ ziKe;07;+p)rKw)^MQ}yoA^W<3Nz!znpPP@ge2IlM?B|7qz-&9=1Tj0zsz15gS0Bmh z*yklUF#ukh+_jQXH+VXI;o^+XFso0nosbPM#c&F2ZgDAT3&v`hK_p!Om zPZ#9q0v7?~Z2d`a8(QXlhd{h2==W-f_NH%Nre6upFgQuaipsg{e`MI~t6&M>gx%wSL_<$v> z3R5lb6!2aU!gmMzJ@?HHp|3=1siij3YuL^u=%_st6{x97hy5lrB#h0xV2xBCRY;UrqeZmMkoIceTmk zF6Q@ewVbJo&GVrPC@EED*yH(7pk>Jz%ol2iQJqo58*8&xYFlxG!^N6t7#ta|!g)S$ z6;CQ;aoqKi5W;RZdoyFv{IQRy4PIL`QQb@J^yhn+aB&woXnUQ(<#KcAN?2=BF*jd+ zVNOpGHhpJ7gAvoaQy_)h>0L;f+|s3#(exiElJ7LYIL^It&a}RimZ;>0x5|TfEmqFgalLT_Lh}FF#rS7z943zgnOrB|W(N8X# zp?RvW(yHQk{)Z_>Tqe8<891AL{IVzq5Qq^?_ZNc{9uk*fWQs%V+W({P95L#RSWPaF z;}rb(ZG*&AHX;s#lDNsd5`3j(Lb7a4oJjx4T_@!+i`T_)rAfPCKYUE)9AbbMb=kL} z1QO|=pt47(^BTV%k4fOVcc46xfWQi{w)y40L9cjLBcR#zT-DYlT~cEFlXXU68=yH` ziR8Zv6kRp~0#~4DAiU?|oiXPYELQM3D*7KkbNOtcOlcHP<4Jxoy;AQv^TB4rdVUPy zq4g~i-MrCkTmLAR8XfMPuIy0}o@4*FCI7+B!%jt`m)U-~PB#A)N z;xV)ETMwWg2a1A9G+rHWeP0YFG`-!yDS3R z1My11&obz;Z{)PScW03JVIZkya;?R+H(?DYKiuG=D!2O?6!Yg*)Sti9wKHN%Yin;m z4=R~_^%MUC0&@XBo++I5ekSU=9{Ef}D1}(AXgF7=rhwxDjoazmv%qe4%&_79r432= z^^N4eVRYC)Z9M>e&&R9v=0whk{KUhrhb2X{u82W5e_=mg^>(r3u#s-tNHgk%xCc7Q z46KME3A!JguSLp>e@1BupjYMq9;5OGW$X2s0~&%CScLmZ$3X3w+-FM~k#djV;JC#_ zRnF%WDlIhrW&x%*`zGxqF?-yDiB!YVap9Bep@A5skRYX|cedInhF^Fd9CE!4#J}m- zv!l6=(#~LOB*0peFfgP4J%C>h2V9qm68&fA*TtFc9{~ znllK`Ia*SVCotvzev2%N<9a(vx!IH3eceflF6bo1AGS7Vx^BivUV9eBHS66LLO_4%cH>NXX}^^Vs~5EfNL}L zrI-|(?1x9D1}_nRZ*QUFOM*M(o>crg+~@T>uNzc5N{Cf{edNjC>8t^Viru9M9ZZqG zGI}0^Cwb^cIa$^Z~8le_1_%b;j{X= z*4B=$gE{x({TV`SLjbzufQOKh;}>FBWiooWt_dLNnS0W7Jh`wnPPFT5itrb!5=zVS zv`H1{Qcf7=u*rwUd1tX_|5w(`9yHUMMW+nB*iv5= za%r0s7yNP+2Y&=`ag~ozeCsUB`#_L|laD%%gM~093(lhxw*AFsWze8d_(|jZ9;^cM6FiXWcQyNrPtdigR^VKlD zk?5Eu%}t@_#dY+Xt&T7D8F97#zxg!jL?~)5WE22E^Zrbrl^xP%6=C|AJYk!Vk7{GL z+P%O<5E6D*nm|9DC}+IUHm#*=*LyKr{L(HBK{=}I@`YmTD%(`0bZ}3w-*AvdWc9R_ z2%C*GLdSWy8Bh2x9{|@1fRjc=MmAW+o?QJ5UyeEZDoSvrNyi##-+2oRVd(nDCZ^pT z6gf#w7*GtE_%{qvi_p%@bCcBdau6yh$qsEezo5-sP!3{QO@;g-2j=gElh%=$Zl!Qw zE3bl`pWgYM%VQv_q`K6JfqmBdOJB+Oqs3+9M-|)C`nji)*#T!ebWJiCs794Yp|rEoy1crtr{s85t0Waw-=rTcPbJwsY2o$$Co76`4P`TLuW4RrAGLY^$tXE6o=Tn5&nn89P~xo@OsAn! z)*8V~;c>S(I@1#g2B#rVop(HX`3scuGPie&uOcqq`f*`#8VY!VO%7oZ2gyPQ*>|gt zdDxbDedDj1_>-X!JL1sn_6o^uDeToHkqm=4q98_9&Ow#!TZiLFcH}A;7%29Eg{sU) z*-`E_`&j>%_FU9F(BDs%Rr_LX%w_pEZ**3n>Ea;L+sAaPUirXeRS&`p1h`lvux8Y~ zD1PBX_Jw_dQXq)iDHMI1O$RB|54}rq7<*8^>aT-&e_NSU7L?JMpqtf;Hzj9~*F}r) zGe`ibG$Db=3MV~HLimtixcM?_P~aH8Fm%@dTrh;WAO%Q{NA(2Fzpohh`Y`sj?!jT# zOJMhq7|QsgEjC>B6VDZJTO9zzXx!Y)Ox;csiTO`@Bo5?|0a2;EE^I(kDlwq_e9nWi z=F{JTTxVKDsLlL>K=CEpb;qvC&adv^N4ft`QXV&`mwIJlf zpj;^-`S9VX^)gDo`boU0c1=jeMdzBm`N@d;t}_v>d$E&P`j%0*J7Z#^!6depw@j!$>@diGZ00SG*h9CuIg@P2@K7^I&s) zs00H&XMMDIijHUq!AxQBJB~#A{y>ZT)hjhV7e@6*OD5H<2i<)ZsiSy3?>z)2f%KJymVIG4?c7abTeiIM*R{rajQS>3_^WH== z<%0#e4!v(Y*Gq#-1V%(v>G|FSgWC(AyZIxibaE19cDgC1Tg#>Wpb4RJ2I~%(kI0w* zSmnk>IRd2T5!Tu5P#iU`)jUv}qBSMlqpd+%^yz+hT@UfB%JjtU=eZgy41~2P$oU+! zNmOjZa$D^o)?4E`wcoR-oB@ijjHQ?Wj#uO!xP70@G%FU8p#zdvNFS%}8Vt0yayS+! z5l|k1+Gd;kv#b_IP*pSLTfD-A;gV7H9^UaSkyRSC7IIC6g7{+0-3sm31yKpA>^QKcOWStL|4vzp32&nW@wW*ZJ3q1|b?|n~kKaq(IhTXNzk}lEPIMC|?+%IOxKQ zFE$ao?fKMR!*;wL(VCqmCGwqo>y*G@&r^6&F10^B_{6b?DclAN-vBjX?7&ykmmz9L zHwrz`hK8sbtkD zcoj|lF_FNfXUGFA=+v1PAwv870&OD|mWzo!T0Rcll@;+3f;Ix`GhkRV-XHqB4aUimQRi(#x0vy>>7%j*c zlJ0=iL06KdsExJ#IA7^S73KOE9fyqgi^9xjq(}?+BE9c@UM{ZtUUeXmmD%0@mwdGY zOAbNm;emu2*Sg$$nGwl;mXrolJ6Sg*>39((cPJXtjXPeo_i|qG!C68qP?u@`el;F8 zEv9&0pR2noQd>sB0(|jM^9iP^&c_%xMp`&i{msEpIbE6~l&06ixbFuqAVDHSxak9H zH>=)P^uc@$Km1M%UPx9I%LEyq&rOx8$pK$RMCjl%36(xO=8<=m|9rm@PoyS&w6XEJ zb!*Fpr0cIA#oC)WpoqZUf%Oi0LaDsjh411CE)j3)?|=m%;J+Wa0Gsk5y@cYFzls6D z_GNuu^7_5K))ouvM;BaBP*~UET=vr^H(9FP895yZzB!CSk3F4MxY<$-~|RVeJ1Q;OT850DG~ z3#s+-V@+vdrRYh_;Cg>Z(ak>sXj6%vcal^L@5ieAwY){PO7{)AXAq}JM@S%gcdFLHAWYCU&fxs3D*?&WIaB{j5-_6Zr=@~*Tu0=J(l$`$})MS z=L+cKV>PHcXGOdIrb6O8j`)8>`jcO(CY+-`%NPv_!f#B~;!U%oZL2?dnT3hsR*+TG7>YSw`VT}*) zC_71;!i?V$Fi5!1N~c`#9|#MFvlC5jmk6v(4`glRZAoQYt%t zVx+xxQ)q2%CG-^ao`Hey3C-$#8=DaYRZjgInl7Y_YVt=d_cTJ=1`ZEHbA;9ZWG(&4 zkr5)}8X0}o>H>BYQ&N|Zz(Gk~eR!m)cWy`4tIXrb)-5*~fa`_7j$%{0)um$b;{NaQ z5AZHxbME9brOK1-9X{3CwGLv7VB6E`@MQ9QC}Hd;-1zH}xIes{G5q>u73{lTs@ZKp zULk9&nn)&to_+T8jcOzru}S-DL}IuZ+VZw^8w&_!n0*FMND9@&3b8{(L;Ga6G3KbL z_s7u{kQ5`kfmKfaiLPgp5GS1B9%$w`I<(i&`OE$1b3ea&>FJeZgjI*eZWK}z;@F=2 zc7fXKg3Tr23|i>{%knRoB8^z#B>eRt^^2>^5{Mx|GJ$c#ny)3cO&*Ryp3i-qRam%j z+f`b!hKw+iD3A0{9_Gjq;!m2VIr;S5QOxD#3tphPD+Qsk5oQg(JJTL{{C^~!WmuE% z+sALZLy&IiPH7mSlt>5)(ufLzNOz1zB~?PDhDeE&bax0pT0$B|BW&~rV|#A?&vA?w zdo$qLbzj#R-|y#a48-@7a_axU^UCa9uBx-#X-$RWU(9c>NmHYDu{c{Y{)e2@6X+_> zRcDFpi!VMLL8k)x%KHx_?5uT+f;57dumx(o-`nEe?TLGT`!ps=mjACDZeq|?66ima zVzzK`bU2^3e;VICiqwuI)`#DbH8y$%;;XvO>0n>m^Yc~p&F~P6D2!J;S2&KP#hqxM z%5`?ecwthLp1Xmvez{8~3wX{O!H)j4pV#)EN}(zv#f?m6IykbXhCyO%%*)F^xn`Pp zf0LZTiB$z}oY_$;4BBF$0 zlSkPuLo58r57IhMZhdyE_TgXREzljaF-d@*L7CqsOV9rIcoXf~k4=R?<5CQYPIyv< ztU``3bd*Xf5j81AF&6Ws^5U(eIZu;5)5ZpezBfavEAD0HY!jrGrQ|mcP4`J_P(Zmn z?2jbIpD7pEFNn*r&kTb~8isJ}h_y|24m`A`%eDGmpM0R4&A{e(fn}nZUIY*11#>7aa$-&#nUhlNt4jvOntn{nYe$(^kEu?*3|; zQM3A`Fs0U))mr@8DBU^ca*wzH9YgQq3f!6K_E zi7#g#|Irw8ESG9p;BSwyswcTbk?Ta2BM$dM>g~+C^#{*WjV4KM3{u7*2~%yOOgmR^ z;yJ&d9JY0g8~c@qWbi?+nHkl`>i~O~0>?xhTkAh{_g`dGQFnd)A&WGEpG@xIy&uT&;VQX8$oOZ<{PUITpQsrJIQP{hLGKFv7npYEFkZG;NKJ8+;O%ffAZ$Lmw^LgXKp+ot= z_2{#P8c*sf{~3)OX(utO%T0&!=$RrHpFMtux8d!W$vi-tK^eZ^J3Gn6J~ip`C9}$G zHNAge%-++_C*Jm8jW&^y=piugHECiR!c9uhZPevN8k6?OQcUFMlQIWh?pz`@6%`M6 z!h4TRUF|O=zswCpJV#~`MK$WSZs6|1-6U~|0|ZGBVbWB%>^5Tk7Ct}YI-yZb?mPK{d)$vhv%^p7zTSut5})HnGD)I}&O*A7psyoD{F4_3%Z1;`V!K!(JbL z?pj$L=XrNq0xL~njU1yZFkAVt2$;+t-V&rb+H|mfp{XBkuaXJ51Y_h zGtisPdx0)?d(bqYc9^Fv9A+n9mE%1W@+NfXLK|CpO4@`hJd#`~#yq(8DS;wYlko}% z;I(zJWY)(oX_84Sc$(*8O!V7EO*gO{ zW=K?H2|r(6?%X8?g6Q1efhf}r%PMyY&J8ygNWFu824U~KLVW)Zvc7?r0I7o0z6jo;LI;8?>q7d=EFj$(f?-nLexbb;vU zzH=XUbwU$MgQ+T4v$4esCqwc3*Y%&dCoSak&_Kds9<$b+cn%Te3il|Oupv*j30-k- z6vb^ehWnl#JB>`m2uN19Z?FXAT3~G}!pR1PRuWkxS>i_k*_Z4Q@lVjcr# ze$#+HSyRH9#TiehJj2g;6lkvpHNChP;4bA@!zu%G zrWRuLZiC!^>mgFLDvDi`RpdV$mjl4*5hS}KSqe8t(dPYD$>1i^?N?t6cC{m!5&0qA zVQZXTql06grQvH*{-L=;IFsx+l4mM=-9a9X2h=T>oZxHO8Z--ob$vNG^!hqoRt*)H z^f3;<@Ua=@wZzSQU79>DX-G4ol16H zJvq@Ao)(jMaY-0lq;@On!F;m|O`;-EDb1_-U?+(+Drm5975^U+% zGq6H>^j8VwqKty!7b6ocKiuC_e!RztOii(tS{M5@q~32qusoO@NP08)=<%j>gkZSI} z&gq7ta9F0+D1@JX<69Pi+pVjMhNhAvK>t;QjyI-nZfvgl z`?$-zl0g%>#3q*xy zU0q|j+v|O>f}%bE!SszCL9hEDT7_<%3!|#!TwAQY=ca~iooMco%JcEWJ((|45nRvH>3g5 z$Y--e3cJJ3IUrvkU1ij@#tG*Qk76ID*o5BdJL6>=FrUrFcGE0KuZJxubPvhn>c=^= z+l!>q&Y9EZFa9vU$zhRAju|-Iku@URTy1qGKJ)eT%3NQ%8be_RXi(l^1UuwX6pEFr z7|#EC2zXv_r$#g4fc4QS7CW#_dU8T>6X4xwjl{YiKg=3oVN4*OQ3jj5HJ1GaIgQQH zB`*S-6I_A?w%++;6`jU<3Pr2eRPOPKDnb2aNhH7j~zVLJsYtCN$G?NB<1_`lPNPk4okO`7;+L zGIvpp)&|(;EnxBL#}6tGxI2lAs%A#?EQCe-`-+t?7=GI>m~heWRTA1g>FrB;f6gT_ zDv2Cf@IYSr!79PJ?Blx5XQo}BXHXIxEAu2yF@(Y!dv&B-TL#75HoK;dEhmjlCvm{)9AM2)3>k!k@^ZpxH!YWKYQ8a$Xf0lp7HaP z4D45ZRs~tUt@$jkM@aqm;V1eJ)W-ttVCTFqqh&daUM(Jose{Ga_zQbasPkGn@qhTs z!hzckVV)^32^_{`UypdLm8V38zjxN5>50Ut)2x3=g@Cp6IG{>UVoK;MpQ3=Dre>h#nq6Upl?IUR*Vy?#1^LqQP6@rc zYWitM<(2Mj(ZrfBC?Iy95Sj6JC=nUuP;+_6p2ycvk2X_ZAK2_FImuks^t{UtomJzf z#e4iOH$eT>2r~^h1En}GoUK=7t>DudC#zi0v3^<$&+Wnk;W)iUZJvF!FDadUyhC3{ zt06R_K)j1ociwlEy6AFRPx%o6WtaV*_=VNJKvEbVs)=as_Qhvd^8%9(Y7P6OTY3`0hcW;6DdYQrDs`|ig@=;*Z^(tA zmZH_?Da;hg*+1epm##~XIzET#Jjpy=!12zP$%0>>haB4M;9vxX`l|rxQCPuHR@!&; zZ}#!eWcews(*|_5QM~weG9o;SyhYaGr1-m1Z)1zBs(w~S`*GLYPd{?dGFYS7GcXo_ zT3889x!|g(Dx=zCEos}&G21#(8DsOXp#I&0lnP4BqItW*+!KHb?B^1rAw;)?&6o_; zN*r%x>#i_;wWU&W68SFBsW-?GF5@EX!Nl#0p~K2jciR-ma^7yzUzY}Diq!X8hm2d| zc6rjn zelsF%=qV&~%O~O@-{>cmmUkr;EMx94BE_Ns%+;K2mS*Rkl59Vwl^uWi2f+1eCOAQ! zO|46FU*T((%CD4S170`2#FjbyfV;7e6F+(kjvOOD96W-$r(Q=dkIZq^01o~7A0|=E zywVaNSnTT#?ej{GbJX|XwG3SM&HK#s zsORouqCy7HnsyePG(6miY7f6=y;)+#j!rP?__$ZwNjb#czht_5x=jzR_ld`7}JBF8KT*FISnFM4?8$Ubx!}OMCL?^eTWnJ zglQ9V+L$phfpaD(Od+3}=hzD-0mg$P%d$c+mkWrar3-|oPeb3RvL#o0`UyKzYZ_rM zsA3J$O9I|~#3e>cB~N7^-I0PK?hxfRdM1rG3^vc4MPsRZl$x$nXbUm}3B)++F^-j$1~l zaS>InSaS{ZhbL=3shh*G+eeh>Jmt{e_7daI(dQ5IQcnZ}et^uf2WZioN-RjAfz|5u zak_|4l{Erv^tlVHumFr&k}-CPS&?b9_oM% z?tft3fkrEVBtQ|fyYshV@|DBn^~7wl$+eDb530(d{TD~t`YJoFIiVK|D{BfX*PPbd z4!0`oUvD*}xt>;g4mIW}rcvVuThCVcx%t2?O}@SvDKVY(^C`F?ZxZd<N3F1QIDEhFYY)0-ljsRg|=o|-w!U}wXLpCo;?;f`7qR8 zT4gB)OM4$jz*HhaWcFCoVXd3t7iJE>@9K17vdcubI%NlCP2^NHPr})ij}NOZWB9Sj zl6`_Y>R}3PtV4}lAdb*eRM}KIcxyckT@#@N`K>*Fb>J4b9VV1B6rBQFQZsa75~y$b zytAnkM5KISgmyl8`Yc)Uj3&r9STfAZxb@$swt7Yk^Tmbw;??NHgO#gMcJVqs^IHC{ zJbjm$;bGDZln6{MS-V@iAUb38cG{kOy(HMbmkUjEtxRO6_^bZ3*I#7jseY&VYDb7r zpWvz`4#vy;3rbnH=2Y+p8~@D8eH5H}(|<3pFl#><^f(;Ky+N>797fnfuQ(Cv%iro5 zT&*>C`O}`teFbWfG#v|lkn!tl^IMG9U3G}=dwc;`Y2;6;X0rnCtsXOsj>;>lEP%I^ zQ=Jv)iB)*hMEReet@Y~$>wo@!HG>ugn)|ClYUux_#Emvm-d3aCwrP?HY~ zuwOsvCglzj?AgrqYkkPgpdSAbN_`sw{HgEvZ|HjiLO+NW1V9NqShTolJS{Y=tY-ax z8Kdj)_kH9_c8;T|IBU5O{Z*QD*Re_;&L-7P)t6~<+oW?#l`8W<$FAxB8OjnV}UUiZ9_^fCSO$t zpZYHEYRXyC_V6SH@ULB8Z8O=LmO0jWJ%63%K! z33TB*spEHQ#Jp6;A75wI1qSoFkxP<)p`?ortF+YVtD6E=TEfAl$6FoqyZ|}w5P}&P zy#)vn>{IE5-J)`WJEX-QQIp@bvwwp;Kc-x1ZR#9bZtw0x)9E}7Y=~{RIAAf@j|e1Y zs&+34NtTF@Fb9Xgz>cqkU3Mt;3BKR?nuo34zoSEjm0R% zg9Jsa!EVZL2y~gr32wY;AICw!Y5xPmZ+MNRHL-fTd$#xO%&5DRcJveD2TiGsfbir# z5USiW#rnA5k}Fv#Xxntb^X`usff7Eq=`WDyY9fU+-zrn^B(k4~l!TEyb`pt?^C6a) zZ)$3wUw&3yciuG|(vL%DcEnVAn7-;& zPLk6$JpEWt!-)s1+bpz;o~7iHw;SR*c>y)lp)~97*_iP8exB`Le{KQjk=ui(DM^p6 zhtG+mxbPf=IPg*}UaQ|to5z``HUb)qJF9qU%m8~00HaU}HK_A>3q-t)PI9JCl17r3 z>?+ZfzDD)BJ#E*%8hbzwJTE$Xt(Ly-HeObYT%-p=n|l1W3jhba{l`768cK?D4kVpK zEdYaR;x9|)q>~YR=%pa^ZC+bjudAtMnYe2RL4mea|L3j47ljP9G={T0sg&EoM1Wo` zluVoc=LP4?M}wxmHx^C}3tjWdoFt^W_=9|c3-^N^RB4qT!aK-o{D|1A0 z7Z1>xgh1q%oqA`>!P=E!#~h0bLgoq zUe$MondyuRL5{C|GhOLiCg? zbX*TrQ)btaeIn z=ILUJW^$!6<0ZU|;%_^^sRPjF8?axy~?DN_o5s68dCA9JY(4^>=>$(PW1_1G$e|Sq)%1lQnuhpV0T~X)7U57j;YUZ1y{UiRHf|>~}tWcqW(2 z%9q0<=%LB2OVK-IUSbH&BYtnRxvpzNJ9M81{TqqNl0LeM#F&8~WtI*?ar}We<4qcZ z-A}{lVN~&YDu%Z{>m7ydWhKd<dLE@ zUWH=4QxM@eJd0VC#pR%Xu2iuM>>0rKwGQ=Knygz^Hl>)mTFD*fwqI~JQ{58e>Xdl0 zrF>=Jj<+^jl2n)tYyx_+FBnaz=Ye@(*;>)xxca2sXEVw7trj3bsuw0(&^Iyf$Jb2h zpPT)iS)-YAJUBK-VNN)f20XNuQV?K#3i=XTqEE<2g}|9^q6AV!42dsXEsN(a+HLuk+tZ%$WN65`K ziO5okw{-{FwCd&nbsK2e`Wu{OpjQZfd_*&UjVwT$>VMYcl@FNy^lko_N00M+;A zzZ7`6(k4TlVMx(xm1-q^Ss-uaF!nS64l~8 zYsmvr4eF*ofrlOY7m=(VDz%q#_Pp1L}*Ol!2BdC05K8 zR}`N*j;Yg$Mc|%Z^<7+84E_qHi!O7ULadBD{mJ-@CXbX|MD#8xM|U>_^ZtlwNRTC- zhliMM#W?mgjxMf0?%rFKSzP@!XptR<80LpSnYVW~o8q2aEueV3edOd^?2(wS+W+JDgo;`!AY2Xa3j&nYG4 zsoSo_b3s;@;!_&i8jvNPAs%>-^R3Dq+*k7%rVGeVc#ime2{l5fh~h^?<^WUzc>Ipf z>0oE1mFEkK+b%iiWO{3}Rz{AZRg2j1VAYcx#u7Z{&-B>wR{}3cT(s{!r z<4dpe1xZba>(1t;J8{=I48tDp-EX_#vs+mU5D-=C8Pp!Pvedo6io9DJASH52_D#~LE&-Zcy~+MefL3r;Sg7w}+(cyYr-tW` zIxYwIBoHrgAkRv_cM&jEJf@=`@$OuLQV8JBe%r8br3|s~+{S z6x&aB@ByAIynzF8iFwFO8TV@@YyJt_jQLIfoT@9!AF;KLox)5uF26hCev> zIkZ9oRfUIZD9Sepu@cs8Y+)VR+#daiScmP8-)hiL8qD()?9u(en3wnwHFf>}3nB7w ze<8i!enn7Nu@?{l_}4+E_1jWm8F1a>f$Q*jyBwCw{y;o{?pl}>m=E|>IfT(m-2CLd zGi%ROoNWIlLIlPOq<;Pn!nEUa>lc)ZEf(X2T@)k)_}PH?dV8|MbMZoZa{F#EfEKyj zGt<>wUn*i*$y!!l0|1c@#?c&ys0%EXs^a*1%SB&c7H|`6bpy; zwOm*7YPCEn`{@tm)dpQ^L=QEA4aEo;}vgkNb5o?kR2^wKDjb~iWBev9ZK^U2B2A?PHTLRDgfv?z6T=a z-xIQ>;i~o0$9NW}lkQ>b$W&mrjmXUvA0Zx*{y;l6wEu{bN{)FgtQQ{LquUiNzm^DT zlkInCvXO7W6#WRMfXe(SrZ_PBn%6FX7ct8^P7Hc2BjTiot56rLR+6x)?vWe{6)d7- zb-1k$0a<#sz5eFsqoDApOQi=XFnat5$khN2DC3Wk!h9hG(jFm=?kdbNn^C!@;$NdR z!&NANW-=iMMnDR*5;~SZuerk66SacRkLlSyD`&kYFnX!#Jnrrte;ZW2$LE`ey#S*L zJVf2q2ePQdaFJsr8lgTMNbfZ>b;WUh*BBS8YOAcS>4aj8aa54DE18Et=Vj&vCpWaP z`v91xc4kXz0BgI~dtj`tHn4xfP#b`JlMrhvWn%I*?d}WC7PNS}g$ym7u@S&6*tw2! zy>7c0!8dfH|LLpCy8R5Y3~J_y@epB+FCxf*){ByT))`_}{UdzZ1`1kowCGj`g;H)@ zsueK#O=jEp#eZn0XPnfU!q;Xf=m>s89EW|M3`?0v#j)f{Lh z>8XJFOvR`8$hUk;K7RZ?J{Dcd+-?%^YdMz{bqipqtZysEI%ar2adcD5E_cZ3F9xfh z=NFK*o?^)=%k^ere+e7gV)B04DVGCELOhLF$W;yWt^M^elj4F)V=&XU;vUzMG|$v0 zUCXNj!2!6GS}wTXF?ZY8C|EkomfY|*L&5HoVj2|jzo!Pu2vBZ&FaqB-;ojg^6H28E z@EJ@iPylg9cgcaTGAPf7=ArIePMN-)6VIR(d36=?r=_{(GfzGc#%3~T&x7;E7~;jIJ2!7WODcPN)qM-# z#QxDM9AnveNu7*)fqk_00PDCmb+#>XT#9@Y8(tFLPYOIo?Gb)oHOv;p=JYiuoWn!h#1sJUKZhT%XGR!W1jVl~#rLOG zQV@n7!O0EgsW&O)dwF&PW$vOSCGK7gWotQIOYTXM76FbIxZ)HPW|KPLf^kN4X9RQv zKF}@7d_oGyYZAaj0hc3Md|5G9gc5ctT<5flyS|eiMA0w++@^8DH%C`|Z_=%! zGMCDqLBucdfF3bG&nXIkEkrywuiUly7P+f0|Gtqf9-4l{SZVF;ac5&o#6)9thH0i18FjC zn5H?Nc`wNY-kF@)i1#8`&xjxSrtpJJmeH9T`5qhQ-@(m~nEXb_(SKGAP%6b^0>)aDb zmAAioWGPyP_iV5;iYb%(?SxT#W9oJqX!@pJXjto%9zg~0BTVeY%gN9#!@MVgJ&;-` z>$U&hx8c>Y-Y9=XEMp;t2s(S7g1R2piajCFtjql?peGh5R35C`0`uaj?7_WH47h(l zT<+%+2MJ~KKQ5)b&9#|y5icz?fdjEPl6aB5E*j#|)etjBYp|q44T=>i)K}K0GOfXA zJRyLqV$FmI-Z+k&_YF*3n>Td)39dXB=@bzVg!Ix&-B6g`ZpxDc!MYg!Z3Vpc2nsZX zuJzY|JCHl)cg~bQ~uA!s&5saV%nEP%39+;^{|LJwl@0OSo1KxtC8M`;$ zdI#u9k?eWa)Gy%*U{-MGLHr0yh_6|M7S*2sMQcefulnxIO{L}b_TIj~tj^nPVj?t7 zsoxr_QVAOj%fI zic--tq15f*^(Bms@enT?-t@fuOT+woIR5Jlp;+i))mvisFrs2Pb`h7F{<9@D_3+EY zmGCRx!^3*7ftA%mPUKOG6p6oRl}QenFAJ2@uVo;V-zD7V!Kk z#02{Y$q1|6Sb^i{;2)eAfm3>LO~qg0X=r$4-v=qa2+LTe}uY=e) zVzu=kU3PX)T|$Ob250;ffTblm`;k z+1Vk~ep*D5+#`x752za$u}z}kg22HxOeiLl2tg@!JI!wW(x1dwfxtI8H@3<0$#$xz zFgH0sn_TbyWNV)mIPK?A3mE7V19k+ZbO4S0yMlYg@pdYPF&h^tNuN8|aeg9r07Sr_ z)ZifJL7oY@aVk79@YhqIbDXx33?F!_!@9s7^N7GWGUdsiR{^=7pI4m^QKhBjU2w*g z+7RpEMR1y{{Htr>BPFR{$-mxqV+0Hj%7lp>s%^M%q!F{#EBE{?U%*i)51yLHTK5XvFKd`qr;h7J&7dX4XEm2;+#h<26G+_IPWLFWBW zm6;A7*n<}R=)R+(PI4DFMGm-pm}y6((DWTzA|?oST+BV0D5-vlj)FJ6d(x7;3!~!p zs!g-~P%B9tbIyM_VrW$XAi5iEkGZ~7l^9Q>Hd7D`IE@DHhA82 z_AR_GXjfqyBOYK?=q#n$@`Yb3b*tvS_0%`Eu0Dn~AMeIS+f z({hMT{1p6sznKJRn>**+gA`V=%i!*L{OPz1fSi8&P0uT@!TY>-K*s}5SYQW>Z{lyM z^t?IsDBf0h=5xh@5;O$rp~rRagc>Z_HN36HfqH6tCf{}%7u@gl>) zTkLMiSQck(zKz>L#PN-1uI{pJ4Fm5DBSDi;!danB_@lZdlbh&Jkb-_I;=P@b; zx7)E^9AGgwqkih<9yR@HhK7$o>tM=b;7Q#AGr<9#2Zx3~UM>FWsymf?#K;g>r0y(B z;FlQ90Nc@($gMM_jQ)ZOghPW$pryG;BA)iaKdUX_b|B5IGCuKCqA!(z`F9!(taf!r zJoNV*dYjV@<4TO0#}9UArk_q;XH@MZZ(12|>8D9TUC%!vMoa%`@4td{t7NXlhLzSZISsBcNw{B^7KN8_L|kDq()hH&a2%`3ve zqxrHG-IxsyZ-mi1OcbP^YC4m=w%3JFvjG1mQ5u=b#d2vCN_TD=7wVT300!?{75yVi z)b?-c9oJ~MTv+9Po|pvRnj+t2sgK=iBeAiB$%m$;LMFSv{Vt*f#F#jtN5;_DoA}aF zj3M#Zkw75B8htt{sd;YD6p;a!o$d&Prc;j0~5h(%Vq<==tL ztN6%2iee)jFL*b4)*cAmmn1?d&#O!dEYTR?=f?w;&asYoq13OD#Mahl=CEQzF-+-%{mSty;4#>@M?>F*ubf-WYwMH4V6h(vqDm=5tpfE;jd3z zm3grMa0mLmn(st0%)(2RFD#Anqt>)z1Uj&wbx;w1G90{mH{oZG>gqVC*ro6~D=MNR zU^S%w6|W?&^)i2;7vXY}Nf~3gUY0J0oEOEv!w1yui3mQq#~766M$Csmgrr;ovtDA! zH$RA6IaXIzCpsg`Tw?8$p~cJi839!1N10c(PAT-&OtL&^lJ>8Dg7xLMnRlVd~3h)jPFpSeT<#O-TL2KAxBU#=#LNtMqUa1JhA}A&fS&rleD3{=YC?ceLc^dU z@0qQB7g=P7`;PsFq)WTdS(moS9v6QJ6z$P5rt@J>?WzDXlTK~`K(HD&A{*7%{Q6tUW ze_zIq6m@fjp0Ik@kvK(WP2>BAaE(4xrXff%FiY|5Dn&uQnQp#jE_+3(b4!pG7(Xm1 z@9`q}I;Y2s`~yaY?xA52Ac-8(w{6oHoZ1sav%R;vO%QhRJi7CPcoee2Cv>1mNAx{2 z36?sM`dBLWuW~BZjA#EOf1>j2)wSuU#jlPFIL)dGQiM~f;M}eK-3i0AbfudWD&Aw> zO(Ok~mjXl#9Ot(NR`|>x*Np43OR{Pfw#f)I@vQSEO&du2joXw?f(h&32=C2ilA}cO zk^{;njz^2y-%F_(N8R%ciJWFkT$4cY(-K~Tb;4E1>TJg~o`nKPqF?R`PFbo4g>KE@ z-BgPo!CYq(LHAW%gmLFU%?vLZANXU*oYH|wuwMhiItVcl;P475&AYEH0o#0Qm|4_! znsLzoxiAH+^eiD;Lk-xO3?fk$dj;O%nP`6Ok1u9njXDZ6EGtr|K+{C~v7~}heBddU zcZKR*J}R{gfLnp9xE+2r=w5DO$uX(ex$ zn&8$~LTBH7g8+Ow)T_MtkfXlev81k{3tQUMAN>Vyy~7N}4rr4CB@_CB@!3^A}^ovE}X3YLihVt z1sKGE$R>tM3H$M4*f%Nee~a;M$AKMEj~P04$pQ1{Y5JB1t{7NwfTQ6DdG<59wh1D}A?BM7Ini~*b+%xuUfpg94t5sdQ`>B< zI8XWttQqm!ulx=)Ic&t_rpHg1zj3J9&k12V%dG{6d8)7&b}cuNA&0V?+SmALB=UA4RnH zTC^t;qhFfcQBOGC^!b6HLJwbHzMN`4+ZC>8KseM}czC<)sfeE9Xgb80)8plHelg$fZUmxXcNR{H1-v{D` zuRrfhMSl*U!4?GkIh3^>+=sN`XRN9Ep^`9@9*G5u+BG3iTvOeJf20Jw*-{9 zx8f}CGl*`oYTefX$Ud%pfQ9RIbPd30!Xj#c`CIopY!xpmBS&1{&1P;ls;;a~3oJ5L zSqZ&nB-asjafkawQgbf#aYXzC97xTJOXXd2@B9AZ*ob<1>4R+bI)gIQ0gooJ`Ka^A ze{L`EA_xzB`Hs^afLp^4DPwDDPb4NEf0#M#4#;~EhCJ58!@IaJEHR+CH%aU%FD9d> zNE<`ClmmI{fwA2q)j9z&ITS$%^45Weg-u!piPTo|NdR7E z%db=Bw_Vtpl~Wjx4esJ|ms9-+l*R9|Vv?KOpf;DxyXV%M-BatLs2G+RCP<_Y@&SC* z)H1sv0xr2OpZ667F8xA-QyrhtunnZd)sW(A*Tl?FXo!Bk&nyWxPr;ghmodZ^K6S|OA75pq`WKb&}FZ|~6`by6ZoH=8xvO{(K ziK5#ugwFU*!0Kk`9Uh{4i#t-&P7UhKnD6HeRus0-y5Cp9pv)o zu0vZF6kXQQ|tn=Ol+k5Nf`rTX#w-R-U3jrh1oG2>6$LSYtZy7DXy6iHRgazi~X zu?>}yN0n zKn9e!(^In8d)87oJgu0cDV#3nyq`<_)Na)CmhJk=xW`k33};p2*QJ*NCa??6gAXK# zo^sMF*sP>aZNWfiTy6RzlcU8}#uHj}JXiS>);70V^juK*Ut@hhBO#Cl!t*#qduKrV z`rdeHBH-YHeV{oRLUx>a((gkHs0!Z;o~Tcb>!#Bn+Lm+OH&s~;4~PdXLCer~(Ciox zc!4Ef$k914AAe@XkUcpr@((3^z$Q*z-2HkYpNH(Sx9jm~WO(!tw(J$>i77$n9~7hj zfK8f8!Ft5$N3Xt*{E(ViM>$TYKy;#iu`zvXqx2;NV)c|=hK++{O&`zCvlnSKt=j_{SORsFm@nnCgU2}P^2{n|8| z)k8ua4Cv{yHt|PS;sb9>b5!^waZj+h9^@~orU4O*IQCpJ{BGHa`)FH8yEgaLlrNqJ z(?hHbK46zCjUREl$BQ`*UT`i!wNTFy7^JnNpRX0r_3wUG(b)T~iE~pBC{eP`T)Rnu z3tE2U(t${Z`G+6&>zX9#d|iC}=E|?(dO*|lJ?)0#?;{#G5wO-`=W**gh!J?6T5zS7 zjvRH0iPI%Qk&_QQ{Kj2!He9HLwqm1F>?@F)TNO&pTk98fQ&kw&Ax~!RQ5sFXf2w4+ zoz!J0`q`gDGQ%u(OI+EBfZ={p2T=g{OiV=&3n$cXM$nP%vM=IyyReB`OTT%R5%*DT*Zkuv8LbG`f6u1ins9i zFOeVc*R+HZEP&EHf@;O#trN`7hCv@8#K-^}8!5U+Q9#zC*_Ww=xH)br;KxOr3B(6a z!^xj-9=@Z;t_J40E z%A@c)!F)cS11wm(Vb;c0)(`eAEXyfj{w_?|3Z+M|2%X4J!48!Hf;%bCdlfe@e1a;hZ+B{cNvm#(2{pZ8L(O1s3XZ=Gxa==FSSLX2c z26|P6DS$LgwcfdR zX%N<3+G*Yprr)JPuurKfq9}G_A3#9D`=>KiLNC2zC1+>nG(pJGDmI)+sC^Q7^bbmF z8GlOkD!UI;t2+IujwH1fnxe;)I-0T!EC_uEc2Xu%V-q+e83{RPr7d*}($iGd*B@5{^~)W%r%2 zeB<|vw&d9FPITH}8X36!0R7Q7yK}dX_PLtg^P-dq@Con4m2m@l7WNbsTAH7DrN56{ zPkmVe_yqpg4cyk;bl8#p9L1AHpySWX0(r(Rk}J&TK`wYA`1tFCR4O4dI!z-~Y3QAa z$meLj=a>A0$5FQgp1-AF0tQ2@q9OaTWG^L&F5i?$su5eg6U&>MdoD^^`wvlgOJH9| z{c4$z&*V-O0X^w>oCQm?G9!75&P^KyY0%T%U0NlJX9#`_R^%$=jZMTX!_#PgU!BP~ zTLwk*BAr5xnJn^~?(6hE=7zNwZSD?-ucIjSP4uI>*ZX9!>Mn#$-Ag(U1~)s1=uqEbt-JF#ow ziD}Z@gKD{>vY6YzFK0ybhf!trFiZh8P-YkPt)~1f-=)KtehsM5Lrssgafz2}M%6K{^K*N?MVQp^+|WnE9XQ_pX=4 zTJ!CE*k|AOx%R!UXl&|OT-kJqiPj&jkMNY4*@`l^+=+f;>Ne4)boY6)V6#1=Xf?Qb z`Dfg>H`cqMEa^BvSvb-X-J89ljajD=G6#C_hY6pHp0+cTLXT6Tc8lqMu!_GJa)fv=z2 zd?tMc3iYUpgH_}}?&MKs5t`h6JD79*x@J09Wt7e2^`%yK^`VlzO-|g03a6PCmn?1Q z?A61j{KN&?%i=ej1+Ro7R@M##C%vPsp2a$Uu0cJ8>O9Rq`h!Dj^NEM_0XZG_q|S_9 z$nQxlJcYmB!_Ls0kTcxYIjh!*rWT*egUE!-^BdC3yM*kcwN`rCrjfBSTG~%wZl9Vq7Hqm>JnM?&O4@GQ zADxMA7J}(I4~h8x6yaN22xUz^c&_Z-pN#!o>6>}L!DX-I_u!$ez}&#u0c;nS7lW3%9l_j^$hNn3Z+*M(qlGMmX;oF95*oW&Enr{2XE;f0^-;kYn8$Kq4H7< zIf!ARLpELQn)om|uI552Yqitir&{;BEyEE()@SM6SwJlzI)zYOI^Asfdd z9Y*gnMBftFQ1_8SXD##n@$5+3Jd5;q5?9r||7o{N-(|UrYtD7#TgD#r{_fMIybyMK=B91 zrOQM~_?9r1#q}-yb&})XQdKvdGPi|cZgbS$(aO-%pli1n=HRw&SHxWy0u(-glv(EE zgEg?I`CJaAV@+&Irr`$GE0(@AXl)8Mks*sDj^UUO>j_%1UzaxJO&24Vp>BImi~mba z{&!p6v8RN5{fKK~kbd~tiVhcNIZg>K037_HY^fL#(udB%Xfd;jg8<;mN7@N)7(>P4m*r%3FNdtYQEaU}K9B<=F` zQRx+X3CaeFA1vqz*o5v=QfDi(iI3ou9v|IGQB~H|)rTsEV@`~MLlJi)7w~vdAjg`V z2v_vZw1@2m5w^#4FVc*Vsv@$rK}KZU_#hDm3PEnV5pLbp1c|9=+%^LCK)*0YB}q&y8DM#P4a`vawuIQjS<`HZhhL)rr9f^r&&+C789FF?`U;xwUX$?H$&T;8G=doA#5!u+by{iYHb&zMPBxEPdtYnipZ$UZ{ns=Y z0Y*urZ1VunjHiD(_~F{T6eR&KvBu>fmobNI7(lm(Gc1>v=oc3J!T;OydEd*CM%k5M z%$@J$*OEWkncSSs%XHLaC|&Og1WneqJl642=t;6a27*EFZLK^e+Etg zj$@yfeZ{v$Oj<}KHFCQ8(wATw&mq5wQ!|;+wSy%sNEMn{@j2&W*n7-Yr3)(3CUk5M z?|ZrL?#&#F71Y+!?;4B&wGao7ZW}RZ#4!RSLSOD5cJvLVs%XtSNd z9=s4#=(kO`5$^VZ1Zy>eV%&gCw@(qjKjnO$_(L#mp*me;qUcpt5JxWqo36myc{wwS z`L{uRxMaE3$}F?m3MwQTQU5*oHsm7vz&&tlc?34;NL*`*DB&L&es^bc=rC=Bs6qJLRI&5@%3o2wb)+9a4)5nQT4|a1`b$|uX-i=+ zx49=%-6HGjxD08c&i7wB$1;q%^29OKY_2QT(NC)y>#?mm6f; z^)HUD6loh>o;AuYg95HFR3L^4WNxi)TIBX&85(r?fkyQq^gelxoZ?j>sc@V4$H#NN zP-=B2fPZGzUIe!ztK-oVW{aixty8&iKiG8D$eC9ok`!Hii~f^n*P@XsF)!S6EP-*LctQAF=%1p4 zEKb`O&diJ9qc8lWncLzuSX~~D!E^fx=aG7ii1Nc47WuCq3GYb;JFIq}SkLnrmDwJf zcXV)RMYE+uM4Z8-7~TT6MVM=`|B58Uh^oQcKU=6DSwn0ww)+K zHzl;5WNz1rhNUn!u$q~S;x!^vplxbI;$nP^$O*~9sP?$gi+XQnt)vN{e8-hp!lYn) zd+Ot^Q#|<2uUotha}yF_TGFmD(zT79X(V>+Xz9dP=j!}o4|~?9y-5l436(Y~o<%Rz z`cwy9%=oCfOWxZjwrP-)O1x7Jc|&jN0FbCeLecvpPp!E1Ye*+63v9+=zOD3=9&wpx zP2e7i6!5+D@J=Wz19Q)u-4PWlZCEud)-nzW#=qLn?|TPVscy_kkXE$Von&6%&706G z#B1kVsZQMD;H^28r*&GYFaUE>I1OuF`}|j-C7i#q1Lf13IU0B;ZK`DSJX!mdu77=$ zougVkv*fN?ztGJ=6nTqp5Z*P1 zt~B5QBfk3TEC#hLB=p!3CV4?0Y4sjiibY7}U38e-vT0R63^`w5`C1t%fYMOW znSff8LTtKMvqiFEr;POp^$SCORanU>aNVQ(wb_dmX{P z;s14-`m?6S!seuuzg4RK^RQn#ovqUw?}cAanaprn4~!6y5*Ub!K3@AIsOtw> z;vv6FKN@~2j!h9gtN=$^$GUJ#r-h`sdZ`{NGo>@g1yrL2zE-hh1_2BJ#V7f_(7{=6 zNq3hgg4SKKf|*o~23=PVGc3QK6N)!>`V{?lw>V@Fhq^m>iavKm^atM@B9NF%6r%qS zfr-6fZfI(T9yH=!ctc|zW|-o!V!d?VKpwIX;e*Q$M#bn8hJu^y?vBsVEaAaF&;k96 zySRD(PyhW)4|wTH9U=Ec`mDh(+zy!CiBo}_-G7Km=H;Z{#WA&PTPqTUzE-_G!`$+r zuY&_(K&X=7cd<>~ctK4~=-5t>( zZqAE9`mPYAR(Twtw3d;d$soj}Qy&ZgbJE}S{4z=R?-h0t&CI*dipk5B zyC*@IwI@LrHv*RDuxfVzp;G^{fL^vH#YOB!`Y+|I*RS3`s#15oGrZ2O6?%K2!uk8r?Sa96yz zWSNkC65$N|8xqJh$!fpoZC9sTESa|iIVFEAB+qGD)T8?FYnYmSlJ=k0BmU`@{<3~! z?-+P`>mQy)3`g9IT)4geFbAP7{g}`V#n$2bd$)2X7^Z`#6eB4L;DoAfebe~c;L0P2 z(|HgI*2lAmkW&e3?mJeUuMVJp z&O^%iRyP%&28fPaE;>G2md=v(j!iL30@u`{>fL!q?rEd18Qf<#uLWIH=41|fbKYel z&*G4a;5)w~8I8Ey_1k?)ajKA0`|tPJ<^*od%fc@ug{SEIK^p`!fR4 zHwP4ZaqgD9|FBM4_+2gdJZydXqszcG(diz*5wA^$P&EQf)hnkhYgLPFFwUEiUW7x( z;`6}Ykg+N-9}$q3*%DkphjxsH3om%ZF@U1uWsVsVzse(-;&+I*28R?o3X<7!<^~yA&^2(b9sFC z6paSarz?8P^|%p%h9IuavB7GA9m*`O4(*d%7+T|n(y#0oB)~-JN%r#JbvK7o;|7pO zZL9|KO1Fyo^i79+tsE79dj1;#Gb4NtERt~L`6e8wunL;_7lLP-f<(o zyoW#pko?jVdiqB&1x?1Jh|L0ZDE8ofeRDC$y2UnY$<%sBc;^1 zGw;#P8{1ko*Y^I(rQ9Wn|Agr-W_doi(_;UdFz$kRElXy8MLIVFdiM7Q*O9NXiOMB$ zmR@u{Nj)-CGEL=drMNqmJKtL$I3}oAM#|q9lNP%-=wHUjVpK0TvTw0)nN+S!u;IUm zO|tuc136bO`(zEU@V8)I3Vf_;OdT7(N%f1_bYP1yVm^4h z(dG)PNQs zpN{o^&}dPirSDJFbMHR?v=ZJ|CWgxKVfv4<>)Hs~ovhv!nce;akM6febf71};n4*O z9fd-p|2upWRtc>9k??W(Fz+AU%C}q|GR0%x9>t!ySoJii3t|cp_^{*9N0c+k?I7YX z^CZ0p%fUa9A+!?+Zf{dzq}xZKiei)N^!#Npg2X$cap_Wto^$!X)jM$h*maXY=-nX=Jmg|f{QVEVj!t>(wkVx z=|HRg@F$>Sb0u|fUQ+s$O^xb3cRn>;BujBhL+JC(MfL+xSsYL?dS6Q`o#G*Z5rc(h zk^7I7m3F;fv_|-9xrLkG-2OhDid5J%OBIVW#Adloo3~7G#7f&-)(D>#9d- zaQ045-u}AJ0AMz%(72dy4uBt3rPZnwTJ-!|kR%;DonFKemXS;&n70ZHwxSh}IPM$z zr;6#~T12*CN}4){3!oXv#0&i)0vbnxiLr-~!gbk0`fZdGHLZN><61<}soZt4weq{Pfwc)+m`+iiz zva9;N1Z9Wgs91WVIQQ?%{v(HXFo~91FG2G(j{tYCc<#QS>Di};|CCJ*<&EugbF8qm zx1IoTa}sZN2Zp{vDK#ly8#c8x_ot1Cfj`Ra*kBmz@%AazffHV>arczW-dDFtHlu`A}E~gY2FUR$hsXr$9z4Rn~)8dv+x1WRm6@fK@#v;s9xM9kH z2>!{AhiG9O0(Sh^l53S@3+-0_&;vqD@g$jCd)Ks&6Egw%TN@E3S9c;@&l44`Ub7z+TkG;R=h#XK8;xtT`b{lOCD=984Z z4*}{4inQf2I4^o~04to=bL=?y%dmiz_6P+7uKyDHh>zart=tYg6I@9R6S zuIP8Yp~dt}t%>mq5)|HB3nWJ%;a24+$2!Nl<(#}NUIa1e!7^ZHLK?|SttY;TbwcU) z3=43Sa&l12fl0l?n;GD$w{#77{g->DQ9Ab4LPqu}(FLAFM`xe08QRcUyd9qCiSxjg zfL@7-ehP~O)BOoLvs)$NUOI#&J&q$s~kodx@o-o6vQ zf0n1z8>lz&Gc7|GMZSL-@^j zf(by@d2dgz;O`%o}DEZAt=hJ=?2DmIj>3*J$TIw z5>?&orH0V`T{jOV^$J9i&q0w9eQ~3aF)dWjA;Zl>I8-) z7Tb^4H{u)d*VQg|y(8Q}#$ijQYI9*DcRp3kuH*3Ce3M4ZYuv~sQzs_GnE-;ZFK&Jw zKNeZ)z=go``>pCeT$ZZ<|3#pMY~H+CcyDU&$Vuzh9#+dV-_kdV)c}&Z-$afXO*geS zgV36!HM4jBoat=zRkI1w#LA8@gSbzv!pM!JI5YBB%qn9rep5;?_pSy7AWl_B8%x>< zn7a_6kF(K_gUSbM{1^;kJob6^Yl1D8Q%*5T3`SkD@ zsWbH(H!8|*gV3c(fRVZ{=QmS~W2Bg?z)@`@3iQ~qZYNR22ghZ}=f#JIrVzLXxcwnD#yvwIm>U`qdOd7v5 z+I~_u7JU_d?fDB<6B@A-yQq$>VnS=1TNnEAN?J+^>0z?M3&RrqMkTtXkx^wN$N{6S z4%O}IuKN&q^5N5Onem`QeXGkrvO@cp@-=2;@YG{Ry1Kry(8n=dC7uI%-6bFgB z^82UyfM8+8!`D~pS1BlsQrNr)^^eOTC zd^-y@VP>oRtj4pxi=hRgG);UN8Yud z_^@PU`kLGT-1+^Pnhjcf-IUzaXGMUxDO7I8wXywBHkcL$GzyJe=^mFUTR2KRM66oM z*+Z>n>w-|NBQ}psIDt3DCXcnzlQn;DoOySG4IrI(Gm-&^KaajXD-Z^vQZj@+$I)#M z9?di?21;Hu?jfo=i|wuhj}L?2MXrkDwiN_Uz%sL0E8)!*faH+z%*9f+?-gQbydl=N zjtU++E^>({36(1XtR$g8Q*DVZa2W|Wie0=$NqIow{)p{nQH+`Kdl{qdZA-j3*_uvb z7BN+VqgzJO8RGo$g_7C%7wSr%lmxWMl(CR05JTLjL=lg_tA(hsePnfF1l(2YP;#di3|y!^q=r z7gvc57h47U{?7VH;fGH@k{)=``b)O4hK%}+qYf`1y=T9OJM^Bb>BZ?2?!8SAd`7V5 z9{ntJWd+$k@PlYgQ_+r2gbN)H$dSiJ<-`r{N>(i=HKe%jKaxr+th)v{dH6^}r|5p9 z?rl>7D*_V)H~S42$gQ;A+C1P(maj9cP76YYe({D03f$Z5|97IhlC%F(S*tp*fY7Q4 zC@!i1hKK69WXHJxaNX9%=m~ZCgo9+75lGjo;S(YqXU@`Xy$%!?V7g?PSS`b^$+Did zt140Xdmd#PhLoE@BJ$Z2ohKHBKP3Z1lzUek`MH!p-ml$Wwf8V5Cmv%nx(7+PW!T|C z4?eLIJYfCw=4-tO%RWmeDfPc0Symns5vynxa}TXC?e^%1m2YY40U<}?5^8W;UM@d|L^3QDHG2a42QH!e?=SxymZ;Py!_%rs!hpaTM5rT$Zpwghm8HZ+MEE#3slGJ`_qsRvCZu zj^fW+Z&H~8xSy|JfS9pZOW?Dca$Y^i@=o=)tIV=M@F{u@{)jl`yNlBkD;PX+d;fWv z^qkWFTgT-jD&Sqda>M z?iOc8DJTG+r2?eISL;0ADBtc@ufdSuG*yw1=T?^!DEtc9qXayE=Kw5H6OVqTFk8IR z=$kWWSaI_|SfmK}u0X(2pu|pSZ9xE0Ot(7^mrqh+$yDHiD$?I6b!whhcSv^5&B5Ng zhpf0osd4wXhlv{|KJJu+hP-gG6s(egKh=O^_gH&7M^oO8RNvlcmJy;)Ck9_Q$^Pa7 zy0bUG>j5H>0&PZ-sK)LTqbkir4a<3c+7n7^g$F6&6ow3;i<$TL5>#fE7JKbQ`j$9D zNAW)=C(?D&LUmpvwv+wZOy$fT$^~h`Ge;hMH`f}V0z@^<5lxlYOUCn!pki5ps@7jKrng50FJtcKa)Q<_?Fw7IC!jn^;?@Uv~w1N4ti zPiA$19Lk7rDgd*KT6knL!t`g~8=us@^o<&;j`~CSFEW2!hpIVBQMNrq;Q{pT6xKCb zW_t`Kav#W^;aJkyuUfWJox@rD+z-W+f+R=Pm5a+o7*ENk4zHGxIWL^$qK*!3m{%tR4&X|; z06uazY$&t=n>80B!T-`6Ih(A7=UknpWZP+lGzn{q1Zhy-Z?n4^y1_T z(^lkiDI!pjbv!f+>R1n{fUNdmQUQ;d4+&C8KolKx#Z}+61Yg3JGtx|)y*YQB^7wM& zKD@D!|2P2)=v*xmOW&y}cp@8mOSlnz)KZDQs;kd_ZMWvB+;|aKLb)1+w`Tt6D)ylb zetHz*IXO;}!ay3<=bt!vzwkeQ>|&>yS(@!1Js{!uOdw>FSa>hr0Tzn?no?jF&kD4$ zynTzWek|-`kodEAbteg(q|p4Qf!cfNQE*F{SbdmKC~{{1K06iraVdWh&~&^?=yyD4 z`|mTpVB1MIImvbR3FCR%%7xkP809TQvJ*S#!JxLDC3pZLzg z;Hwwg1Y59QwfVrZiF2rC5kT~PU<5`ct4$H%2ZiV90d+jU!eQlO4~$BKP1ugpjfI)W|XRM}4M+QMfbaPVcfld+@gWf?O5r)2e)Y7(5Y6 zy~P0La-O*2(KWpwk}?!S*5eMbBJ^+ zfs&xgu~p7@BF`1BZl#bLFIHujSEGsFaPTRChvt$vXG3?oAARu(2hxgkA07`!^OWe^UTTbxOeEU z@{SS@kox5G5dY3nA0nsJ*4tgdd9q9!tU za2{Iaj0L#-GybR)J|Gh-=LHChz7_)b7hjH18+^cl=7))5VEpR`>RK+q>LPA*f_#M|b_`SmZMWP9Gp4a7t9SAt{acI-F; zvyFDR;$ew`92*TU)LYH7Q?Nh(#BaBV4N9__+0CPQq?Q!bNXAb79=i)K>Vwo;+@t|| zK8tmEl)`Ng{-aq@)y?@Z(w4XFjRFD|YcF7FoheInE6CV;vAHrs1=J@a^|KG3hpq73 z4z{-Bj2zkZs(yY9!1M3l#xUW$;@40yMrPuq5s@-K?Y0jN%glUgF_rCrPc9E~{b1VJ z2OBpFAES1qf3|5!g*`!jW&Uf2Oh4SBDb6PZ@by#1<6F*)^#I=T#EmF4D*`Bg zjAFovZ97&cRqfGu;q3)BN0DJd`}d> z$jGO4oA4`coUrYgKnAq$1kfq(f?7wlYG=FH6@n94bRRd2X2`!vfj-k#ARsQmuX&Le ztsR&Oi%RAuS^BplCpj0XPoc|h{ISfN-%aI(f*L$lKHZkZU#{riT&G19p0nSx`a+^^ zGe|^w3%!NFXOqEm>!4ujO#^^8=Es9v?qmWk`G%nNji$n&a3VbHgNq+TeMiG>iC7dc zol(nbI!&ImrqC8OK!;+Ry?4nzRs{N+xBIo`48tLthOnj(F&q4seOP;YAnnVr@TeTt z6S_d(AvpzD16JqN{`I%zwpiFfqKrnI;Jb03MjHu{Ny{RDOyT&PuNBK`=3dj?ptm`~ zhwjtsE5`2i3O7!@rrT`Mj~jX^q=R7(2dcsk=5w)Fh$iGqPJ_w8Q)ytNK!QP^z!UF6 zCC=dHEhLJ;!M}2@p=+o}u#G-It@!8IAFk{b^3B8V?>uJ0jtL3Y?yWW^;DL~AJ=m=I z%cp3pPU|7!QUjNPhWURwdn*w&-50UL5aG;+xLb zyq~n-AGJOe(h23A8a&;z1H;h#V&vW+ABDk_bzROvi9QTuu5^WA1*tWKKa6c8)aXAR z*AE8wcqpyk*``KQ(7q5QzWPyqoKu&A$r>jWp!)IigrYD!1zi%CgDH)*oWp&edppSm zq^i>*694P4{?lAQ>D3~LsBw1!w%Eg0RIJhX+*sEHW~@lSw{#jAWUUZx z@XKR+9g$do>yZA+*O!!T+Z-aO_2jo#$S-!}YoQM>4i*?$gyEwUi7!(RI}}GHHS@X8 z!qr%6sUhYjzC(9Eqmt<4E=HyGvq&d$*VG(J5zk?8YwhKF27#4cr?gxpYnRD-b^hQ? z#E>D7L1{__JonIT3M|?r>!e6If5>t>TEhdh@BuPGx1@!D+n+7u_Y6)bupwFyqh;t9 z`t&%%8RAxpaVc@mr(Aw((z>PX2X*Xwl3~%Z5of3yRSE-O!vGWSqBeuIgtvG8|4`oY zw3FFE>54clUd6>DV(W{e?gr;adJwAjI%hPdJS!>S!qv+)drPQ zkL|bNECAzlm2jWmBRihr1!zekb)rexy~YR*tEWcdh>O)8e0;!Z%d&w(Mwh=h_pm^T zv0v?hp%AA*xoM*QG|8Wh3CON~VrtO!R>JVVySz2<_<6O&RrH4S+Y$3yflO!1QzFS( z`5z6gj%4^+pT?Y1@3nzI4$xkrP0*utPE03K!OjZ|6`7o2crN%=)3`|#*Wry3dGU

f+#=Ld!cZV~fVH6Lu3t`$&OpB!SbBNAc$TDhW!{@JE5r7Y(-iJGbOV1v} zTB^}zlgXk%sF03Y4Zh*ghUiSN(7AHRP|5(t{`Dhuwu!E&*`nu=Wn-Vv&F(cE2G%AD zg04b$ZeCL|Q~KzJWie)o$80|iboeNtTr@JyMYaR5&49&JjB}mAk?7_KN||6tZU!Q; z;C<;IK3A8W)}3%QVe|gVVTd_by9vvRYkT*XDQe;F8aMF#!p^qiGJNB420=la>Z{

VM2k~g(r1X=cZTb()%; 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 /// Initializes a new instance of the class. /// @@ -82,8 +84,14 @@ public DatabaseUpdaterBuilder UseMigrationsAssembly(Assembly assembly) /// Builds an instance of the to perform the migration of the database. /// /// An instance of the to perform the migration of the database. + /// No database provider has been configured. public IDatabaseUpdater Build() { + if (this.databaseProvider is null) + { + throw new InvalidOperationException("No database provider has been configured."); + } + var rootCommand = new RootCommand($"Upgrade the {this.applicationName} database.") { new SqlServerConnectionStringArgument("connection-string") @@ -113,7 +121,7 @@ public IDatabaseUpdater Build() migrationsAssemblies.Add(this.callingAssembly.GetName().Name!); } - var databaseUpdater = new EntityFrameworkDatabaseUpdater(migrationsAssemblies); + var databaseUpdater = new EntityFrameworkDatabaseUpdater(this.databaseProvider, migrationsAssemblies); rootCommand.Action = CommandHandler.Create(databaseUpdater.UpgradeAsync); @@ -130,6 +138,13 @@ public IDatabaseUpdater Build() return new CommandLineDatabaseUpdater(commandLine); } + internal DatabaseUpdaterBuilder UseDatabaseProvider(IDatabaseProvider databaseProvider) + { + this.databaseProvider = databaseProvider; + + return this; + } + private sealed class CommandLineDatabaseUpdater : IDatabaseUpdater { private readonly CommandLineConfiguration commandLine; diff --git a/src/Database.Updater/EntityFrameworkDatabaseUpdater.cs b/src/Database.Updater/EntityFrameworkDatabaseUpdater.cs index 70f514d..95985d5 100644 --- a/src/Database.Updater/EntityFrameworkDatabaseUpdater.cs +++ b/src/Database.Updater/EntityFrameworkDatabaseUpdater.cs @@ -6,7 +6,6 @@ namespace PosInformatique.Database.Updater { - using Microsoft.Data.SqlClient; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; @@ -14,37 +13,27 @@ namespace PosInformatique.Database.Updater internal sealed class EntityFrameworkDatabaseUpdater { + private readonly IDatabaseProvider databaseProvider; + private readonly IReadOnlyList migrationsAssemblies; - public EntityFrameworkDatabaseUpdater(IReadOnlyList migrationsAssemblies) + public EntityFrameworkDatabaseUpdater(IDatabaseProvider databaseProvider, IReadOnlyList migrationsAssemblies) { + this.databaseProvider = databaseProvider; this.migrationsAssemblies = migrationsAssemblies; } - public async Task UpgradeAsync(string connectionString, int commandTimeout, string accessToken, IHost host, CancellationToken cancellationToken) + public async Task UpgradeAsync(string connectionString, int commandTimeout, string? accessToken, IHost host, CancellationToken cancellationToken) { var loggerFactory = host.Services.GetRequiredService(); var logger = loggerFactory.CreateLogger(); - var connectionStringBuilder = new SqlConnectionStringBuilder(connectionString); - connectionStringBuilder.CommandTimeout = commandTimeout; - - using (var connection = new SqlConnection(connectionStringBuilder.ToString())) + using (var connection = this.databaseProvider.CreateConnection(connectionString, commandTimeout, accessToken)) { - connection.AccessToken = accessToken; - - var builder = new DbContextOptionsBuilder(); - builder.UseSqlServer( + var builder = this.databaseProvider.CreateDbContextOptionsBuilder( connection, - opt => - { - foreach (var assembly in this.migrationsAssemblies) - { - opt.MigrationsAssembly(assembly); - } - - opt.CommandTimeout(commandTimeout); - }); + this.migrationsAssemblies, + commandTimeout); builder.UseLoggerFactory(loggerFactory); diff --git a/src/Database.Updater/IDatabaseProvider.cs b/src/Database.Updater/IDatabaseProvider.cs new file mode 100644 index 0000000..a1e7537 --- /dev/null +++ b/src/Database.Updater/IDatabaseProvider.cs @@ -0,0 +1,37 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) P.O.S Informatique. All rights reserved. +// +//----------------------------------------------------------------------- + +namespace PosInformatique.Database.Updater +{ + using System.Data.Common; + using Microsoft.EntityFrameworkCore; + + /// + /// Represents a database provider. + /// + internal interface IDatabaseProvider + { + /// + /// Creates a to the database. + /// + /// Connection string to the database. + /// Timeout for the command execution. + /// Access token for authentication if need. + /// The which allows to connect to the database. + DbConnection CreateConnection(string connectionString, int commandTimeout, string? accessToken); + + /// + /// Creates an instance of the to create a + /// which will be used for the Entity Framework migrations. + /// + /// to the database. + /// List of the assemblies that contains the migrations to execute. + /// Timeout for the command execution. + /// An instance of the to create a + /// which will be used for the Entity Framework migrations. + DbContextOptionsBuilder CreateDbContextOptionsBuilder(DbConnection connection, IReadOnlyList migrationsAssemblies, int commandTimeout); + } +} diff --git a/src/Database.Updater/SqlServer/SqlServerDatabaseProvider.cs b/src/Database.Updater/SqlServer/SqlServerDatabaseProvider.cs new file mode 100644 index 0000000..c310c64 --- /dev/null +++ b/src/Database.Updater/SqlServer/SqlServerDatabaseProvider.cs @@ -0,0 +1,45 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) P.O.S Informatique. All rights reserved. +// +//----------------------------------------------------------------------- + +namespace PosInformatique.Database.Updater.SqlServer +{ + using System.Data.Common; + using Microsoft.Data.SqlClient; + using Microsoft.EntityFrameworkCore; + + internal sealed class SqlServerDatabaseProvider : IDatabaseProvider + { + public SqlServerDatabaseProvider() + { + } + + public DbConnection CreateConnection(string connectionString, int commandTimeout, string? accessToken) + { + var connectionStringBuilder = new SqlConnectionStringBuilder(connectionString); + connectionStringBuilder.CommandTimeout = commandTimeout; + + return new SqlConnection(connectionStringBuilder.ToString()) + { + AccessToken = accessToken, + }; + } + + public DbContextOptionsBuilder CreateDbContextOptionsBuilder(DbConnection connection, IReadOnlyList migrationsAssemblies, int commandTimeout) + { + return new DbContextOptionsBuilder().UseSqlServer( + connection, + opt => + { + foreach (var assembly in migrationsAssemblies) + { + opt.MigrationsAssembly(assembly); + } + + opt.CommandTimeout(commandTimeout); + }); + } + } +} diff --git a/src/Database.Updater/SqlServer/SqlServerDatabaseUpdaterBuilderExtensions.cs b/src/Database.Updater/SqlServer/SqlServerDatabaseUpdaterBuilderExtensions.cs new file mode 100644 index 0000000..84c8852 --- /dev/null +++ b/src/Database.Updater/SqlServer/SqlServerDatabaseUpdaterBuilderExtensions.cs @@ -0,0 +1,26 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) P.O.S Informatique. All rights reserved. +// +//----------------------------------------------------------------------- + +namespace PosInformatique.Database.Updater +{ + using PosInformatique.Database.Updater.SqlServer; + + /// + /// Contains extensions methods for the class to use SQL Server database provider. + /// + public static class SqlServerDatabaseUpdaterBuilderExtensions + { + /// + /// Configures the to use SQL Server database provider. + /// + /// to configure. + /// The instance to continue the configuration. + public static DatabaseUpdaterBuilder UseSqlServer(this DatabaseUpdaterBuilder builder) + { + return builder.UseDatabaseProvider(new SqlServerDatabaseProvider()); + } + } +} diff --git a/tests/Database.Updater.IntegrationTests/Program.cs b/tests/Database.Updater.IntegrationTests/Program.cs index 51a97af..b9a0f7a 100644 --- a/tests/Database.Updater.IntegrationTests/Program.cs +++ b/tests/Database.Updater.IntegrationTests/Program.cs @@ -13,6 +13,7 @@ public static async Task Main(string[] args) var databaseUpdaterBuilder = new DatabaseUpdaterBuilder("MyApplication"); var updater = databaseUpdaterBuilder + .UseSqlServer() .UseMigrationsAssembly(typeof(MigrationsAssembly.PersonDbContext).Assembly) .Build(); diff --git a/tests/Database.Updater.Tests/DatabaseUpdaterBuilderTest.cs b/tests/Database.Updater.Tests/DatabaseUpdaterBuilderTest.cs index 928320a..60fc186 100644 --- a/tests/Database.Updater.Tests/DatabaseUpdaterBuilderTest.cs +++ b/tests/Database.Updater.Tests/DatabaseUpdaterBuilderTest.cs @@ -13,7 +13,7 @@ public void Constructor_NoApplicationName() { var action = () => new DatabaseUpdaterBuilder(null); - action.Should().Throw() + action.Should().ThrowExactly() .WithParameterName("applicationName") .WithMessage("Value cannot be null. (Parameter 'applicationName')"); } @@ -25,9 +25,19 @@ public void Constructor_ApplicationName_EmptyOrWhitespace(string applicationName { var action = () => new DatabaseUpdaterBuilder(applicationName); - action.Should().Throw() + action.Should().ThrowExactly() .WithParameterName("applicationName") .WithMessage("The value cannot be an empty string or composed entirely of whitespace. (Parameter 'applicationName')"); } + + [Fact] + public void Build_NoDatabaseProvider() + { + var builder = new DatabaseUpdaterBuilder("MyApplication"); + + builder.Invoking(b => b.Build()) + .Should().ThrowExactly() + .WithMessage("No database provider has been configured."); + } } } \ No newline at end of file diff --git a/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs b/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs index e477515..77aa8de 100644 --- a/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs +++ b/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs @@ -21,6 +21,7 @@ public async Task UpgradeAsync_WithExplicitMigrationsAssembly() var database = await server.CreateEmptyDatabaseAsync("DatabaseUpdaterTest_UpgradeAsync_WithExplicitMigrationsAssembly"); var databaseUpdaterBuilder = new DatabaseUpdaterBuilder("MyApplication") + .UseSqlServer() .UseMigrationsAssembly(typeof(MigrationsAssembly.Version1).Assembly); var databaseUpdater = databaseUpdaterBuilder .Build(); @@ -50,6 +51,7 @@ public async Task UpgradeAsync_WithErrorMigrationsAssembly() var database = await server.CreateEmptyDatabaseAsync("DatabaseUpdaterTest_UpgradeAsync_WithErrorMigrationsAssembly"); var databaseUpdaterBuilder = new DatabaseUpdaterBuilder("MyApplication") + .UseSqlServer() .UseMigrationsAssembly(typeof(MigrationsErrorAssembly.Version1).Assembly); var databaseUpdater = databaseUpdaterBuilder .Build(); @@ -64,6 +66,7 @@ public async Task UpgradeAsync_NoArguments() { var databaseUpdaterBuilder = new DatabaseUpdaterBuilder("MyApplication"); var databaseUpdater = databaseUpdaterBuilder + .UseSqlServer() .Build(); var result = await databaseUpdater.UpgradeAsync([]); @@ -78,6 +81,7 @@ public async Task UpgradeAsync_WrongArguments(params string[] args) { var databaseUpdaterBuilder = new DatabaseUpdaterBuilder("MyApplication"); var databaseUpdater = databaseUpdaterBuilder + .UseSqlServer() .Build(); var result = await databaseUpdater.UpgradeAsync(args); diff --git a/tests/Database.Updater.Tests/SqlServer/SqlServerDatabaseUpdaterBuilderExtensionsTest.cs b/tests/Database.Updater.Tests/SqlServer/SqlServerDatabaseUpdaterBuilderExtensionsTest.cs new file mode 100644 index 0000000..8c6a328 --- /dev/null +++ b/tests/Database.Updater.Tests/SqlServer/SqlServerDatabaseUpdaterBuilderExtensionsTest.cs @@ -0,0 +1,23 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) P.O.S Informatique. All rights reserved. +// +//----------------------------------------------------------------------- + +namespace PosInformatique.Database.Updater.Tests +{ + using PosInformatique.Database.Updater.SqlServer; + + public class SqlServerDatabaseUpdaterBuilderExtensionsTest + { + [Fact] + public void Constructor() + { + var builder = new DatabaseUpdaterBuilder("MyApplication"); + + builder.UseSqlServer().Should().BeSameAs(builder); + + builder.GetFieldValue("databaseProvider").Should().BeOfType(); + } + } +} \ No newline at end of file diff --git a/tests/Database.Updater.Tests/TestTools.cs b/tests/Database.Updater.Tests/TestTools.cs new file mode 100644 index 0000000..8464185 --- /dev/null +++ b/tests/Database.Updater.Tests/TestTools.cs @@ -0,0 +1,22 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) P.O.S Informatique. All rights reserved. +// +//----------------------------------------------------------------------- + +namespace PosInformatique.Database.Updater.Tests +{ + using System.Reflection; + + public static class TestTools + { + public static T GetFieldValue(this object obj, string fieldName) + { + var field = obj.GetType().GetField(fieldName, BindingFlags.NonPublic | BindingFlags.Instance); + + var value = field!.GetValue(obj); + + return (T)value!; + } + } +} From 4df79ab58118fb2f83ef3fbb2d84b234c7727e45 Mon Sep 17 00:00:00 2001 From: Gilles TOURREAU Date: Thu, 4 Sep 2025 17:27:00 +0200 Subject: [PATCH 08/27] Improve separation of the database provider. --- .../DatabaseUpdaterBuilder.cs | 4 ++-- src/Database.Updater/IDatabaseProvider.cs | 8 +++++++ .../SqlServerConnectionStringArgument.cs | 22 +++++++++---------- .../SqlServer/SqlServerDatabaseProvider.cs | 18 +++++++++++++++ 4 files changed, 38 insertions(+), 14 deletions(-) diff --git a/src/Database.Updater/DatabaseUpdaterBuilder.cs b/src/Database.Updater/DatabaseUpdaterBuilder.cs index 4e79797..c50e019 100644 --- a/src/Database.Updater/DatabaseUpdaterBuilder.cs +++ b/src/Database.Updater/DatabaseUpdaterBuilder.cs @@ -38,7 +38,7 @@ public sealed class DatabaseUpdaterBuilder private readonly Assembly callingAssembly; - private readonly IList migrationsAssemblies = new List(); + private readonly IList migrationsAssemblies; private IDatabaseProvider? databaseProvider; @@ -94,7 +94,7 @@ public IDatabaseUpdater Build() var rootCommand = new RootCommand($"Upgrade the {this.applicationName} database.") { - new SqlServerConnectionStringArgument("connection-string") + new SqlServerConnectionStringArgument(this.databaseProvider, "connection-string") { Description = "The connection string to the database to upgrade", }, diff --git a/src/Database.Updater/IDatabaseProvider.cs b/src/Database.Updater/IDatabaseProvider.cs index a1e7537..0e76282 100644 --- a/src/Database.Updater/IDatabaseProvider.cs +++ b/src/Database.Updater/IDatabaseProvider.cs @@ -33,5 +33,13 @@ internal interface IDatabaseProvider /// An instance of the to create a /// which will be used for the Entity Framework migrations. DbContextOptionsBuilder CreateDbContextOptionsBuilder(DbConnection connection, IReadOnlyList migrationsAssemblies, int commandTimeout); + + /// + /// Validates the specified connection string. + /// + /// Connection string to validate. + /// Command line argument which contains the connection string to validate. + /// An error message if the is invalid. in otherwise. + string? ValidateConnectionString(string connectionString, string argumentName); } } diff --git a/src/Database.Updater/SqlServer/SqlServerConnectionStringArgument.cs b/src/Database.Updater/SqlServer/SqlServerConnectionStringArgument.cs index e63b06b..944d45b 100644 --- a/src/Database.Updater/SqlServer/SqlServerConnectionStringArgument.cs +++ b/src/Database.Updater/SqlServer/SqlServerConnectionStringArgument.cs @@ -9,30 +9,28 @@ namespace PosInformatique.Database.Updater.SqlServer using System.CommandLine; using System.CommandLine.Parsing; using System.Diagnostics.CodeAnalysis; - using Microsoft.Data.SqlClient; [ExcludeFromCodeCoverage] internal class SqlServerConnectionStringArgument : Argument { - public SqlServerConnectionStringArgument(string name) + private readonly IDatabaseProvider databaseProvider; + + public SqlServerConnectionStringArgument(IDatabaseProvider databaseProvider, string name) : base(name) { + this.databaseProvider = databaseProvider; + this.Validators.Add(this.Validate); } private void Validate(ArgumentResult result) { - try - { -#pragma warning disable S1848 // Objects should not be created to be dropped immediately without being used -#pragma warning disable CA1806 // Do not ignore method results - new SqlConnectionStringBuilder(result.GetValue(this)); -#pragma warning restore CA1806 // Do not ignore method results -#pragma warning restore S1848 // Objects should not be created to be dropped immediately without being used - } - catch (ArgumentException) + var connectionString = result.GetValue(this); + var validationResult = this.databaseProvider.ValidateConnectionString(connectionString!, this.Name); + + if (validationResult is not null) { - result.AddError($"The SQL Server connection string specified in the '{this.Name}' argument is invalid."); + result.AddError(validationResult); } } } diff --git a/src/Database.Updater/SqlServer/SqlServerDatabaseProvider.cs b/src/Database.Updater/SqlServer/SqlServerDatabaseProvider.cs index c310c64..a9c7ff6 100644 --- a/src/Database.Updater/SqlServer/SqlServerDatabaseProvider.cs +++ b/src/Database.Updater/SqlServer/SqlServerDatabaseProvider.cs @@ -41,5 +41,23 @@ public DbContextOptionsBuilder CreateDbContextOptionsBuilder(DbConnection connec opt.CommandTimeout(commandTimeout); }); } + + public string? ValidateConnectionString(string connectionString, string argumentName) + { + try + { +#pragma warning disable S1848 // Objects should not be created to be dropped immediately without being used +#pragma warning disable CA1806 // Do not ignore method results + new SqlConnectionStringBuilder(connectionString); +#pragma warning restore CA1806 // Do not ignore method results +#pragma warning restore S1848 // Objects should not be created to be dropped immediately without being used + } + catch (ArgumentException) + { + return $"The SQL Server connection string specified in the '{argumentName}' argument is invalid."; + } + + return null; + } } } From 377ef5ba6c4f3a33d78a44c7e06a2cea5c0b2297 Mon Sep 17 00:00:00 2001 From: Gilles TOURREAU Date: Thu, 4 Sep 2025 17:55:23 +0200 Subject: [PATCH 09/27] Add logging extension support. --- .../DatabaseUpdaterBuilder.cs | 22 ++++++ .../Logging/InMemoryLoggingProvider.cs | 68 +++++++++++++++++++ .../DatabaseUpdaterTest.cs | 10 +++ 3 files changed, 100 insertions(+) create mode 100644 src/Database.Updater/Logging/InMemoryLoggingProvider.cs diff --git a/src/Database.Updater/DatabaseUpdaterBuilder.cs b/src/Database.Updater/DatabaseUpdaterBuilder.cs index c50e019..4a11647 100644 --- a/src/Database.Updater/DatabaseUpdaterBuilder.cs +++ b/src/Database.Updater/DatabaseUpdaterBuilder.cs @@ -15,6 +15,7 @@ namespace PosInformatique.Database.Updater using Microsoft.Data.SqlClient; using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.Extensions.Hosting; + using Microsoft.Extensions.Logging; using PosInformatique.Database.Updater.SqlServer; /// @@ -40,6 +41,8 @@ public sealed class DatabaseUpdaterBuilder private readonly IList migrationsAssemblies; + private readonly IList> loggerBuilders; + private IDatabaseProvider? databaseProvider; /// @@ -56,6 +59,20 @@ public DatabaseUpdaterBuilder(string applicationName) this.applicationName = applicationName; this.migrationsAssemblies = new List(); + this.loggerBuilders = new List>(); + } + + /// + /// Configures the logging for the upgrade database operation. + /// Use the to capture the logs in memory. + /// + /// which allows to configure the logging. + /// The current instance to continue the configuration. + public DatabaseUpdaterBuilder ConfigureLogging(Action builder) + { + this.loggerBuilders.Add(builder); + + return this; } /// @@ -130,6 +147,11 @@ public IDatabaseUpdater Build() _ => Host.CreateDefaultBuilder(), hostBuilder => { + foreach (var loggerBuilder in this.loggerBuilders) + { + hostBuilder.ConfigureLogging(loggerBuilder); + } + hostBuilder.ConfigureServices(services => { }); diff --git a/src/Database.Updater/Logging/InMemoryLoggingProvider.cs b/src/Database.Updater/Logging/InMemoryLoggingProvider.cs new file mode 100644 index 0000000..dd84afe --- /dev/null +++ b/src/Database.Updater/Logging/InMemoryLoggingProvider.cs @@ -0,0 +1,68 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) P.O.S Informatique. All rights reserved. +// +//----------------------------------------------------------------------- + +namespace PosInformatique.Database.Updater +{ + using Microsoft.Extensions.Logging; + + /// + /// Implementation of the which stores the log messages in memory. + /// The logs are accessible through the property. + /// + public class InMemoryLoggingProvider : ILoggerProvider + { + private readonly TextWriter output; + + /// + /// Initializes a new instance of the class. + /// + public InMemoryLoggingProvider() + { + this.output = new StringWriter(); + } + + /// + /// Gets the logs output. + /// + public string Output => this.output.ToString()!; + + /// + public ILogger CreateLogger(string categoryName) + { + return new StringDumpLogger(this, categoryName); + } + + /// + public void Dispose() + { + this.output.Dispose(); + } + + private sealed class StringDumpLogger : ILogger + { + private readonly InMemoryLoggingProvider provider; + + private readonly string categoryName; + + public StringDumpLogger(InMemoryLoggingProvider provider, string categoryName) + { + this.provider = provider; + this.categoryName = categoryName; + } + + public IDisposable? BeginScope(TState state) + where TState : notnull + => null; + + public bool IsEnabled(LogLevel logLevel) => true; + + public void Log(LogLevel logLevel, EventId eventId, TState state, Exception? exception, Func formatter) + { + this.provider.output.WriteLine($"[{this.categoryName}] ({logLevel}) : {formatter(state, exception)}"); + } + } + } +} diff --git a/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs b/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs index 77aa8de..ec1704c 100644 --- a/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs +++ b/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs @@ -6,6 +6,7 @@ namespace PosInformatique.Database.Updater.Tests { + using Microsoft.Extensions.Logging; using PosInformatique.Testing.Databases.SqlServer; [Collection(nameof(DatabaseUpdaterTest))] @@ -50,7 +51,14 @@ public async Task UpgradeAsync_WithErrorMigrationsAssembly() var database = await server.CreateEmptyDatabaseAsync("DatabaseUpdaterTest_UpgradeAsync_WithErrorMigrationsAssembly"); + var loggingProvider = new InMemoryLoggingProvider(); + var databaseUpdaterBuilder = new DatabaseUpdaterBuilder("MyApplication") + .ConfigureLogging(l => + { + l.AddProvider(loggingProvider) + .SetMinimumLevel(LogLevel.Error); + }) .UseSqlServer() .UseMigrationsAssembly(typeof(MigrationsErrorAssembly.Version1).Assembly); var databaseUpdater = databaseUpdaterBuilder @@ -59,6 +67,8 @@ public async Task UpgradeAsync_WithErrorMigrationsAssembly() var result = await databaseUpdater.UpgradeAsync([database.ConnectionString]); result.Should().Be(99); + + loggingProvider.Output.Should().Be("[PosInformatique.Database.Updater.EntityFrameworkDatabaseUpdater] (Error) : Some errors occured during the migration...\r\n"); } [Fact] From d16dbf15db357f53f1796dae57c5d169e778e9ab Mon Sep 17 00:00:00 2001 From: Gilles TOURREAU Date: Thu, 4 Sep 2025 18:11:58 +0200 Subject: [PATCH 10/27] Add an option to throw an exception instead of exit code = 99. --- .../DatabaseUpdaterBuilder.cs | 140 +++++++++++------- .../DatabaseUpdaterOptions.cs | 20 +++ .../EntityFrameworkDatabaseUpdater.cs | 5 + .../DatabaseUpdaterTest.cs | 35 +++++ 4 files changed, 148 insertions(+), 52 deletions(-) create mode 100644 src/Database.Updater/DatabaseUpdaterOptions.cs diff --git a/src/Database.Updater/DatabaseUpdaterBuilder.cs b/src/Database.Updater/DatabaseUpdaterBuilder.cs index 4a11647..11beeab 100644 --- a/src/Database.Updater/DatabaseUpdaterBuilder.cs +++ b/src/Database.Updater/DatabaseUpdaterBuilder.cs @@ -43,6 +43,8 @@ public sealed class DatabaseUpdaterBuilder private readonly IList> loggerBuilders; + private readonly IList> configureOptions; + private IDatabaseProvider? databaseProvider; /// @@ -60,6 +62,19 @@ public DatabaseUpdaterBuilder(string applicationName) this.applicationName = applicationName; this.migrationsAssemblies = new List(); this.loggerBuilders = new List>(); + this.configureOptions = new List>(); + } + + /// + /// Configures the options of the database upgrade process. + /// + /// Callback which allows to configure the options of the database upgrade process. + /// The current instance to continue the configuration. + public DatabaseUpdaterBuilder Configure(Action options) + { + this.configureOptions.Add(options); + + return this; } /// @@ -109,55 +124,7 @@ public IDatabaseUpdater Build() throw new InvalidOperationException("No database provider has been configured."); } - var rootCommand = new RootCommand($"Upgrade the {this.applicationName} database.") - { - new SqlServerConnectionStringArgument(this.databaseProvider, "connection-string") - { - Description = "The connection string to the database to upgrade", - }, - }; - - rootCommand.Options.Add(new Option("--access-token") - { - Description = "Access token to connect to the SQL database.", - Required = false, - }); - - rootCommand.Options.Add(new Option("--command-timeout") - { - DefaultValueFactory = _ => DefaultCommandTimeout, - Description = "Maximum time in seconds to execute each SQL statements.", - Required = false, - }); - - // Gets the migration assembly and add the current assembly if not specified. - var migrationsAssemblies = this.migrationsAssemblies.ToList(); - - if (migrationsAssemblies.Count == 0) - { - migrationsAssemblies.Add(this.callingAssembly.GetName().Name!); - } - - var databaseUpdater = new EntityFrameworkDatabaseUpdater(this.databaseProvider, migrationsAssemblies); - - rootCommand.Action = CommandHandler.Create(databaseUpdater.UpgradeAsync); - - var commandLine = new CommandLineConfiguration(rootCommand) - .UseHost( - _ => Host.CreateDefaultBuilder(), - hostBuilder => - { - foreach (var loggerBuilder in this.loggerBuilders) - { - hostBuilder.ConfigureLogging(loggerBuilder); - } - - hostBuilder.ConfigureServices(services => - { - }); - }); - - return new CommandLineDatabaseUpdater(commandLine); + return new CommandLineDatabaseUpdater(this); } internal DatabaseUpdaterBuilder UseDatabaseProvider(IDatabaseProvider databaseProvider) @@ -169,18 +136,87 @@ internal DatabaseUpdaterBuilder UseDatabaseProvider(IDatabaseProvider databasePr private sealed class CommandLineDatabaseUpdater : IDatabaseUpdater { + private readonly DatabaseUpdaterBuilder builder; + private readonly CommandLineConfiguration commandLine; - public CommandLineDatabaseUpdater(CommandLineConfiguration commandLine) + private readonly EntityFrameworkDatabaseUpdater databaseUpdater; + + public CommandLineDatabaseUpdater(DatabaseUpdaterBuilder builder) { - this.commandLine = commandLine; + this.builder = builder; + + var rootCommand = new RootCommand($"Upgrade the {this.builder.applicationName} database.") + { + new SqlServerConnectionStringArgument(this.builder.databaseProvider!, "connection-string") + { + Description = "The connection string to the database to upgrade", + }, + }; + + rootCommand.Options.Add(new Option("--access-token") + { + Description = "Access token to connect to the SQL database.", + Required = false, + }); + + rootCommand.Options.Add(new Option("--command-timeout") + { + DefaultValueFactory = _ => DefaultCommandTimeout, + Description = "Maximum time in seconds to execute each SQL statements.", + Required = false, + }); + + // Gets the migration assembly and add the current assembly if not specified. + var migrationsAssemblies = this.builder.migrationsAssemblies.ToList(); + + if (migrationsAssemblies.Count == 0) + { + migrationsAssemblies.Add(this.builder.callingAssembly.GetName().Name!); + } + + this.databaseUpdater = new EntityFrameworkDatabaseUpdater(this.builder.databaseProvider!, migrationsAssemblies); + + rootCommand.Action = CommandHandler.Create(this.databaseUpdater.UpgradeAsync); + + this.commandLine = new CommandLineConfiguration(rootCommand) + .UseHost( + _ => Host.CreateDefaultBuilder(), + hostBuilder => + { + foreach (var loggerBuilder in this.builder.loggerBuilders) + { + hostBuilder.ConfigureLogging(loggerBuilder); + } + + hostBuilder.ConfigureServices(services => + { + }); + }); } public async Task UpgradeAsync(IReadOnlyList args, CancellationToken cancellationToken = default) { var parseResult = this.commandLine.Parse(args); - return await parseResult.InvokeAsync(cancellationToken); + var exitCode = await parseResult.InvokeAsync(cancellationToken); + + if (this.databaseUpdater.CapturedException is not null) + { + var options = new DatabaseUpdaterOptions(); + + foreach (var configureOptions in this.builder.configureOptions) + { + configureOptions(options); + } + + if (options.ThrowExceptionOnError) + { + this.databaseUpdater.CapturedException.Throw(); + } + } + + return exitCode; } } } diff --git a/src/Database.Updater/DatabaseUpdaterOptions.cs b/src/Database.Updater/DatabaseUpdaterOptions.cs new file mode 100644 index 0000000..54c7d7a --- /dev/null +++ b/src/Database.Updater/DatabaseUpdaterOptions.cs @@ -0,0 +1,20 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) P.O.S Informatique. All rights reserved. +// +//----------------------------------------------------------------------- + +namespace PosInformatique.Database.Updater +{ + /// + /// Options for the . + /// + public class DatabaseUpdaterOptions + { + /// + /// Gets or sets a value indicating whether an exception should be thrown if an error occurs during the migration + /// instead to return an error code. + /// + public bool ThrowExceptionOnError { get; set; } + } +} diff --git a/src/Database.Updater/EntityFrameworkDatabaseUpdater.cs b/src/Database.Updater/EntityFrameworkDatabaseUpdater.cs index 95985d5..bf54b1b 100644 --- a/src/Database.Updater/EntityFrameworkDatabaseUpdater.cs +++ b/src/Database.Updater/EntityFrameworkDatabaseUpdater.cs @@ -6,6 +6,7 @@ namespace PosInformatique.Database.Updater { + using System.Runtime.ExceptionServices; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; @@ -23,6 +24,8 @@ public EntityFrameworkDatabaseUpdater(IDatabaseProvider databaseProvider, IReadO this.migrationsAssemblies = migrationsAssemblies; } + public ExceptionDispatchInfo? CapturedException { get; private set; } + public async Task UpgradeAsync(string connectionString, int commandTimeout, string? accessToken, IHost host, CancellationToken cancellationToken) { var loggerFactory = host.Services.GetRequiredService(); @@ -45,6 +48,8 @@ public async Task UpgradeAsync(string connectionString, int commandTimeout, } catch (Exception exception) { + this.CapturedException = ExceptionDispatchInfo.Capture(exception); + logger.LogError(exception, exception.Message); return 99; diff --git a/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs b/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs index ec1704c..f242409 100644 --- a/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs +++ b/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs @@ -71,6 +71,41 @@ public async Task UpgradeAsync_WithErrorMigrationsAssembly() loggingProvider.Output.Should().Be("[PosInformatique.Database.Updater.EntityFrameworkDatabaseUpdater] (Error) : Some errors occured during the migration...\r\n"); } + [Fact] + public async Task UpgradeAsync_WithThrowException() + { + var server = new SqlServer(ConnectionString); + + var database = await server.CreateEmptyDatabaseAsync("DatabaseUpdaterTest_UpgradeAsync_WithErrorMigrationsAssembly"); + + var loggingProvider = new InMemoryLoggingProvider(); + + var databaseUpdaterBuilder = new DatabaseUpdaterBuilder("MyApplication") + .Configure(opt => + { + opt.ThrowExceptionOnError = false; + }) + .Configure(opt => + { + opt.ThrowExceptionOnError = true; + }) + .ConfigureLogging(l => + { + l.AddProvider(loggingProvider) + .SetMinimumLevel(LogLevel.Error); + }) + .UseSqlServer() + .UseMigrationsAssembly(typeof(MigrationsErrorAssembly.Version1).Assembly); + var databaseUpdater = databaseUpdaterBuilder + .Build(); + + await databaseUpdater.Invoking(du => du.UpgradeAsync([database.ConnectionString])) + .Should().ThrowExactlyAsync() + .WithMessage("Some errors occured during the migration..."); + + loggingProvider.Output.Should().Be("[PosInformatique.Database.Updater.EntityFrameworkDatabaseUpdater] (Error) : Some errors occured during the migration...\r\n"); + } + [Fact] public async Task UpgradeAsync_NoArguments() { From 908600d9f683030b9cdec7226dbbb9221ba92d06 Mon Sep 17 00:00:00 2001 From: Gilles TOURREAU Date: Thu, 11 Sep 2025 12:15:19 +0200 Subject: [PATCH 11/27] Use the last version of the PosInformatique.Testing.Databases packages. --- Directory.Packages.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 2510b72..c1cf84f 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -7,7 +7,7 @@ - + From 6c63c50ea071d03abcd5f583cf4196e4c71868e4 Mon Sep 17 00:00:00 2001 From: Gilles TOURREAU Date: Mon, 22 Sep 2025 12:12:04 +0200 Subject: [PATCH 12/27] Remove usage of System.CommandLine.Hosting --- Directory.Packages.props | 5 +- src/Database.Updater/Database.Updater.csproj | 3 +- .../DatabaseUpdaterBuilder.cs | 81 ++++++++++++------- src/Database.Updater/IDatabaseUpdater.cs | 2 +- 4 files changed, 56 insertions(+), 35 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index c1cf84f..24d54bd 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -6,10 +6,11 @@ + - + - + diff --git a/src/Database.Updater/Database.Updater.csproj b/src/Database.Updater/Database.Updater.csproj index e11b915..5237ce1 100644 --- a/src/Database.Updater/Database.Updater.csproj +++ b/src/Database.Updater/Database.Updater.csproj @@ -19,7 +19,8 @@ - + + diff --git a/src/Database.Updater/DatabaseUpdaterBuilder.cs b/src/Database.Updater/DatabaseUpdaterBuilder.cs index 11beeab..865d359 100644 --- a/src/Database.Updater/DatabaseUpdaterBuilder.cs +++ b/src/Database.Updater/DatabaseUpdaterBuilder.cs @@ -7,8 +7,6 @@ namespace PosInformatique.Database.Updater { using System.CommandLine; - using System.CommandLine.Hosting; - using System.CommandLine.NamingConventionBinder; using System.Reflection; using System.Threading; using System.Threading.Tasks; @@ -41,10 +39,10 @@ public sealed class DatabaseUpdaterBuilder private readonly IList migrationsAssemblies; - private readonly IList> loggerBuilders; - private readonly IList> configureOptions; + private readonly IHostBuilder hostBuilder; + private IDatabaseProvider? databaseProvider; /// @@ -61,8 +59,9 @@ public DatabaseUpdaterBuilder(string applicationName) this.applicationName = applicationName; this.migrationsAssemblies = new List(); - this.loggerBuilders = new List>(); this.configureOptions = new List>(); + + this.hostBuilder = Host.CreateDefaultBuilder(); } /// @@ -85,7 +84,7 @@ public DatabaseUpdaterBuilder Configure(Action options) /// The current instance to continue the configuration. public DatabaseUpdaterBuilder ConfigureLogging(Action builder) { - this.loggerBuilders.Add(builder); + this.hostBuilder.ConfigureLogging(builder); return this; } @@ -138,35 +137,43 @@ private sealed class CommandLineDatabaseUpdater : IDatabaseUpdater { private readonly DatabaseUpdaterBuilder builder; - private readonly CommandLineConfiguration commandLine; + private readonly RootCommand commandLine; private readonly EntityFrameworkDatabaseUpdater databaseUpdater; + private readonly SqlServerConnectionStringArgument connectionStringArgument; + + private IHost? host; + public CommandLineDatabaseUpdater(DatabaseUpdaterBuilder builder) { this.builder = builder; - var rootCommand = new RootCommand($"Upgrade the {this.builder.applicationName} database.") + this.connectionStringArgument = new SqlServerConnectionStringArgument(this.builder.databaseProvider!, "connection-string") { - new SqlServerConnectionStringArgument(this.builder.databaseProvider!, "connection-string") - { - Description = "The connection string to the database to upgrade", - }, + Description = "The connection string to the database to upgrade", }; - rootCommand.Options.Add(new Option("--access-token") + this.commandLine = new RootCommand($"Upgrade the {this.builder.applicationName} database.") + { + this.connectionStringArgument, + }; + + this.commandLine.Options.Add(new Option("--access-token") { Description = "Access token to connect to the SQL database.", Required = false, }); - rootCommand.Options.Add(new Option("--command-timeout") + this.commandLine.Options.Add(new Option("--command-timeout") { DefaultValueFactory = _ => DefaultCommandTimeout, Description = "Maximum time in seconds to execute each SQL statements.", Required = false, }); + this.commandLine.SetAction(this.ExecuteMigrationAsync); + // Gets the migration assembly and add the current assembly if not specified. var migrationsAssemblies = this.builder.migrationsAssemblies.ToList(); @@ -177,29 +184,23 @@ public CommandLineDatabaseUpdater(DatabaseUpdaterBuilder builder) this.databaseUpdater = new EntityFrameworkDatabaseUpdater(this.builder.databaseProvider!, migrationsAssemblies); - rootCommand.Action = CommandHandler.Create(this.databaseUpdater.UpgradeAsync); - - this.commandLine = new CommandLineConfiguration(rootCommand) - .UseHost( - _ => Host.CreateDefaultBuilder(), - hostBuilder => - { - foreach (var loggerBuilder in this.builder.loggerBuilders) - { - hostBuilder.ConfigureLogging(loggerBuilder); - } - - hostBuilder.ConfigureServices(services => - { - }); - }); + this.host = builder.hostBuilder.Build(); + } + + public void Dispose() + { + if (this.host is not null) + { + this.host.Dispose(); + this.host = null; + } } public async Task UpgradeAsync(IReadOnlyList args, CancellationToken cancellationToken = default) { var parseResult = this.commandLine.Parse(args); - var exitCode = await parseResult.InvokeAsync(cancellationToken); + var exitCode = await parseResult.InvokeAsync(cancellationToken: cancellationToken); if (this.databaseUpdater.CapturedException is not null) { @@ -218,6 +219,24 @@ public async Task UpgradeAsync(IReadOnlyList args, CancellationToke return exitCode; } + + private async Task ExecuteMigrationAsync(ParseResult parseResult, CancellationToken cancellationToken = default) + { + ObjectDisposedException.ThrowIf(this.host is null, this); + + await this.host.StartAsync(); + + var exitCode = await this.databaseUpdater.UpgradeAsync( + parseResult.GetRequiredValue(this.connectionStringArgument), + 1123, //TOD + null,//DO + this.host, + cancellationToken); + + await this.host.StopAsync(); + + return exitCode; + } } } } diff --git a/src/Database.Updater/IDatabaseUpdater.cs b/src/Database.Updater/IDatabaseUpdater.cs index d0345c8..036118d 100644 --- a/src/Database.Updater/IDatabaseUpdater.cs +++ b/src/Database.Updater/IDatabaseUpdater.cs @@ -9,7 +9,7 @@ namespace PosInformatique.Database.Updater /// /// Allows to perform the migration of the database. /// - public interface IDatabaseUpdater + public interface IDatabaseUpdater : IDisposable { /// /// Performs the migration of the database. From d338638282e5855938d794f2456502e8ef0e7ad5 Mon Sep 17 00:00:00 2001 From: Gilles TOURREAU Date: Mon, 22 Sep 2025 14:01:12 +0200 Subject: [PATCH 13/27] Remove the explicit try/catch mechanism of the exceptions in the EntityFrameworkDatabaseUpdater.UpgradeAsync() class. --- .../DatabaseUpdaterBuilder.cs | 59 ++++++++++--------- .../EntityFrameworkDatabaseUpdater.cs | 16 +---- .../DatabaseUpdaterTest.cs | 50 ++++++++++++++++ 3 files changed, 81 insertions(+), 44 deletions(-) diff --git a/src/Database.Updater/DatabaseUpdaterBuilder.cs b/src/Database.Updater/DatabaseUpdaterBuilder.cs index 865d359..81335fb 100644 --- a/src/Database.Updater/DatabaseUpdaterBuilder.cs +++ b/src/Database.Updater/DatabaseUpdaterBuilder.cs @@ -12,8 +12,10 @@ namespace PosInformatique.Database.Updater using System.Threading.Tasks; using Microsoft.Data.SqlClient; using Microsoft.EntityFrameworkCore.Migrations; + using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; + using Microsoft.Extensions.Options; using PosInformatique.Database.Updater.SqlServer; /// @@ -39,8 +41,6 @@ public sealed class DatabaseUpdaterBuilder private readonly IList migrationsAssemblies; - private readonly IList> configureOptions; - private readonly IHostBuilder hostBuilder; private IDatabaseProvider? databaseProvider; @@ -59,7 +59,6 @@ public DatabaseUpdaterBuilder(string applicationName) this.applicationName = applicationName; this.migrationsAssemblies = new List(); - this.configureOptions = new List>(); this.hostBuilder = Host.CreateDefaultBuilder(); } @@ -71,7 +70,10 @@ public DatabaseUpdaterBuilder(string applicationName) /// The current instance to continue the configuration. public DatabaseUpdaterBuilder Configure(Action options) { - this.configureOptions.Add(options); + this.hostBuilder.ConfigureServices(s => + { + s.Configure(options); + }); return this; } @@ -200,24 +202,9 @@ public async Task UpgradeAsync(IReadOnlyList args, CancellationToke { var parseResult = this.commandLine.Parse(args); - var exitCode = await parseResult.InvokeAsync(cancellationToken: cancellationToken); - - if (this.databaseUpdater.CapturedException is not null) - { - var options = new DatabaseUpdaterOptions(); - - foreach (var configureOptions in this.builder.configureOptions) - { - configureOptions(options); - } + var invocationConfiguration = new InvocationConfiguration() { EnableDefaultExceptionHandler = false }; - if (options.ThrowExceptionOnError) - { - this.databaseUpdater.CapturedException.Throw(); - } - } - - return exitCode; + return await parseResult.InvokeAsync(invocationConfiguration, cancellationToken: cancellationToken); } private async Task ExecuteMigrationAsync(ParseResult parseResult, CancellationToken cancellationToken = default) @@ -226,16 +213,30 @@ private async Task ExecuteMigrationAsync(ParseResult parseResult, Cancellat await this.host.StartAsync(); - var exitCode = await this.databaseUpdater.UpgradeAsync( - parseResult.GetRequiredValue(this.connectionStringArgument), - 1123, //TOD - null,//DO - this.host, - cancellationToken); + try + { + return await this.databaseUpdater.UpgradeAsync( + parseResult.GetRequiredValue(this.connectionStringArgument), + 1123, //TODO + null, //TODO + this.host, + cancellationToken); + } + catch (Exception) + { + var options = this.host.Services.GetRequiredService>(); - await this.host.StopAsync(); + if (options.Value.ThrowExceptionOnError) + { + throw; + } - return exitCode; + return 99; + } + finally + { + await this.host.StopAsync(); + } } } } diff --git a/src/Database.Updater/EntityFrameworkDatabaseUpdater.cs b/src/Database.Updater/EntityFrameworkDatabaseUpdater.cs index bf54b1b..19a9d95 100644 --- a/src/Database.Updater/EntityFrameworkDatabaseUpdater.cs +++ b/src/Database.Updater/EntityFrameworkDatabaseUpdater.cs @@ -6,7 +6,6 @@ namespace PosInformatique.Database.Updater { - using System.Runtime.ExceptionServices; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; @@ -24,8 +23,6 @@ public EntityFrameworkDatabaseUpdater(IDatabaseProvider databaseProvider, IReadO this.migrationsAssemblies = migrationsAssemblies; } - public ExceptionDispatchInfo? CapturedException { get; private set; } - public async Task UpgradeAsync(string connectionString, int commandTimeout, string? accessToken, IHost host, CancellationToken cancellationToken) { var loggerFactory = host.Services.GetRequiredService(); @@ -42,18 +39,7 @@ public async Task UpgradeAsync(string connectionString, int commandTimeout, using (var context = new DbContext(builder.Options)) { - try - { - await context.Database.MigrateAsync(cancellationToken); - } - catch (Exception exception) - { - this.CapturedException = ExceptionDispatchInfo.Capture(exception); - - logger.LogError(exception, exception.Message); - - return 99; - } + await context.Database.MigrateAsync(cancellationToken); } } diff --git a/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs b/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs index f242409..5ba0753 100644 --- a/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs +++ b/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs @@ -74,6 +74,9 @@ public async Task UpgradeAsync_WithErrorMigrationsAssembly() [Fact] public async Task UpgradeAsync_WithThrowException() { + using var output = new StringWriter(); + Console.SetOut(output); + var server = new SqlServer(ConnectionString); var database = await server.CreateEmptyDatabaseAsync("DatabaseUpdaterTest_UpgradeAsync_WithErrorMigrationsAssembly"); @@ -104,11 +107,15 @@ await databaseUpdater.Invoking(du => du.UpgradeAsync([database.ConnectionString] .WithMessage("Some errors occured during the migration..."); loggingProvider.Output.Should().Be("[PosInformatique.Database.Updater.EntityFrameworkDatabaseUpdater] (Error) : Some errors occured during the migration...\r\n"); + output.ToString().Should().BeEmpty(); } [Fact] public async Task UpgradeAsync_NoArguments() { + using var output = new StringWriter(); + Console.SetOut(output); + var databaseUpdaterBuilder = new DatabaseUpdaterBuilder("MyApplication"); var databaseUpdater = databaseUpdaterBuilder .UseSqlServer() @@ -117,6 +124,26 @@ public async Task UpgradeAsync_NoArguments() var result = await databaseUpdater.UpgradeAsync([]); result.Should().Be(1); + + output.ToString().Should().Be( + """ + Description: + Upgrade the MyApplication database. + + Usage: + testhost [options] + + Arguments: + The connection string to the database to upgrade + + Options: + --access-token Access token to connect to the SQL database. + --command-timeout Maximum time in seconds to execute each SQL statements. [default: 30] + -?, -h, --help Show help and usage information + --version Show version information + + + """); } [Theory] @@ -124,6 +151,9 @@ public async Task UpgradeAsync_NoArguments() [InlineData(ConnectionString, "--command-timeout=abcd")] public async Task UpgradeAsync_WrongArguments(params string[] args) { + using var output = new StringWriter(); + Console.SetOut(output); + var databaseUpdaterBuilder = new DatabaseUpdaterBuilder("MyApplication"); var databaseUpdater = databaseUpdaterBuilder .UseSqlServer() @@ -132,6 +162,26 @@ public async Task UpgradeAsync_WrongArguments(params string[] args) var result = await databaseUpdater.UpgradeAsync(args); result.Should().Be(1); + + output.ToString().Should().Be( + """ + Description: + Upgrade the MyApplication database. + + Usage: + testhost [options] + + Arguments: + The connection string to the database to upgrade + + Options: + --access-token Access token to connect to the SQL database. + --command-timeout Maximum time in seconds to execute each SQL statements. [default: 30] + -?, -h, --help Show help and usage information + --version Show version information + + + """); } } } \ No newline at end of file From 4936f8c4fa7652463065695def7f0941602b44e5 Mon Sep 17 00:00:00 2001 From: Gilles TOURREAU Date: Mon, 22 Sep 2025 15:06:58 +0200 Subject: [PATCH 14/27] Refactoring/simplify the architecture of the migration process. --- ...cs => DatabaseConnectionStringArgument.cs} | 8 +- .../DatabaseMigrationContext.cs | 27 +++++ .../DatabaseUpdaterBuilder.cs | 108 +++++++++++------- .../EntityFrameworkDatabaseMigrationEngine.cs | 41 +++++++ .../EntityFrameworkDatabaseUpdater.cs | 49 -------- .../IDatabaseMigrationContext.cs | 36 ++++++ .../IDatabaseMigrationEngine.cs | 22 ++++ src/Database.Updater/IDatabaseProvider.cs | 11 +- .../SqlServer/SqlServerDatabaseProvider.cs | 14 +-- ...lServerDatabaseUpdaterBuilderExtensions.cs | 2 +- .../DatabaseUpdaterTest.cs | 12 +- 11 files changed, 216 insertions(+), 114 deletions(-) rename src/Database.Updater/{SqlServer/SqlServerConnectionStringArgument.cs => DatabaseConnectionStringArgument.cs} (75%) create mode 100644 src/Database.Updater/DatabaseMigrationContext.cs create mode 100644 src/Database.Updater/EntityFrameworkDatabaseMigrationEngine.cs delete mode 100644 src/Database.Updater/EntityFrameworkDatabaseUpdater.cs create mode 100644 src/Database.Updater/IDatabaseMigrationContext.cs create mode 100644 src/Database.Updater/IDatabaseMigrationEngine.cs diff --git a/src/Database.Updater/SqlServer/SqlServerConnectionStringArgument.cs b/src/Database.Updater/DatabaseConnectionStringArgument.cs similarity index 75% rename from src/Database.Updater/SqlServer/SqlServerConnectionStringArgument.cs rename to src/Database.Updater/DatabaseConnectionStringArgument.cs index 944d45b..eea00fc 100644 --- a/src/Database.Updater/SqlServer/SqlServerConnectionStringArgument.cs +++ b/src/Database.Updater/DatabaseConnectionStringArgument.cs @@ -1,21 +1,21 @@ //----------------------------------------------------------------------- -// +// // Copyright (c) P.O.S Informatique. All rights reserved. // //----------------------------------------------------------------------- -namespace PosInformatique.Database.Updater.SqlServer +namespace PosInformatique.Database.Updater { using System.CommandLine; using System.CommandLine.Parsing; using System.Diagnostics.CodeAnalysis; [ExcludeFromCodeCoverage] - internal class SqlServerConnectionStringArgument : Argument + internal class DatabaseConnectionStringArgument : Argument { private readonly IDatabaseProvider databaseProvider; - public SqlServerConnectionStringArgument(IDatabaseProvider databaseProvider, string name) + public DatabaseConnectionStringArgument(IDatabaseProvider databaseProvider, string name) : base(name) { this.databaseProvider = databaseProvider; diff --git a/src/Database.Updater/DatabaseMigrationContext.cs b/src/Database.Updater/DatabaseMigrationContext.cs new file mode 100644 index 0000000..b42cb47 --- /dev/null +++ b/src/Database.Updater/DatabaseMigrationContext.cs @@ -0,0 +1,27 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) P.O.S Informatique. All rights reserved. +// +//----------------------------------------------------------------------- + +namespace PosInformatique.Database.Updater +{ + using System.Collections.ObjectModel; + + internal sealed class DatabaseMigrationContext : IDatabaseMigrationContext + { + public DatabaseMigrationContext(string connectionString, IList assemblies) + { + this.Assemblies = new ReadOnlyCollection(assemblies); + this.ConnectionString = connectionString; + } + + public string? AccessToken { get; set; } + + public ReadOnlyCollection Assemblies { get; } + + public int CommandTimeout { get; set; } + + public string ConnectionString { get; } + } +} diff --git a/src/Database.Updater/DatabaseUpdaterBuilder.cs b/src/Database.Updater/DatabaseUpdaterBuilder.cs index 81335fb..4c2ff09 100644 --- a/src/Database.Updater/DatabaseUpdaterBuilder.cs +++ b/src/Database.Updater/DatabaseUpdaterBuilder.cs @@ -39,12 +39,10 @@ public sealed class DatabaseUpdaterBuilder private readonly Assembly callingAssembly; - private readonly IList migrationsAssemblies; + private readonly List migrationsAssemblies; private readonly IHostBuilder hostBuilder; - private IDatabaseProvider? databaseProvider; - /// /// Initializes a new instance of the class. /// @@ -61,6 +59,10 @@ public DatabaseUpdaterBuilder(string applicationName) this.migrationsAssemblies = new List(); this.hostBuilder = Host.CreateDefaultBuilder(); + this.hostBuilder.ConfigureServices(services => + { + services.AddSingleton(); + }); } /// @@ -70,9 +72,9 @@ public DatabaseUpdaterBuilder(string applicationName) /// The current instance to continue the configuration. public DatabaseUpdaterBuilder Configure(Action options) { - this.hostBuilder.ConfigureServices(s => + this.hostBuilder.ConfigureServices(services => { - s.Configure(options); + services.Configure(options); }); return this; @@ -120,17 +122,16 @@ public DatabaseUpdaterBuilder UseMigrationsAssembly(Assembly assembly) /// No database provider has been configured. public IDatabaseUpdater Build() { - if (this.databaseProvider is null) - { - throw new InvalidOperationException("No database provider has been configured."); - } - return new CommandLineDatabaseUpdater(this); } - internal DatabaseUpdaterBuilder UseDatabaseProvider(IDatabaseProvider databaseProvider) + internal DatabaseUpdaterBuilder UseDatabaseProvider() + where TDatabaseProvider : class, IDatabaseProvider { - this.databaseProvider = databaseProvider; + this.hostBuilder.ConfigureServices(services => + { + services.AddSingleton(); + }); return this; } @@ -141,52 +142,56 @@ private sealed class CommandLineDatabaseUpdater : IDatabaseUpdater private readonly RootCommand commandLine; - private readonly EntityFrameworkDatabaseUpdater databaseUpdater; + private readonly DatabaseConnectionStringArgument connectionStringArgument; - private readonly SqlServerConnectionStringArgument connectionStringArgument; + private readonly Option accessTokenOption; + + private readonly Option commandTimeoutOption; private IHost? host; public CommandLineDatabaseUpdater(DatabaseUpdaterBuilder builder) { this.builder = builder; + this.host = builder.hostBuilder.Build(); - this.connectionStringArgument = new SqlServerConnectionStringArgument(this.builder.databaseProvider!, "connection-string") + var databaseProvider = this.host.Services.GetService(); + + if (databaseProvider == null) { - Description = "The connection string to the database to upgrade", - }; + throw new InvalidOperationException("No database provider has been configured."); + } + + this.commandLine = new RootCommand($"Upgrade the {this.builder.applicationName} database."); - this.commandLine = new RootCommand($"Upgrade the {this.builder.applicationName} database.") + // Connection string argument + this.connectionStringArgument = new DatabaseConnectionStringArgument(databaseProvider, "connection-string") { - this.connectionStringArgument, + Description = "The connection string to the database to upgrade", }; - this.commandLine.Options.Add(new Option("--access-token") + this.commandLine.Add(this.connectionStringArgument); + + // Access token option "--access-token" + this.accessTokenOption = new Option("--access-token") { Description = "Access token to connect to the SQL database.", Required = false, - }); + }; + + this.commandLine.Options.Add(this.accessTokenOption); - this.commandLine.Options.Add(new Option("--command-timeout") + // Command timeout option "--command-timeout" + this.commandTimeoutOption = new Option("--command-timeout") { DefaultValueFactory = _ => DefaultCommandTimeout, Description = "Maximum time in seconds to execute each SQL statements.", Required = false, - }); - - this.commandLine.SetAction(this.ExecuteMigrationAsync); - - // Gets the migration assembly and add the current assembly if not specified. - var migrationsAssemblies = this.builder.migrationsAssemblies.ToList(); - - if (migrationsAssemblies.Count == 0) - { - migrationsAssemblies.Add(this.builder.callingAssembly.GetName().Name!); - } + }; - this.databaseUpdater = new EntityFrameworkDatabaseUpdater(this.builder.databaseProvider!, migrationsAssemblies); + this.commandLine.Options.Add(this.commandTimeoutOption); - this.host = builder.hostBuilder.Build(); + this.commandLine.SetAction(this.ExecuteMigrationAsync); } public void Dispose() @@ -211,19 +216,36 @@ private async Task ExecuteMigrationAsync(ParseResult parseResult, Cancellat { ObjectDisposedException.ThrowIf(this.host is null, this); - await this.host.StartAsync(); + var logger = this.host.Services.GetRequiredService>(); try { - return await this.databaseUpdater.UpgradeAsync( + await this.host.StartAsync(cancellationToken); + + // Gets the migration assembly and add the current assembly if not specified. + var migrationsAssemblies = this.builder.migrationsAssemblies.ToList(); + + if (migrationsAssemblies.Count == 0) + { + migrationsAssemblies.Add(this.builder.callingAssembly.GetName().Name!); + } + + var context = new DatabaseMigrationContext( parseResult.GetRequiredValue(this.connectionStringArgument), - 1123, //TODO - null, //TODO - this.host, - cancellationToken); + migrationsAssemblies) + { + AccessToken = parseResult.GetValue(this.accessTokenOption), + CommandTimeout = parseResult.GetValue(this.commandTimeoutOption), + }; + + var migrationEngine = this.host.Services.GetRequiredService(); + + return await migrationEngine.UpgradeAsync(context, cancellationToken); } - catch (Exception) + catch (Exception exception) { + logger.LogError(exception, exception.Message); + var options = this.host.Services.GetRequiredService>(); if (options.Value.ThrowExceptionOnError) @@ -235,7 +257,7 @@ private async Task ExecuteMigrationAsync(ParseResult parseResult, Cancellat } finally { - await this.host.StopAsync(); + await this.host.StopAsync(cancellationToken); } } } diff --git a/src/Database.Updater/EntityFrameworkDatabaseMigrationEngine.cs b/src/Database.Updater/EntityFrameworkDatabaseMigrationEngine.cs new file mode 100644 index 0000000..5b2b19c --- /dev/null +++ b/src/Database.Updater/EntityFrameworkDatabaseMigrationEngine.cs @@ -0,0 +1,41 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) P.O.S Informatique. All rights reserved. +// +//----------------------------------------------------------------------- + +namespace PosInformatique.Database.Updater +{ + using Microsoft.EntityFrameworkCore; + using Microsoft.Extensions.Logging; + + internal sealed class EntityFrameworkDatabaseMigrationEngine : IDatabaseMigrationEngine + { + private readonly IDatabaseProvider databaseProvider; + + private readonly ILoggerFactory loggerFactory; + + public EntityFrameworkDatabaseMigrationEngine(IDatabaseProvider databaseProvider, ILoggerFactory loggerFactory) + { + this.databaseProvider = databaseProvider; + this.loggerFactory = loggerFactory; + } + + public async Task UpgradeAsync(IDatabaseMigrationContext context, CancellationToken cancellationToken = default) + { + using (var connection = this.databaseProvider.CreateConnection(context)) + { + var builder = this.databaseProvider.CreateDbContextOptionsBuilder(connection, context); + + builder.UseLoggerFactory(this.loggerFactory); + + using (var dbContext = new DbContext(builder.Options)) + { + await dbContext.Database.MigrateAsync(cancellationToken); + } + } + + return 0; + } + } +} diff --git a/src/Database.Updater/EntityFrameworkDatabaseUpdater.cs b/src/Database.Updater/EntityFrameworkDatabaseUpdater.cs deleted file mode 100644 index 19a9d95..0000000 --- a/src/Database.Updater/EntityFrameworkDatabaseUpdater.cs +++ /dev/null @@ -1,49 +0,0 @@ -//----------------------------------------------------------------------- -// -// Copyright (c) P.O.S Informatique. All rights reserved. -// -//----------------------------------------------------------------------- - -namespace PosInformatique.Database.Updater -{ - using Microsoft.EntityFrameworkCore; - using Microsoft.Extensions.DependencyInjection; - using Microsoft.Extensions.Hosting; - using Microsoft.Extensions.Logging; - - internal sealed class EntityFrameworkDatabaseUpdater - { - private readonly IDatabaseProvider databaseProvider; - - private readonly IReadOnlyList migrationsAssemblies; - - public EntityFrameworkDatabaseUpdater(IDatabaseProvider databaseProvider, IReadOnlyList migrationsAssemblies) - { - this.databaseProvider = databaseProvider; - this.migrationsAssemblies = migrationsAssemblies; - } - - public async Task UpgradeAsync(string connectionString, int commandTimeout, string? accessToken, IHost host, CancellationToken cancellationToken) - { - var loggerFactory = host.Services.GetRequiredService(); - var logger = loggerFactory.CreateLogger(); - - using (var connection = this.databaseProvider.CreateConnection(connectionString, commandTimeout, accessToken)) - { - var builder = this.databaseProvider.CreateDbContextOptionsBuilder( - connection, - this.migrationsAssemblies, - commandTimeout); - - builder.UseLoggerFactory(loggerFactory); - - using (var context = new DbContext(builder.Options)) - { - await context.Database.MigrateAsync(cancellationToken); - } - } - - return 0; - } - } -} diff --git a/src/Database.Updater/IDatabaseMigrationContext.cs b/src/Database.Updater/IDatabaseMigrationContext.cs new file mode 100644 index 0000000..d517900 --- /dev/null +++ b/src/Database.Updater/IDatabaseMigrationContext.cs @@ -0,0 +1,36 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) P.O.S Informatique. All rights reserved. +// +//----------------------------------------------------------------------- + +namespace PosInformatique.Database.Updater +{ + using System.Collections.ObjectModel; + + /// + /// Represents the context of the current database migration performed by the . + /// + internal interface IDatabaseMigrationContext + { + /// + /// Gets the access token (if need) used to authenticate on database server. + /// + string? AccessToken { get; } + + /// + /// Gets the assemblies which contains the Entity Framework Core migrations to execute. + /// + ReadOnlyCollection Assemblies { get; } + + /// + /// Gets the timeout allowed to a SQL command to be executed. + /// + int CommandTimeout { get; } + + /// + /// Gets the connection string to the database to upgrade. + /// + string ConnectionString { get; } + } +} diff --git a/src/Database.Updater/IDatabaseMigrationEngine.cs b/src/Database.Updater/IDatabaseMigrationEngine.cs new file mode 100644 index 0000000..d72f4c9 --- /dev/null +++ b/src/Database.Updater/IDatabaseMigrationEngine.cs @@ -0,0 +1,22 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) P.O.S Informatique. All rights reserved. +// +//----------------------------------------------------------------------- + +namespace PosInformatique.Database.Updater +{ + /// + /// Represents the engine which will perform the migration of the database. + /// + internal interface IDatabaseMigrationEngine + { + /// + /// Performs the migration to the database. + /// + /// Migration database context. + /// which allows to cancel the migration. + /// A instance which represents the asynchronous operation and contains the exit code of the application. + Task UpgradeAsync(IDatabaseMigrationContext context, CancellationToken cancellationToken = default); + } +} diff --git a/src/Database.Updater/IDatabaseProvider.cs b/src/Database.Updater/IDatabaseProvider.cs index 0e76282..dcef04f 100644 --- a/src/Database.Updater/IDatabaseProvider.cs +++ b/src/Database.Updater/IDatabaseProvider.cs @@ -17,22 +17,19 @@ internal interface IDatabaseProvider /// /// Creates a to the database. /// - /// Connection string to the database. - /// Timeout for the command execution. - /// Access token for authentication if need. + /// Migration database context. /// The which allows to connect to the database. - DbConnection CreateConnection(string connectionString, int commandTimeout, string? accessToken); + DbConnection CreateConnection(IDatabaseMigrationContext migrationContext); /// /// Creates an instance of the to create a /// which will be used for the Entity Framework migrations. /// /// to the database. - /// List of the assemblies that contains the migrations to execute. - /// Timeout for the command execution. + /// Migration database context. /// An instance of the to create a /// which will be used for the Entity Framework migrations. - DbContextOptionsBuilder CreateDbContextOptionsBuilder(DbConnection connection, IReadOnlyList migrationsAssemblies, int commandTimeout); + DbContextOptionsBuilder CreateDbContextOptionsBuilder(DbConnection connection, IDatabaseMigrationContext migrationContext); /// /// Validates the specified connection string. diff --git a/src/Database.Updater/SqlServer/SqlServerDatabaseProvider.cs b/src/Database.Updater/SqlServer/SqlServerDatabaseProvider.cs index a9c7ff6..7973348 100644 --- a/src/Database.Updater/SqlServer/SqlServerDatabaseProvider.cs +++ b/src/Database.Updater/SqlServer/SqlServerDatabaseProvider.cs @@ -16,29 +16,29 @@ public SqlServerDatabaseProvider() { } - public DbConnection CreateConnection(string connectionString, int commandTimeout, string? accessToken) + public DbConnection CreateConnection(IDatabaseMigrationContext migrationContext) { - var connectionStringBuilder = new SqlConnectionStringBuilder(connectionString); - connectionStringBuilder.CommandTimeout = commandTimeout; + var connectionStringBuilder = new SqlConnectionStringBuilder(migrationContext.ConnectionString); + connectionStringBuilder.CommandTimeout = migrationContext.CommandTimeout; return new SqlConnection(connectionStringBuilder.ToString()) { - AccessToken = accessToken, + AccessToken = migrationContext.AccessToken, }; } - public DbContextOptionsBuilder CreateDbContextOptionsBuilder(DbConnection connection, IReadOnlyList migrationsAssemblies, int commandTimeout) + public DbContextOptionsBuilder CreateDbContextOptionsBuilder(DbConnection connection, IDatabaseMigrationContext migrationContext) { return new DbContextOptionsBuilder().UseSqlServer( connection, opt => { - foreach (var assembly in migrationsAssemblies) + foreach (var assembly in migrationContext.Assemblies) { opt.MigrationsAssembly(assembly); } - opt.CommandTimeout(commandTimeout); + opt.CommandTimeout(migrationContext.CommandTimeout); }); } diff --git a/src/Database.Updater/SqlServer/SqlServerDatabaseUpdaterBuilderExtensions.cs b/src/Database.Updater/SqlServer/SqlServerDatabaseUpdaterBuilderExtensions.cs index 84c8852..480c8fc 100644 --- a/src/Database.Updater/SqlServer/SqlServerDatabaseUpdaterBuilderExtensions.cs +++ b/src/Database.Updater/SqlServer/SqlServerDatabaseUpdaterBuilderExtensions.cs @@ -20,7 +20,7 @@ public static class SqlServerDatabaseUpdaterBuilderExtensions /// The instance to continue the configuration. public static DatabaseUpdaterBuilder UseSqlServer(this DatabaseUpdaterBuilder builder) { - return builder.UseDatabaseProvider(new SqlServerDatabaseProvider()); + return builder.UseDatabaseProvider(); } } } diff --git a/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs b/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs index 5ba0753..4b90a89 100644 --- a/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs +++ b/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs @@ -47,6 +47,9 @@ public async Task UpgradeAsync_WithExplicitMigrationsAssembly() [Fact] public async Task UpgradeAsync_WithErrorMigrationsAssembly() { + using var output = new StringWriter(); + Console.SetOut(output); + var server = new SqlServer(ConnectionString); var database = await server.CreateEmptyDatabaseAsync("DatabaseUpdaterTest_UpgradeAsync_WithErrorMigrationsAssembly"); @@ -68,7 +71,9 @@ public async Task UpgradeAsync_WithErrorMigrationsAssembly() result.Should().Be(99); - loggingProvider.Output.Should().Be("[PosInformatique.Database.Updater.EntityFrameworkDatabaseUpdater] (Error) : Some errors occured during the migration...\r\n"); + loggingProvider.Output.Should().Be("[PosInformatique.Database.Updater.IDatabaseUpdater] (Error) : Some errors occured during the migration...\r\n"); + + output.ToString().Should().StartWith("fail: PosInformatique.Database.Updater.IDatabaseUpdater[0]"); } [Fact] @@ -106,8 +111,9 @@ await databaseUpdater.Invoking(du => du.UpgradeAsync([database.ConnectionString] .Should().ThrowExactlyAsync() .WithMessage("Some errors occured during the migration..."); - loggingProvider.Output.Should().Be("[PosInformatique.Database.Updater.EntityFrameworkDatabaseUpdater] (Error) : Some errors occured during the migration...\r\n"); - output.ToString().Should().BeEmpty(); + loggingProvider.Output.Should().Be("[PosInformatique.Database.Updater.IDatabaseUpdater] (Error) : Some errors occured during the migration...\r\n"); + + output.ToString().Should().StartWith("fail: PosInformatique.Database.Updater.IDatabaseUpdater[0]"); } [Fact] From dd239e5ee3257f09d3f94e3475436ffc85ced5c7 Mon Sep 17 00:00:00 2001 From: Gilles TOURREAU Date: Mon, 22 Sep 2025 15:26:34 +0200 Subject: [PATCH 15/27] Add unit tests for the InMemoryLoggingProvider. --- .../Logging/InMemoryLoggingProvider.cs | 35 ++++++- .../Logging/InMemoryLoggingProviderTest.cs | 93 +++++++++++++++++++ 2 files changed, 123 insertions(+), 5 deletions(-) create mode 100644 tests/Database.Updater.Tests/Logging/InMemoryLoggingProviderTest.cs diff --git a/src/Database.Updater/Logging/InMemoryLoggingProvider.cs b/src/Database.Updater/Logging/InMemoryLoggingProvider.cs index dd84afe..53a0ac2 100644 --- a/src/Database.Updater/Logging/InMemoryLoggingProvider.cs +++ b/src/Database.Updater/Logging/InMemoryLoggingProvider.cs @@ -14,7 +14,7 @@ namespace PosInformatique.Database.Updater /// public class InMemoryLoggingProvider : ILoggerProvider { - private readonly TextWriter output; + private TextWriter? output; /// /// Initializes a new instance of the class. @@ -27,18 +27,32 @@ public InMemoryLoggingProvider() /// /// Gets the logs output. /// - public string Output => this.output.ToString()!; + public string Output + { + get + { + ObjectDisposedException.ThrowIf(this.output == null, this); + + return this.output.ToString()!; + } + } /// public ILogger CreateLogger(string categoryName) { + ObjectDisposedException.ThrowIf(this.output == null, this); + return new StringDumpLogger(this, categoryName); } /// public void Dispose() { - this.output.Dispose(); + if (this.output is not null) + { + this.output.Dispose(); + this.output = null; + } } private sealed class StringDumpLogger : ILogger @@ -55,12 +69,23 @@ public StringDumpLogger(InMemoryLoggingProvider provider, string categoryName) public IDisposable? BeginScope(TState state) where TState : notnull - => null; + { + ObjectDisposedException.ThrowIf(this.provider.output == null, this.provider); + + return null; + } - public bool IsEnabled(LogLevel logLevel) => true; + public bool IsEnabled(LogLevel logLevel) + { + ObjectDisposedException.ThrowIf(this.provider.output == null, this.provider); + + return true; + } public void Log(LogLevel logLevel, EventId eventId, TState state, Exception? exception, Func formatter) { + ObjectDisposedException.ThrowIf(this.provider.output == null, this.provider); + this.provider.output.WriteLine($"[{this.categoryName}] ({logLevel}) : {formatter(state, exception)}"); } } diff --git a/tests/Database.Updater.Tests/Logging/InMemoryLoggingProviderTest.cs b/tests/Database.Updater.Tests/Logging/InMemoryLoggingProviderTest.cs new file mode 100644 index 0000000..99c2223 --- /dev/null +++ b/tests/Database.Updater.Tests/Logging/InMemoryLoggingProviderTest.cs @@ -0,0 +1,93 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) P.O.S Informatique. All rights reserved. +// +//----------------------------------------------------------------------- +namespace PosInformatique.Database.Updater.Tests +{ + using Microsoft.Extensions.Logging; + + public class InMemoryLoggingProviderTest + { + [Fact] + public void CreateLogger_Log() + { + var provider = new InMemoryLoggingProvider(); + + var logger1 = provider.CreateLogger("The category 1"); + var logger2 = provider.CreateLogger("The category 2"); + + logger1.LogInformation("The information"); + + provider.Output.Should().Be("[The category 1] (Information) : The information\r\n"); + + logger2.LogError("The error"); + + provider.Output.Should().Be("[The category 1] (Information) : The information\r\n[The category 2] (Error) : The error\r\n"); + } + + [Fact] + public void CreateLogger_BeginScope() + { + var provider = new InMemoryLoggingProvider(); + + var logger1 = provider.CreateLogger("The category 1"); + + logger1.BeginScope(null).Should().BeNull(); + } + + [Theory] + [InlineData(LogLevel.Critical)] + [InlineData(LogLevel.Debug)] + [InlineData(LogLevel.Error)] + [InlineData(LogLevel.Information)] + [InlineData(LogLevel.None)] + [InlineData(LogLevel.Trace)] + [InlineData(LogLevel.Warning)] + public void CreateLogger_IsEnabled(LogLevel logLevel) + { + var provider = new InMemoryLoggingProvider(); + + var logger = provider.CreateLogger("The category 1"); + + logger.IsEnabled(logLevel).Should().BeTrue(); + } + + [Fact] + public void Dispose() + { + var provider = new InMemoryLoggingProvider(); + + var logger = provider.CreateLogger("The category 1"); + + logger.LogInformation("The information"); + + provider.Dispose(); + + provider.Invoking(p => p.CreateLogger(default)) + .Should().ThrowExactly() + .WithMessage("Cannot access a disposed object.\r\nObject name: 'PosInformatique.Database.Updater.InMemoryLoggingProvider'.") + .Which.ObjectName.Should().Be("PosInformatique.Database.Updater.InMemoryLoggingProvider"); + + provider.Invoking(p => p.Output) + .Should().ThrowExactly() + .WithMessage("Cannot access a disposed object.\r\nObject name: 'PosInformatique.Database.Updater.InMemoryLoggingProvider'.") + .Which.ObjectName.Should().Be("PosInformatique.Database.Updater.InMemoryLoggingProvider"); + + logger.Invoking(l => l.BeginScope(default)) + .Should().ThrowExactly() + .WithMessage("Cannot access a disposed object.\r\nObject name: 'PosInformatique.Database.Updater.InMemoryLoggingProvider'.") + .Which.ObjectName.Should().Be("PosInformatique.Database.Updater.InMemoryLoggingProvider"); + + logger.Invoking(l => l.IsEnabled(default)) + .Should().ThrowExactly() + .WithMessage("Cannot access a disposed object.\r\nObject name: 'PosInformatique.Database.Updater.InMemoryLoggingProvider'.") + .Which.ObjectName.Should().Be("PosInformatique.Database.Updater.InMemoryLoggingProvider"); + + logger.Invoking(l => l.LogInformation("The log")) + .Should().ThrowExactly() + .WithMessage("Cannot access a disposed object.\r\nObject name: 'PosInformatique.Database.Updater.InMemoryLoggingProvider'.") + .Which.ObjectName.Should().Be("PosInformatique.Database.Updater.InMemoryLoggingProvider"); + } + } +} \ No newline at end of file From 148ec176e37d3f5d7b2716a1f752b0db331f711f Mon Sep 17 00:00:00 2001 From: Gilles TOURREAU Date: Mon, 22 Sep 2025 15:30:02 +0200 Subject: [PATCH 16/27] Fix unit tests --- .../DatabaseUpdaterTest.cs | 15 ++++++++---- ...verDatabaseUpdaterBuilderExtensionsTest.cs | 23 ------------------- 2 files changed, 10 insertions(+), 28 deletions(-) delete mode 100644 tests/Database.Updater.Tests/SqlServer/SqlServerDatabaseUpdaterBuilderExtensionsTest.cs diff --git a/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs b/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs index 4b90a89..89d7efa 100644 --- a/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs +++ b/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs @@ -24,7 +24,8 @@ public async Task UpgradeAsync_WithExplicitMigrationsAssembly() var databaseUpdaterBuilder = new DatabaseUpdaterBuilder("MyApplication") .UseSqlServer() .UseMigrationsAssembly(typeof(MigrationsAssembly.Version1).Assembly); - var databaseUpdater = databaseUpdaterBuilder + + using var databaseUpdater = databaseUpdaterBuilder .Build(); var result = await databaseUpdater.UpgradeAsync([database.ConnectionString]); @@ -64,7 +65,8 @@ public async Task UpgradeAsync_WithErrorMigrationsAssembly() }) .UseSqlServer() .UseMigrationsAssembly(typeof(MigrationsErrorAssembly.Version1).Assembly); - var databaseUpdater = databaseUpdaterBuilder + + using var databaseUpdater = databaseUpdaterBuilder .Build(); var result = await databaseUpdater.UpgradeAsync([database.ConnectionString]); @@ -104,7 +106,8 @@ public async Task UpgradeAsync_WithThrowException() }) .UseSqlServer() .UseMigrationsAssembly(typeof(MigrationsErrorAssembly.Version1).Assembly); - var databaseUpdater = databaseUpdaterBuilder + + using var databaseUpdater = databaseUpdaterBuilder .Build(); await databaseUpdater.Invoking(du => du.UpgradeAsync([database.ConnectionString])) @@ -123,7 +126,8 @@ public async Task UpgradeAsync_NoArguments() Console.SetOut(output); var databaseUpdaterBuilder = new DatabaseUpdaterBuilder("MyApplication"); - var databaseUpdater = databaseUpdaterBuilder + + using var databaseUpdater = databaseUpdaterBuilder .UseSqlServer() .Build(); @@ -161,7 +165,8 @@ public async Task UpgradeAsync_WrongArguments(params string[] args) Console.SetOut(output); var databaseUpdaterBuilder = new DatabaseUpdaterBuilder("MyApplication"); - var databaseUpdater = databaseUpdaterBuilder + + using var databaseUpdater = databaseUpdaterBuilder .UseSqlServer() .Build(); diff --git a/tests/Database.Updater.Tests/SqlServer/SqlServerDatabaseUpdaterBuilderExtensionsTest.cs b/tests/Database.Updater.Tests/SqlServer/SqlServerDatabaseUpdaterBuilderExtensionsTest.cs deleted file mode 100644 index 8c6a328..0000000 --- a/tests/Database.Updater.Tests/SqlServer/SqlServerDatabaseUpdaterBuilderExtensionsTest.cs +++ /dev/null @@ -1,23 +0,0 @@ -//----------------------------------------------------------------------- -// -// Copyright (c) P.O.S Informatique. All rights reserved. -// -//----------------------------------------------------------------------- - -namespace PosInformatique.Database.Updater.Tests -{ - using PosInformatique.Database.Updater.SqlServer; - - public class SqlServerDatabaseUpdaterBuilderExtensionsTest - { - [Fact] - public void Constructor() - { - var builder = new DatabaseUpdaterBuilder("MyApplication"); - - builder.UseSqlServer().Should().BeSameAs(builder); - - builder.GetFieldValue("databaseProvider").Should().BeOfType(); - } - } -} \ No newline at end of file From 654c403ed5203a0d8a2785be2e4997ffa29700fb Mon Sep 17 00:00:00 2001 From: Gilles TOURREAU Date: Mon, 22 Sep 2025 15:46:47 +0200 Subject: [PATCH 17/27] Migrate to xUnit v3. --- Directory.Packages.props | 4 +--- .../Database.Updater.Tests.csproj | 9 +++------ .../DatabaseUpdaterTest.cs | 20 +++++++++---------- 3 files changed, 14 insertions(+), 19 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 24d54bd..c7c11db 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -7,11 +7,9 @@ - - - + \ No newline at end of file diff --git a/tests/Database.Updater.Tests/Database.Updater.Tests.csproj b/tests/Database.Updater.Tests/Database.Updater.Tests.csproj index 3cab54a..ddacdfd 100644 --- a/tests/Database.Updater.Tests/Database.Updater.Tests.csproj +++ b/tests/Database.Updater.Tests/Database.Updater.Tests.csproj @@ -2,17 +2,14 @@ net8.0 + Exe + true - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs b/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs index 89d7efa..b82610e 100644 --- a/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs +++ b/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs @@ -19,7 +19,7 @@ public async Task UpgradeAsync_WithExplicitMigrationsAssembly() { var server = new SqlServer(ConnectionString); - var database = await server.CreateEmptyDatabaseAsync("DatabaseUpdaterTest_UpgradeAsync_WithExplicitMigrationsAssembly"); + var database = await server.CreateEmptyDatabaseAsync("DatabaseUpdaterTest_UpgradeAsync_WithExplicitMigrationsAssembly", TestContext.Current.CancellationToken); var databaseUpdaterBuilder = new DatabaseUpdaterBuilder("MyApplication") .UseSqlServer() @@ -28,11 +28,11 @@ public async Task UpgradeAsync_WithExplicitMigrationsAssembly() using var databaseUpdater = databaseUpdaterBuilder .Build(); - var result = await databaseUpdater.UpgradeAsync([database.ConnectionString]); + var result = await databaseUpdater.UpgradeAsync([database.ConnectionString], TestContext.Current.CancellationToken); result.Should().Be(0); - var tables = await database.GetTablesAsync(); + var tables = await database.GetTablesAsync(TestContext.Current.CancellationToken); tables.Should().HaveCount(2); @@ -53,7 +53,7 @@ public async Task UpgradeAsync_WithErrorMigrationsAssembly() var server = new SqlServer(ConnectionString); - var database = await server.CreateEmptyDatabaseAsync("DatabaseUpdaterTest_UpgradeAsync_WithErrorMigrationsAssembly"); + var database = await server.CreateEmptyDatabaseAsync("DatabaseUpdaterTest_UpgradeAsync_WithErrorMigrationsAssembly", TestContext.Current.CancellationToken); var loggingProvider = new InMemoryLoggingProvider(); @@ -69,7 +69,7 @@ public async Task UpgradeAsync_WithErrorMigrationsAssembly() using var databaseUpdater = databaseUpdaterBuilder .Build(); - var result = await databaseUpdater.UpgradeAsync([database.ConnectionString]); + var result = await databaseUpdater.UpgradeAsync([database.ConnectionString], TestContext.Current.CancellationToken); result.Should().Be(99); @@ -86,7 +86,7 @@ public async Task UpgradeAsync_WithThrowException() var server = new SqlServer(ConnectionString); - var database = await server.CreateEmptyDatabaseAsync("DatabaseUpdaterTest_UpgradeAsync_WithErrorMigrationsAssembly"); + var database = await server.CreateEmptyDatabaseAsync("DatabaseUpdaterTest_UpgradeAsync_WithErrorMigrationsAssembly", TestContext.Current.CancellationToken); var loggingProvider = new InMemoryLoggingProvider(); @@ -131,7 +131,7 @@ public async Task UpgradeAsync_NoArguments() .UseSqlServer() .Build(); - var result = await databaseUpdater.UpgradeAsync([]); + var result = await databaseUpdater.UpgradeAsync([], TestContext.Current.CancellationToken); result.Should().Be(1); @@ -141,7 +141,7 @@ public async Task UpgradeAsync_NoArguments() Upgrade the MyApplication database. Usage: - testhost [options] + PosInformatique.Database.Updater.Tests [options] Arguments: The connection string to the database to upgrade @@ -170,7 +170,7 @@ public async Task UpgradeAsync_WrongArguments(params string[] args) .UseSqlServer() .Build(); - var result = await databaseUpdater.UpgradeAsync(args); + var result = await databaseUpdater.UpgradeAsync(args, TestContext.Current.CancellationToken); result.Should().Be(1); @@ -180,7 +180,7 @@ public async Task UpgradeAsync_WrongArguments(params string[] args) Upgrade the MyApplication database. Usage: - testhost [options] + PosInformatique.Database.Updater.Tests [options] Arguments: The connection string to the database to upgrade From a278f9d9507325d62d95d4e6c766f2a16658aba1 Mon Sep 17 00:00:00 2001 From: Gilles TOURREAU Date: Mon, 22 Sep 2025 16:13:51 +0200 Subject: [PATCH 18/27] Fix CI. --- .github/workflows/github-actions-ci.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/github-actions-ci.yaml b/.github/workflows/github-actions-ci.yaml index 5ac228f..bf49e0c 100644 --- a/.github/workflows/github-actions-ci.yaml +++ b/.github/workflows/github-actions-ci.yaml @@ -32,6 +32,9 @@ jobs: shell: cmd run: sqlcmd -S "(localDB)\posinfo-tests" -Q "IF NOT EXISTS (SELECT 1 FROM [sys].[server_principals] WHERE [Name] = 'ServiceAccountLogin') CREATE LOGIN [ServiceAccountLogin] WITH PASSWORD = 'P@ssw0rd'" + - name: Run tests + run: dotnet test --no-build --verbosity normal + # Use this fix https://github.com/microsoft/vstest-action/issues/31#issuecomment-2159463764 - name: Test with the dotnet CLI uses: rusty-bender/vstest-action@main From 34f81608e6a6d90a7eb60b8c8b0788e3db1b27e9 Mon Sep 17 00:00:00 2001 From: Gilles TOURREAU Date: Mon, 29 Sep 2025 05:44:49 +0200 Subject: [PATCH 19/27] Remove dependency to Dac. --- Directory.Packages.props | 2 +- tests/Database.Updater.Tests/Database.Updater.Tests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index c7c11db..a763871 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -7,7 +7,7 @@ - + diff --git a/tests/Database.Updater.Tests/Database.Updater.Tests.csproj b/tests/Database.Updater.Tests/Database.Updater.Tests.csproj index ddacdfd..1fdfefe 100644 --- a/tests/Database.Updater.Tests/Database.Updater.Tests.csproj +++ b/tests/Database.Updater.Tests/Database.Updater.Tests.csproj @@ -8,7 +8,7 @@ - + From 73417ef560a0c30f50f44cf5b3142de7fd87a5d5 Mon Sep 17 00:00:00 2001 From: Gilles TOURREAU Date: Mon, 29 Sep 2025 05:45:09 +0200 Subject: [PATCH 20/27] Set the connection strings from environment variable. --- .../ConnectionStrings.cs | 32 +++++++++++++++++++ .../DatabaseUpdaterTest.cs | 16 ++++------ 2 files changed, 39 insertions(+), 9 deletions(-) create mode 100644 tests/Database.Updater.Tests/ConnectionStrings.cs diff --git a/tests/Database.Updater.Tests/ConnectionStrings.cs b/tests/Database.Updater.Tests/ConnectionStrings.cs new file mode 100644 index 0000000..f8ea23d --- /dev/null +++ b/tests/Database.Updater.Tests/ConnectionStrings.cs @@ -0,0 +1,32 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) P.O.S Informatique. All rights reserved. +// +//----------------------------------------------------------------------- + +namespace PosInformatique.Database.Updater +{ + using Microsoft.Data.SqlClient; + + public static class ConnectionStrings + { + public static string Default { get; } = Get(); + + private static string Get(string databaseName = "master") + { + var connectionString = Environment.GetEnvironmentVariable("DATABASE_UPDATER_UNIT_TESTS_CONNECTION_STRING"); + + if (connectionString is null) + { + connectionString = $"Data Source=(localDB)\\posinfo-tests; Integrated Security=True"; + } + + var connectionStringBuilder = new SqlConnectionStringBuilder(connectionString) + { + InitialCatalog = databaseName, + }; + + return connectionStringBuilder.ToString(); + } + } +} diff --git a/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs b/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs index b82610e..4259355 100644 --- a/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs +++ b/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs @@ -12,14 +12,12 @@ namespace PosInformatique.Database.Updater.Tests [Collection(nameof(DatabaseUpdaterTest))] public class DatabaseUpdaterTest { - private const string ConnectionString = "Data Source=(localDB)\\posinfo-tests; Integrated Security=True"; - [Fact] public async Task UpgradeAsync_WithExplicitMigrationsAssembly() { - var server = new SqlServer(ConnectionString); + var server = new SqlServer(ConnectionStrings.Default); - var database = await server.CreateEmptyDatabaseAsync("DatabaseUpdaterTest_UpgradeAsync_WithExplicitMigrationsAssembly", TestContext.Current.CancellationToken); + var database = await server.CreateEmptyDatabaseAsync("DatabaseUpdaterTest_UpgradeAsync_WithExplicitMigrationsAssembly", cancellationToken: TestContext.Current.CancellationToken); var databaseUpdaterBuilder = new DatabaseUpdaterBuilder("MyApplication") .UseSqlServer() @@ -51,9 +49,9 @@ public async Task UpgradeAsync_WithErrorMigrationsAssembly() using var output = new StringWriter(); Console.SetOut(output); - var server = new SqlServer(ConnectionString); + var server = new SqlServer(ConnectionStrings.Default); - var database = await server.CreateEmptyDatabaseAsync("DatabaseUpdaterTest_UpgradeAsync_WithErrorMigrationsAssembly", TestContext.Current.CancellationToken); + var database = await server.CreateEmptyDatabaseAsync("DatabaseUpdaterTest_UpgradeAsync_WithErrorMigrationsAssembly", cancellationToken: TestContext.Current.CancellationToken); var loggingProvider = new InMemoryLoggingProvider(); @@ -84,9 +82,9 @@ public async Task UpgradeAsync_WithThrowException() using var output = new StringWriter(); Console.SetOut(output); - var server = new SqlServer(ConnectionString); + var server = new SqlServer(ConnectionStrings.Default); - var database = await server.CreateEmptyDatabaseAsync("DatabaseUpdaterTest_UpgradeAsync_WithErrorMigrationsAssembly", TestContext.Current.CancellationToken); + var database = await server.CreateEmptyDatabaseAsync("DatabaseUpdaterTest_UpgradeAsync_WithErrorMigrationsAssembly", cancellationToken: TestContext.Current.CancellationToken); var loggingProvider = new InMemoryLoggingProvider(); @@ -158,7 +156,7 @@ Upgrade the MyApplication database. [Theory] [InlineData("NotConnectionString")] - [InlineData(ConnectionString, "--command-timeout=abcd")] + [InlineData("Data Source=some_server;", "--command-timeout=abcd")] public async Task UpgradeAsync_WrongArguments(params string[] args) { using var output = new StringWriter(); From 782ce4f68b6890b8ea2b62bb51100560d26734f5 Mon Sep 17 00:00:00 2001 From: Gilles TOURREAU Date: Mon, 29 Sep 2025 05:49:25 +0200 Subject: [PATCH 21/27] Fix CI to use ubuntu. --- .github/workflows/github-actions-ci.yaml | 59 ++++++++++---------- .github/workflows/github-actions-release.yml | 2 +- 2 files changed, 32 insertions(+), 29 deletions(-) diff --git a/.github/workflows/github-actions-ci.yaml b/.github/workflows/github-actions-ci.yaml index bf49e0c..7a499a8 100644 --- a/.github/workflows/github-actions-ci.yaml +++ b/.github/workflows/github-actions-ci.yaml @@ -8,39 +8,42 @@ on: jobs: build: - runs-on: windows-latest + runs-on: ubuntu-latest + services: + sqlserver: + image: mcr.microsoft.com/mssql/server:2022-latest + env: + SA_PASSWORD: "P@ssw0rd12345!" + ACCEPT_EULA: "Y" + ports: + - 1433:1433 steps: - uses: actions/checkout@v4 - - name: Setup NuGet - uses: nuget/setup-nuget@v2 - - - name: Restore NuGet packages - run: nuget restore PosInformatique.Database.Updater.sln - - - name: Add msbuild to PATH - uses: microsoft/setup-msbuild@v2 - - - name: Build - run: msbuild "PosInformatique.Database.Updater.sln" /p:Configuration=Debug + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 8.0.x - - name: Creates the LocalDB for the tests - shell: cmd - run: SqlLocalDB create posinfo-tests + - name: Restore dependencies + run: dotnet restore PosInformatique.Database.Updater.sln - - name: Creates the SQL Login service accounts for the tests - shell: cmd - run: sqlcmd -S "(localDB)\posinfo-tests" -Q "IF NOT EXISTS (SELECT 1 FROM [sys].[server_principals] WHERE [Name] = 'ServiceAccountLogin') CREATE LOGIN [ServiceAccountLogin] WITH PASSWORD = 'P@ssw0rd'" + - name: Build solution + run: dotnet build PosInformatique.Database.Updater.sln --configuration Release --no-restore - name: Run tests - run: dotnet test --no-build --verbosity normal - - # Use this fix https://github.com/microsoft/vstest-action/issues/31#issuecomment-2159463764 - - name: Test with the dotnet CLI - uses: rusty-bender/vstest-action@main + run: | + dotnet test PosInformatique.Database.Updater.sln \ + --configuration Release \ + --no-build \ + --logger "trx;LogFileName=test_results.trx" \ + --results-directory ./TestResults + env: + DATABASE_UPDATER_UNIT_TESTS_CONNECTION_STRING: "Data Source=localhost,1433;Database=master;User Id=sa;Password=P@ssw0rd12345!;TrustServerCertificate=True;" + + - name: Publish Test Results + uses: EnricoMi/publish-unit-test-result-action@v2 + if: (!cancelled()) with: - searchFolder: .\ - testAssembly: | - /tests/**/*.tests.dll - !./**/*TestAdapter.dll - !./**/obj/** + files: | + TestResults/**/*.trx diff --git a/.github/workflows/github-actions-release.yml b/.github/workflows/github-actions-release.yml index e217a01..a4736a5 100644 --- a/.github/workflows/github-actions-release.yml +++ b/.github/workflows/github-actions-release.yml @@ -12,7 +12,7 @@ on: type: string description: The version suffix of the library (for example rc.1) -run-name: ${{ inputs.VersionPrefix }}-${{ inputs.VersionSuffix }} +run-name: ${{ inputs.VersionSuffix && format('{0}-{1}', inputs.VersionPrefix, inputs.VersionSuffix) || inputs.VersionPrefix }} jobs: build: From 3c4bdacc91799d217ded1e5d2cb1fef567a0914e Mon Sep 17 00:00:00 2001 From: Gilles TOURREAU Date: Mon, 29 Sep 2025 05:59:14 +0200 Subject: [PATCH 22/27] Upgrade NuGet packages and fix CI for the unit tests. --- Directory.Packages.props | 7 +++++-- .../Database.Updater.Tests/Database.Updater.Tests.csproj | 9 +++++++++ tests/Database.Updater.Tests/DatabaseUpdaterTest.cs | 5 +++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index a763871..568fddc 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -3,13 +3,16 @@ true - + + + - + + \ No newline at end of file diff --git a/tests/Database.Updater.Tests/Database.Updater.Tests.csproj b/tests/Database.Updater.Tests/Database.Updater.Tests.csproj index 1fdfefe..4d38d8b 100644 --- a/tests/Database.Updater.Tests/Database.Updater.Tests.csproj +++ b/tests/Database.Updater.Tests/Database.Updater.Tests.csproj @@ -7,8 +7,17 @@ + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs b/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs index 4259355..7b91dbb 100644 --- a/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs +++ b/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs @@ -12,6 +12,11 @@ namespace PosInformatique.Database.Updater.Tests [Collection(nameof(DatabaseUpdaterTest))] public class DatabaseUpdaterTest { + static DatabaseUpdaterTest() + { + License.Accepted = true; + } + [Fact] public async Task UpgradeAsync_WithExplicitMigrationsAssembly() { From 6c13fc4fb8d2a2cc2f3d1e99155e658b16b834e7 Mon Sep 17 00:00:00 2001 From: Gilles TOURREAU Date: Mon, 29 Sep 2025 06:04:46 +0200 Subject: [PATCH 23/27] Fix unit tests. --- tests/Database.Updater.Tests/DatabaseUpdaterTest.cs | 4 ++-- .../Logging/InMemoryLoggingProviderTest.cs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs b/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs index 7b91dbb..0f2f67b 100644 --- a/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs +++ b/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs @@ -76,7 +76,7 @@ public async Task UpgradeAsync_WithErrorMigrationsAssembly() result.Should().Be(99); - loggingProvider.Output.Should().Be("[PosInformatique.Database.Updater.IDatabaseUpdater] (Error) : Some errors occured during the migration...\r\n"); + loggingProvider.Output.Should().Be($"[PosInformatique.Database.Updater.IDatabaseUpdater] (Error) : Some errors occured during the migration...{Environment.NewLine}"); output.ToString().Should().StartWith("fail: PosInformatique.Database.Updater.IDatabaseUpdater[0]"); } @@ -117,7 +117,7 @@ await databaseUpdater.Invoking(du => du.UpgradeAsync([database.ConnectionString] .Should().ThrowExactlyAsync() .WithMessage("Some errors occured during the migration..."); - loggingProvider.Output.Should().Be("[PosInformatique.Database.Updater.IDatabaseUpdater] (Error) : Some errors occured during the migration...\r\n"); + loggingProvider.Output.Should().Be($"[PosInformatique.Database.Updater.IDatabaseUpdater] (Error) : Some errors occured during the migration...{Environment.NewLine}"); output.ToString().Should().StartWith("fail: PosInformatique.Database.Updater.IDatabaseUpdater[0]"); } diff --git a/tests/Database.Updater.Tests/Logging/InMemoryLoggingProviderTest.cs b/tests/Database.Updater.Tests/Logging/InMemoryLoggingProviderTest.cs index 99c2223..18dff8f 100644 --- a/tests/Database.Updater.Tests/Logging/InMemoryLoggingProviderTest.cs +++ b/tests/Database.Updater.Tests/Logging/InMemoryLoggingProviderTest.cs @@ -19,11 +19,11 @@ public void CreateLogger_Log() logger1.LogInformation("The information"); - provider.Output.Should().Be("[The category 1] (Information) : The information\r\n"); + provider.Output.Should().Be($"[The category 1] (Information) : The information{Environment.NewLine}"); logger2.LogError("The error"); - provider.Output.Should().Be("[The category 1] (Information) : The information\r\n[The category 2] (Error) : The error\r\n"); + provider.Output.Should().Be($"[The category 1] (Information) : The information{Environment.NewLine}[The category 2] (Error) : The error{Environment.NewLine}"); } [Fact] From 2945aa45b8a7570eaa11c807e5f36a9350f74d95 Mon Sep 17 00:00:00 2001 From: Gilles TOURREAU Date: Fri, 7 Nov 2025 09:58:42 +0100 Subject: [PATCH 24/27] Fix the README. --- README.md | 284 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 283 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index eba06bf..12249d1 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,284 @@ # PosInformatique.Database.Updater -A simple console tool to apply Entity Framework Core migrations. Focused on SQL Server with support for AccessToken authentication. Outputs logs to the console, ideal for CI/CD scenarios. +[![NuGet](https://img.shields.io/nuget/v/PosInformatique.Database.Updater)](https://www.nuget.org/packages/PosInformatique.Database.Updater/) +[![NuGet downloads](https://img.shields.io/nuget/dt/PosInformatique.Database.Updater)](https://www.nuget.org/packages/PosInformatique.Database.Updater/) +[![License](https://img.shields.io/github/license/Nonanti/MathFlow?style=flat-square)](LICENSE) +[![Build Status](https://img.shields.io/github/actions/workflow/status/PosInformatique/PosInformatique.Database.Updater/github-actions-ci.yaml?style=flat-square)](https://github.com/PosInformatique/PosInformatique.Database.Updater/actions) +[![.NET 8.0+](https://img.shields.io/badge/.NET-8.0%2B-512BD4?style=flat-square)](https://learn.microsoft.com/en-us/dotnet/standard/net-standard?tabs=net-standard-2-0) + +A tiny console-oriented helper to run Entity Framework Core migrations in a predictable, CI/CD-friendly way. +It parses a simple command line, executes pending migrations against your target database, and can optionally throw +on error for strict pipelines. + +## Installing from NuGet + +- Library: [PosInformatique.Database.Updater](https://www.nuget.org/packages/PosInformatique.Database.Updater/) +- Install with: +```bash +dotnet add package PosInformatique.Database.Updater +``` + +## Why use this? + +- Clean separation of concerns: keep migrations in a small console app dedicated to database updates, invoked by your CD pipeline. +- Consistent CLI: same arguments locally and in CI/CD, using standard .NET command-line syntax. +- EF Core under the hood: executes your existing EF Core migrations generated by developers. +- Entra ID token support: pass an access token for Entra ID authentication (perfect for Azure Pipelines). +- Logging support: uses the standard .NET logging abstraction, including EF Core logs, and writes to standard output. + +## Example usage + +Just create a simple console application: + +```csharp +public static class Program +{ + public static async Task Main(string[] args) + { + var updater = new DatabaseUpdaterBuilder("MyApplication") + .UseSqlServer() + .UseMigrationsAssembly(typeof(Program).Assembly) + .Build(); + + return await updater.UpgradeAsync(args); + } +} +``` + +The code above runs the Entity Framework Core migrations located in the same assembly as the `Program` class. + +Developers can run this application locally to upgrade the database, or integrate it into a CD pipeline when deploying +an application. + +## API usage + +The `DatabaseUpdaterBuilder` creates an internal `IHost`, allowing developers to configure additional services. + +After configuring the `DatabaseUpdaterBuilder`, call `Build()` to get an `IDatabaseUpdater`, then +call `IDatabaseUpdater.UpgradeAsync(string[])` to run the migration process with the `args` from `Main()`. + +`IDatabaseUpdater.UpgradeAsync(string[])` returns an `int` error code that you can return from `Main()` and use in calling +scripts (e.g., `%ERRORLEVEL%`). + +### Name of the application + +When instantiating `DatabaseUpdaterBuilder`, pass your application name. +This is only used for help/diagnostics in the command-line output and has no impact on the migration process. + +For example: +```csharp +var updater = new DatabaseUpdaterBuilder("MyApplication"); +``` + +### Specify the database provider + +Currently, only SQL Server is supported. To use SQL Server, call `UseSqlServer()` during builder setup. + +For example: +```csharp +var updater = new DatabaseUpdaterBuilder("MyApplication") + .UseSqlServer() + // ... + .Build(); +``` + +### Specify the assembly that contains Entity Framework Core migrations + +To point to the assembly that contains your EF Core migrations, call `UseMigrationsAssembly()` with the appropriate `Assembly`. + +For example: +```csharp +var updater = new DatabaseUpdaterBuilder("MyApplication") + .UseSqlServer() + .UseMigrationsAssembly(typeof(Program).Assembly) + // ... + .Build(); +``` + +### Logging configuration + +To configure logging produced by `IDatabaseUpdater`, call `ConfigureLogging()` during builder setup. +This provides an `ILoggingBuilder` to configure the .NET logging infrastructure. + +For example: +```csharp +var updater = new DatabaseUpdaterBuilder("MyApplication") + .UseSqlServer() + .UseMigrationsAssembly(typeof(Program).Assembly) + .ConfigureLogging(builder => + { + builder.AddJsonConsole(); + }) + // ... + .Build(); +``` + +### Configure options of the updater + +To configure updater options, call `Configure()` during builder setup. +This provides a `DatabaseUpdaterOptions` instance to control behavior. + +For example: +```csharp +var updater = new DatabaseUpdaterBuilder("MyApplication") + .UseSqlServer() + .UseMigrationsAssembly(typeof(Program).Assembly) + .Configure(opt => + { + opt.ThrowExceptionOnError = true; + }) + // ... + .Build(); +``` + +## Parsed command line + +When calling `IDatabaseUpdater.UpgradeAsync()` with the `args` from the command line, the following syntax is parsed: + +```cmd +dotnet run "" [--access-token ""] [--command-timeout ] +``` + +- `connection-string` + - Description: The connection string to the database to upgrade. It is recommended to wrap it in double quotes. + - Required: Yes + - Example: `dotnet run my-updater.dll "Server=tcp:myserver.database.windows.net,1433;Initial Catalog=mydb;Encrypt=True;"` + +- Option: `--access-token` + - Description: Access token to connect to Azure SQL using Entra ID. + - Required: No + - Example: `dotnet run my-updater.dll "Server=tcp:myserver.database.windows.net,1433;Initial Catalog=mydb;Encrypt=True;" --access-token "xxxxxxxx"` + +- Option: `--command-timeout` + - Description: Maximum time in seconds to execute each SQL statement. If not specified, the default is 30 seconds. + Use this to extend timeouts for long-running migrations. + - Required: No + - Example: `dotnet run my-updater.dll "Server=tcp:myserver.database.windows.net,1433;Initial Catalog=mydb;Encrypt=True;" --command-timeout 600` + +### Error code returned + +`IDatabaseUpdater.UpgradeAsync()` returns the following error codes: + +| Error code | Description | +| ---------- | ----------- | +| 0 | The database upgrade completed successfully. | +| 1 | An invalid command-line argument was provided. | +| 99 | An exception occurred during the upgrade process (when `DatabaseUpdaterOptions.ThrowExceptionOnError = false`). | +| -532462766 | Standard .NET unhandled exception code (when `DatabaseUpdaterOptions.ThrowExceptionOnError = true`). | + +> We recommend returning the error code from `IDatabaseUpdater.UpgradeAsync()` directly from `Main()`. + +## Advanced scenarios + +### Throw an exception when an error occurs + +By default, when an exception occurs (timeout, SQL syntax error, etc.), no exception is propagated. The exception is logged and `IDatabaseUpdater.UpgradeAsync()` returns error code `99`. + +To propagate exceptions, set `DatabaseUpdaterOptions.ThrowExceptionOnError` to `true`. + +```csharp +var updater = new DatabaseUpdaterBuilder("MyApplication") + .UseSqlServer() + .UseMigrationsAssembly(typeof(Program).Assembly) + .Configure(opt => + { + opt.ThrowExceptionOnError = true; // Throw instead of returning error code 99. + }) + // ... + .Build(); +``` + +### Increase the timeout for SQL command execution + +During the upgrade, some SQL commands can take a long time—especially DML on large tables or DDL that rebuilds indexes. + +To increase the per-command timeout, use the optional `--command-timeout` argument: + +```cmd +dotnet run my-updater.dll "Server=tcp:myserver.database.windows.net,1433;Initial Catalog=mydb;Encrypt=True;" --command-timeout 600 +``` + +> Do not confuse the SQL command execution timeout with the SQL connection timeout (used to connect to SQL Server). +To change the connection timeout, set `Connection Timeout` in the connection string. +Example: `"Server=tcp:myserver.database.windows.net,1433;Initial Catalog=mydb;Encrypt=True;Connection Timeout=600"` + +## Typical CI/CD flow (Azure Pipelines) + +Recommended practice: keep migrations in a dedicated console app that references your DbContext and migrations assembly. +Your release pipeline calls this console to upgrade the database. + +Example Azure Pipelines YAML: + +```yaml +trigger: +- main + +pool: + vmImage: ubuntu-latest + +steps: +- task: UseDotNet@2 + inputs: + packageType: 'sdk' + version: '8.x' + +- script: dotnet restore + displayName: Restore + +- script: dotnet build -c Release + displayName: Build + +# Acquire an Entra ID token for Azure SQL (adjust resource if needed) +- task: AzureCLI@2 + displayName: Get Azure SQL access token + inputs: + azureSubscription: 'Your-Service-Connection' + scriptType: 'bash' + scriptLocation: 'inlineScript' + inlineScript: | + TOKEN=$(az account get-access-token --resource https://database.windows.net/ --query accessToken -o tsv) + echo "##vso[task.setvariable variable=SQL_ACCESS_TOKEN;issecret=true]$TOKEN" + +# Run the updater console +- script: | + dotnet run --project src/YourUpdaterConsole/YourUpdaterConsole.csproj -- \ + "Server=tcp:$(sql_server),1433;Initial Catalog=$(sql_database);Encrypt=True;" \ + --access-token "$(SQL_ACCESS_TOKEN)" \ + --command-timeout 600 + displayName: Run database updater +``` + +## Recommendations + +- Use `--access-token` with Entra ID to avoid embedding credentials +(you can use SQL authentication with username/password, but ensure secrets are stored securely, e.g., in Azure Key Vault). +- Set `ThrowExceptionOnError = true` for CI runs to fail fast on migration errors, display the stack trace in Azure Pipelines + output, and enable developers to hit exceptions directly in Visual Studio during development. +- Keep the updater console small and focused; it should reference the migrations assembly via `.UseMigrationsAssembly(...)` + or include the migrations itself. + +## Requirements + +- .NET 8.0 or later. +- EF Core 8.0 or later. +- SQL Server is currently the only supported provider. + +### Provider support + +- Supported: SQL Server. +- Roadmap: Other providers may be added in the future; for now, only SQL Server is available. + +# Links + +## PosInformatique.Testing.Databases + +If you want to test (assert) your database migrations, consider using +[PosInformatique.Testing.Databases](https://github.com/PosInformatique/PosInformatique.Testing.Databases). +This library provides tools for database unit/integration tests and includes a comparer to verify the migration state of a database. + +## System.CommandLine + +This tool uses Microsoft .NET [System.CommandLine](https://learn.microsoft.com/en-us/dotnet/standard/commandline/) library, which standardizes command-line syntax for .NET tools. + +# Contribute + +If you need additional switches, providers, or features, feel free to open an issue or PR. \ No newline at end of file From f55e9e7623250cbfc6e4e6464545463621112498 Mon Sep 17 00:00:00 2001 From: Gilles TOURREAU Date: Fri, 7 Nov 2025 10:15:45 +0100 Subject: [PATCH 25/27] Upgrade NuGet packages. --- Directory.Packages.props | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 568fddc..13fdbe6 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -4,15 +4,15 @@ - + - - + + - - + + \ No newline at end of file From 5b672a62514958dac8f768750a6cd9931348dffd Mon Sep 17 00:00:00 2001 From: Gilles TOURREAU Date: Sun, 16 Nov 2025 14:15:35 +0100 Subject: [PATCH 26/27] Upgrades the System.CommandLine to the official 2.0.0 version. --- Directory.Packages.props | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 13fdbe6..7e851cf 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -8,10 +8,10 @@ - + - + From a69e047418b4f175c4ac5d3b0bacae61fc378d73 Mon Sep 17 00:00:00 2001 From: Gilles TOURREAU Date: Wed, 19 Nov 2025 17:38:42 +0100 Subject: [PATCH 27/27] Add the "--skip-duplicate" when publishing on NuGet. --- .github/workflows/github-actions-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/github-actions-release.yml b/.github/workflows/github-actions-release.yml index a4736a5..3ab803b 100644 --- a/.github/workflows/github-actions-release.yml +++ b/.github/workflows/github-actions-release.yml @@ -33,4 +33,4 @@ jobs: "src/Database.Updater/Database.Updater.csproj" - name: Publish the package to nuget.org - run: dotnet nuget push "src/**/bin/Release/*.nupkg" --api-key "${{ secrets.NUGET_APIKEY }}" --source https://api.nuget.org/v3/index.json + run: dotnet nuget push "src/**/bin/Release/*.nupkg" --api-key "${{ secrets.NUGET_APIKEY }}" --source https://api.nuget.org/v3/index.json --skip-duplicate

C1OjQ?8*CN6+j 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 +// Copyright (c) P.O.S Informatique. All rights reserved. +// +//----------------------------------------------------------------------- + +namespace PosInformatique.Database.Updater.SqlServer +{ + using System.CommandLine; + using System.CommandLine.Parsing; + using System.Diagnostics.CodeAnalysis; + using Microsoft.Data.SqlClient; + + [ExcludeFromCodeCoverage] + internal class SqlServerConnectionStringArgument : Argument + { + public SqlServerConnectionStringArgument(string name) + : base(name) + { + this.Validators.Add(this.Validate); + } + + private void Validate(ArgumentResult result) + { + try + { +#pragma warning disable S1848 // Objects should not be created to be dropped immediately without being used +#pragma warning disable CA1806 // Do not ignore method results + new SqlConnectionStringBuilder(result.GetValue(this)); +#pragma warning restore CA1806 // Do not ignore method results +#pragma warning restore S1848 // Objects should not be created to be dropped immediately without being used + } + catch (ArgumentException) + { + result.AddError($"The SQL Server connection string specified in the '{this.Name}' argument is invalid."); + } + } + } +} diff --git a/src/Directory.Build.props b/src/Directory.Build.props new file mode 100644 index 0000000..1d9e55f --- /dev/null +++ b/src/Directory.Build.props @@ -0,0 +1,28 @@ + + + + + + + enable + + Icon.png + https://github.com/PosInformatique/PosInformatique.Database.Updater + README.md + MIT + + 1.0.0 + - Initial version + + + + + + + <_Parameter1>$(AssemblyName).Tests + + + <_Parameter1>DynamicProxyGenAssembly2 + + + \ No newline at end of file diff --git a/stylecop.json b/stylecop.json new file mode 100644 index 0000000..b747ad1 --- /dev/null +++ b/stylecop.json @@ -0,0 +1,9 @@ +{ + "settings": { + "documentationRules": { + "companyName": "P.O.S Informatique", + "copyrightText": "Copyright (c) {companyName}. All rights reserved.", + "documentInternalElements": false + } + } +} \ No newline at end of file diff --git a/tests/.editorconfig b/tests/.editorconfig new file mode 100644 index 0000000..c54730c --- /dev/null +++ b/tests/.editorconfig @@ -0,0 +1,12 @@ +[*.cs] + +# StyleCop + +# SA1600: Elements should be documented +dotnet_diagnostic.SA1600.severity = none + +# SA1601: Partial elements should be documented +dotnet_diagnostic.SA1601.severity = none + +# SA1602: Enumeration items should be documented +dotnet_diagnostic.SA1602.severity = none \ No newline at end of file diff --git a/tests/Database.Updater.IntegrationTests/Database.Updater.IntegrationTests.csproj b/tests/Database.Updater.IntegrationTests/Database.Updater.IntegrationTests.csproj new file mode 100644 index 0000000..6fecf8e --- /dev/null +++ b/tests/Database.Updater.IntegrationTests/Database.Updater.IntegrationTests.csproj @@ -0,0 +1,13 @@ + + + + Exe + net8.0 + + + + + + + + diff --git a/tests/Database.Updater.IntegrationTests/Program.cs b/tests/Database.Updater.IntegrationTests/Program.cs new file mode 100644 index 0000000..51a97af --- /dev/null +++ b/tests/Database.Updater.IntegrationTests/Program.cs @@ -0,0 +1,22 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) P.O.S Informatique. All rights reserved. +// +//----------------------------------------------------------------------- + +namespace PosInformatique.Database.Updater.IntegrationTests +{ + internal class Program + { + public static async Task Main(string[] args) + { + var databaseUpdaterBuilder = new DatabaseUpdaterBuilder("MyApplication"); + + var updater = databaseUpdaterBuilder + .UseMigrationsAssembly(typeof(MigrationsAssembly.PersonDbContext).Assembly) + .Build(); + + await updater.UpgradeAsync(args); + } + } +} diff --git a/tests/Database.Updater.IntegrationTests/Properties/launchSettings.json b/tests/Database.Updater.IntegrationTests/Properties/launchSettings.json new file mode 100644 index 0000000..7bfc3cf --- /dev/null +++ b/tests/Database.Updater.IntegrationTests/Properties/launchSettings.json @@ -0,0 +1,16 @@ +{ + "profiles": { + "OK": { + "commandName": "Project", + "commandLineArgs": "\"Data Source=(localDB)\\dbupdater-tests; Initial Catalog=IntegrationTests; Integrated Security=True\"" + }, + "InvalidConnectionString": { + "commandName": "Project", + "commandLineArgs": "\"Data Source=(localDB)\\notexists; Initial Catalog=IntegrationTests; Integrated Security=True\"" + }, + "NoArguments": { + "commandName": "Project", + "commandLineArgs": "" + } + } +} \ No newline at end of file diff --git a/tests/Database.Updater.Tests.MigrationsAssembly/Database.Updater.Tests.MigrationsAssembly.csproj b/tests/Database.Updater.Tests.MigrationsAssembly/Database.Updater.Tests.MigrationsAssembly.csproj new file mode 100644 index 0000000..42631ed --- /dev/null +++ b/tests/Database.Updater.Tests.MigrationsAssembly/Database.Updater.Tests.MigrationsAssembly.csproj @@ -0,0 +1,15 @@ + + + + net8.0 + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + diff --git a/tests/Database.Updater.Tests.MigrationsAssembly/DbContext/Person.cs b/tests/Database.Updater.Tests.MigrationsAssembly/DbContext/Person.cs new file mode 100644 index 0000000..91589fb --- /dev/null +++ b/tests/Database.Updater.Tests.MigrationsAssembly/DbContext/Person.cs @@ -0,0 +1,17 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) P.O.S Informatique. All rights reserved. +// +//----------------------------------------------------------------------- + +namespace PosInformatique.Database.Updater.MigrationsAssembly +{ + public class Person + { + public int Id { get; set; } + + public string Name { get; set; } + + public bool? IsActive { get; set; } + } +} diff --git a/tests/Database.Updater.Tests.MigrationsAssembly/DbContext/PersonDbContext.cs b/tests/Database.Updater.Tests.MigrationsAssembly/DbContext/PersonDbContext.cs new file mode 100644 index 0000000..0f4c40f --- /dev/null +++ b/tests/Database.Updater.Tests.MigrationsAssembly/DbContext/PersonDbContext.cs @@ -0,0 +1,28 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) P.O.S Informatique. All rights reserved. +// +//----------------------------------------------------------------------- + +namespace PosInformatique.Database.Updater.MigrationsAssembly +{ + using Microsoft.EntityFrameworkCore; + + public class PersonDbContext : DbContext + { + public PersonDbContext(DbContextOptions options) + : base(options) + { + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity() + .ToTable("Person") + .Property(p => p.Name) + .IsRequired() + .HasMaxLength(20) + .IsUnicode(false); + } + } +} diff --git a/tests/Database.Updater.Tests.MigrationsAssembly/DbContext/PersonDbContextFactory.cs b/tests/Database.Updater.Tests.MigrationsAssembly/DbContext/PersonDbContextFactory.cs new file mode 100644 index 0000000..e3c10ab --- /dev/null +++ b/tests/Database.Updater.Tests.MigrationsAssembly/DbContext/PersonDbContextFactory.cs @@ -0,0 +1,22 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) P.O.S Informatique. All rights reserved. +// +//----------------------------------------------------------------------- + +namespace PosInformatique.Database.Updater.MigrationsAssembly +{ + using Microsoft.EntityFrameworkCore; + using Microsoft.EntityFrameworkCore.Design; + + internal sealed class PersonDbContextFactory : IDesignTimeDbContextFactory + { + public PersonDbContext CreateDbContext(string[] args) + { + var options = new DbContextOptionsBuilder() + .UseSqlServer(b => b.MigrationsAssembly(this.GetType().Assembly.GetName().Name)); + + return new PersonDbContext(options.Options); + } + } +} \ No newline at end of file diff --git a/tests/Database.Updater.Tests.MigrationsAssembly/Migrations/PersonDbContextModelSnapshot.cs b/tests/Database.Updater.Tests.MigrationsAssembly/Migrations/PersonDbContextModelSnapshot.cs new file mode 100644 index 0000000..9cd241e --- /dev/null +++ b/tests/Database.Updater.Tests.MigrationsAssembly/Migrations/PersonDbContextModelSnapshot.cs @@ -0,0 +1,47 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace PosInformatique.Database.Updater.MigrationsAssembly +{ + [DbContext(typeof(PersonDbContext))] + partial class PersonDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "9.0.8") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("PosInformatique.Database.Updater.MigrationsAssembly.Person", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("IsActive") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(20) + .IsUnicode(false) + .HasColumnType("varchar(20)"); + + b.HasKey("Id"); + + b.ToTable("Person", (string)null); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/tests/Database.Updater.Tests.MigrationsAssembly/Migrations/Version1.cs b/tests/Database.Updater.Tests.MigrationsAssembly/Migrations/Version1.cs new file mode 100644 index 0000000..f5682cc --- /dev/null +++ b/tests/Database.Updater.Tests.MigrationsAssembly/Migrations/Version1.cs @@ -0,0 +1,29 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) P.O.S Informatique. All rights reserved. +// +//----------------------------------------------------------------------- + +namespace PosInformatique.Database.Updater.MigrationsAssembly +{ + using Microsoft.EntityFrameworkCore; + using Microsoft.EntityFrameworkCore.Infrastructure; + using Microsoft.EntityFrameworkCore.Migrations; + + [DbContext(typeof(DbContext))] + [Migration("Version1")] + public class Version1 : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Person", + columns: table => new + { + Id = table.Column(type: "int", nullable: false), + Name = table.Column(type: "varchar(20)", unicode: false, maxLength: 20, nullable: false), + }); + } + } +} diff --git a/tests/Database.Updater.Tests.MigrationsAssembly/Migrations/Version2.cs b/tests/Database.Updater.Tests.MigrationsAssembly/Migrations/Version2.cs new file mode 100644 index 0000000..6ad0c0b --- /dev/null +++ b/tests/Database.Updater.Tests.MigrationsAssembly/Migrations/Version2.cs @@ -0,0 +1,27 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) P.O.S Informatique. All rights reserved. +// +//----------------------------------------------------------------------- + +namespace PosInformatique.Database.Updater.MigrationsAssembly +{ + using Microsoft.EntityFrameworkCore; + using Microsoft.EntityFrameworkCore.Infrastructure; + using Microsoft.EntityFrameworkCore.Migrations; + + [DbContext(typeof(DbContext))] + [Migration("Version2")] + public class Version2 : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "IsActive", + table: "Person", + type: "bit", + nullable: true); + } + } +} diff --git a/tests/Database.Updater.Tests.MigrationsErrorAssembly/Database.Updater.Tests.MigrationsErrorAssembly.csproj b/tests/Database.Updater.Tests.MigrationsErrorAssembly/Database.Updater.Tests.MigrationsErrorAssembly.csproj new file mode 100644 index 0000000..42631ed --- /dev/null +++ b/tests/Database.Updater.Tests.MigrationsErrorAssembly/Database.Updater.Tests.MigrationsErrorAssembly.csproj @@ -0,0 +1,15 @@ + + + + net8.0 + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + diff --git a/tests/Database.Updater.Tests.MigrationsErrorAssembly/DbContext/Person.cs b/tests/Database.Updater.Tests.MigrationsErrorAssembly/DbContext/Person.cs new file mode 100644 index 0000000..643a05a --- /dev/null +++ b/tests/Database.Updater.Tests.MigrationsErrorAssembly/DbContext/Person.cs @@ -0,0 +1,17 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) P.O.S Informatique. All rights reserved. +// +//----------------------------------------------------------------------- + +namespace PosInformatique.Database.Updater.MigrationsErrorAssembly +{ + public class Person + { + public int Id { get; set; } + + public string Name { get; set; } + + public bool? IsActive { get; set; } + } +} diff --git a/tests/Database.Updater.Tests.MigrationsErrorAssembly/DbContext/PersonDbContext.cs b/tests/Database.Updater.Tests.MigrationsErrorAssembly/DbContext/PersonDbContext.cs new file mode 100644 index 0000000..7cd75a3 --- /dev/null +++ b/tests/Database.Updater.Tests.MigrationsErrorAssembly/DbContext/PersonDbContext.cs @@ -0,0 +1,28 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) P.O.S Informatique. All rights reserved. +// +//----------------------------------------------------------------------- + +namespace PosInformatique.Database.Updater.MigrationsErrorAssembly +{ + using Microsoft.EntityFrameworkCore; + + public class PersonDbContext : DbContext + { + public PersonDbContext(DbContextOptions options) + : base(options) + { + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity() + .ToTable("Person") + .Property(p => p.Name) + .IsRequired() + .HasMaxLength(20) + .IsUnicode(false); + } + } +} diff --git a/tests/Database.Updater.Tests.MigrationsErrorAssembly/DbContext/PersonDbContextFactory.cs b/tests/Database.Updater.Tests.MigrationsErrorAssembly/DbContext/PersonDbContextFactory.cs new file mode 100644 index 0000000..29066be --- /dev/null +++ b/tests/Database.Updater.Tests.MigrationsErrorAssembly/DbContext/PersonDbContextFactory.cs @@ -0,0 +1,22 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) P.O.S Informatique. All rights reserved. +// +//----------------------------------------------------------------------- + +namespace PosInformatique.Database.Updater.MigrationsErrorAssembly +{ + using Microsoft.EntityFrameworkCore; + using Microsoft.EntityFrameworkCore.Design; + + internal sealed class PersonDbContextFactory : IDesignTimeDbContextFactory + { + public PersonDbContext CreateDbContext(string[] args) + { + var options = new DbContextOptionsBuilder() + .UseSqlServer(b => b.MigrationsAssembly(this.GetType().Assembly.GetName().Name)); + + return new PersonDbContext(options.Options); + } + } +} \ No newline at end of file diff --git a/tests/Database.Updater.Tests.MigrationsErrorAssembly/Migrations/PersonDbContextModelSnapshot.cs b/tests/Database.Updater.Tests.MigrationsErrorAssembly/Migrations/PersonDbContextModelSnapshot.cs new file mode 100644 index 0000000..82d5e25 --- /dev/null +++ b/tests/Database.Updater.Tests.MigrationsErrorAssembly/Migrations/PersonDbContextModelSnapshot.cs @@ -0,0 +1,47 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace PosInformatique.Database.Updater.MigrationsErrorAssembly +{ + [DbContext(typeof(PersonDbContext))] + partial class PersonDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "9.0.8") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("PosInformatique.Database.Updater.MigrationsAssembly.Person", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("IsActive") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(20) + .IsUnicode(false) + .HasColumnType("varchar(20)"); + + b.HasKey("Id"); + + b.ToTable("Person", (string)null); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/tests/Database.Updater.Tests.MigrationsErrorAssembly/Migrations/Version1.cs b/tests/Database.Updater.Tests.MigrationsErrorAssembly/Migrations/Version1.cs new file mode 100644 index 0000000..fdf0d28 --- /dev/null +++ b/tests/Database.Updater.Tests.MigrationsErrorAssembly/Migrations/Version1.cs @@ -0,0 +1,29 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) P.O.S Informatique. All rights reserved. +// +//----------------------------------------------------------------------- + +namespace PosInformatique.Database.Updater.MigrationsErrorAssembly +{ + using Microsoft.EntityFrameworkCore; + using Microsoft.EntityFrameworkCore.Infrastructure; + using Microsoft.EntityFrameworkCore.Migrations; + + [DbContext(typeof(DbContext))] + [Migration("Version1")] + public class Version1 : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Person", + columns: table => new + { + Id = table.Column(type: "int", nullable: false), + Name = table.Column(type: "varchar(20)", unicode: false, maxLength: 20, nullable: false), + }); + } + } +} diff --git a/tests/Database.Updater.Tests.MigrationsErrorAssembly/Migrations/Version2.cs b/tests/Database.Updater.Tests.MigrationsErrorAssembly/Migrations/Version2.cs new file mode 100644 index 0000000..7a98c29 --- /dev/null +++ b/tests/Database.Updater.Tests.MigrationsErrorAssembly/Migrations/Version2.cs @@ -0,0 +1,29 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) P.O.S Informatique. All rights reserved. +// +//----------------------------------------------------------------------- + +namespace PosInformatique.Database.Updater.MigrationsErrorAssembly +{ + using Microsoft.EntityFrameworkCore; + using Microsoft.EntityFrameworkCore.Infrastructure; + using Microsoft.EntityFrameworkCore.Migrations; + + [DbContext(typeof(DbContext))] + [Migration("Version2")] + public class Version2 : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "IsActive", + table: "Person", + type: "bit", + nullable: true); + + throw new DivideByZeroException("Some errors occured during the migration..."); + } + } +} diff --git a/tests/Database.Updater.Tests/Database.Updater.Tests.csproj b/tests/Database.Updater.Tests/Database.Updater.Tests.csproj new file mode 100644 index 0000000..3cab54a --- /dev/null +++ b/tests/Database.Updater.Tests/Database.Updater.Tests.csproj @@ -0,0 +1,29 @@ + + + + net8.0 + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + + + + diff --git a/tests/Database.Updater.Tests/DatabaseUpdaterBuilderTest.cs b/tests/Database.Updater.Tests/DatabaseUpdaterBuilderTest.cs new file mode 100644 index 0000000..928320a --- /dev/null +++ b/tests/Database.Updater.Tests/DatabaseUpdaterBuilderTest.cs @@ -0,0 +1,33 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) P.O.S Informatique. All rights reserved. +// +//----------------------------------------------------------------------- + +namespace PosInformatique.Database.Updater.Tests +{ + public class DatabaseUpdaterBuilderTest + { + [Fact] + public void Constructor_NoApplicationName() + { + var action = () => new DatabaseUpdaterBuilder(null); + + action.Should().Throw() + .WithParameterName("applicationName") + .WithMessage("Value cannot be null. (Parameter 'applicationName')"); + } + + [Theory] + [InlineData("")] + [InlineData(" ")] + public void Constructor_ApplicationName_EmptyOrWhitespace(string applicationName) + { + var action = () => new DatabaseUpdaterBuilder(applicationName); + + action.Should().Throw() + .WithParameterName("applicationName") + .WithMessage("The value cannot be an empty string or composed entirely of whitespace. (Parameter 'applicationName')"); + } + } +} \ No newline at end of file diff --git a/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs b/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs new file mode 100644 index 0000000..458c384 --- /dev/null +++ b/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs @@ -0,0 +1,88 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) P.O.S Informatique. All rights reserved. +// +//----------------------------------------------------------------------- + +namespace PosInformatique.Database.Updater.Tests +{ + using PosInformatique.Testing.Databases.SqlServer; + + [Collection(nameof(DatabaseUpdaterTest))] + public class DatabaseUpdaterTest + { + private const string ConnectionString = "Data Source=(localDB)\\dbupdater-tests; Integrated Security=True"; + + [Fact] + public async Task UpgradeAsync_WithExplicitMigrationsAssembly() + { + var server = new SqlServer(ConnectionString); + + var database = await server.CreateEmptyDatabaseAsync("DatabaseUpdaterTest_UpgradeAsync_WithExplicitMigrationsAssembly"); + + var databaseUpdaterBuilder = new DatabaseUpdaterBuilder("MyApplication") + .UseMigrationsAssembly(typeof(MigrationsAssembly.Version1).Assembly); + var databaseUpdater = databaseUpdaterBuilder + .Build(); + + var result = await databaseUpdater.UpgradeAsync([database.ConnectionString]); + + result.Should().Be(0); + + var tables = await database.GetTablesAsync(); + + tables.Should().HaveCount(2); + + tables[0].Name.Should().Be("__EFMigrationsHistory"); + + tables[1].Columns.Should().HaveCount(3); + tables[1].Columns[0].Name.Should().Be("Id"); + tables[1].Columns[1].Name.Should().Be("Name"); + tables[1].Columns[2].Name.Should().Be("IsActive"); + tables[1].Name.Should().Be("Person"); + } + + [Fact] + public async Task UpgradeAsync_WithErrorMigrationsAssembly() + { + var server = new SqlServer(ConnectionString); + + var database = await server.CreateEmptyDatabaseAsync("DatabaseUpdaterTest_UpgradeAsync_WithErrorMigrationsAssembly"); + + var databaseUpdaterBuilder = new DatabaseUpdaterBuilder("MyApplication") + .UseMigrationsAssembly(typeof(MigrationsErrorAssembly.Version1).Assembly); + var databaseUpdater = databaseUpdaterBuilder + .Build(); + + var result = await databaseUpdater.UpgradeAsync([database.ConnectionString]); + + result.Should().Be(99); + } + + [Fact] + public async Task UpgradeAsync_NoArguments() + { + var databaseUpdaterBuilder = new DatabaseUpdaterBuilder("MyApplication"); + var databaseUpdater = databaseUpdaterBuilder + .Build(); + + var result = await databaseUpdater.UpgradeAsync([]); + + result.Should().Be(1); + } + + [Theory] + [InlineData("NotConnectionString")] + [InlineData(ConnectionString, "--command-timeout=abcd")] + public async Task UpgradeAsync_WrongArguments(params string[] args) + { + var databaseUpdaterBuilder = new DatabaseUpdaterBuilder("MyApplication"); + var databaseUpdater = databaseUpdaterBuilder + .Build(); + + var result = await databaseUpdater.UpgradeAsync(args); + + result.Should().Be(1); + } + } +} \ No newline at end of file diff --git a/tests/Directory.Build.props b/tests/Directory.Build.props new file mode 100644 index 0000000..7b2d1a3 --- /dev/null +++ b/tests/Directory.Build.props @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file From 8a5fbab9582122e03b24b8d5c854530ea6edcf16 Mon Sep 17 00:00:00 2001 From: Gilles TOURREAU Date: Thu, 4 Sep 2025 12:01:45 +0200 Subject: [PATCH 02/27] Add github workflows. --- .github/workflows/github-actions-ci.yaml | 49 +++++++++++++++++++ .github/workflows/github-actions-release.yml | 36 ++++++++++++++ PosInformatique.Database.Updater.sln | 10 ++++ .../Properties/launchSettings.json | 2 +- .../DatabaseUpdaterTest.cs | 2 +- 5 files changed, 97 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/github-actions-ci.yaml create mode 100644 .github/workflows/github-actions-release.yml diff --git a/.github/workflows/github-actions-ci.yaml b/.github/workflows/github-actions-ci.yaml new file mode 100644 index 0000000..997faf7 --- /dev/null +++ b/.github/workflows/github-actions-ci.yaml @@ -0,0 +1,49 @@ +name: Continuous Integration + +on: + pull_request: + branches: [ "main" ] + push: + branches: [ "releases/**" ] + +jobs: + build: + runs-on: windows-latest + steps: + - uses: actions/checkout@v4 + + - name: Setup NuGet + uses: nuget/setup-nuget@v2 + + - name: Restore NuGet packages + run: nuget restore PosInformatique.Database.Updater.sln + + - name: Add msbuild to PATH + uses: microsoft/setup-msbuild@v2 + + - name: Build + run: msbuild "PosInformatique.Database.Updater.sln" /p:Configuration=Debug + + - name: Restore NuGet packages + run: nuget restore "samples/PosInformatique.Database.Updater.Samples.sln" + + - name: Build the samples + run: msbuild "samples/PosInformatique.Database.Updater.Samples.sln" /p:Configuration=Debug + + - name: Creates the LocalDB for the tests + shell: cmd + run: SqlLocalDB create posinfo-tests + + - name: Creates the SQL Login service accounts for the tests + shell: cmd + run: sqlcmd -S "(localDB)\posinfo-tests" -Q "IF NOT EXISTS (SELECT 1 FROM [sys].[server_principals] WHERE [Name] = 'ServiceAccountLogin') CREATE LOGIN [ServiceAccountLogin] WITH PASSWORD = 'P@ssw0rd'" + + # Use this fix https://github.com/microsoft/vstest-action/issues/31#issuecomment-2159463764 + - name: Test with the dotnet CLI + uses: rusty-bender/vstest-action@main + with: + searchFolder: .\ + testAssembly: | + /tests/**/*tests.dll + !./**/*TestAdapter.dll + !./**/obj/** diff --git a/.github/workflows/github-actions-release.yml b/.github/workflows/github-actions-release.yml new file mode 100644 index 0000000..f556a8d --- /dev/null +++ b/.github/workflows/github-actions-release.yml @@ -0,0 +1,36 @@ +name: Release + +on: + workflow_dispatch: + inputs: + VersionPrefix: + type: string + description: The version of the library + required: true + default: 2.2.0 + VersionSuffix: + type: string + description: The version suffix of the library (for example rc.1) + +run-name: ${{ inputs.VersionPrefix }}-${{ inputs.VersionSuffix }} + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Setup .NET 8.x + uses: actions/setup-dotnet@v4 + with: + dotnet-version: '8.x' + + - name: Build PosInformatique.Database.Updater + run: dotnet pack + --property:Configuration=Release + --property:VersionPrefix=${{ github.event.inputs.VersionPrefix }} + --property:VersionSuffix=${{ github.event.inputs.VersionSuffix }} + "src/PosInformatique.Database.Updater/PosInformatique.Database.Updater.csproj" + + - name: Publish the package to nuget.org + run: dotnet nuget push "src/**/bin/Release/*.nupkg" --api-key "${{ secrets.NUGET_APIKEY }}" --source https://api.nuget.org/v3/index.json diff --git a/PosInformatique.Database.Updater.sln b/PosInformatique.Database.Updater.sln index 54d8b51..210b30b 100644 --- a/PosInformatique.Database.Updater.sln +++ b/PosInformatique.Database.Updater.sln @@ -37,6 +37,14 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{E9100678 EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Database.Updater.Tests.MigrationsErrorAssembly", "tests\Database.Updater.Tests.MigrationsErrorAssembly\Database.Updater.Tests.MigrationsErrorAssembly.csproj", "{6C0F0292-EB9E-EB63-C1D8-1C8B63E59FC8}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".github", ".github", "{25236396-6913-4183-B770-631C6FDACA15}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{20A16198-31B4-4155-AE36-AB1942F382A6}" + ProjectSection(SolutionItems) = preProject + .github\workflows\github-actions-ci.yaml = .github\workflows\github-actions-ci.yaml + .github\workflows\github-actions-release.yml = .github\workflows\github-actions-release.yml + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -74,6 +82,8 @@ Global {DF126F11-BF03-4B7E-B2F2-3A23E7FE6BF0} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} {BF73C1D5-EF4C-4F34-9944-0D74667BE6A8} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} {6C0F0292-EB9E-EB63-C1D8-1C8B63E59FC8} = {E9100678-42A3-461A-B8F0-DF12DA892979} + {25236396-6913-4183-B770-631C6FDACA15} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} + {20A16198-31B4-4155-AE36-AB1942F382A6} = {25236396-6913-4183-B770-631C6FDACA15} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {30DF5A1B-3B00-40E8-90F0-FA6F5846B215} diff --git a/tests/Database.Updater.IntegrationTests/Properties/launchSettings.json b/tests/Database.Updater.IntegrationTests/Properties/launchSettings.json index 7bfc3cf..910d6fc 100644 --- a/tests/Database.Updater.IntegrationTests/Properties/launchSettings.json +++ b/tests/Database.Updater.IntegrationTests/Properties/launchSettings.json @@ -2,7 +2,7 @@ "profiles": { "OK": { "commandName": "Project", - "commandLineArgs": "\"Data Source=(localDB)\\dbupdater-tests; Initial Catalog=IntegrationTests; Integrated Security=True\"" + "commandLineArgs": "\"Data Source=(localDB)\\posinfo-tests; Initial Catalog=IntegrationTests; Integrated Security=True\"" }, "InvalidConnectionString": { "commandName": "Project", diff --git a/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs b/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs index 458c384..e477515 100644 --- a/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs +++ b/tests/Database.Updater.Tests/DatabaseUpdaterTest.cs @@ -11,7 +11,7 @@ namespace PosInformatique.Database.Updater.Tests [Collection(nameof(DatabaseUpdaterTest))] public class DatabaseUpdaterTest { - private const string ConnectionString = "Data Source=(localDB)\\dbupdater-tests; Integrated Security=True"; + private const string ConnectionString = "Data Source=(localDB)\\posinfo-tests; Integrated Security=True"; [Fact] public async Task UpgradeAsync_WithExplicitMigrationsAssembly() From e714a807c329f122dc68ae954e1bbde10309ce18 Mon Sep 17 00:00:00 2001 From: Gilles TOURREAU Date: Thu, 4 Sep 2025 12:07:01 +0200 Subject: [PATCH 03/27] Remove sample in the workflow. --- .github/workflows/github-actions-ci.yaml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.github/workflows/github-actions-ci.yaml b/.github/workflows/github-actions-ci.yaml index 997faf7..2b7c3e1 100644 --- a/.github/workflows/github-actions-ci.yaml +++ b/.github/workflows/github-actions-ci.yaml @@ -23,12 +23,6 @@ jobs: - name: Build run: msbuild "PosInformatique.Database.Updater.sln" /p:Configuration=Debug - - - name: Restore NuGet packages - run: nuget restore "samples/PosInformatique.Database.Updater.Samples.sln" - - - name: Build the samples - run: msbuild "samples/PosInformatique.Database.Updater.Samples.sln" /p:Configuration=Debug - name: Creates the LocalDB for the tests shell: cmd From c06b17c4260c8041ed43f972dda34fcdde21e908 Mon Sep 17 00:00:00 2001 From: Gilles TOURREAU Date: Thu, 4 Sep 2025 12:17:17 +0200 Subject: [PATCH 04/27] Fix the workflow --- .github/workflows/github-actions-ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/github-actions-ci.yaml b/.github/workflows/github-actions-ci.yaml index 2b7c3e1..5ac228f 100644 --- a/.github/workflows/github-actions-ci.yaml +++ b/.github/workflows/github-actions-ci.yaml @@ -38,6 +38,6 @@ jobs: with: searchFolder: .\ testAssembly: | - /tests/**/*tests.dll + /tests/**/*.tests.dll !./**/*TestAdapter.dll !./**/obj/** From f515bb6b2f5cfb3f2cb00a89b8fdf6fd5bd81204 Mon Sep 17 00:00:00 2001 From: Gilles TOURREAU Date: Thu, 4 Sep 2025 13:33:17 +0200 Subject: [PATCH 05/27] Fix the version --- .github/workflows/github-actions-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/github-actions-release.yml b/.github/workflows/github-actions-release.yml index f556a8d..c2419fa 100644 --- a/.github/workflows/github-actions-release.yml +++ b/.github/workflows/github-actions-release.yml @@ -7,7 +7,7 @@ on: type: string description: The version of the library required: true - default: 2.2.0 + default: 1.0.0 VersionSuffix: type: string description: The version suffix of the library (for example rc.1) From 61166fa5466a41aaeeccb19c0cf4616c3a96ecd3 Mon Sep 17 00:00:00 2001 From: Gilles TOURREAU Date: Thu, 4 Sep 2025 13:38:40 +0200 Subject: [PATCH 06/27] Fix workflow --- .github/workflows/github-actions-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/github-actions-release.yml b/.github/workflows/github-actions-release.yml index c2419fa..e217a01 100644 --- a/.github/workflows/github-actions-release.yml +++ b/.github/workflows/github-actions-release.yml @@ -30,7 +30,7 @@ jobs: --property:Configuration=Release --property:VersionPrefix=${{ github.event.inputs.VersionPrefix }} --property:VersionSuffix=${{ github.event.inputs.VersionSuffix }} - "src/PosInformatique.Database.Updater/PosInformatique.Database.Updater.csproj" + "src/Database.Updater/Database.Updater.csproj" - name: Publish the package to nuget.org run: dotnet nuget push "src/**/bin/Release/*.nupkg" --api-key "${{ secrets.NUGET_APIKEY }}" --source https://api.nuget.org/v3/index.json From ddee3a044b75dbd8736ba134939b6490f24cb144 Mon Sep 17 00:00:00 2001 From: Gilles TOURREAU Date: Thu, 4 Sep 2025 15:18:19 +0200 Subject: [PATCH 07/27] Add the UseSqlServer() method to specify the database provider to use. --- .../DatabaseUpdaterBuilder.cs | 17 ++++++- .../EntityFrameworkDatabaseUpdater.cs | 29 ++++-------- src/Database.Updater/IDatabaseProvider.cs | 37 +++++++++++++++ .../SqlServer/SqlServerDatabaseProvider.cs | 45 +++++++++++++++++++ ...lServerDatabaseUpdaterBuilderExtensions.cs | 26 +++++++++++ .../Program.cs | 1 + .../DatabaseUpdaterBuilderTest.cs | 14 +++++- .../DatabaseUpdaterTest.cs | 4 ++ ...verDatabaseUpdaterBuilderExtensionsTest.cs | 23 ++++++++++ tests/Database.Updater.Tests/TestTools.cs | 22 +++++++++ 10 files changed, 195 insertions(+), 23 deletions(-) create mode 100644 src/Database.Updater/IDatabaseProvider.cs create mode 100644 src/Database.Updater/SqlServer/SqlServerDatabaseProvider.cs create mode 100644 src/Database.Updater/SqlServer/SqlServerDatabaseUpdaterBuilderExtensions.cs create mode 100644 tests/Database.Updater.Tests/SqlServer/SqlServerDatabaseUpdaterBuilderExtensionsTest.cs create mode 100644 tests/Database.Updater.Tests/TestTools.cs diff --git a/src/Database.Updater/DatabaseUpdaterBuilder.cs b/src/Database.Updater/DatabaseUpdaterBuilder.cs index addad0b..4e79797 100644 --- a/src/Database.Updater/DatabaseUpdaterBuilder.cs +++ b/src/Database.Updater/DatabaseUpdaterBuilder.cs @@ -40,6 +40,8 @@ public sealed class DatabaseUpdaterBuilder private readonly IList migrationsAssemblies = new List(); + private IDatabaseProvider? databaseProvider; + ///