From 7bf677c76873b4dec5a56aab84a92369ce01437a Mon Sep 17 00:00:00 2001 From: Henrique Oliveira Date: Wed, 23 Jul 2025 21:14:36 +0200 Subject: [PATCH] kavita: remove restore-migrations patch --- pkgs/servers/web-apps/kavita/default.nix | 9 +- .../web-apps/kavita/restore-migrations.diff | 147 ------------------ 2 files changed, 3 insertions(+), 153 deletions(-) delete mode 100644 pkgs/servers/web-apps/kavita/restore-migrations.diff diff --git a/pkgs/servers/web-apps/kavita/default.nix b/pkgs/servers/web-apps/kavita/default.nix index 14c7053384c1..65d3a25072ce 100644 --- a/pkgs/servers/web-apps/kavita/default.nix +++ b/pkgs/servers/web-apps/kavita/default.nix @@ -26,12 +26,9 @@ stdenvNoCC.mkDerivation (finalAttrs: { patches = [ # The webroot is hardcoded as ./wwwroot ./change-webroot.diff - # Upstream removes database migrations between versions - # Restore them to avoid breaking on updates - # Info: Restores migrations for versions between v0.7.1.4 and v0.7.9 - # On update: check if more migrations need to be restored! - # Migrations should at least allow updates from previous NixOS versions - ./restore-migrations.diff + # NOTE: Upstream frequently removes old database migrations between versions. + # Currently no migration patches are needed for upgrades from NixOS 24.11 (v0.8.3.2). + # Future updates should check if migration restoration is needed for supported upgrade paths. ]; postPatch = '' substituteInPlace API/Services/DirectoryService.cs --subst-var out diff --git a/pkgs/servers/web-apps/kavita/restore-migrations.diff b/pkgs/servers/web-apps/kavita/restore-migrations.diff deleted file mode 100644 index ba92a21cedb9..000000000000 --- a/pkgs/servers/web-apps/kavita/restore-migrations.diff +++ /dev/null @@ -1,147 +0,0 @@ -diff --git a/API/Data/ManualMigrations/MigrateDisableScrobblingOnComicLibraries.cs b/API/Data/ManualMigrations/MigrateDisableScrobblingOnComicLibraries.cs -new file mode 100644 -index 00000000..0de7bf5d ---- /dev/null -+++ b/API/Data/ManualMigrations/MigrateDisableScrobblingOnComicLibraries.cs -@@ -0,0 +1,38 @@ -+using System.Linq; -+using System.Threading.Tasks; -+using API.Entities.Enums; -+using Microsoft.EntityFrameworkCore; -+using Microsoft.Extensions.Logging; -+ -+namespace API.Data.ManualMigrations; -+ -+/// -+/// v0.7.4 introduced Scrobbling with Kavita+. By default, it is on, but Comic libraries have no scrobble providers, so disable -+/// -+public static class MigrateDisableScrobblingOnComicLibraries -+{ -+ public static async Task Migrate(IUnitOfWork unitOfWork, DataContext dataContext, ILogger logger) -+ { -+ if (!await dataContext.Library.Where(s => s.Type == LibraryType.Comic).Where(l => l.AllowScrobbling).AnyAsync()) -+ { -+ return; -+ } -+ logger.LogInformation("Running MigrateDisableScrobblingOnComicLibraries migration. Please be patient, this may take some time"); -+ -+ -+ foreach (var lib in await dataContext.Library.Where(s => s.Type == LibraryType.Comic).Where(l => l.AllowScrobbling).ToListAsync()) -+ { -+ lib.AllowScrobbling = false; -+ unitOfWork.LibraryRepository.Update(lib); -+ } -+ -+ if (unitOfWork.HasChanges()) -+ { -+ await unitOfWork.CommitAsync(); -+ } -+ -+ logger.LogInformation("MigrateDisableScrobblingOnComicLibraries migration finished"); -+ -+ } -+ -+} -diff --git a/API/Data/ManualMigrations/MigrateLoginRoles.cs b/API/Data/ManualMigrations/MigrateLoginRoles.cs -new file mode 100644 -index 00000000..f649908a ---- /dev/null -+++ b/API/Data/ManualMigrations/MigrateLoginRoles.cs -@@ -0,0 +1,36 @@ -+using System.Threading.Tasks; -+using API.Constants; -+using API.Entities; -+using Microsoft.AspNetCore.Identity; -+using Microsoft.Extensions.Logging; -+ -+namespace API.Data.ManualMigrations; -+ -+/// -+/// Added in v0.7.1.18 -+/// -+public static class MigrateLoginRoles -+{ -+ /// -+ /// Will not run if any users have the role already -+ /// -+ /// -+ /// -+ /// -+ public static async Task Migrate(IUnitOfWork unitOfWork, UserManager userManager, ILogger logger) -+ { -+ var usersWithRole = await userManager.GetUsersInRoleAsync(PolicyConstants.LoginRole); -+ if (usersWithRole.Count != 0) return; -+ -+ logger.LogCritical("Running MigrateLoginRoles migration"); -+ -+ var allUsers = await unitOfWork.UserRepository.GetAllUsersAsync(); -+ foreach (var user in allUsers) -+ { -+ await userManager.RemoveFromRoleAsync(user, PolicyConstants.LoginRole); -+ await userManager.AddToRoleAsync(user, PolicyConstants.LoginRole); -+ } -+ -+ logger.LogInformation("MigrateLoginRoles migration complete"); -+ } -+} -diff --git a/API/Data/ManualMigrations/MigrateRemoveWebPSettingRows.cs b/API/Data/ManualMigrations/MigrateRemoveWebPSettingRows.cs -new file mode 100644 -index 00000000..07e98ef6 ---- /dev/null -+++ b/API/Data/ManualMigrations/MigrateRemoveWebPSettingRows.cs -@@ -0,0 +1,31 @@ -+using System.Threading.Tasks; -+using API.Entities.Enums; -+using Microsoft.Extensions.Logging; -+ -+namespace API.Data.ManualMigrations; -+ -+/// -+/// Added in v0.7.2.7/v0.7.3 in which the ConvertXToWebP Setting keys were removed. This migration will remove them. -+/// -+public static class MigrateRemoveWebPSettingRows -+{ -+ public static async Task Migrate(IUnitOfWork unitOfWork, ILogger logger) -+ { -+ logger.LogCritical("Running MigrateRemoveWebPSettingRows migration - Please be patient, this may take some time. This is not an error"); -+ -+ var key = await unitOfWork.SettingsRepository.GetSettingAsync(ServerSettingKey.ConvertBookmarkToWebP); -+ var key2 = await unitOfWork.SettingsRepository.GetSettingAsync(ServerSettingKey.ConvertCoverToWebP); -+ if (key == null && key2 == null) -+ { -+ logger.LogCritical("Running MigrateRemoveWebPSettingRows migration - complete. Nothing to do"); -+ return; -+ } -+ -+ unitOfWork.SettingsRepository.Remove(key); -+ unitOfWork.SettingsRepository.Remove(key2); -+ -+ await unitOfWork.CommitAsync(); -+ -+ logger.LogCritical("Running MigrateRemoveWebPSettingRows migration - Completed. This is not an error"); -+ } -+} -diff --git a/API/Startup.cs b/API/Startup.cs -index 04f4a077..21c4fa45 100644 ---- a/API/Startup.cs -+++ b/API/Startup.cs -@@ -232,11 +232,19 @@ public class Startup - Task.Run(async () => - { - // Apply all migrations on startup -+ var userManager = serviceProvider.GetRequiredService>(); - var dataContext = serviceProvider.GetRequiredService(); - - logger.LogInformation("Running Migrations"); - - #region Migrations -+ -+ // v0.7.2 -+ await MigrateLoginRoles.Migrate(unitOfWork, userManager, logger); -+ // v0.7.3 -+ await MigrateRemoveWebPSettingRows.Migrate(unitOfWork, logger); -+ // v0.7.4 -+ await MigrateDisableScrobblingOnComicLibraries.Migrate(unitOfWork, dataContext, logger); - - // v0.7.9 - await MigrateUserLibrarySideNavStream.Migrate(unitOfWork, dataContext, logger);