From e875678f8ed34256300cc65e63aae641495572b5 Mon Sep 17 00:00:00 2001 From: Timo Kaufmann Date: Thu, 26 Jul 2018 12:31:47 +0200 Subject: [PATCH] spotify: 1.0.80.480.g51b03ac3-13 -> 1.0.80.474.gef6b503e-7 The purpose of this update (or downgrade?) is to switch the spotify source to one more reliable. The current source only contains the last few releases, while the new source retains all old releases. --- pkgs/applications/audio/spotify/default.nix | 51 +++++++++++++++++---- pkgs/applications/audio/spotify/update.sh | 49 ++++++++++++++++++++ 2 files changed, 90 insertions(+), 10 deletions(-) create mode 100644 pkgs/applications/audio/spotify/update.sh diff --git a/pkgs/applications/audio/spotify/default.nix b/pkgs/applications/audio/spotify/default.nix index b8495465db55..04bdff3c8135 100644 --- a/pkgs/applications/audio/spotify/default.nix +++ b/pkgs/applications/audio/spotify/default.nix @@ -1,13 +1,18 @@ -{ fetchurl, stdenv, dpkg, xorg, alsaLib, makeWrapper, openssl, freetype +{ fetchurl, stdenv, squashfsTools, xorg, alsaLib, makeWrapper, openssl, freetype , glib, pango, cairo, atk, gdk_pixbuf, gtk2, cups, nspr, nss, libpng , libgcrypt, systemd, fontconfig, dbus, expat, ffmpeg_0_10, curl, zlib, gnome3 }: let - # Please update the stable branch! - # Latest version number can be found at: - # http://repository-origin.spotify.com/pool/non-free/s/spotify-client/ - # Be careful not to pick the testing version. - version = "1.0.80.480.g51b03ac3-13"; + # "rev" decides what is actually being downloaded + version = "1.0.80.474.gef6b503e-7"; + # To get the latest stable revision: + # curl -H 'X-Ubuntu-Series: 16' 'https://api.snapcraft.io/api/v1/snaps/details/spotify?channel=stable' | jq '.download_url,.version,.last_updated' + # To get general information: + # curl -H 'Snap-Device-Series: 16' 'https://api.snapcraft.io/v2/snaps/info/spotify' | jq '.' + # More exapmles of api usage: + # https://github.com/canonical-websites/snapcraft.io/blob/master/webapp/publisher/snaps/views.py + rev = "16"; + deps = [ alsaLib @@ -49,12 +54,20 @@ in stdenv.mkDerivation { name = "spotify-${version}"; + # fetch from snapcraft instead of the debian repository most repos fetch from. + # That is a bit more cumbersome. But the debian repository only keeps the last + # two versions, while snapcraft should provide versions indefinately: + # https://forum.snapcraft.io/t/how-can-a-developer-remove-her-his-app-from-snap-store/512 + + # This is the next-best thing, since we're not allowed to re-distribute + # spotify ourselves: + # https://community.spotify.com/t5/Desktop-Linux/Redistribute-Spotify-on-Linux-Distributions/td-p/1695334 src = fetchurl { - url = "https://repository-origin.spotify.com/pool/non-free/s/spotify-client/spotify-client_${version}_amd64.deb"; - sha256 = "e32f4816ae79dbfa0c14086e76df3bc83d526402aac1dbba534127fc00fe50ea"; + url = "https://api.snapcraft.io/api/v1/snaps/download/pOBIoZ2LrCB3rDohMxoYGnbN14EHOgD7_${rev}.snap"; + sha512 = "45b7ab574b30fb368e0b6f4dd60addbfd1ddc02173b4f98b31c524eed49073432352a361e75959ce8e2f752231e93c79ca1b538c4bd295c935d1e2e0585d147f"; }; - buildInputs = [ dpkg makeWrapper ]; + buildInputs = [ squashfsTools makeWrapper ]; doConfigure = false; doBuild = false; @@ -63,7 +76,23 @@ stdenv.mkDerivation { unpackPhase = '' runHook preUnpack - dpkg-deb -x $src . + unsquashfs "$src" '/usr/share/spotify' '/usr/bin/spotify' '/meta/snap.yaml' + cd squashfs-root + if ! grep -q 'grade: stable' meta/snap.yaml; then + # Unfortunately this check is not reliable: At the moment (2018-07-26) the + # latest version in the "edge" channel is also marked as stable. + echo "The snap package is marked as unstable:" + grep 'grade: ' meta/snap.yaml + echo "You probably chose the wrong revision." + exit 1 + fi + if ! grep -q '${version}' meta/snap.yaml; then + echo "Package version differs from version found in snap metadata:" + grep 'version: ' meta/snap.yaml + echo "While the nix package specifies: ${version}." + echo "You probably chose the wrong revision or forgot to update the nix version." + exit 1 + fi runHook postUnpack ''; @@ -75,6 +104,8 @@ stdenv.mkDerivation { mkdir -p $libdir mv ./usr/* $out/ + cp meta/snap.yaml $out + # Work around Spotify referring to a specific minor version of # OpenSSL. diff --git a/pkgs/applications/audio/spotify/update.sh b/pkgs/applications/audio/spotify/update.sh new file mode 100644 index 000000000000..114245f6d46c --- /dev/null +++ b/pkgs/applications/audio/spotify/update.sh @@ -0,0 +1,49 @@ +channel="stable" # stable/candidate/edge +nixpkgs="$(git rev-parse --show-toplevel)" +spotify_nix="$nixpkgs/pkgs/applications/audio/spotify/default.nix" + + + +# create bash array from snap info +snap_info=($( + curl -H 'X-Ubuntu-Series: 16' \ + "https://api.snapcraft.io/api/v1/snaps/details/spotify?channel=$channel" \ + | jq --raw-output \ + '.revision,.download_sha512,.version,.last_updated' +)) + +revision="${snap_info[0]}" +sha512="${snap_info[1]}" +version="${snap_info[2]}" +last_updated="${snap_info[3]}" + +# find the last commited version +version_pre=$( + git grep 'version\s*=' HEAD "$spotify_nix" \ + | sed -Ene 's/.*"(.*)".*/\1/p' +) + +if [[ "$version_pre" = "$version" ]]; then + echo "Spotify is already up ot date" + exit 0 +fi + +echo "Updating from ${version_pre} to ${version}, released on ${last_updated}" + +# search-andreplace revision, hash and version +sed --regexp-extended \ + -e 's/rev\s*=\s*"[0-9]+"\s*;/rev = "'"${revision}"'";/' \ + -e 's/sha512\s*=\s*".{128}"\s*;/sha512 = "'"${sha512}"'";/' \ + -e 's/version\s*=\s*".*"\s*;/version = "'"${version}"'";/' \ + -i "$spotify_nix" + +if ! nix-build -A spotify "$nixpkgs"; then + echo "The updated spotify failed to build." + exit 1 +fi + +git add "$spotify_nix" +# show diff for review +git diff HEAD +# prepare commit message, but allow edit +git commit --edit --message "spotify: $version_pre -> $version"