summary refs log tree commit diff
path: root/pkgs/servers/nosql/eventstore/create-deps.sh
blob: afeee592de3dee01bbf3863615ec71c1bed0756a (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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#! /usr/bin/env nix-shell
#! nix-shell -i bash -p dotnet-sdk_5 jq xmlstarlet curl nixpkgs-fmt
set -euo pipefail

# 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/applications/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 = { pname, version, sha256 }: fetchurl {
    inherit sha256;
    url = \"\${nugetUrlBase}/\${pname}/\${version}\";
  };
in ["

DEPS_FOOTER="]"

DEPS_TEMPLATE="
(fetchNuGet {
  pname = \"%s\";
  version = \"%s\";
  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 \
        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"