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.
main
mdarocha 2 years ago
parent b404c4ae49
commit 2f07f578b2
  1. 4
      pkgs/build-support/dotnet/nuget-to-nix/default.nix
  2. 11
      pkgs/build-support/dotnet/nuget-to-nix/nuget-to-nix.sh

@ -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
];
};

@ -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}

Loading…
Cancel
Save