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.
This commit is contained in:
parent
b404c4ae49
commit
2f07f578b2
@ -6,6 +6,8 @@
|
|||||||
, coreutils
|
, coreutils
|
||||||
, findutils
|
, findutils
|
||||||
, gnused
|
, gnused
|
||||||
|
, jq
|
||||||
|
, curl
|
||||||
}:
|
}:
|
||||||
|
|
||||||
runCommandLocal "nuget-to-nix" {
|
runCommandLocal "nuget-to-nix" {
|
||||||
@ -18,6 +20,8 @@ runCommandLocal "nuget-to-nix" {
|
|||||||
coreutils
|
coreutils
|
||||||
findutils
|
findutils
|
||||||
gnused
|
gnused
|
||||||
|
jq
|
||||||
|
curl
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -13,6 +13,8 @@ pkgs=$1
|
|||||||
tmpfile=$(mktemp /tmp/nuget-to-nix.XXXXXX)
|
tmpfile=$(mktemp /tmp/nuget-to-nix.XXXXXX)
|
||||||
trap "rm -f ${tmpfile}" EXIT
|
trap "rm -f ${tmpfile}" EXIT
|
||||||
|
|
||||||
|
declare -A nuget_sources_cache
|
||||||
|
|
||||||
echo "{ fetchNuGet }: ["
|
echo "{ fetchNuGet }: ["
|
||||||
|
|
||||||
while read pkg_spec; do
|
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")
|
sed -nE 's/.*<id>([^<]*).*/\1/p; s/.*<version>([^<+]*).*/\1/p' "$pkg_spec")
|
||||||
pkg_sha256="$(nix-hash --type sha256 --flat --base32 "$(dirname "$pkg_spec")"/*.nupkg)"
|
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')
|
done < <(find $1 -name '*.nuspec')
|
||||||
|
|
||||||
LC_ALL=C sort --ignore-case ${tmpfile}
|
LC_ALL=C sort --ignore-case ${tmpfile}
|
||||||
|
Loading…
Reference in New Issue
Block a user