summary refs log tree commit diff
path: root/pkgs/build-support/dotnet
diff options
context:
space:
mode:
authormdarocha <git@mdarocha.pl>2022-06-17 11:54:01 +0200
committermdarocha <git@mdarocha.pl>2022-06-21 12:13:34 +0200
commit2f07f578b264bd90fb16d58744016d92ef3e412b (patch)
treee177a683395883695dee579100cff52ac9406df0 /pkgs/build-support/dotnet
parentb404c4ae49b0707a55e9afdeb3653cc2487d69cc (diff)
downloadnixpkgs-2f07f578b264bd90fb16d58744016d92ef3e412b.tar
nixpkgs-2f07f578b264bd90fb16d58744016d92ef3e412b.tar.gz
nixpkgs-2f07f578b264bd90fb16d58744016d92ef3e412b.tar.bz2
nixpkgs-2f07f578b264bd90fb16d58744016d92ef3e412b.tar.lz
nixpkgs-2f07f578b264bd90fb16d58744016d92ef3e412b.tar.xz
nixpkgs-2f07f578b264bd90fb16d58744016d92ef3e412b.tar.zst
nixpkgs-2f07f578b264bd90fb16d58744016d92ef3e412b.zip
nuget-to-nix: support custom package sources
If the package was not restored from nuget.org (determinted by checking
the "source" field of ".nupkg.metadata"), query the custom source for
the package endpoint (the way nuget api is built we can't determine it
without an API query) and build a custom package URL to save in the
generated deps file.
Diffstat (limited to 'pkgs/build-support/dotnet')
-rw-r--r--pkgs/build-support/dotnet/nuget-to-nix/default.nix4
-rwxr-xr-xpkgs/build-support/dotnet/nuget-to-nix/nuget-to-nix.sh11
2 files changed, 14 insertions, 1 deletions
diff --git a/pkgs/build-support/dotnet/nuget-to-nix/default.nix b/pkgs/build-support/dotnet/nuget-to-nix/default.nix
index 5267bc24a76..18757692e92 100644
--- a/pkgs/build-support/dotnet/nuget-to-nix/default.nix
+++ b/pkgs/build-support/dotnet/nuget-to-nix/default.nix
@@ -6,6 +6,8 @@
 , coreutils
 , findutils
 , gnused
+, jq
+, curl
 }:
 
 runCommandLocal "nuget-to-nix" {
@@ -18,6 +20,8 @@ runCommandLocal "nuget-to-nix" {
       coreutils
       findutils
       gnused
+      jq
+      curl
     ];
   };
 
diff --git a/pkgs/build-support/dotnet/nuget-to-nix/nuget-to-nix.sh b/pkgs/build-support/dotnet/nuget-to-nix/nuget-to-nix.sh
index d9eaa041754..879a87b3341 100755
--- a/pkgs/build-support/dotnet/nuget-to-nix/nuget-to-nix.sh
+++ b/pkgs/build-support/dotnet/nuget-to-nix/nuget-to-nix.sh
@@ -13,6 +13,8 @@ pkgs=$1
 tmpfile=$(mktemp /tmp/nuget-to-nix.XXXXXX)
 trap "rm -f ${tmpfile}" EXIT
 
+declare -A nuget_sources_cache
+
 echo "{ fetchNuGet }: ["
 
 while read pkg_spec; do
@@ -21,7 +23,14 @@ while read pkg_spec; do
     sed -nE 's/.*<id>([^<]*).*/\1/p; s/.*<version>([^<+]*).*/\1/p' "$pkg_spec")
   pkg_sha256="$(nix-hash --type sha256 --flat --base32 "$(dirname "$pkg_spec")"/*.nupkg)"
 
-  echo "  (fetchNuGet { pname = \"$pkg_name\"; version = \"$pkg_version\"; sha256 = \"$pkg_sha256\"; })" >> ${tmpfile}
+  pkg_src="$(jq --raw-output '.source' "$(dirname "$pkg_spec")/.nupkg.metadata")"
+  if [[ $pkg_src != https://api.nuget.org/* ]]; then
+    pkg_source_url="${nuget_sources_cache[$pkg_src]:=$(curl --fail "$pkg_src" | jq --raw-output '.resources[] | select(."@type" == "PackageBaseAddress/3.0.0")."@id"')}"
+    pkg_url="$pkg_source_url${pkg_name,,}/${pkg_version,,}/${pkg_name,,}.${pkg_version,,}.nupkg"
+    echo "  (fetchNuGet { pname = \"$pkg_name\"; version = \"$pkg_version\"; sha256 = \"$pkg_sha256\"; url = \"$pkg_url\"; })" >> ${tmpfile}
+  else
+    echo "  (fetchNuGet { pname = \"$pkg_name\"; version = \"$pkg_version\"; sha256 = \"$pkg_sha256\"; })" >> ${tmpfile}
+  fi
 done < <(find $1 -name '*.nuspec')
 
 LC_ALL=C sort --ignore-case ${tmpfile}