From 647d81847cb47a91f8749d1aab53b588a9d707c8 Mon Sep 17 00:00:00 2001 From: Nikolaos Karaolidis Date: Wed, 25 Feb 2026 10:44:34 +0000 Subject: [PATCH 1/3] sonarr: update test filter flags Sync up the syntax with the radarr package Signed-off-by: Nikolaos Karaolidis --- pkgs/by-name/so/sonarr/package.nix | 52 ++++++++++++++---------------- 1 file changed, 24 insertions(+), 28 deletions(-) diff --git a/pkgs/by-name/so/sonarr/package.nix b/pkgs/by-name/so/sonarr/package.nix index a9b51634a9b9..7f02dd96c94d 100644 --- a/pkgs/by-name/so/sonarr/package.nix +++ b/pkgs/by-name/so/sonarr/package.nix @@ -141,39 +141,35 @@ buildDotnetModule { ]; # Skip manual, integration, automation and platform-dependent tests. - dotnetTestFlags = [ - "--filter:${ - lib.concatStringsSep "&" ( - [ - "TestCategory!=ManualTest" - "TestCategory!=IntegrationTest" - "TestCategory!=AutomationTest" + testFilters = [ + "TestCategory!=ManualTest" + "TestCategory!=IntegrationTest" + "TestCategory!=AutomationTest" - # setgid tests - "FullyQualifiedName!=NzbDrone.Mono.Test.DiskProviderTests.DiskProviderFixture.should_preserve_setgid_on_set_folder_permissions" - "FullyQualifiedName!=NzbDrone.Mono.Test.DiskProviderTests.DiskProviderFixture.should_clear_setgid_on_set_folder_permissions" + # makes real HTTP requests + "FullyQualifiedName!~NzbDrone.Core.Test.UpdateTests.UpdatePackageProviderFixture" + "FullyQualifiedName!~NzbDrone.Core.Test.TvTests.RefreshEpisodeServiceFixture" + ] + ++ lib.optionals stdenvNoCC.buildPlatform.isDarwin [ + # fails on macOS + "FullyQualifiedName!~NzbDrone.Core.Test.Http.HttpProxySettingsProviderFixture" + ]; - # we do not set application data directory during tests (i.e. XDG data directory) - "FullyQualifiedName!=NzbDrone.Mono.Test.DiskProviderTests.FreeSpaceFixture.should_return_free_disk_space" + disabledTests = [ + # setgid tests + "NzbDrone.Mono.Test.DiskProviderTests.DiskProviderFixture.should_preserve_setgid_on_set_folder_permissions" + "NzbDrone.Mono.Test.DiskProviderTests.DiskProviderFixture.should_clear_setgid_on_set_folder_permissions" - # attempts to read /etc/*release and fails since it does not exist - "FullyQualifiedName!=NzbDrone.Mono.Test.EnvironmentInfo.ReleaseFileVersionAdapterFixture.should_get_version_info" + # we do not set application data directory during tests (i.e. XDG data directory) + "NzbDrone.Mono.Test.DiskProviderTests.FreeSpaceFixture.should_return_free_disk_space" + "NzbDrone.Common.Test.ServiceFactoryFixture.event_handlers_should_be_unique" - # fails to start test dummy because it cannot locate .NET runtime for some reason - "FullyQualifiedName!=NzbDrone.Common.Test.ProcessProviderFixture.Should_be_able_to_start_process" - "FullyQualifiedName!=NzbDrone.Common.Test.ProcessProviderFixture.kill_all_should_kill_all_process_with_name" + # attempts to read /etc/*release and fails since it does not exist + "NzbDrone.Mono.Test.EnvironmentInfo.ReleaseFileVersionAdapterFixture.should_get_version_info" - # makes real HTTP requests - "FullyQualifiedName!~NzbDrone.Core.Test.TvTests.RefreshEpisodeServiceFixture" - "FullyQualifiedName!~NzbDrone.Core.Test.UpdateTests.UpdatePackageProviderFixture" - ] - ++ lib.optionals stdenvNoCC.buildPlatform.isDarwin [ - # fails on macOS - "FullyQualifiedName!~NzbDrone.Core.Test.Http.HttpProxySettingsProviderFixture" - "FullyQualifiedName!=NzbDrone.Common.Test.ServiceFactoryFixture.event_handlers_should_be_unique" - ] - ) - }" + # fails to start test dummy because it cannot locate .NET runtime for some reason + "NzbDrone.Common.Test.ProcessProviderFixture.Should_be_able_to_start_process" + "NzbDrone.Common.Test.ProcessProviderFixture.kill_all_should_kill_all_process_with_name" ]; passthru = { From 3f25bd4a4fd415a336271ce384ca4359c61b6834 Mon Sep 17 00:00:00 2001 From: Nikolaos Karaolidis Date: Wed, 25 Feb 2026 10:44:38 +0000 Subject: [PATCH 2/3] lidarr: build from source Signed-off-by: Nikolaos Karaolidis --- pkgs/by-name/li/lidarr/deps.json | 1324 ++++++++++++++++++++++++++++ pkgs/by-name/li/lidarr/package.nix | 216 +++-- pkgs/by-name/li/lidarr/update.py | 181 ++++ pkgs/by-name/li/lidarr/update.sh | 35 - 4 files changed, 1656 insertions(+), 100 deletions(-) create mode 100644 pkgs/by-name/li/lidarr/deps.json create mode 100644 pkgs/by-name/li/lidarr/update.py delete mode 100755 pkgs/by-name/li/lidarr/update.sh diff --git a/pkgs/by-name/li/lidarr/deps.json b/pkgs/by-name/li/lidarr/deps.json new file mode 100644 index 000000000000..ad978672bba8 --- /dev/null +++ b/pkgs/by-name/li/lidarr/deps.json @@ -0,0 +1,1324 @@ +[ + { + "pname": "AutoFixture", + "version": "4.17.0", + "hash": "sha256-kM2n3KdZ2cOAo1OFekdrcOEtCbO8kH0tsnKfjcSZbw4=" + }, + { + "pname": "Azure.Core", + "version": "1.47.1", + "hash": "sha256-YJR1bDI9H9lr6p/9QcOWEhnpMD8ePyxxO39S32VAOak=" + }, + { + "pname": "Azure.Identity", + "version": "1.14.2", + "hash": "sha256-PpGcGQrzcEzDtTm65gLmjWrt8yavst4VOKDlr+NuLQo=" + }, + { + "pname": "BouncyCastle.Cryptography", + "version": "2.6.1", + "hash": "sha256-0NNwK/UZlnIK4Nb7bs4ya0XfoVluKQPUVQvaR88UHKo=" + }, + { + "pname": "Castle.Core", + "version": "5.1.1", + "hash": "sha256-oVkQB+ON7S6Q27OhXrTLaxTL0kWB58HZaFFuiw4iTrE=" + }, + { + "pname": "coverlet.collector", + "version": "6.0.4", + "hash": "sha256-ieiUl7G5pVKQ4V6rxhEe0ehep0/u1RBD3EAI63AQTI0=" + }, + { + "pname": "Dapper", + "version": "2.1.66", + "hash": "sha256-e5n/wnAFGPDSe30oQQ0fanXrvFZYYa+qCDSTHtfQmPw=" + }, + { + "pname": "Diacritical.Net", + "version": "1.0.4", + "hash": "sha256-rBYl6Dz7vRHPx/tXAJ8rupAVHUBilZ/WnJE92UrHge8=" + }, + { + "pname": "DryIoc.dll", + "version": "5.4.3", + "hash": "sha256-qk3sUiiQu4TxdkG4Ise8Sn5h3kV5p6w6t9wMw5dSc94=" + }, + { + "pname": "DryIoc.Microsoft.DependencyInjection", + "version": "6.2.0", + "hash": "sha256-C06B0tj3qFkVVGL0kSflf88As4t9TRaw/++N05Zaz0c=" + }, + { + "pname": "Dynamitey", + "version": "3.0.3", + "hash": "sha256-69DyYSGu1sjpr8DupZWEiwcVmW9vT197c00vQ7H9k1s=" + }, + { + "pname": "Equ", + "version": "2.3.0", + "hash": "sha256-LMGRC1Pq6RdiPnyBEjDP1yA7gesHxrXPXa353pGGlqw=" + }, + { + "pname": "Fare", + "version": "2.1.1", + "hash": "sha256-n9X3GE2qsT2wpmDymD1AyCYcOoY/c0+t+aIWLiaST70=" + }, + { + "pname": "FluentAssertions", + "version": "5.10.3", + "hash": "sha256-ThNTNoZKe5hyATooSFCDCImVM5TNOyKnJs5MgdOY9WQ=" + }, + { + "pname": "FluentMigrator", + "version": "6.2.0", + "hash": "sha256-ile8oQnbeJWcoHiK4wESAGSq4VtbSsuUZWbvYZZsWes=" + }, + { + "pname": "FluentMigrator.Abstractions", + "version": "6.2.0", + "hash": "sha256-jzrMDqysTXQw4F+XuBq6dTtLjfqyerlrOrR6V85RlPY=" + }, + { + "pname": "FluentMigrator.Extensions.Postgres", + "version": "6.2.0", + "hash": "sha256-FdV3OPXLdu+C74Zbrk2IG5Dz52u54D/7wYSsloqA5hs=" + }, + { + "pname": "FluentMigrator.Runner.Core", + "version": "6.2.0", + "hash": "sha256-uUXhvxCkwyxmDBSlPSp5K1ycSTSssWYNui2dN6Ql5Wk=" + }, + { + "pname": "FluentMigrator.Runner.Postgres", + "version": "6.2.0", + "hash": "sha256-zqgNUE8oiZ+wJ+Xni6AcQiMDiTOLDMqe0rMmn/DuiI0=" + }, + { + "pname": "FluentMigrator.Runner.SQLite", + "version": "6.2.0", + "hash": "sha256-nzeaThuaPs/jqgIpsj7SWlAICAciXNTM1447R3s/18U=" + }, + { + "pname": "FluentValidation", + "version": "9.5.4", + "hash": "sha256-htL8KbjBt2rn+y+nUIc4lVBypWksQ+hsROxMBDzi5IU=" + }, + { + "pname": "Ical.Net", + "version": "4.3.1", + "hash": "sha256-jpohvCiUBe61A3O+BJwCqsPW+3jUt4cKeCqZb/0cw0M=" + }, + { + "pname": "ImpromptuInterface", + "version": "8.0.6", + "hash": "sha256-u0J8n7ShZX+lk5aX9copjwgym5TtglRGT7QtPdZeHeA=" + }, + { + "pname": "IPAddressRange", + "version": "6.2.0", + "hash": "sha256-g3brzbKKPZS23cbttpr5CCYoZHm+dvH43/gXLuZYmFg=" + }, + { + "pname": "MailKit", + "version": "4.14.0", + "hash": "sha256-vAFqKaKvLUUiFbpu1mJdL/W5CIlb6rh3U6ef883g+Bs=" + }, + { + "pname": "Microsoft.ApplicationInsights", + "version": "2.23.0", + "hash": "sha256-5sf3bg7CZZjHseK+F3foOchEhmVeioePxMZVvS6Rjb0=" + }, + { + "pname": "Microsoft.AspNetCore.Cryptography.Internal", + "version": "8.0.20", + "hash": "sha256-9hCA6rahWQwuKPnBFcq5Y67oVnX8mZyaljYUdxApgm0=" + }, + { + "pname": "Microsoft.AspNetCore.Cryptography.KeyDerivation", + "version": "8.0.20", + "hash": "sha256-poZIBnJNCb6icymkU+5IcV8tUoQm7Hwrenpi1UlJJtk=" + }, + { + "pname": "Microsoft.Bcl.AsyncInterfaces", + "version": "8.0.0", + "hash": "sha256-9aWmiwMJKrKr9ohD1KSuol37y+jdDxPGJct3m2/Bknw=" + }, + { + "pname": "Microsoft.Bcl.Cryptography", + "version": "8.0.0", + "hash": "sha256-p9aO+aVi4Vl8bRsYRFGJyc9Mqd2wkQ12RwWDwBhdt4I=" + }, + { + "pname": "Microsoft.CodeCoverage", + "version": "17.10.0", + "hash": "sha256-yQFwqVChRtIRpbtkJr92JH2i+O7xn91NGbYgnKs8G2g=" + }, + { + "pname": "Microsoft.CSharp", + "version": "4.7.0", + "hash": "sha256-Enknv2RsFF68lEPdrf5M+BpV1kHoLTVRApKUwuk/pj0=" + }, + { + "pname": "Microsoft.Data.SqlClient", + "version": "6.1.1", + "hash": "sha256-IBVkAipJyF7KO9uid+5QyfVzWEeY/BbQUofKc6zQoW0=" + }, + { + "pname": "Microsoft.Data.SqlClient.SNI.runtime", + "version": "6.0.2", + "hash": "sha256-CQuJfjZYoRxfc07cSzUNCOOdzmUJu0p10J+WpcG2BJ0=" + }, + { + "pname": "Microsoft.Extensions.Caching.Abstractions", + "version": "8.0.0", + "hash": "sha256-xGpKrywQvU1Wm/WolYIxgHYEFfgkNGeJ+GGc5DT3phI=" + }, + { + "pname": "Microsoft.Extensions.Caching.Memory", + "version": "8.0.1", + "hash": "sha256-5Q0vzHo3ZvGs4nPBc/XlBF4wAwYO8pxq6EGdYjjXZps=" + }, + { + "pname": "Microsoft.Extensions.Configuration", + "version": "8.0.0", + "hash": "sha256-9BPsASlxrV8ilmMCjdb3TiUcm5vFZxkBnAI/fNBSEyA=" + }, + { + "pname": "Microsoft.Extensions.Configuration.Abstractions", + "version": "8.0.0", + "hash": "sha256-4eBpDkf7MJozTZnOwQvwcfgRKQGcNXe0K/kF+h5Rl8o=" + }, + { + "pname": "Microsoft.Extensions.Configuration.Binder", + "version": "8.0.2", + "hash": "sha256-aGB0VuoC34YadAEqrwoaXLc5qla55pswDV2xLSmR7SE=" + }, + { + "pname": "Microsoft.Extensions.Configuration.CommandLine", + "version": "8.0.0", + "hash": "sha256-fmPC/o8S+weTtQJWykpnGHm6AKVU21xYE/CaHYU7zgg=" + }, + { + "pname": "Microsoft.Extensions.Configuration.EnvironmentVariables", + "version": "8.0.0", + "hash": "sha256-+bjFZvqCsMf2FRM2olqx/fub+QwfM1kBhjGVOT5HC48=" + }, + { + "pname": "Microsoft.Extensions.Configuration.FileExtensions", + "version": "8.0.1", + "hash": "sha256-iRA8L7BX/fe5LHCVOhzBSk30GfshP7V2Qj2nxpEvStA=" + }, + { + "pname": "Microsoft.Extensions.Configuration.Json", + "version": "8.0.1", + "hash": "sha256-J8EK/yhsfTpeSUY8F81ZTBV9APHiPUliN7d+n2OX9Ig=" + }, + { + "pname": "Microsoft.Extensions.Configuration.UserSecrets", + "version": "8.0.1", + "hash": "sha256-yGvWfwBhyFudcIv96pKWaQ1MIMOiv5LHSCn+9J7Doz0=" + }, + { + "pname": "Microsoft.Extensions.DependencyInjection", + "version": "8.0.1", + "hash": "sha256-O9g0jWS+jfGoT3yqKwZYJGL+jGSIeSbwmvomKDC3hTU=" + }, + { + "pname": "Microsoft.Extensions.DependencyInjection.Abstractions", + "version": "7.0.0", + "hash": "sha256-55lsa2QdX1CJn1TpW1vTnkvbGXKCeE9P0O6AkW49LaA=" + }, + { + "pname": "Microsoft.Extensions.DependencyInjection.Abstractions", + "version": "8.0.0", + "hash": "sha256-75KzEGWjbRELczJpCiJub+ltNUMMbz5A/1KQU+5dgP8=" + }, + { + "pname": "Microsoft.Extensions.DependencyInjection.Abstractions", + "version": "8.0.2", + "hash": "sha256-UfLfEQAkXxDaVPC7foE/J3FVEXd31Pu6uQIhTic3JgY=" + }, + { + "pname": "Microsoft.Extensions.Diagnostics", + "version": "8.0.1", + "hash": "sha256-CraHNCaVlMiYx6ff9afT6U7RC/MoOCXM3pn2KrXkiLc=" + }, + { + "pname": "Microsoft.Extensions.Diagnostics.Abstractions", + "version": "8.0.1", + "hash": "sha256-d5DVXhA8qJFY9YbhZjsTqs5w5kDuxF5v+GD/WZR1QL0=" + }, + { + "pname": "Microsoft.Extensions.FileProviders.Abstractions", + "version": "8.0.0", + "hash": "sha256-uQSXmt47X2HGoVniavjLICbPtD2ReQOYQMgy3l0xuMU=" + }, + { + "pname": "Microsoft.Extensions.FileProviders.Physical", + "version": "8.0.0", + "hash": "sha256-29y5ZRQ1ZgzVOxHktYxyiH40kVgm5un2yTGdvuSWnRc=" + }, + { + "pname": "Microsoft.Extensions.FileSystemGlobbing", + "version": "8.0.0", + "hash": "sha256-+Oz41JR5jdcJlCJOSpQIL5OMBNi+1Hl2d0JUHfES7sU=" + }, + { + "pname": "Microsoft.Extensions.Hosting", + "version": "8.0.1", + "hash": "sha256-FFLo6em0N2vaWg6//vaQhxoOgT9LLH5Y2KWkCeX5xQ4=" + }, + { + "pname": "Microsoft.Extensions.Hosting.Abstractions", + "version": "8.0.1", + "hash": "sha256-/bIVL9uvBQhV/KQmjA1ZjR74sMfaAlBb15sVXsGDEVA=" + }, + { + "pname": "Microsoft.Extensions.Hosting.WindowsServices", + "version": "8.0.1", + "hash": "sha256-JBrZuv1RxpJf5wR81g91bE1/JQgBeOtnJDvA98rlYKE=" + }, + { + "pname": "Microsoft.Extensions.Logging", + "version": "8.0.1", + "hash": "sha256-vkfVw4tQEg86Xg18v6QO0Qb4Ysz0Njx57d1XcNuj6IU=" + }, + { + "pname": "Microsoft.Extensions.Logging.Abstractions", + "version": "8.0.2", + "hash": "sha256-cHpe8X2BgYa5DzulZfq24rg8O2K5Lmq2OiLhoyAVgJc=" + }, + { + "pname": "Microsoft.Extensions.Logging.Abstractions", + "version": "8.0.3", + "hash": "sha256-5MSY1aEwUbRXehSPHYw0cBZyFcUH4jkgabddxhMiu3Q=" + }, + { + "pname": "Microsoft.Extensions.Logging.Configuration", + "version": "8.0.1", + "hash": "sha256-E2JbJG2EXlv2HUWLi17kIkAL6RC9rC2E18C3gAyOuaE=" + }, + { + "pname": "Microsoft.Extensions.Logging.Console", + "version": "8.0.1", + "hash": "sha256-2thhF1JbDNj3Bx2fcH7O26uHGNeMd9MYah6N60lIpIU=" + }, + { + "pname": "Microsoft.Extensions.Logging.Debug", + "version": "8.0.1", + "hash": "sha256-gKFqBg5lbjy5VBEcAuoQ/SsXAxvrYdBYOu9dV60eJKg=" + }, + { + "pname": "Microsoft.Extensions.Logging.EventLog", + "version": "8.0.1", + "hash": "sha256-1UkEOwl3Op2b3jTvpI10hHxIe9FqeVVy+VB1tZp6Lc8=" + }, + { + "pname": "Microsoft.Extensions.Logging.EventSource", + "version": "8.0.1", + "hash": "sha256-EINT/PgfB4Dvf+1JBzL1plPT35ezT7kyS8y/XMMgYxA=" + }, + { + "pname": "Microsoft.Extensions.Options", + "version": "8.0.0", + "hash": "sha256-n2m4JSegQKUTlOsKLZUUHHKMq926eJ0w9N9G+I3FoFw=" + }, + { + "pname": "Microsoft.Extensions.Options", + "version": "8.0.2", + "hash": "sha256-AjcldddddtN/9aH9pg7ClEZycWtFHLi9IPe1GGhNQys=" + }, + { + "pname": "Microsoft.Extensions.Options.ConfigurationExtensions", + "version": "8.0.0", + "hash": "sha256-A5Bbzw1kiNkgirk5x8kyxwg9lLTcSngojeD+ocpG1RI=" + }, + { + "pname": "Microsoft.Extensions.Primitives", + "version": "8.0.0", + "hash": "sha256-FU8qj3DR8bDdc1c+WeGZx/PCZeqqndweZM9epcpXjSo=" + }, + { + "pname": "Microsoft.Identity.Client", + "version": "4.73.1", + "hash": "sha256-cd5ArtDvQK4gdX8M0GHQEsCFWlqpdm6lxvaM2yMHkhc=" + }, + { + "pname": "Microsoft.Identity.Client.Extensions.Msal", + "version": "4.73.1", + "hash": "sha256-wc4oHBGKCJhAqNIyD4LlugCFvmyiW5iVzGYP88bnWqs=" + }, + { + "pname": "Microsoft.IdentityModel.Abstractions", + "version": "6.35.0", + "hash": "sha256-bxyYu6/QgaA4TQYBr5d+bzICL+ktlkdy/tb/1fBu00Q=" + }, + { + "pname": "Microsoft.IdentityModel.Abstractions", + "version": "7.7.1", + "hash": "sha256-v83O6Gb8s4wGhbRPvOA95t0LSX+MAhF6WpA6qZeK2XM=" + }, + { + "pname": "Microsoft.IdentityModel.JsonWebTokens", + "version": "7.7.1", + "hash": "sha256-vGUx0HYrhDGQiHuIZoe4YOXx3UV9hT+a0krlPGJPQzw=" + }, + { + "pname": "Microsoft.IdentityModel.Logging", + "version": "7.7.1", + "hash": "sha256-JtQclRXgzsFBFnD+kgD59OILf7XkMD2czLupLZkc100=" + }, + { + "pname": "Microsoft.IdentityModel.Protocols", + "version": "7.7.1", + "hash": "sha256-PVS46Ut/2814hy0tdNLahG266hBmepw/fzZ9pku1PNg=" + }, + { + "pname": "Microsoft.IdentityModel.Protocols.OpenIdConnect", + "version": "7.7.1", + "hash": "sha256-zXRZLfgOG/0l8aF6mZuAVGWB3wYz5uTkTJwlucYPafw=" + }, + { + "pname": "Microsoft.IdentityModel.Tokens", + "version": "7.7.1", + "hash": "sha256-WgbdkeG0R/f+4GJeXlj1WMpFyGv7+iW1JM9Pgt95UFk=" + }, + { + "pname": "Microsoft.NET.Test.Sdk", + "version": "17.10.0", + "hash": "sha256-rkHIqB2mquNXF89XBTFpUL2z5msjTBsOcyjSBCh36I0=" + }, + { + "pname": "Microsoft.NETCore.Platforms", + "version": "1.1.0", + "hash": "sha256-FeM40ktcObQJk4nMYShB61H/E8B7tIKfl9ObJ0IOcCM=" + }, + { + "pname": "Microsoft.NETCore.Platforms", + "version": "5.0.0", + "hash": "sha256-LIcg1StDcQLPOABp4JRXIs837d7z0ia6+++3SF3jl1c=" + }, + { + "pname": "Microsoft.NETCore.Targets", + "version": "1.1.0", + "hash": "sha256-0AqQ2gMS8iNlYkrD+BxtIg7cXMnr9xZHtKAuN4bjfaQ=" + }, + { + "pname": "Microsoft.OpenApi", + "version": "1.6.25", + "hash": "sha256-Y8/b5gl+VtHD48BOsnSnyIH9ncjy3EGvszIHn+pjzP4=" + }, + { + "pname": "Microsoft.SqlServer.Server", + "version": "1.0.0", + "hash": "sha256-mx/iqHmBMwA8Ulot0n6YFVIKsU1Tx7q4Tru7MSjbEgQ=" + }, + { + "pname": "Microsoft.Testing.Extensions.Telemetry", + "version": "1.7.3", + "hash": "sha256-Z6WsY2FCUbNnT5HJd7IOrfOvqknVXp6PWzTVeb0idVg=" + }, + { + "pname": "Microsoft.Testing.Extensions.TrxReport.Abstractions", + "version": "1.7.3", + "hash": "sha256-PTee04FHyTHx/gF5NLckXuVje807G51MzkPrZ1gkgCw=" + }, + { + "pname": "Microsoft.Testing.Extensions.VSTestBridge", + "version": "1.7.3", + "hash": "sha256-8d+wZmucfSO7PsviHjVxYB4q6NcjgxvnCUpLePq35sM=" + }, + { + "pname": "Microsoft.Testing.Platform", + "version": "1.7.3", + "hash": "sha256-cavX11P5o9rooqC3ZHw5h002OKRg2ZNR/VaRwpNTQYA=" + }, + { + "pname": "Microsoft.Testing.Platform.MSBuild", + "version": "1.7.3", + "hash": "sha256-cREl529UQ/c5atT8KimMgrgNdy6MrAd0sBGT8sXRRPM=" + }, + { + "pname": "Microsoft.TestPlatform.AdapterUtilities", + "version": "17.13.0", + "hash": "sha256-Vr+3Tad/h/nk7f/5HMExn3HvCGFCarehFAzJSfCBaOc=" + }, + { + "pname": "Microsoft.TestPlatform.ObjectModel", + "version": "17.10.0", + "hash": "sha256-3YjVGK2zEObksBGYg8b/CqoJgLQ1jUv4GCWNjDhLRh4=" + }, + { + "pname": "Microsoft.TestPlatform.ObjectModel", + "version": "17.13.0", + "hash": "sha256-6S0fjfj8vA+h6dJVNwLi6oZhYDO/I/6hBZaq2VTW+Uk=" + }, + { + "pname": "Microsoft.TestPlatform.TestHost", + "version": "17.10.0", + "hash": "sha256-+yzP3FY6WoOosSpYnB7duZLhOPUZMQYy8zJ1d3Q4hK4=" + }, + { + "pname": "Microsoft.Win32.Primitives", + "version": "4.3.0", + "hash": "sha256-mBNDmPXNTW54XLnPAUwBRvkIORFM7/j0D0I2SyQPDEg=" + }, + { + "pname": "Microsoft.Win32.Registry", + "version": "5.0.0", + "hash": "sha256-9kylPGfKZc58yFqNKa77stomcoNnMeERXozWJzDcUIA=" + }, + { + "pname": "Microsoft.Win32.SystemEvents", + "version": "8.0.0", + "hash": "sha256-UcxurEamYD+Bua0PbPNMYAZaRulMrov8CfbJGIgTaRQ=" + }, + { + "pname": "MimeKit", + "version": "4.14.0", + "hash": "sha256-06dqA6w2V2D+miq387smCuJ/8fk1FVc0rvRjmglAWyM=" + }, + { + "pname": "Mono.Nat", + "version": "3.0.0", + "hash": "sha256-KH49R1YQ+8a/rzwwUPrE82QQTi8nxQc6b0KWyy+Tnp4=" + }, + { + "pname": "Mono.Posix.NETStandard", + "version": "5.20.1.34-servarr20", + "hash": "sha256-6dHPPXtZRFLnNWISsEeQJhv5Umya+8ptZh8xhBXLOnM=", + "url": "https://pkgs.dev.azure.com/Servarr/7ab38f4e-5a57-4d70-84f4-94dd9bc5d6df/_packaging/9845f7c9-6c8c-4845-b5ee-58375c59e0d8/nuget/v3/flat2/mono.posix.netstandard/5.20.1.34-servarr20/mono.posix.netstandard.5.20.1.34-servarr20.nupkg" + }, + { + "pname": "MonoTorrent", + "version": "3.0.2", + "hash": "sha256-R2XANCRRVAe1mOzccWV4So85kQYDU2pWSWOfrbXAigw=" + }, + { + "pname": "Moq", + "version": "4.18.4", + "hash": "sha256-JOmYlcTJdQOthRxnT0jAD6WG+NVLMmIV2BM9rNhNg3Q=" + }, + { + "pname": "NBuilder", + "version": "6.1.0", + "hash": "sha256-3EulDuYIUjs2PyKJVLzMgMr9opLik8A8v3hMZ10qEZ8=" + }, + { + "pname": "NETStandard.Library", + "version": "1.6.1", + "hash": "sha256-iNan1ix7RtncGWC9AjAZ2sk70DoxOsmEOgQ10fXm4Pw=" + }, + { + "pname": "NETStandard.Library", + "version": "2.0.0", + "hash": "sha256-Pp7fRylai8JrE1O+9TGfIEJrAOmnWTJRLWE+qJBahK0=" + }, + { + "pname": "Newtonsoft.Json", + "version": "13.0.1", + "hash": "sha256-K2tSVW4n4beRPzPu3rlVaBEMdGvWSv/3Q1fxaDh4Mjo=" + }, + { + "pname": "Newtonsoft.Json", + "version": "13.0.4", + "hash": "sha256-8JCB1FdAW681qXP6DFDWvycu1oPyVoxaYgpJ2pUvZSk=" + }, + { + "pname": "NLog", + "version": "5.4.0", + "hash": "sha256-l2R0UHHCL02KPMC96e62AL2ONFD0PAty619y9UnD25A=" + }, + { + "pname": "NLog.Extensions.Logging", + "version": "5.4.0", + "hash": "sha256-9pVBguAKnjmbtKM3wBVBEzovXkoEXgqvB4IhiayAkVo=" + }, + { + "pname": "NLog.Layouts.ClefJsonLayout", + "version": "1.0.4", + "hash": "sha256-C/i9xWUubi4Wd9LAwxBj+XTAFvQ0+WgIvI3V7T/XF+8=" + }, + { + "pname": "NLog.Targets.Syslog", + "version": "7.0.0", + "hash": "sha256-Yy6REt1UxkdFz+twa0zJVm635YHch7B6t9Pjj5FZUZc=" + }, + { + "pname": "NodaTime", + "version": "3.2.0", + "hash": "sha256-kt59MWEzmMFBgpw5tOPlcYwZKe74WkA9N5ggrLS3tUM=" + }, + { + "pname": "Npgsql", + "version": "9.0.3", + "hash": "sha256-X3F05GNj3vNVl++VOV5TMYE5dvEe6cx0k+5yWo2Q/+o=" + }, + { + "pname": "NUnit", + "version": "3.14.0", + "hash": "sha256-CuP/q5HovPWfAW3Cty/QxRi7VpjykJ3TDLq5TENI6KY=" + }, + { + "pname": "NUnit3TestAdapter", + "version": "5.1.0", + "hash": "sha256-5z470sFjV67wGHaw8KfmSloIAYe81Dokp0f8I6zXsDc=" + }, + { + "pname": "NunitXml.TestLogger", + "version": "3.1.20", + "hash": "sha256-T6/n9S5vnmznf2P7x5Vejciq8P2P+1OCrdKE2UmWQOw=" + }, + { + "pname": "Polly", + "version": "8.6.4", + "hash": "sha256-Z+ZbhnHWMu55qgQkxvw3yMiMd+zIMzzQiFhvn/PeQ3I=" + }, + { + "pname": "Polly.Contrib.WaitAndRetry", + "version": "1.1.1", + "hash": "sha256-InJ8IXAsZDAR4B/YzWCuEWRa/6Xf5oB049UJUkTOoSg=" + }, + { + "pname": "Polly.Core", + "version": "8.6.4", + "hash": "sha256-4Xrg/H481Y/WOHk1sGvFNEOfgaGrdKi+4U54PTXhh9I=" + }, + { + "pname": "RestSharp", + "version": "106.15.0", + "hash": "sha256-8UChXxz7AQmQpoozSBfwB6NVmt2+uJcN8TH7RtVfT7w=" + }, + { + "pname": "RestSharp.Serializers.SystemTextJson", + "version": "106.15.0", + "hash": "sha256-Aj3Ro8dkHXTrY2OpyXEQ0vITqz1ItvQRpDE40S3fr7U=" + }, + { + "pname": "ReusableTasks", + "version": "4.0.0", + "hash": "sha256-8Z6wQaPQMXZFqvSi9WL5jdmLHolnLQwZmmG0+OUyPeo=" + }, + { + "pname": "runtime.any.System.Collections", + "version": "4.3.0", + "hash": "sha256-4PGZqyWhZ6/HCTF2KddDsbmTTjxs2oW79YfkberDZS8=" + }, + { + "pname": "runtime.any.System.Diagnostics.Tools", + "version": "4.3.0", + "hash": "sha256-8yLKFt2wQxkEf7fNfzB+cPUCjYn2qbqNgQ1+EeY2h/I=" + }, + { + "pname": "runtime.any.System.Diagnostics.Tracing", + "version": "4.3.0", + "hash": "sha256-dsmTLGvt8HqRkDWP8iKVXJCS+akAzENGXKPV18W2RgI=" + }, + { + "pname": "runtime.any.System.Globalization", + "version": "4.3.0", + "hash": "sha256-PaiITTFI2FfPylTEk7DwzfKeiA/g/aooSU1pDcdwWLU=" + }, + { + "pname": "runtime.any.System.Globalization.Calendars", + "version": "4.3.0", + "hash": "sha256-AYh39tgXJVFu8aLi9Y/4rK8yWMaza4S4eaxjfcuEEL4=" + }, + { + "pname": "runtime.any.System.IO", + "version": "4.3.0", + "hash": "sha256-vej7ySRhyvM3pYh/ITMdC25ivSd0WLZAaIQbYj/6HVE=" + }, + { + "pname": "runtime.any.System.Reflection", + "version": "4.3.0", + "hash": "sha256-ns6f++lSA+bi1xXgmW1JkWFb2NaMD+w+YNTfMvyAiQk=" + }, + { + "pname": "runtime.any.System.Reflection.Extensions", + "version": "4.3.0", + "hash": "sha256-Y2AnhOcJwJVYv7Rp6Jz6ma0fpITFqJW+8rsw106K2X8=" + }, + { + "pname": "runtime.any.System.Reflection.Primitives", + "version": "4.3.0", + "hash": "sha256-LkPXtiDQM3BcdYkAm5uSNOiz3uF4J45qpxn5aBiqNXQ=" + }, + { + "pname": "runtime.any.System.Resources.ResourceManager", + "version": "4.3.0", + "hash": "sha256-9EvnmZslLgLLhJ00o5MWaPuJQlbUFcUF8itGQNVkcQ4=" + }, + { + "pname": "runtime.any.System.Runtime", + "version": "4.3.0", + "hash": "sha256-qwhNXBaJ1DtDkuRacgHwnZmOZ1u9q7N8j0cWOLYOELM=" + }, + { + "pname": "runtime.any.System.Runtime.Handles", + "version": "4.3.0", + "hash": "sha256-PQRACwnSUuxgVySO1840KvqCC9F8iI9iTzxNW0RcBS4=" + }, + { + "pname": "runtime.any.System.Runtime.InteropServices", + "version": "4.3.0", + "hash": "sha256-Kaw5PnLYIiqWbsoF3VKJhy7pkpoGsUwn4ZDCKscbbzA=" + }, + { + "pname": "runtime.any.System.Text.Encoding", + "version": "4.3.0", + "hash": "sha256-Q18B9q26MkWZx68exUfQT30+0PGmpFlDgaF0TnaIGCs=" + }, + { + "pname": "runtime.any.System.Text.Encoding.Extensions", + "version": "4.3.0", + "hash": "sha256-6MYj0RmLh4EVqMtO/MRqBi0HOn5iG4x9JimgCCJ+EFM=" + }, + { + "pname": "runtime.any.System.Threading.Tasks", + "version": "4.3.0", + "hash": "sha256-agdOM0NXupfHbKAQzQT8XgbI9B8hVEh+a/2vqeHctg4=" + }, + { + "pname": "runtime.any.System.Threading.Timer", + "version": "4.3.0", + "hash": "sha256-BgHxXCIbicVZtpgMimSXixhFC3V+p5ODqeljDjO8hCs=" + }, + { + "pname": "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl", + "version": "4.3.0", + "hash": "sha256-LXUPLX3DJxsU1Pd3UwjO1PO9NM2elNEDXeu2Mu/vNps=" + }, + { + "pname": "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl", + "version": "4.3.0", + "hash": "sha256-qeSqaUI80+lqw5MK4vMpmO0CZaqrmYktwp6L+vQAb0I=" + }, + { + "pname": "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl", + "version": "4.3.0", + "hash": "sha256-SrHqT9wrCBsxILWtaJgGKd6Odmxm8/Mh7Kh0CUkZVzA=" + }, + { + "pname": "runtime.native.System", + "version": "4.3.0", + "hash": "sha256-ZBZaodnjvLXATWpXXakFgcy6P+gjhshFXmglrL5xD5Y=" + }, + { + "pname": "runtime.native.System.IO.Compression", + "version": "4.3.0", + "hash": "sha256-DWnXs4vlKoU6WxxvCArTJupV6sX3iBbZh8SbqfHace8=" + }, + { + "pname": "runtime.native.System.Net.Http", + "version": "4.3.0", + "hash": "sha256-c556PyheRwpYhweBjSfIwEyZHnAUB8jWioyKEcp/2dg=" + }, + { + "pname": "runtime.native.System.Security.Cryptography.Apple", + "version": "4.3.0", + "hash": "sha256-2IhBv0i6pTcOyr8FFIyfPEaaCHUmJZ8DYwLUwJ+5waw=" + }, + { + "pname": "runtime.native.System.Security.Cryptography.OpenSsl", + "version": "4.3.0", + "hash": "sha256-Jy01KhtcCl2wjMpZWH+X3fhHcVn+SyllWFY8zWlz/6I=" + }, + { + "pname": "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl", + "version": "4.3.0", + "hash": "sha256-wyv00gdlqf8ckxEdV7E+Ql9hJIoPcmYEuyeWb5Oz3mM=" + }, + { + "pname": "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl", + "version": "4.3.0", + "hash": "sha256-zi+b4sCFrA9QBiSGDD7xPV27r3iHGlV99gpyVUjRmc4=" + }, + { + "pname": "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple", + "version": "4.3.0", + "hash": "sha256-serkd4A7F6eciPiPJtUyJyxzdAtupEcWIZQ9nptEzIM=" + }, + { + "pname": "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl", + "version": "4.3.0", + "hash": "sha256-gybQU6mPgaWV3rBG2dbH6tT3tBq8mgze3PROdsuWnX0=" + }, + { + "pname": "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl", + "version": "4.3.0", + "hash": "sha256-VsP72GVveWnGUvS/vjOQLv1U80H2K8nZ4fDAmI61Hm4=" + }, + { + "pname": "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl", + "version": "4.3.0", + "hash": "sha256-4yKGa/IrNCKuQ3zaDzILdNPD32bNdy6xr5gdJigyF5g=" + }, + { + "pname": "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl", + "version": "4.3.0", + "hash": "sha256-HmdJhhRsiVoOOCcUvAwdjpMRiyuSwdcgEv2j9hxi+Zc=" + }, + { + "pname": "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl", + "version": "4.3.0", + "hash": "sha256-pVFUKuPPIx0edQKjzRon3zKq8zhzHEzko/lc01V/jdw=" + }, + { + "pname": "runtime.unix.Microsoft.Win32.Primitives", + "version": "4.3.0", + "hash": "sha256-LZb23lRXzr26tRS5aA0xyB08JxiblPDoA7HBvn6awXg=" + }, + { + "pname": "runtime.unix.System.Console", + "version": "4.3.0", + "hash": "sha256-AHkdKShTRHttqfMjmi+lPpTuCrM5vd/WRy6Kbtie190=" + }, + { + "pname": "runtime.unix.System.Diagnostics.Debug", + "version": "4.3.0", + "hash": "sha256-ReoazscfbGH+R6s6jkg5sIEHWNEvjEoHtIsMbpc7+tI=" + }, + { + "pname": "runtime.unix.System.IO.FileSystem", + "version": "4.3.0", + "hash": "sha256-Pf4mRl6YDK2x2KMh0WdyNgv0VUNdSKVDLlHqozecy5I=" + }, + { + "pname": "runtime.unix.System.Net.Primitives", + "version": "4.3.0", + "hash": "sha256-pHJ+I6i16MV6m77uhTC6GPY6jWGReE3SSP3fVB59ti0=" + }, + { + "pname": "runtime.unix.System.Net.Sockets", + "version": "4.3.0", + "hash": "sha256-IvgOeA2JuBjKl5yAVGjPYMPDzs9phb3KANs95H9v1w4=" + }, + { + "pname": "runtime.unix.System.Private.Uri", + "version": "4.3.0", + "hash": "sha256-c5tXWhE/fYbJVl9rXs0uHh3pTsg44YD1dJvyOA0WoMs=" + }, + { + "pname": "runtime.unix.System.Runtime.Extensions", + "version": "4.3.0", + "hash": "sha256-l8S9gt6dk3qYG6HYonHtdlYtBKyPb29uQ6NDjmrt3V4=" + }, + { + "pname": "Sentry", + "version": "4.0.2", + "hash": "sha256-TzsAxAYqB2SdcSl+r92+nd5obgUBW1DCFP/nXzAZE4U=" + }, + { + "pname": "SharpZipLib", + "version": "1.4.2", + "hash": "sha256-/giVqikworG2XKqfN9uLyjUSXr35zBuZ2FX2r8X/WUY=" + }, + { + "pname": "SixLabors.ImageSharp", + "version": "3.1.11", + "hash": "sha256-MlRF+3SGfahbsB1pZGKMOrsfUCx//hCo7ECrXr03DpA=" + }, + { + "pname": "SourceGear.sqlite3", + "version": "3.50.4.2", + "hash": "sha256-NsahZ3lW1JYXMq4NOH5nM/EhdjV05sbrhjsGNIinb+M=" + }, + { + "pname": "SpotifyAPI.Web", + "version": "5.1.1", + "hash": "sha256-QF606/OG5V+Q4CbBWrZz10ggerQskT0rUOAgjffrLOc=" + }, + { + "pname": "Swashbuckle.AspNetCore.Annotations", + "version": "9.0.6", + "hash": "sha256-7mglb4DBSHHmr3WL0zNJ++QwQAD1hx27kOvXqtZNdK0=" + }, + { + "pname": "Swashbuckle.AspNetCore.Swagger", + "version": "9.0.6", + "hash": "sha256-Es+YZz5UXd48GotIqsjBweZmJQzGuhXAzzSdDumNJF8=" + }, + { + "pname": "Swashbuckle.AspNetCore.SwaggerGen", + "version": "9.0.6", + "hash": "sha256-JUNtvIFcP9RavAH/5ke5Jr3vrr0YUsqHbqW45346VK4=" + }, + { + "pname": "System.AppContext", + "version": "4.3.0", + "hash": "sha256-yg95LNQOwFlA1tWxXdQkVyJqT4AnoDc+ACmrNvzGiZg=" + }, + { + "pname": "System.Buffers", + "version": "4.3.0", + "hash": "sha256-XqZWb4Kd04960h4U9seivjKseGA/YEIpdplfHYHQ9jk=" + }, + { + "pname": "System.ClientModel", + "version": "1.5.1", + "hash": "sha256-n4PHKtjmFXo37s5yhfUQ9UbfnWplqHpC+wsvlHxctow=" + }, + { + "pname": "System.Collections", + "version": "4.3.0", + "hash": "sha256-afY7VUtD6w/5mYqrce8kQrvDIfS2GXDINDh73IjxJKc=" + }, + { + "pname": "System.Collections.Concurrent", + "version": "4.3.0", + "hash": "sha256-KMY5DfJnDeIsa13DpqvyN8NkReZEMAFnlmNglVoFIXI=" + }, + { + "pname": "System.ComponentModel", + "version": "4.3.0", + "hash": "sha256-i00uujMO4JEDIEPKLmdLY3QJ6vdSpw6Gh9oOzkFYBiU=" + }, + { + "pname": "System.ComponentModel.Annotations", + "version": "4.3.0", + "hash": "sha256-zQVRu6SnLS7aKetDaxvo7zAHWLOB7K/mtgs/uaQtYqk=" + }, + { + "pname": "System.ComponentModel.Annotations", + "version": "5.0.0", + "hash": "sha256-0pST1UHgpeE6xJrYf5R+U7AwIlH3rVC3SpguilI/MAg=" + }, + { + "pname": "System.Configuration.ConfigurationManager", + "version": "4.4.0", + "hash": "sha256-+8wGYllXnIxRzy9dLhZFB88GoPj8ivYXS0KUfcivT8I=" + }, + { + "pname": "System.Configuration.ConfigurationManager", + "version": "8.0.1", + "hash": "sha256-2vgU/BBFDOO2506UX6mtuBQ9c2bCShLLhoy67l7418E=" + }, + { + "pname": "System.Console", + "version": "4.3.0", + "hash": "sha256-Xh3PPBZr0pDbDaK8AEHbdGz7ePK6Yi1ZyRWI1JM6mbo=" + }, + { + "pname": "System.Data.SQLite", + "version": "2.0.2", + "hash": "sha256-s++mcixhc+QaQKzdXZ6quK8kH5WWWmU0mESZNNuP/ck=" + }, + { + "pname": "System.Diagnostics.Debug", + "version": "4.3.0", + "hash": "sha256-fkA79SjPbSeiEcrbbUsb70u9B7wqbsdM9s1LnoKj0gM=" + }, + { + "pname": "System.Diagnostics.DiagnosticSource", + "version": "4.3.0", + "hash": "sha256-OFJRb0ygep0Z3yDBLwAgM/Tkfs4JCDtsNhwDH9cd1Xw=" + }, + { + "pname": "System.Diagnostics.DiagnosticSource", + "version": "5.0.0", + "hash": "sha256-6mW3N6FvcdNH/pB58pl+pFSCGWgyaP4hfVtC/SMWDV4=" + }, + { + "pname": "System.Diagnostics.DiagnosticSource", + "version": "6.0.1", + "hash": "sha256-Xi8wrUjVlioz//TPQjFHqcV/QGhTqnTfUcltsNlcCJ4=" + }, + { + "pname": "System.Diagnostics.EventLog", + "version": "6.0.0", + "hash": "sha256-zUXIQtAFKbiUMKCrXzO4mOTD5EUphZzghBYKXprowSM=" + }, + { + "pname": "System.Diagnostics.EventLog", + "version": "8.0.1", + "hash": "sha256-zvqd72pwgcGoa1nH3ZT1C0mP9k53vFLJ69r5MCQ1saA=" + }, + { + "pname": "System.Diagnostics.Tools", + "version": "4.3.0", + "hash": "sha256-gVOv1SK6Ape0FQhCVlNOd9cvQKBvMxRX9K0JPVi8w0Y=" + }, + { + "pname": "System.Diagnostics.Tracing", + "version": "4.3.0", + "hash": "sha256-hCETZpHHGVhPYvb4C0fh4zs+8zv4GPoixagkLZjpa9Q=" + }, + { + "pname": "System.Drawing.Common", + "version": "8.0.20", + "hash": "sha256-+NEKutfbGO9q1Yig45K1X8n/+gEZOQYNGlXRhbexvzA=" + }, + { + "pname": "System.Formats.Asn1", + "version": "8.0.1", + "hash": "sha256-may/Wg+esmm1N14kQTG4ESMBi+GQKPp0ZrrBo/o6OXM=" + }, + { + "pname": "System.Globalization", + "version": "4.3.0", + "hash": "sha256-caL0pRmFSEsaoeZeWN5BTQtGrAtaQPwFi8YOZPZG5rI=" + }, + { + "pname": "System.Globalization.Calendars", + "version": "4.3.0", + "hash": "sha256-uNOD0EOVFgnS2fMKvMiEtI9aOw00+Pfy/H+qucAQlPc=" + }, + { + "pname": "System.Globalization.Extensions", + "version": "4.3.0", + "hash": "sha256-mmJWA27T0GRVuFP9/sj+4TrR4GJWrzNIk2PDrbr7RQk=" + }, + { + "pname": "System.IdentityModel.Tokens.Jwt", + "version": "7.7.1", + "hash": "sha256-6JfmtdChyt7zd/HKI+/T1HcyesEPx0NNMO/zFJ7lU2c=" + }, + { + "pname": "System.IO", + "version": "4.3.0", + "hash": "sha256-ruynQHekFP5wPrDiVyhNiRIXeZ/I9NpjK5pU+HPDiRY=" + }, + { + "pname": "System.IO.Abstractions", + "version": "17.0.24", + "hash": "sha256-brEupAGUEu6XdwiGYc3hA3f6nqeFLDIHt4luvOaauUY=" + }, + { + "pname": "System.IO.Abstractions.TestingHelpers", + "version": "17.0.24", + "hash": "sha256-stJ7l5S2UNs6TU/FTI6bEjtkXHateY56qlqHIU3ShBc=" + }, + { + "pname": "System.IO.Compression", + "version": "4.3.0", + "hash": "sha256-f5PrQlQgj5Xj2ZnHxXW8XiOivaBvfqDao9Sb6AVinyA=" + }, + { + "pname": "System.IO.Compression.ZipFile", + "version": "4.3.0", + "hash": "sha256-WQl+JgWs+GaRMeiahTFUbrhlXIHapzcpTFXbRvAtvvs=" + }, + { + "pname": "System.IO.FileSystem", + "version": "4.3.0", + "hash": "sha256-vNIYnvlayuVj0WfRfYKpDrhDptlhp1pN8CYmlVd2TXw=" + }, + { + "pname": "System.IO.FileSystem.Primitives", + "version": "4.3.0", + "hash": "sha256-LMnfg8Vwavs9cMnq9nNH8IWtAtSfk0/Fy4s4Rt9r1kg=" + }, + { + "pname": "System.Linq", + "version": "4.3.0", + "hash": "sha256-R5uiSL3l6a3XrXSSL6jz+q/PcyVQzEAByiuXZNSqD/A=" + }, + { + "pname": "System.Linq.Expressions", + "version": "4.3.0", + "hash": "sha256-+3pvhZY7rip8HCbfdULzjlC9FPZFpYoQxhkcuFm2wk8=" + }, + { + "pname": "System.Memory", + "version": "4.6.3", + "hash": "sha256-JgeK63WMmumF6L+FH5cwJgYdpqXrSDcgTQwtIgTHKVU=" + }, + { + "pname": "System.Memory.Data", + "version": "8.0.1", + "hash": "sha256-cxYZL0Trr6RBplKmECv94ORuyjrOM6JB0D/EwmBSisg=" + }, + { + "pname": "System.Net.Http", + "version": "4.3.0", + "hash": "sha256-UoBB7WPDp2Bne/fwxKF0nE8grJ6FzTMXdT/jfsphj8Q=" + }, + { + "pname": "System.Net.NameResolution", + "version": "4.3.0", + "hash": "sha256-eGZwCBExWsnirWBHyp2sSSSXp6g7I6v53qNmwPgtJ5c=" + }, + { + "pname": "System.Net.Primitives", + "version": "4.3.0", + "hash": "sha256-MY7Z6vOtFMbEKaLW9nOSZeAjcWpwCtdO7/W1mkGZBzE=" + }, + { + "pname": "System.Net.Sockets", + "version": "4.3.0", + "hash": "sha256-il7dr5VT/QWDg/0cuh+4Es2u8LY//+qqiY9BZmYxSus=" + }, + { + "pname": "System.ObjectModel", + "version": "4.3.0", + "hash": "sha256-gtmRkWP2Kwr3nHtDh0yYtce38z1wrGzb6fjm4v8wN6Q=" + }, + { + "pname": "System.Private.Uri", + "version": "4.3.0", + "hash": "sha256-fVfgcoP4AVN1E5wHZbKBIOPYZ/xBeSIdsNF+bdukIRM=" + }, + { + "pname": "System.Reflection", + "version": "4.3.0", + "hash": "sha256-NQSZRpZLvtPWDlvmMIdGxcVuyUnw92ZURo0hXsEshXY=" + }, + { + "pname": "System.Reflection.Emit", + "version": "4.3.0", + "hash": "sha256-5LhkDmhy2FkSxulXR+bsTtMzdU3VyyuZzsxp7/DwyIU=" + }, + { + "pname": "System.Reflection.Emit", + "version": "4.7.0", + "hash": "sha256-Fw/CSRD+wajH1MqfKS3Q/sIrUH7GN4K+F+Dx68UPNIg=" + }, + { + "pname": "System.Reflection.Emit.ILGeneration", + "version": "4.3.0", + "hash": "sha256-mKRknEHNls4gkRwrEgi39B+vSaAz/Gt3IALtS98xNnA=" + }, + { + "pname": "System.Reflection.Emit.Lightweight", + "version": "4.3.0", + "hash": "sha256-rKx4a9yZKcajloSZHr4CKTVJ6Vjh95ni+zszPxWjh2I=" + }, + { + "pname": "System.Reflection.Extensions", + "version": "4.3.0", + "hash": "sha256-mMOCYzUenjd4rWIfq7zIX9PFYk/daUyF0A8l1hbydAk=" + }, + { + "pname": "System.Reflection.Metadata", + "version": "1.6.0", + "hash": "sha256-JJfgaPav7UfEh4yRAQdGhLZF1brr0tUWPl6qmfNWq/E=" + }, + { + "pname": "System.Reflection.Primitives", + "version": "4.3.0", + "hash": "sha256-5ogwWB4vlQTl3jjk1xjniG2ozbFIjZTL9ug0usZQuBM=" + }, + { + "pname": "System.Reflection.TypeExtensions", + "version": "4.3.0", + "hash": "sha256-4U4/XNQAnddgQIHIJq3P2T80hN0oPdU2uCeghsDTWng=" + }, + { + "pname": "System.Reflection.TypeExtensions", + "version": "4.7.0", + "hash": "sha256-GEtCGXwtOnkYejSV+Tfl+DqyGq5jTUaVyL9eMupMHBM=" + }, + { + "pname": "System.Resources.ResourceManager", + "version": "4.3.0", + "hash": "sha256-idiOD93xbbrbwwSnD4mORA9RYi/D/U48eRUsn/WnWGo=" + }, + { + "pname": "System.Runtime", + "version": "4.3.0", + "hash": "sha256-51813WXpBIsuA6fUtE5XaRQjcWdQ2/lmEokJt97u0Rg=" + }, + { + "pname": "System.Runtime.CompilerServices.Unsafe", + "version": "6.0.0", + "hash": "sha256-bEG1PnDp7uKYz/OgLOWs3RWwQSVYm+AnPwVmAmcgp2I=" + }, + { + "pname": "System.Runtime.Extensions", + "version": "4.3.0", + "hash": "sha256-wLDHmozr84v1W2zYCWYxxj0FR0JDYHSVRaRuDm0bd/o=" + }, + { + "pname": "System.Runtime.Handles", + "version": "4.3.0", + "hash": "sha256-KJ5aXoGpB56Y6+iepBkdpx/AfaJDAitx4vrkLqR7gms=" + }, + { + "pname": "System.Runtime.InteropServices", + "version": "4.3.0", + "hash": "sha256-8sDH+WUJfCR+7e4nfpftj/+lstEiZixWUBueR2zmHgI=" + }, + { + "pname": "System.Runtime.InteropServices.RuntimeInformation", + "version": "4.3.0", + "hash": "sha256-MYpl6/ZyC6hjmzWRIe+iDoldOMW1mfbwXsduAnXIKGA=" + }, + { + "pname": "System.Runtime.Loader", + "version": "4.3.0", + "hash": "sha256-syG1GTFjYbwX146BD/L7t55j+DZqpHDc6z28kdSNzx0=" + }, + { + "pname": "System.Runtime.Numerics", + "version": "4.3.0", + "hash": "sha256-P5jHCgMbgFMYiONvzmaKFeOqcAIDPu/U8bOVrNPYKqc=" + }, + { + "pname": "System.Security.AccessControl", + "version": "5.0.0", + "hash": "sha256-ueSG+Yn82evxyGBnE49N4D+ngODDXgornlBtQ3Omw54=" + }, + { + "pname": "System.Security.Claims", + "version": "4.3.0", + "hash": "sha256-Fua/rDwAqq4UByRVomAxMPmDBGd5eImRqHVQIeSxbks=" + }, + { + "pname": "System.Security.Cryptography.Algorithms", + "version": "4.3.0", + "hash": "sha256-tAJvNSlczYBJ3Ed24Ae27a55tq/n4D3fubNQdwcKWA8=" + }, + { + "pname": "System.Security.Cryptography.Cng", + "version": "4.3.0", + "hash": "sha256-u17vy6wNhqok91SrVLno2M1EzLHZm6VMca85xbVChsw=" + }, + { + "pname": "System.Security.Cryptography.Csp", + "version": "4.3.0", + "hash": "sha256-oefdTU/Z2PWU9nlat8uiRDGq/PGZoSPRgkML11pmvPQ=" + }, + { + "pname": "System.Security.Cryptography.Encoding", + "version": "4.3.0", + "hash": "sha256-Yuge89N6M+NcblcvXMeyHZ6kZDfwBv3LPMDiF8HhJss=" + }, + { + "pname": "System.Security.Cryptography.OpenSsl", + "version": "4.3.0", + "hash": "sha256-DL+D2sc2JrQiB4oAcUggTFyD8w3aLEjJfod5JPe+Oz4=" + }, + { + "pname": "System.Security.Cryptography.Pkcs", + "version": "8.0.1", + "hash": "sha256-KMNIkJ3yQ/5O6WIhPjyAIarsvIMhkp26A6aby5KkneU=" + }, + { + "pname": "System.Security.Cryptography.Primitives", + "version": "4.3.0", + "hash": "sha256-fnFi7B3SnVj5a+BbgXnbjnGNvWrCEU6Hp/wjsjWz318=" + }, + { + "pname": "System.Security.Cryptography.ProtectedData", + "version": "4.4.0", + "hash": "sha256-Ri53QmFX8I8UH0x4PikQ1ZA07ZSnBUXStd5rBfGWFOE=" + }, + { + "pname": "System.Security.Cryptography.ProtectedData", + "version": "4.5.0", + "hash": "sha256-Z+X1Z2lErLL7Ynt2jFszku6/IgrngO3V1bSfZTBiFIc=" + }, + { + "pname": "System.Security.Cryptography.ProtectedData", + "version": "8.0.0", + "hash": "sha256-fb0pa9sQxN+mr0vnXg1Igbx49CaOqS+GDkTfWNboUvs=" + }, + { + "pname": "System.Security.Cryptography.X509Certificates", + "version": "4.3.0", + "hash": "sha256-MG3V/owDh273GCUPsGGraNwaVpcydupl3EtPXj6TVG0=" + }, + { + "pname": "System.Security.Principal", + "version": "4.3.0", + "hash": "sha256-rjudVUHdo8pNJg2EVEn0XxxwNo5h2EaYo+QboPkXlYk=" + }, + { + "pname": "System.Security.Principal.Windows", + "version": "4.3.0", + "hash": "sha256-mbdLVUcEwe78p3ZnB6jYsizNEqxMaCAWI3tEQNhRQAE=" + }, + { + "pname": "System.Security.Principal.Windows", + "version": "5.0.0", + "hash": "sha256-CBOQwl9veFkrKK2oU8JFFEiKIh/p+aJO+q9Tc2Q/89Y=" + }, + { + "pname": "System.ServiceProcess.ServiceController", + "version": "8.0.1", + "hash": "sha256-2cXTzNOyXqJinFPzdVJ9Gu6qrFtycfivu7RHDzBJic8=" + }, + { + "pname": "System.Text.Encoding", + "version": "4.3.0", + "hash": "sha256-GctHVGLZAa/rqkBNhsBGnsiWdKyv6VDubYpGkuOkBLg=" + }, + { + "pname": "System.Text.Encoding.CodePages", + "version": "8.0.0", + "hash": "sha256-fjCLQc1PRW0Ix5IZldg0XKv+J1DqPSfu9pjMyNBp7dE=" + }, + { + "pname": "System.Text.Encoding.Extensions", + "version": "4.3.0", + "hash": "sha256-vufHXg8QAKxHlujPHHcrtGwAqFmsCD6HKjfDAiHyAYc=" + }, + { + "pname": "System.Text.Json", + "version": "5.0.2", + "hash": "sha256-3eHI5WsaclD9/iV4clLtSAurQxpcJ/qsZA82lkTjoG0=" + }, + { + "pname": "System.Text.Json", + "version": "8.0.6", + "hash": "sha256-qD3WF3jQO9+TLuBWwJhz3iKDArJqcRiy7EdrCQhrtes=" + }, + { + "pname": "System.Text.RegularExpressions", + "version": "4.3.0", + "hash": "sha256-VLCk1D1kcN2wbAe3d0YQM/PqCsPHOuqlBY1yd2Yo+K0=" + }, + { + "pname": "System.Threading", + "version": "4.3.0", + "hash": "sha256-ZDQ3dR4pzVwmaqBg4hacZaVenQ/3yAF/uV7BXZXjiWc=" + }, + { + "pname": "System.Threading.Tasks", + "version": "4.3.0", + "hash": "sha256-Z5rXfJ1EXp3G32IKZGiZ6koMjRu0n8C1NGrwpdIen4w=" + }, + { + "pname": "System.Threading.Tasks.Extensions", + "version": "4.3.0", + "hash": "sha256-X2hQ5j+fxcmnm88Le/kSavjiGOmkcumBGTZKBLvorPc=" + }, + { + "pname": "System.Threading.ThreadPool", + "version": "4.3.0", + "hash": "sha256-wW0QdvssRoaOfQLazTGSnwYTurE4R8FxDx70pYkL+gg=" + }, + { + "pname": "System.Threading.Timer", + "version": "4.3.0", + "hash": "sha256-pmhslmhQhP32TWbBzoITLZ4BoORBqYk25OWbru04p9s=" + }, + { + "pname": "System.ValueTuple", + "version": "4.5.0", + "hash": "sha256-niH6l2fU52vAzuBlwdQMw0OEoRS/7E1w5smBFoqSaAI=" + }, + { + "pname": "System.ValueTuple", + "version": "4.6.1", + "hash": "sha256-Hb87MPcNdHQRlREDzFEKU8ZqtKN26bjyAiimJmm6LWI=" + }, + { + "pname": "System.Xml.ReaderWriter", + "version": "4.3.0", + "hash": "sha256-QQ8KgU0lu4F5Unh+TbechO//zaAGZ4MfgvW72Cn1hzA=" + }, + { + "pname": "System.Xml.XDocument", + "version": "4.3.0", + "hash": "sha256-rWtdcmcuElNOSzCehflyKwHkDRpiOhJJs8CeQ0l1CCI=" + }, + { + "pname": "TagLibSharp-Lidarr", + "version": "2.2.0.27", + "hash": "sha256-I9g6BTiY/7ZIpjA2KOFzvZNtGxGeuR+EFiTaxtauzcM=", + "url": "https://pkgs.dev.azure.com/Lidarr/43582661-9ac3-4ec6-9583-209885d5ff34/_packaging/25380ea9-0937-4346-9aa7-9d4a76b7e76c/nuget/v3/flat2/taglibsharp-lidarr/2.2.0.27/taglibsharp-lidarr.2.2.0.27.nupkg" + } +] diff --git a/pkgs/by-name/li/lidarr/package.nix b/pkgs/by-name/li/lidarr/package.nix index 2fe779997930..4af0149852d1 100644 --- a/pkgs/by-name/li/lidarr/package.nix +++ b/pkgs/by-name/li/lidarr/package.nix @@ -1,86 +1,172 @@ { lib, - stdenv, - fetchurl, - libmediainfo, + stdenvNoCC, + fetchFromGitHub, + buildDotnetModule, + dotnetCorePackages, sqlite, - curl, - makeWrapper, - icu, - dotnet-runtime, - openssl, + fetchYarnDeps, + yarn, + fixup-yarn-lock, + nodejs, nixosTests, - zlib, + # update script + writers, + python3Packages, + nix, + prefetch-yarn-deps, + applyPatches, }: - let - os = if stdenv.hostPlatform.isDarwin then "osx" else "linux"; - arch = - { - x86_64-linux = "x64"; - aarch64-linux = "arm64"; - x86_64-darwin = "x64"; - aarch64-darwin = "arm64"; - } - ."${stdenv.hostPlatform.system}" or (throw "Unsupported system: ${stdenv.hostPlatform.system}"); - hash = - { - x64-linux_hash = "sha256-IPF1rsK5CN4q4GtyVE2uUE79212yqX6k42hm3lO8L6U="; - arm64-linux_hash = "sha256-/1gCHUt3sDEMkEE6vU8wNs/VAxL+exkunWiNSC5MvzY="; - x64-osx_hash = "sha256-e+AiZoLRNv2TFTTtrhQkVr5yL5e9EQJj7nAHhLgJurI="; - arm64-osx_hash = "sha256-724Y8IBvpAeIB07HtqSkXiyQua1jHO0jD3vjWw0kZpc="; - } - ."${arch}-${os}_hash"; -in -stdenv.mkDerivation (finalAttrs: { - pname = "lidarr"; version = "3.1.0.4875"; + # The dotnet8 compatibility patches also change `yarn.lock`, so we must pass + # the already patched lockfile to `fetchYarnDeps`. + src = applyPatches { + src = fetchFromGitHub { + owner = "Lidarr"; + repo = "Lidarr"; + tag = "v${version}"; + hash = "sha256-RCJlToQw96U8seZaD/QCPL1Pn42yw5iXFWGJCHSHwQw="; + }; + postPatch = '' + mv src/NuGet.config NuGet.Config + ''; + }; + rid = dotnetCorePackages.systemToDotnetRid stdenvNoCC.hostPlatform.system; +in +buildDotnetModule { + pname = "lidarr"; + inherit version src; - src = fetchurl { - inherit hash; + strictDeps = true; + nativeBuildInputs = [ + nodejs + yarn + prefetch-yarn-deps + fixup-yarn-lock + ]; - url = "https://github.com/lidarr/Lidarr/releases/download/v${finalAttrs.version}/Lidarr.master.${finalAttrs.version}.${os}-core-${arch}.tar.gz"; + yarnOfflineCache = fetchYarnDeps { + yarnLock = "${src}/yarn.lock"; + hash = "sha256-Jq2O7gvB+PKcz6uDBMg7ox6/Bu+pikXH6JGuLfKG5fI="; }; - nativeBuildInputs = [ makeWrapper ]; - - installPhase = '' - runHook preInstall - - mkdir -p $out/{bin,share/${finalAttrs.pname}-${finalAttrs.version}} - cp -r * $out/share/${finalAttrs.pname}-${finalAttrs.version}/. - makeWrapper "${dotnet-runtime}/bin/dotnet" $out/bin/Lidarr \ - --add-flags "$out/share/${finalAttrs.pname}-${finalAttrs.version}/Lidarr.dll" \ - --prefix LD_LIBRARY_PATH : ${ - lib.makeLibraryPath [ - curl - sqlite - libmediainfo - icu - openssl - zlib - ] - } - - runHook postInstall + postConfigure = '' + yarn config --offline set yarn-offline-mirror "$yarnOfflineCache" + fixup-yarn-lock yarn.lock + yarn install --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive + patchShebangs --build node_modules + ''; + postBuild = '' + yarn --offline run build --env production + ''; + postInstall = '' + cp -a -- _output/UI "$out/lib/lidarr/UI" ''; + nugetDeps = ./deps.json; + + runtimeDeps = [ sqlite ]; + + dotnet-sdk = dotnetCorePackages.sdk_8_0; + dotnet-runtime = dotnetCorePackages.aspnetcore_8_0; + + doCheck = true; + + __darwinAllowLocalNetworking = true; # for tests + + __structuredAttrs = true; # for Copyright property that contains spaces + + executables = [ "Lidarr" ]; + + projectFile = [ + "src/NzbDrone.Console/Lidarr.Console.csproj" + "src/NzbDrone.Mono/Lidarr.Mono.csproj" + ]; + + testProjectFile = [ + "src/NzbDrone.Api.Test/Lidarr.Api.Test.csproj" + "src/NzbDrone.Common.Test/Lidarr.Common.Test.csproj" + "src/NzbDrone.Core.Test/Lidarr.Core.Test.csproj" + "src/NzbDrone.Host.Test/Lidarr.Host.Test.csproj" + "src/NzbDrone.Libraries.Test/Lidarr.Libraries.Test.csproj" + "src/NzbDrone.Mono.Test/Lidarr.Mono.Test.csproj" + "src/NzbDrone.Test.Common/Lidarr.Test.Common.csproj" + ]; + + dotnetFlags = [ + "--property:TargetFramework=net8.0" + "--property:EnableAnalyzers=false" + "--property:SentryUploadSymbols=false" # Fix Sentry upload failed warnings + # Override defaults in src/Directory.Build.props that use current time. + "--property:Copyright=Copyright 2014-2025 lidarr.audio (GNU General Public v3)" + "--property:AssemblyVersion=${version}" + "--property:AssemblyConfiguration=master" + "--property:RuntimeIdentifier=${rid}" + ]; + + # Skip manual, integration, automation and platform-dependent tests. + testFilters = [ + "TestCategory!=ManualTest" + "TestCategory!=IntegrationTest" + "TestCategory!=AutomationTest" + + # makes real HTTP requests + "FullyQualifiedName!~NzbDrone.Core.Test.UpdateTests.UpdatePackageProviderFixture" + "FullyQualifiedName!~NzbDrone.Core.Test.ImportListTests.SpotifyMappingFixture" + "FullyQualifiedName!~NzbDrone.Core.Test.MetadataSource.SkyHook.SkyHookProxyFixture" + "FullyQualifiedName!~NzbDrone.Core.Test.MetadataSource.SkyHook.SkyHookProxySearchFixture" + ] + ++ lib.optionals stdenvNoCC.buildPlatform.isDarwin [ + # fails on macOS + "FullyQualifiedName!~NzbDrone.Core.Test.Http.HttpProxySettingsProviderFixture" + ]; + + disabledTests = [ + # setgid tests + "NzbDrone.Mono.Test.DiskProviderTests.DiskProviderFixture.should_preserve_setgid_on_set_folder_permissions" + "NzbDrone.Mono.Test.DiskProviderTests.DiskProviderFixture.should_clear_setgid_on_set_folder_permissions" + + # we do not set application data directory during tests (i.e. XDG data directory) + "NzbDrone.Mono.Test.DiskProviderTests.FreeSpaceFixture.should_return_free_disk_space" + "NzbDrone.Common.Test.ServiceFactoryFixture.event_handlers_should_be_unique" + + # attempts to read /etc/*release and fails since it does not exist + "NzbDrone.Mono.Test.EnvironmentInfo.ReleaseFileVersionAdapterFixture.should_get_version_info" + + # fails to start test dummy because it cannot locate .NET runtime for some reason + "NzbDrone.Common.Test.ProcessProviderFixture.should_be_able_to_start_process" + "NzbDrone.Common.Test.ProcessProviderFixture.exists_should_find_running_process" + "NzbDrone.Common.Test.ProcessProviderFixture.kill_all_should_kill_all_process_with_name" + ]; + passthru = { - updateScript = ./update.sh; - tests.smoke-test = nixosTests.lidarr; + tests = { + inherit (nixosTests) lidarr; + }; + + updateScript = writers.writePython3 "lidarr-updater" { + libraries = with python3Packages; [ requests ]; + flakeIgnore = [ "E501" ]; + makeWrapperArgs = [ + "--prefix" + "PATH" + ":" + (lib.makeBinPath [ + nix + prefetch-yarn-deps + ]) + ]; + } ./update.py; }; meta = { description = "Usenet/BitTorrent music downloader"; - homepage = "https://lidarr.audio/"; - license = lib.licenses.gpl3; + homepage = "https://lidarr.audio"; + changelog = "https://github.com/Lidarr/Lidarr/releases/tag/v${version}"; + license = lib.licenses.gpl3Only; maintainers = with lib.maintainers; [ ramonacat ]; mainProgram = "Lidarr"; - platforms = [ - "x86_64-linux" - "aarch64-linux" - "x86_64-darwin" - "aarch64-darwin" - ]; + # platforms inherited from dotnet-sdk. }; -}) +} diff --git a/pkgs/by-name/li/lidarr/update.py b/pkgs/by-name/li/lidarr/update.py new file mode 100644 index 000000000000..2e864e766f28 --- /dev/null +++ b/pkgs/by-name/li/lidarr/update.py @@ -0,0 +1,181 @@ +import json +import os +import pathlib +import requests +import shutil +import subprocess +import sys +import tempfile + + +def replace_in_file(file_path, replacements): + file_contents = pathlib.Path(file_path).read_text() + for old, new in replacements.items(): + if old == new: + continue + updated_file_contents = file_contents.replace(old, new) + # A dumb way to check that we’ve actually replaced the string. + if file_contents == updated_file_contents: + print(f"no string to replace: {old} → {new}", file=sys.stderr) + sys.exit(1) + file_contents = updated_file_contents + with tempfile.NamedTemporaryFile(mode="w") as t: + t.write(file_contents) + t.flush() + shutil.copyfile(t.name, file_path) + + +def nix_hash_to_sri(hash): + return subprocess.run( + [ + "nix", + "--extra-experimental-features", "nix-command", + "hash", + "to-sri", + "--type", "sha256", + "--", + hash, + ], + stdout=subprocess.PIPE, + text=True, + check=True, + ).stdout.rstrip() + + +nixpkgs_path = "." +attr_path = os.getenv("UPDATE_NIX_ATTR_PATH", "lidarr") + +package_attrs = json.loads(subprocess.run( + [ + "nix", + "--extra-experimental-features", "nix-command", + "eval", + "--json", + "--file", nixpkgs_path, + "--apply", """p: { + dir = dirOf p.meta.position; + version = p.version; + sourceHash = p.src.src.outputHash; + yarnHash = p.yarnOfflineCache.outputHash; + }""", + "--", + attr_path, + ], + stdout=subprocess.PIPE, + text=True, + check=True, +).stdout) + +old_version = package_attrs["version"] +new_version = old_version + +# Note that we use Lidarr API instead of GitHub to fetch latest stable release. +# This corresponds to the Updates tab in the web UI. See also +# https://github.com/Lidarr/Lidarr/blob/350860e524029b7fb4165ed14fbcabb11217ada2/src/NzbDrone.Core/Update/UpdatePackageProvider.cs +version_update = requests.get( + f"https://lidarr.servarr.com/v1/update/master?version={old_version}&includeMajorVersion=true", +).json() +if version_update["available"]: + new_version = version_update["updatePackage"]["version"] + +if new_version == old_version: + sys.exit() + +source_nix_hash, source_store_path = subprocess.run( + [ + "nix-prefetch-url", + "--name", "source", + "--unpack", + "--print-path", + f"https://github.com/Lidarr/Lidarr/archive/v{new_version}.tar.gz", + ], + stdout=subprocess.PIPE, + text=True, + check=True, +).stdout.rstrip().split("\n") + +old_source_hash = package_attrs["sourceHash"] +new_source_hash = nix_hash_to_sri(source_nix_hash) + +package_dir = package_attrs["dir"] +package_file_name = "package.nix" +deps_file_name = "deps.json" + +# To update deps.nix, we copy the package to a temporary directory and run +# passthru.fetch-deps script there. +with tempfile.TemporaryDirectory() as work_dir: + package_file = os.path.join(work_dir, package_file_name) + deps_file = os.path.join(work_dir, deps_file_name) + + shutil.copytree(package_dir, work_dir, dirs_exist_ok=True) + + replace_in_file(package_file, { + # NB unlike hashes, versions are likely to be used in code or comments. + # Try to be more specific to avoid false positive matches. + f"version = \"{old_version}\"": f"version = \"{new_version}\"", + old_source_hash: new_source_hash, + }) + + # We need access to the patched and updated src to get the patched + # `yarn.lock`. + patched_src = os.path.join(work_dir, "patched-src") + subprocess.run( + [ + "nix", + "--extra-experimental-features", "nix-command", + "build", + "--impure", + "--nix-path", "", + "--include", f"nixpkgs={nixpkgs_path}", + "--include", f"package={package_file}", + "--expr", "(import { }).callPackage { }", + "--out-link", patched_src, + "src", + ], + check=True, + ) + old_yarn_hash = package_attrs["yarnHash"] + new_yarn_hash = nix_hash_to_sri(subprocess.run( + [ + "prefetch-yarn-deps", + # does not support "--" separator :( + # Also --verbose writes to stdout, yikes. + os.path.join(patched_src, "yarn.lock"), + ], + stdout=subprocess.PIPE, + text=True, + check=True, + ).stdout.rstrip()) + + replace_in_file(package_file, { + old_yarn_hash: new_yarn_hash, + }) + + # Generate nuget-to-json dependency lock file. + fetch_deps = os.path.join(work_dir, "fetch-deps") + subprocess.run( + [ + "nix", + "--extra-experimental-features", "nix-command", + "build", + "--impure", + "--nix-path", "", + "--include", f"nixpkgs={nixpkgs_path}", + "--include", f"package={package_file}", + "--expr", "(import { }).callPackage { }", + "--out-link", fetch_deps, + "passthru.fetch-deps", + ], + check=True, + ) + subprocess.run( + [ + fetch_deps, + deps_file, + ], + stdout=subprocess.DEVNULL, + check=True, + ) + + shutil.copy(deps_file, os.path.join(package_dir, deps_file_name)) + shutil.copy(package_file, os.path.join(package_dir, package_file_name)) diff --git a/pkgs/by-name/li/lidarr/update.sh b/pkgs/by-name/li/lidarr/update.sh deleted file mode 100755 index c8cbca5bc089..000000000000 --- a/pkgs/by-name/li/lidarr/update.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env nix-shell -#!nix-shell -i bash -p curl gnused nix-prefetch jq - -set -euo pipefail - -dirname="$(dirname "$(readlink -f "$0")")" - -updateHash() { - local version arch os - version="$1" - arch="$2" - os="$3" - - local url hash sriHash - url="https://github.com/Lidarr/Lidarr/releases/download/v$version/Lidarr.master.$version.$os-core-$arch.tar.gz" - hash="$(nix-prefetch-url --type sha256 "$url")" - sriHash="$(nix --extra-experimental-features nix-command hash convert --to sri --hash-algo sha256 "$hash")" - - local hashKey="${arch}-${os}_hash" - sed -i "s|$hashKey = \"[a-zA-Z0-9\/+-=]*\";|$hashKey = \"$sriHash\";|g" "$dirname/package.nix" -} - -updateVersion() { - sed -i "s/version = \"[0-9.]*\";/version = \"$1\";/g" "$dirname/package.nix" -} - -latestTag=$(curl https://api.github.com/repos/Lidarr/Lidarr/releases/latest | jq -r ".tag_name") -latestVersion="$(expr "$latestTag" : 'v\(.*\)')" - -updateVersion "$latestVersion" - -updateHash "$latestVersion" x64 linux -updateHash "$latestVersion" arm64 linux -updateHash "$latestVersion" x64 osx -updateHash "$latestVersion" arm64 osx From b5493d1a2e3b59dd3ea9d34a167cd1348354f60b Mon Sep 17 00:00:00 2001 From: Nikolaos Karaolidis Date: Wed, 25 Feb 2026 11:31:24 +0000 Subject: [PATCH 3/3] maintainers: add karaolidis Signed-off-by: Nikolaos Karaolidis --- maintainers/maintainer-list.nix | 6 ++++++ pkgs/by-name/li/lidarr/package.nix | 5 ++++- pkgs/by-name/ra/radarr/package.nix | 1 + pkgs/by-name/so/sonarr/package.nix | 1 + 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index a133d8c1901b..f768744c928c 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -13561,6 +13561,12 @@ github = "karantan"; githubId = 7062631; }; + karaolidis = { + name = "Nikolaos Karaolidis"; + email = "nick@karaolidis.com"; + github = "karaolidis"; + githubId = 46189100; + }; KarlJoad = { email = "karl@hallsby.com"; github = "KarlJoad"; diff --git a/pkgs/by-name/li/lidarr/package.nix b/pkgs/by-name/li/lidarr/package.nix index 4af0149852d1..e21ab48833c2 100644 --- a/pkgs/by-name/li/lidarr/package.nix +++ b/pkgs/by-name/li/lidarr/package.nix @@ -165,7 +165,10 @@ buildDotnetModule { homepage = "https://lidarr.audio"; changelog = "https://github.com/Lidarr/Lidarr/releases/tag/v${version}"; license = lib.licenses.gpl3Only; - maintainers = with lib.maintainers; [ ramonacat ]; + maintainers = with lib.maintainers; [ + ramonacat + karaolidis + ]; mainProgram = "Lidarr"; # platforms inherited from dotnet-sdk. }; diff --git a/pkgs/by-name/ra/radarr/package.nix b/pkgs/by-name/ra/radarr/package.nix index 90f60bb6d22c..2d56b03d11b5 100644 --- a/pkgs/by-name/ra/radarr/package.nix +++ b/pkgs/by-name/ra/radarr/package.nix @@ -196,6 +196,7 @@ buildDotnetModule { maintainers = with lib.maintainers; [ purcell nyanloutre + karaolidis ]; mainProgram = "Radarr"; # platforms inherited from dotnet-sdk. diff --git a/pkgs/by-name/so/sonarr/package.nix b/pkgs/by-name/so/sonarr/package.nix index 7f02dd96c94d..7e4e03b2b966 100644 --- a/pkgs/by-name/so/sonarr/package.nix +++ b/pkgs/by-name/so/sonarr/package.nix @@ -199,6 +199,7 @@ buildDotnetModule { purcell tie niklaskorz + karaolidis ]; mainProgram = "Sonarr"; # platforms inherited from dotnet-sdk.