From cd7babfc8bd9c45bc336436a097f84ba36c90415 Mon Sep 17 00:00:00 2001 From: Doron Behar Date: Sun, 8 Oct 2023 13:58:31 +0300 Subject: [PATCH] uhd: add passthru.updateScript --- pkgs/applications/radio/uhd/default.nix | 20 ++++++++++++++---- pkgs/applications/radio/uhd/update.sh | 27 +++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 4 deletions(-) create mode 100755 pkgs/applications/radio/uhd/update.sh diff --git a/pkgs/applications/radio/uhd/default.nix b/pkgs/applications/radio/uhd/default.nix index 5dbed65484de..1bfd8476aee8 100644 --- a/pkgs/applications/radio/uhd/default.nix +++ b/pkgs/applications/radio/uhd/default.nix @@ -49,8 +49,10 @@ in stdenv.mkDerivation (finalAttrs: { pname = "uhd"; - # UHD seems to use three different version number styles: x.y.z, xxx_yyy_zzz - # and xxx.yyy.zzz. Hrmpf... style keeps changing + # NOTE: Use the following command to update the package, and the uhdImageSrc attribute: + # + # nix-shell maintainers/scripts/update.nix --argstr package uhd --argstr commit true + # version = "4.4.0.0"; outputs = [ "out" "dev" ]; @@ -59,14 +61,24 @@ stdenv.mkDerivation (finalAttrs: { owner = "EttusResearch"; repo = "uhd"; rev = "v${finalAttrs.version}"; - sha256 = "sha256-khVOHlvacZc4EMg4m55rxEqPvLY1xURpAfOW905/3jg="; + # The updateScript relies on the `src` using `hash`, and not `sha256. To + # update the correct hash for the `src` vs the `uhdImagesSrc` + hash = "sha256-khVOHlvacZc4EMg4m55rxEqPvLY1xURpAfOW905/3jg="; }; # Firmware images are downloaded (pre-built) from the respective release on Github uhdImagesSrc = fetchurl { url = "https://github.com/EttusResearch/uhd/releases/download/v${finalAttrs.version}/uhd-images_${finalAttrs.version}.tar.xz"; + # Please don't convert this to a hash, in base64, see comment near src's + # hash. sha256 = "V8ldW8bvYWbrDAvpWpHcMeLf9YvF8PIruDAyNK/bru4="; }; - # TODO: Add passthru.updateScript that will update both of the above hashes... + passthru = { + updateScript = [ + ./update.sh + # Pass it this file name as argument + (builtins.unsafeGetAttrPos "pname" finalAttrs.finalPackage).file + ]; + }; cmakeFlags = [ "-DENABLE_LIBUHD=ON" diff --git a/pkgs/applications/radio/uhd/update.sh b/pkgs/applications/radio/uhd/update.sh new file mode 100755 index 000000000000..e52fb0590410 --- /dev/null +++ b/pkgs/applications/radio/uhd/update.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env nix-shell +#!nix-shell -i bash -p jq nix nix-prefetch-github + +set -euo pipefail +echoerr() { echo "$@" 1>&2; } + +fname="$1" +echoerr got fname $fname +shift +latest_release=$(curl --silent https://api.github.com/repos/EttusResearch/uhd/releases/latest) +version=$(jq -r '.tag_name' <<<"$latest_release" | cut -c2-) +# Update version, if needed +if grep -q 'version = "'$version $fname; then + echoerr Current version $version is the latest available + exit 0; +fi +echoerr got version $version +sed -i -E 's/(version = ").*(";)/\1'$version'\2/g' $fname +# Verify the sed command above did not fail +grep -q $version $fname +# Update srcHash +srcHash="$(nix-prefetch-github EttusResearch uhd --rev v${version} | jq --raw-output .hash)" +sed -i -E 's#(hash = ").*(";)#\1'$srcHash'\2#g' $fname +grep -q $srcHash $fname +imageHash="$(nix-prefetch-url https://github.com/EttusResearch/uhd/releases/download/v${version}/uhd-images_${version}.tar.xz)" +sed -i -E 's#(sha256 = ").*(";)#\1'$imageHash'\2#g' $fname +grep -q $imageHash $fname