diff --git a/nixos/doc/manual/release-notes/rl-2405.section.md b/nixos/doc/manual/release-notes/rl-2405.section.md index 740f8bc93686..bad1fd449bbb 100644 --- a/nixos/doc/manual/release-notes/rl-2405.section.md +++ b/nixos/doc/manual/release-notes/rl-2405.section.md @@ -277,6 +277,8 @@ The pre-existing [services.ankisyncd](#opt-services.ankisyncd.enable) has been m - New options were added to the dnsdist module to enable and configure a DNSCrypt endpoint (see `services.dnsdist.dnscrypt.enable`, etc.). The module can generate the DNSCrypt provider key pair, certificates and also performs their rotation automatically with no downtime. +- With a bump to `sonarr` v4, existing config database files will be upgraded automatically, but note that some old apparently-working configs [might actually be corrupt and fail to upgrade cleanly](https://forums.sonarr.tv/t/sonarr-v4-released/33089). + - The Yama LSM is now enabled by default in the kernel, which prevents ptracing non-child processes. This means you will not be able to attach gdb to an existing process, but will need to start that process from gdb (so it is a diff --git a/pkgs/servers/sonarr/default.nix b/pkgs/servers/sonarr/default.nix index 716a386c4faa..cf56476719a1 100644 --- a/pkgs/servers/sonarr/default.nix +++ b/pkgs/servers/sonarr/default.nix @@ -1,12 +1,28 @@ -{ lib, stdenv, fetchurl, mono, libmediainfo, sqlite, curl, makeWrapper, nixosTests }: +{ lib, stdenv, fetchurl, dotnet-runtime, icu, ffmpeg, openssl, sqlite, curl, makeWrapper, nixosTests }: +let + os = if stdenv.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-9YNhyhxnnn2CesXLJH5Cs7yB9w23YUAZPrk9vEHvevk="; + arm64-linux_hash = "sha256-RBCyfozmBpWrmsfMcdb1BqcBXj64CMDrgpMZTzj85ZQ="; + x64-osx_hash = "sha256-+AKENBZohBUEKQEM3L69EzC84MhCX3fGvsNFn5p2v84="; + arm64-osx_hash = "sha256-Arx8usecAN+d0NGL7Hv+rB4GG7p/KLAaqpJFgNg7C2Y="; + }."${arch}-${os}_hash"; +in stdenv.mkDerivation rec { pname = "sonarr"; - version = "3.0.10.1567"; + version = "4.0.1.929"; src = fetchurl { - url = "https://download.sonarr.tv/v3/main/${version}/Sonarr.main.${version}.linux.tar.gz"; - hash = "sha256-6zdp/Bg+9pcrElW5neB+BC16Vn1VhTjhMRRIxGrKhxc="; + url = "https://github.com/Sonarr/Sonarr/releases/download/v${version}/Sonarr.main.${version}.${os}-${arch}.tar.gz"; + inherit hash; }; nativeBuildInputs = [ makeWrapper ]; @@ -14,12 +30,13 @@ stdenv.mkDerivation rec { installPhase = '' runHook preInstall - mkdir -p $out/bin - cp -r * $out/bin/ - makeWrapper "${mono}/bin/mono" $out/bin/NzbDrone \ - --add-flags "$out/bin/Sonarr.exe" \ - --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ - curl sqlite libmediainfo ]} + mkdir -p $out/{bin,share/sonarr-${version}} + cp -r * $out/share/sonarr-${version}/. + + makeWrapper "${dotnet-runtime}/bin/dotnet" $out/bin/NzbDrone \ + --add-flags "$out/share/sonarr-${version}/Sonarr.dll" \ + --prefix PATH : ${lib.makeBinPath [ ffmpeg ]} \ + --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ curl sqlite openssl icu ]} runHook postInstall ''; diff --git a/pkgs/servers/sonarr/update.sh b/pkgs/servers/sonarr/update.sh index faa4f65cfc8f..8ccbc5ba9919 100755 --- a/pkgs/servers/sonarr/update.sh +++ b/pkgs/servers/sonarr/update.sh @@ -1,7 +1,43 @@ #!/usr/bin/env nix-shell -#!nix-shell -i bash -p curl jq common-updater-scripts +#!nix-shell -i bash -p curl gnused nix-prefetch jq -latestTag=$(curl https://api.github.com/repos/Sonarr/Sonarr/tags | jq -r '.[] | .name' | sort --version-sort | tail -1) -version="$(expr $latestTag : 'v\(.*\)')" +set -e -update-source-version sonarr "$version" +dirname="$(dirname "$0")" + +updateHash() +{ + version=$1 + arch=$2 + os=$3 + + hashKey="${arch}-${os}_hash" + + url="https://github.com/Sonarr/Sonarr/releases/download/v${version}/Sonarr.main.${version}.${os}-${arch}.tar.gz"; + hash=$(nix-prefetch-url --type sha256 $url) + sriHash="$(nix hash to-sri --type sha256 $hash)" + + sed -i "s|$hashKey = \"[a-zA-Z0-9\/+-=]*\";|$hashKey = \"$sriHash\";|g" "$dirname/default.nix" +} + +updateVersion() +{ + sed -i "s/version = \"[0-9.]*\";/version = \"$1\";/g" "$dirname/default.nix" +} + +currentVersion=$(cd $dirname && nix eval --raw -f ../../.. sonarr.version) + +latestTag=$(curl https://api.github.com/repos/Sonarr/Sonarr/releases/latest | jq -r ".tag_name") +latestVersion="$(expr $latestTag : 'v\(.*\)')" + +if [[ "$currentVersion" == "$latestVersion" ]]; then + echo "Sonarr is up-to-date: ${currentVersion}" + exit 0 +fi + +updateVersion $latestVersion + +updateHash $latestVersion x64 linux +updateHash $latestVersion arm64 linux +updateHash $latestVersion x64 osx +updateHash $latestVersion arm64 osx