diff options
author | mdarocha <git@mdarocha.pl> | 2022-06-17 11:54:01 +0200 |
---|---|---|
committer | mdarocha <git@mdarocha.pl> | 2022-06-21 12:13:34 +0200 |
commit | 2f07f578b264bd90fb16d58744016d92ef3e412b (patch) | |
tree | e177a683395883695dee579100cff52ac9406df0 /pkgs/build-support/dotnet | |
parent | b404c4ae49b0707a55e9afdeb3653cc2487d69cc (diff) | |
download | nixpkgs-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.nix | 4 | ||||
-rwxr-xr-x | pkgs/build-support/dotnet/nuget-to-nix/nuget-to-nix.sh | 11 |
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} |