summary refs log tree commit diff
path: root/pkgs/applications/blockchains/nbxplorer/util/create-deps.sh
blob: 2a862c31c881e9a54a120f0a12a3c6734a11f842 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p dotnet-sdk_6
set -euo pipefail

# Writes deps for dotnet package in $pkgSrc to $depsFile.
# Expects $pkgSrc to contain a single .sln file.

pkgSrc=$1
depsFile=$(realpath "$2")
customFlags=$3

sln=$(cd "$pkgSrc"; find * -maxdepth 0 -name '*.sln' | head -1)
[[ $sln ]] || { echo "No .sln file in $pkgSrc" ; exit 1; }

tmpdir=$(mktemp -d /tmp/$pkgName-src.XXX)
echo "Using tmp dir: $tmpdir"
cp -rT "$pkgSrc" "$tmpdir"
chmod -R +w "$tmpdir"

pushd "$tmpdir" > /dev/null
mkdir home
echo "Running dotnet restore for $sln"
HOME=home DOTNET_CLI_TELEMETRY_OPTOUT=1 \
  dotnet restore $customFlags -v normal --no-cache "$sln" > restore_log

echo "{ fetchNuGet }: [" > "$depsFile"
while read pkgSpec; do
  { read pname; read version; } < <(
    # Ignore build version part: 1.0.0-beta2+77df2220 -> 1.0.0-beta2
    sed -nE 's/.*<id>([^<]*).*/\1/p; s/.*<version>([^<+]*).*/\1/p' "$pkgSpec"
  )
  sha256=$(nix-hash --type sha256 --flat --base32 "$(dirname "$pkgSpec")"/*.nupkg)
  cat >> "$depsFile" <<EOF
  (fetchNuGet {
    pname = "$pname";
    version = "$version";
    sha256 = "$sha256";
  })
EOF
done < <(find home/.nuget/packages -name '*.nuspec' | LC_ALL=C sort)
echo "]" >> "$depsFile"

echo "Created $depsFile"

popd > /dev/null
rm -r $tmpdir