using nuget package from private feed
This commit is contained in:
@@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Groomgy.HelloWorld" Version="1.16.1" />
|
<PackageReference Include="Groomgy.HelloWorld" Version="1.16.1" />
|
||||||
|
<PackageReference Include="Humanizer.Core" Version="2.8.26" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -8,5 +8,11 @@
|
|||||||
"pname": "Groomgy.HelloWorldDependencyLibrary",
|
"pname": "Groomgy.HelloWorldDependencyLibrary",
|
||||||
"version": "1.16.1",
|
"version": "1.16.1",
|
||||||
"hash": "sha256-bReNmXls62mIi/13iOq55RutIfyddDDVpyqbIkSBBno="
|
"hash": "sha256-bReNmXls62mIi/13iOq55RutIfyddDDVpyqbIkSBBno="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Humanizer.Core",
|
||||||
|
"version": "2.8.26",
|
||||||
|
"hash": "sha256-VVtCdloK3vz9bPq0hqHaGVcWu3IGbtJqwJjo6kVoHe0=",
|
||||||
|
"url": "https://pkgs.dev.azure.com/unicornde/_packaging/ed5a6385-7bf5-49ae-8472-0d53404feafe/nuget/v3/flat2/humanizer.core/2.8.26/humanizer.core.2.8.26.nupkg"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -64,6 +64,7 @@
|
|||||||
packages = [
|
packages = [
|
||||||
just
|
just
|
||||||
nuget-to-json
|
nuget-to-json
|
||||||
|
azure-artifacts-credprovider
|
||||||
(
|
(
|
||||||
with dotnetCorePackages;
|
with dotnetCorePackages;
|
||||||
combinePackages [
|
combinePackages [
|
||||||
|
|||||||
6
justfile
6
justfile
@@ -1,4 +1,8 @@
|
|||||||
|
setup-nuget nuget-pat:
|
||||||
|
export NUGET_PAT="{{nuget-pat}}"
|
||||||
|
wget -qO- https://aka.ms/install-artifacts-credprovider.sh | bash
|
||||||
|
|
||||||
run project:
|
run project:
|
||||||
dotnet restore --packages out
|
dotnet restore --packages out
|
||||||
nuget-to-json out > deps.json
|
./nuget-to-json out > deps.json
|
||||||
nix run .#{{project}}
|
nix run .#{{project}}
|
||||||
|
|||||||
122
nuget-to-json
Executable file
122
nuget-to-json
Executable file
@@ -0,0 +1,122 @@
|
|||||||
|
#!/nix/store/ciarnmsx8lvsrmdbjddpmx0pqjrm8imb-bash-5.3p3/bin/bash
|
||||||
|
# shellcheck shell=bash
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
shopt -s nullglob
|
||||||
|
|
||||||
|
export SSL_CERT_FILE=/nix/store/6jsh5hyyli9ddac6dqxx07a68jzllkqb-nss-cacert-3.115/etc/ssl/certs/ca-bundle.crt
|
||||||
|
export PATH="/nix/store/rqn7v98b071xg19iyrz3qzlby8nwmqh3-nix-2.31.2/bin:/nix/store/xs8scz9w9jp4hpqycx3n3bah5y07ymgj-coreutils-9.8/bin:/nix/store/frzsv47z1mcyrp941zab08mx6kardizi-jq-1.8.1-bin/bin:/nix/store/69j5n7qzjlphqpgsx4bbbp6zcklm7cih-xmlstarlet-1.6.1/bin:/nix/store/xvh4bi0cc2cw18lpn6ax9m4zwnn1s9lj-curl-8.16.0-bin/bin:/nix/store/22r4s6lqhl43jkazn51f3c18qwk894g4-gnugrep-3.12/bin:/nix/store/8c4l9cqqj7pixqlmljx5d495pfpw8pys-gawk-5.3.2/bin:$PATH"
|
||||||
|
# used for glob ordering of package names
|
||||||
|
export LC_ALL=C
|
||||||
|
|
||||||
|
if [ $# -eq 0 ]; then
|
||||||
|
>&2 echo "Usage: $0 <packages directory> [path to a file with a list of excluded packages] > deps.json"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
pkgs=$1
|
||||||
|
tmp=$(realpath "$(mktemp -td nuget-to-json.XXXXXX)")
|
||||||
|
trap 'rm -r "$tmp"' EXIT
|
||||||
|
|
||||||
|
excluded_list=$(realpath "${2:-/dev/null}")
|
||||||
|
|
||||||
|
export DOTNET_NOLOGO=1
|
||||||
|
export DOTNET_CLI_TELEMETRY_OPTOUT=1
|
||||||
|
|
||||||
|
mapfile -t sources < <(dotnet nuget list source --format short | awk '/^E / { print $2 }')
|
||||||
|
wait "$!"
|
||||||
|
|
||||||
|
declare -a remote_sources
|
||||||
|
declare -A base_addresses
|
||||||
|
|
||||||
|
for index in "${sources[@]}"; do
|
||||||
|
if [[ -d "$index" ]]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
remote_sources+=("$index")
|
||||||
|
|
||||||
|
echo "fetching index: $index" >&2
|
||||||
|
|
||||||
|
index_response=$(
|
||||||
|
if [[ "$index" =~ .*dev\.azure\.com.* ]] && [ -n "$NUGET_PAT" ]; then
|
||||||
|
curl --anyauth -u "user:$NUGET_PAT" --netrc-optional --compressed -fsSL "$index"
|
||||||
|
else
|
||||||
|
curl --netrc-optional --compressed -fsSL "$index"
|
||||||
|
fi
|
||||||
|
)
|
||||||
|
base_address=$(
|
||||||
|
echo "$index_response" | jq -r '.resources[] | select(."@type" == "PackageBaseAddress/3.0.0")."@id"'
|
||||||
|
)
|
||||||
|
if [[ ! "$base_address" == */ ]]; then
|
||||||
|
base_address="$base_address/"
|
||||||
|
fi
|
||||||
|
base_addresses[$index]="$base_address"
|
||||||
|
done
|
||||||
|
|
||||||
|
(
|
||||||
|
echo '['
|
||||||
|
|
||||||
|
first=true
|
||||||
|
cd "$pkgs"
|
||||||
|
for package in *; do
|
||||||
|
[[ -d "$package" ]] || continue
|
||||||
|
cd "$package"
|
||||||
|
for version in *; do
|
||||||
|
echo "fetching package: $package $version" >&2
|
||||||
|
|
||||||
|
id=$(xmlstarlet sel -t -v /_:package/_:metadata/_:id "$version"/*.nuspec)
|
||||||
|
|
||||||
|
if grep -qxF "$id.$version.nupkg" "$excluded_list"; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# packages in the nix store should have an empty metadata file
|
||||||
|
# packages installed with 'dotnet tool' may be missing 'source'
|
||||||
|
used_source="$(jq -r 'if has("source") then .source elif has("contentHash") then "__unknown" else "" end' "$version"/.nupkg.metadata)"
|
||||||
|
echo "used source: $used_source" >&2
|
||||||
|
|
||||||
|
found=false
|
||||||
|
|
||||||
|
if [[ -z "$used_source" || -d "$used_source" ]]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
for source in "${remote_sources[@]}"; do
|
||||||
|
echo "trying source: $source" >&2
|
||||||
|
|
||||||
|
url="${base_addresses[$source]}$package/$version/$package.$version.nupkg"
|
||||||
|
echo "full url: $url" >&2
|
||||||
|
|
||||||
|
if [[ "$source" == "$used_source" ]]; then
|
||||||
|
hash="$(nix-hash --type sha256 --flat --sri "$version/$package.$version".nupkg)"
|
||||||
|
echo "hash: $hash" >&2
|
||||||
|
found=true
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ $found = false ]]; then
|
||||||
|
echo "couldn't find $package $version" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $first = false ]]; then
|
||||||
|
echo ' , {'
|
||||||
|
else
|
||||||
|
echo ' {'
|
||||||
|
fi
|
||||||
|
echo " \"pname\": \"$id\""
|
||||||
|
echo " , \"version\": \"$version\""
|
||||||
|
echo " , \"hash\": \"$hash\""
|
||||||
|
if [[ "$source" != https://api.nuget.org/v3/index.json ]]; then
|
||||||
|
echo " , \"url\": \"$url\""
|
||||||
|
fi
|
||||||
|
echo ' }'
|
||||||
|
first=false
|
||||||
|
done
|
||||||
|
cd ..
|
||||||
|
done
|
||||||
|
|
||||||
|
echo ']'
|
||||||
|
) | jq .
|
||||||
6
nuget.config
Normal file
6
nuget.config
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<packageSources>
|
||||||
|
<add key="unicornde" value="https://pkgs.dev.azure.com/unicornde/_packaging/unicornde/nuget/v3/index.json" />
|
||||||
|
</packageSources>
|
||||||
|
</configuration>
|
||||||
Reference in New Issue
Block a user