2022-04-27 09:35:20 +00:00
|
|
|
#!@runtimeShell@
|
2021-08-18 13:19:15 +00:00
|
|
|
|
|
|
|
set -euo pipefail
|
|
|
|
|
2022-04-27 09:35:20 +00:00
|
|
|
export PATH="@binPath@"
|
|
|
|
|
2021-08-18 13:19:15 +00:00
|
|
|
if [ $# -eq 0 ]; then
|
2022-08-21 13:32:41 +00:00
|
|
|
>&2 echo "Usage: $0 <packages directory> [path to file with a list of excluded packages] > deps.nix"
|
2021-08-18 13:19:15 +00:00
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
pkgs=$1
|
2022-08-21 13:32:41 +00:00
|
|
|
exclusions="${2:-/dev/null}"
|
2022-03-10 19:12:11 +00:00
|
|
|
tmpfile=$(mktemp /tmp/nuget-to-nix.XXXXXX)
|
2022-03-30 09:31:56 +00:00
|
|
|
trap "rm -f ${tmpfile}" EXIT
|
2021-08-18 13:19:15 +00:00
|
|
|
|
2022-06-26 10:26:21 +00:00
|
|
|
declare -A nuget_sources_cache
|
|
|
|
|
2021-08-18 13:19:15 +00:00
|
|
|
echo "{ fetchNuGet }: ["
|
|
|
|
|
|
|
|
while read pkg_spec; do
|
|
|
|
{ read pkg_name; read pkg_version; } < <(
|
|
|
|
# Build version part should be ignored: `3.0.0-beta2.20059.3+77df2220` -> `3.0.0-beta2.20059.3`
|
|
|
|
sed -nE 's/.*<id>([^<]*).*/\1/p; s/.*<version>([^<+]*).*/\1/p' "$pkg_spec")
|
2022-08-21 13:32:41 +00:00
|
|
|
|
|
|
|
if grep "$pkg_name" "$exclusions" > /dev/null; then
|
|
|
|
continue
|
|
|
|
fi
|
|
|
|
|
2021-08-18 13:19:15 +00:00
|
|
|
pkg_sha256="$(nix-hash --type sha256 --flat --base32 "$(dirname "$pkg_spec")"/*.nupkg)"
|
|
|
|
|
2022-06-26 10:26:21 +00:00
|
|
|
pkg_src="$(jq --raw-output '.source' "$(dirname "$pkg_spec")/.nupkg.metadata")"
|
2022-08-12 12:06:08 +00:00
|
|
|
if [[ $pkg_src != https://api.nuget.org/* ]] && [[ ! -d $pkg_src ]]; then
|
2022-07-14 12:49:19 +00:00
|
|
|
pkg_source_url="${nuget_sources_cache[$pkg_src]:=$(curl -n --fail "$pkg_src" | jq --raw-output '.resources[] | select(."@type" == "PackageBaseAddress/3.0.0")."@id"')}"
|
2022-06-26 10:26:21 +00:00
|
|
|
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
|
2022-03-10 19:12:11 +00:00
|
|
|
done < <(find $1 -name '*.nuspec')
|
|
|
|
|
|
|
|
LC_ALL=C sort --ignore-case ${tmpfile}
|
2021-08-18 13:19:15 +00:00
|
|
|
|
|
|
|
echo "]"
|