eventstore: Fix create-deps.sh script and update dependencies

The old version of the script tried to parse the output of the dotnet tool, but
apparently, that output changed and thus the list of dependencies was empty.
This commit is contained in:
Claudio Bley 2021-11-10 09:22:40 +01:00 committed by Pavol Rusnak
parent be738c1590
commit 80cf9cd7ee
No known key found for this signature in database
GPG key ID: 91F3B339B9A02A3D
2 changed files with 577 additions and 412 deletions

116
pkgs/servers/nosql/eventstore/create-deps.sh Normal file → Executable file
View file

@ -1,34 +1,98 @@
# 1. create a log with `dotnet restore -v m MyPackage.sln > mypackage-restore.log
# 2. then call ./create-deps.sh mypackage-restore.log
#! /usr/bin/env nix-shell
#! nix-shell -i bash -p dotnet-sdk_5 jq xmlstarlet curl nixpkgs-fmt
set -euo pipefail
urlbase="https://www.nuget.org/api/v2/package"
cat << EOL
{ fetchurl }: let
# Run this script to generate deps.nix
# TODO: consolidate with other dotnet deps generation scripts by which
# this script is inspired:
# - pkgs/servers/nosql/eventstore/create-deps.sh
# - pkgs/development/dotnet-modules/python-language-server/create_deps.sh
# - pkgs/misc/emulators/ryujinx/updater.sh
cd "$(dirname "${BASH_SOURCE[0]}")"
deps_file="$(realpath "./deps.nix")"
exec 2>&1 6> "$deps_file"
store_src="$( nix-build ../../../.. -A eventstore.src --no-out-link )"
src="$(mktemp -d)"
cp -rT "$store_src" "$src"
chmod -R +w "$src"
pushd "$src"
URLBASE="https://www.nuget.org/api/v2/package"
DEPS_HEADER="
{ fetchurl }:
let
nugetUrlBase = \"$URLBASE\";
fetchNuGet = { name, version, sha256 }: fetchurl {
inherit sha256;
url = "$urlbase/\${name}/\${version}";
url = \"\${nugetUrlBase}/\${name}/\${version}\";
};
in ["
in [
EOL
IFS=''
while read line; do
if echo $line | grep -q "Installing "; then
name=$(echo $line | sed -r 's/ Installing ([^ ]+) (.+)./\1/')
version=$(echo $line | sed -r 's/ Installing ([^ ]+) (.+)./\2/')
sha256=$(nix-prefetch-url "$urlbase/$name/$version" 2>/dev/null)
cat << EOL
DEPS_FOOTER="]"
(fetchNuGet {
name = "$name";
version = "$version";
sha256 = "$sha256";
})
EOL
fi
done < $1
cat << EOL
DEPS_TEMPLATE="
(fetchNuGet {
name = \"%s\";
version = \"%s\";
sha256 = \"%s\";
})"
]
EOL
tmpdir="$(mktemp -d -p "$(pwd)")" # must be under source root
trap 'rm -rf "$tmpdir"' EXIT
HOME="$tmpdir" dotnet restore --packages "$tmpdir"/.nuget/packages \
--no-cache --force --runtime linux-x64 \
src/EventStore.sln >&2
mapfile -t repos < <(
xmlstarlet sel -t -v 'configuration/packageSources/add/@value' -n NuGet.config "$tmpdir"/.nuget/NuGet/NuGet.Config |
while IFS= read index
do
curl --compressed -fsL "$index" | \
jq -r '.resources[] | select(."@type" == "PackageBaseAddress/3.0.0")."@id"'
done
)
echo $DEPS_HEADER >&6
cd "$tmpdir/.nuget/packages"
for package in *
do
cd "$package"
for version in *
do
found=false
for repo in "${repos[@]}"
do
url="$repo$package/$version/$package.$version.nupkg"
if curl -fsL "$url" -o /dev/null
then
found=true
break
fi
done
if ! $found
then
echo "couldn't find $package $version" >&2
exit 1
fi
sha256=$(nix-prefetch-url "$url" 2>/dev/null)
printf "$DEPS_TEMPLATE" $package $version $sha256 >&6
done
cd ..
done
echo $DEPS_FOOTER >&6
exec 6>&-
nixpkgs-fmt "$deps_file"

File diff suppressed because it is too large Load diff