74 lines
1.7 KiB
Bash
Executable file
74 lines
1.7 KiB
Bash
Executable file
#!/usr/bin/env nix-shell
|
|
#!nix-shell -I nixpkgs=../../../.. -i bash -p dotnet-sdk_6 jq xmlstarlet curl
|
|
set -euo pipefail
|
|
|
|
cat << EOL
|
|
{ fetchurl }: [
|
|
EOL
|
|
|
|
# enter a temporary directory containing the source code, copied from the derivation
|
|
srcdir="$(mktemp -d)"
|
|
cp -r "$(nix-build -A omnisharp-roslyn.src ../../../..)"/. "$srcdir"
|
|
rm -f "$srcdir"/global.json
|
|
|
|
pushd $srcdir >&2
|
|
|
|
tmpdir="$(mktemp -d -p "$(pwd)")" # must be under source root
|
|
|
|
mapfile -t repos < <(
|
|
xmlstarlet sel -t -v 'configuration/packageSources/add/@value' -n NuGet.Config |
|
|
while IFS= read index
|
|
do
|
|
curl --compressed -fsL "$index" | \
|
|
jq -r '.resources[] | select(."@type" == "PackageBaseAddress/3.0.0")."@id"'
|
|
done
|
|
)
|
|
|
|
dotnet msbuild -t:restore -p:Configuration=Release -p:RestorePackagesPath="$tmpdir" \
|
|
-p:RestoreNoCache=true -p:RestoreForce=true \
|
|
"$srcdir/src/OmniSharp.Stdio.Driver/OmniSharp.Stdio.Driver.csproj" >&2
|
|
|
|
cd "$tmpdir"
|
|
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)
|
|
cat << EOL
|
|
{
|
|
pname = "$package";
|
|
version = "$version";
|
|
src = fetchurl {
|
|
url = "$url";
|
|
sha256 = "$sha256";
|
|
};
|
|
}
|
|
EOL
|
|
done
|
|
cd ..
|
|
done
|
|
cd ..
|
|
|
|
cat << EOL
|
|
]
|
|
EOL
|
|
|
|
popd >&2
|