about summary refs log tree commit diff
path: root/nixpkgs/pkgs/applications/blockchains/wasabibackend/create_deps.sh
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/applications/blockchains/wasabibackend/create_deps.sh')
-rwxr-xr-x[-rw-r--r--]nixpkgs/pkgs/applications/blockchains/wasabibackend/create_deps.sh134
1 files changed, 67 insertions, 67 deletions
diff --git a/nixpkgs/pkgs/applications/blockchains/wasabibackend/create_deps.sh b/nixpkgs/pkgs/applications/blockchains/wasabibackend/create_deps.sh
index 814f92a341a6..79bc88ca8996 100644..100755
--- a/nixpkgs/pkgs/applications/blockchains/wasabibackend/create_deps.sh
+++ b/nixpkgs/pkgs/applications/blockchains/wasabibackend/create_deps.sh
@@ -1,13 +1,26 @@
 #! /usr/bin/env nix-shell
-#! nix-shell -i bash -p dotnet-sdk_3 nixfmt
+#! nix-shell -i bash -p dotnet-sdk_3 jq xmlstarlet curl nixfmt
+set -euo pipefail
 
 # Run this script to generate deps.nix
-# ./create_deps.sh /path/to/package/source/checkout > 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 wasabibackend.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"
 
@@ -30,69 +43,56 @@ DEPS_TEMPLATE="
   sha256 = \"%s\";
 })"
 
+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 \
+        WalletWasabi.Backend/WalletWasabi.Backend.csproj >&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>&-
 
-function generate_restore_log() {
-  checkout_path=$1
-  >&2 echo "generating restore log for $checkout_path..."
-  cd $checkout_path
-  dotnet nuget locals all --clear
-  dotnet restore -v normal --no-cache WalletWasabi.Backend -r linux-x64
-  cd -
-}
-
-function process_restore_log() {
-  restore_log=$1
-  >&2 echo "processing restore log..."
-  while read line; do
-    if echo $line | grep -q "^[[:space:]]*Installing"; then
-      l=$(echo $line | xargs)
-      l=${l#Installing }
-      l=${l%.}
-      echo $l
-    fi
-  done < $restore_log
-}
-
-function prefetch_deps() {
-  processed_log=$1
-  >&2 echo "prefetching deps..."
-  while read line; do
-    name=$(echo $line | cut -d' ' -f1)
-    >&2 echo "prefetching '$name' version: $version"
-    version=$(echo $line | cut -d' ' -f2)
-    hash=$(nix-prefetch-url "$URLBASE/$name/$version" 2>/dev/null)
-    echo "$name $version $hash"
-  done < $processed_log
-}
-
-function generate_deps_expression() {
-  packages=$1
-  >&2 echo "generating deps nix-expression..."
-  echo $DEPS_HEADER
-  while read line; do
-    name=$(echo $line | cut -d' ' -f1)
-    version=$(echo $line | cut -d' ' -f2)
-    hash=$(echo $line | cut -d' ' -f3)
-    printf "$DEPS_TEMPLATE" $name $version $hash
-  done < $packages
-  echo $DEPS_FOOTER
-}
-
-function main() {
-  checkout_path=$1
-  tmpdir=$(mktemp -d)
-  generate_restore_log $checkout_path > $tmpdir/restore.log
-  process_restore_log $tmpdir/restore.log > $tmpdir/processed.log
-  prefetch_deps $tmpdir/processed.log > $tmpdir/prefetched.log
-  generate_deps_expression $tmpdir/prefetched.log > $tmpdir/deps.nix
-  nixfmt $tmpdir/deps.nix
-  cat $tmpdir/deps.nix
-  rm -rf $tmpdir
-}
-
-if [ ! -d "$1" ]; then
-    >&2 echo "First argument must be a directory, the path to the package source checkout"
-    exit 1
-fi
-
-main $@
+nixfmt "$deps_file"