fetchNextcloudApp: rewrite with fetchzip & applyPatches

There are the following issues with the current implementation:

* `fetchurl` with a tarball from GitHub appears to break occasionally
  because the tarballs are not necessarily reproducible. Because of
  that, `fetchFromGitHub` unpacks the tarball already because the
  contents are actually reproducible in contrast to the tarball. To have
  the same behavior here, we use `fetchzip` now (and `applyPatches` on
  top to apply additional patches if needed).

* Fixes the way how patches are applied. Previously, when having patches
  for a git checkout of the app, these wouldn't apply because the
  `appname-version` prefix is missing.

* Because all old hashes are broken with this, I added an evaluation
  check that breaks evaluation when using the old API (i.e. with
  `name`/`version` which are not needed anymore).
This commit is contained in:
Maximilian Bosch 2022-09-26 20:32:33 +02:00
parent dae204faa0
commit 3ca9b9a8ad
No known key found for this signature in database
GPG Key ID: 9A6EEA275CA5BE0A

View File

@ -1,32 +1,27 @@
{ stdenv, fetchurl, ... }:
{ name
, url
, version
{ stdenv, fetchzip, applyPatches, ... }:
{ url
, sha256
, patches ? [ ]
, name ? null
, version ? null
}:
stdenv.mkDerivation {
pname = "nc-app-${name}";
inherit version patches;
src = fetchurl {
if name != null || version != null then throw ''
`pkgs.fetchNextcloudApp` has been changed to use `fetchzip`.
To update, please
* remove `name`/`version`
* update the hash
''
else applyPatches {
inherit patches;
src = fetchzip {
inherit url sha256;
postFetch = ''
pushd $out &>/dev/null
if [ ! -f ./appinfo/info.xml ]; then
echo "appinfo/info.xml doesn't exist in $out, aborting!"
exit 1
fi
popd &>/dev/null
'';
};
unpackPhase = ''
tar -xzpf $src
'';
installPhase = ''
approot="$(dirname $(dirname $(find -path '*/appinfo/info.xml' | head -n 1)))"
if [ -d "$approot" ];
then
mv "$approot/" $out
chmod -R a-w $out
else
echo "Could not find appinfo/info.xml"
exit 1;
fi
'';
}