From 886280e8a9b84e6ddb45726baff904c4aab676f7 Mon Sep 17 00:00:00 2001 From: mdarocha Date: Fri, 15 Jul 2022 16:53:58 +0200 Subject: [PATCH] buildDotnetModule: include sdk-specific packages in nuget source Some packages are defined by the build proccess, and change every time the dotnet-sdk package changes. To avoid having to regenerate every dependant packages dependencies every dotnet update, this moves these packages into the `dotnet-sdk` `passthru` attribute, and includes them every time `buildDotnetModule` is used. --- .../dotnet/build-dotnet-module/default.nix | 24 ++- .../compilers/dotnet/build-dotnet.nix | 6 +- pkgs/development/compilers/dotnet/default.nix | 6 +- .../compilers/dotnet/print-hashes.sh | 141 +++++++++++++++++- .../compilers/dotnet/versions/3.1.nix | 3 + .../compilers/dotnet/versions/5.0.nix | 3 + .../compilers/dotnet/versions/6.0.nix | 93 ++++++++++++ 7 files changed, 266 insertions(+), 10 deletions(-) diff --git a/pkgs/build-support/dotnet/build-dotnet-module/default.nix b/pkgs/build-support/dotnet/build-dotnet-module/default.nix index 339eac16b0b2..22b371a3d9a3 100644 --- a/pkgs/build-support/dotnet/build-dotnet-module/default.nix +++ b/pkgs/build-support/dotnet/build-dotnet-module/default.nix @@ -1,4 +1,4 @@ -{ lib, stdenvNoCC, linkFarmFromDrvs, callPackage, nuget-to-nix, writeScript, makeWrapper, fetchurl, xml2, dotnetCorePackages, dotnetPackages, mkNugetSource, mkNugetDeps, cacert, srcOnly }: +{ lib, stdenvNoCC, linkFarmFromDrvs, callPackage, nuget-to-nix, writeScript, makeWrapper, fetchurl, xml2, dotnetCorePackages, dotnetPackages, mkNugetSource, mkNugetDeps, cacert, srcOnly, symlinkJoin }: { name ? "${args.pname}-${args.version}" , pname ? name @@ -84,12 +84,30 @@ let then nugetDeps else mkNugetDeps { inherit name; nugetDeps = import nugetDeps; }; - nuget-source = mkNugetSource { - name = "${name}-nuget-source"; + # contains the actual package dependencies + _dependenciesSource = mkNugetSource { + name = "${name}-dependencies-source"; description = "A Nuget source with the dependencies for ${name}"; deps = [ _nugetDeps ] ++ lib.optional (localDeps != null) localDeps; }; + # this contains all the nuget packages that are implictly referenced by the dotnet + # build system. having them as separate deps allows us to avoid having to regenerate + # a packages dependencies when the dotnet-sdk version changes + _sdkDeps = mkNugetDeps { + name = "dotnet-sdk-${dotnet-sdk.version}-deps"; + nugetDeps = dotnet-sdk.passthru.packages; + }; + + _sdkSource = mkNugetSource { + name = "dotnet-sdk-${dotnet-sdk.version}-source"; + deps = [ _sdkDeps ]; + }; + + nuget-source = symlinkJoin { + name = "${name}-nuget-source"; + paths = [ _dependenciesSource _sdkSource ]; + }; in stdenvNoCC.mkDerivation (args // { nativeBuildInputs = args.nativeBuildInputs or [] ++ [ dotnetConfigureHook diff --git a/pkgs/development/compilers/dotnet/build-dotnet.nix b/pkgs/development/compilers/dotnet/build-dotnet.nix index cadb6fb31d78..f8cf3d302ec4 100644 --- a/pkgs/development/compilers/dotnet/build-dotnet.nix +++ b/pkgs/development/compilers/dotnet/build-dotnet.nix @@ -1,10 +1,12 @@ { type , version , srcs -, icu #passing icu as an argument, because dotnet 3.1 has troubles with icu71 +, icu # passing icu as an argument, because dotnet 3.1 has troubles with icu71 +, packages ? null }: assert builtins.elem type [ "aspnetcore" "runtime" "sdk" ]; +assert if type == "sdk" then packages != null else true; { lib , stdenv @@ -104,7 +106,7 @@ stdenv.mkDerivation rec { ''; passthru = { - inherit icu; + inherit icu packages; }; meta = with lib; { diff --git a/pkgs/development/compilers/dotnet/default.nix b/pkgs/development/compilers/dotnet/default.nix index 05b5c7fc41c6..e2dba31a6f99 100644 --- a/pkgs/development/compilers/dotnet/default.nix +++ b/pkgs/development/compilers/dotnet/default.nix @@ -15,9 +15,9 @@ let }; ## Files in versions/ are generated automatically by print-hashes.sh ## - dotnet_3_1 = (import ./versions/3.1.nix (buildAttrs // { icu = icu70; })); - dotnet_5_0 = (import ./versions/5.0.nix (buildAttrs // { inherit icu; })); - dotnet_6_0 = (import ./versions/6.0.nix (buildAttrs // { inherit icu; })); + dotnet_3_1 = import ./versions/3.1.nix (buildAttrs // { icu = icu70; }); + dotnet_5_0 = import ./versions/5.0.nix (buildAttrs // { inherit icu; }); + dotnet_6_0 = import ./versions/6.0.nix (buildAttrs // { inherit icu; }); in rec { combinePackages = attrs: callPackage (import ./combine-packages.nix attrs) {}; diff --git a/pkgs/development/compilers/dotnet/print-hashes.sh b/pkgs/development/compilers/dotnet/print-hashes.sh index c68fa767e4f9..285117e14e6d 100755 --- a/pkgs/development/compilers/dotnet/print-hashes.sh +++ b/pkgs/development/compilers/dotnet/print-hashes.sh @@ -1,7 +1,7 @@ #!/usr/bin/env nix-shell -#!nix-shell -i bash -p curl jq +#!nix-shell -I nixpkgs=../../../../. -i bash -p curl jq nix gnused -set -eu +set -euo pipefail release () { local content="$1" @@ -51,6 +51,134 @@ platform_sources () { echo " };" } +sdk_packages () { + local version=$1 + # These packages are implicitly references by the build process, + # based on the specific project configurations (RIDs, used features, etc.) + # They are always referenced with the same version as the SDK used for building. + # Since we lock nuget dependencies, when these packages are included in the generated + # lock files (deps.nix), every update of SDK required those lock files to be + # updated to reflect the new versions of these packages - otherwise, the build + # would fail due to missing dependencies. + # + # Moving them to a separate list stored alongside the SDK package definitions, + # and implictly including them along in buildDotnetModule allows us + # to make updating .NET SDK packages a lot easier - we now just update + # the versions of these packages in one place, and all packages that + # use buildDotnetModule continue building with the new .NET version without changes. + # + # Keep in mind that there is no canonical list of these implicitly + # referenced packages - this list was created based on looking into + # the deps.nix files of existing packages, and which dependencies required + # updating after a SDK version bump. + # + # Due to this, make sure to check if new SDK versions introduce any new packages. + # This should not happend in minor or bugfix updates, but probably happens + # with every new major .NET release. + local pkgs=( \ + "Microsoft.AspNetCore.App.Ref" \ + "Microsoft.AspNetCore.App.Runtime.linux-arm" \ + "Microsoft.AspNetCore.App.Runtime.linux-arm64" \ + "Microsoft.AspNetCore.App.Runtime.linux-musl-arm" \ + "Microsoft.AspNetCore.App.Runtime.linux-musl-arm64" \ + "Microsoft.AspNetCore.App.Runtime.linux-musl-x64" \ + "Microsoft.AspNetCore.App.Runtime.linux-x64" \ + "Microsoft.AspNetCore.App.Runtime.osx-arm64" \ + "Microsoft.AspNetCore.App.Runtime.osx-x64" \ + "Microsoft.AspNetCore.App.Runtime.win-arm" \ + "Microsoft.AspNetCore.App.Runtime.win-arm64" \ + "Microsoft.AspNetCore.App.Runtime.win-x64" \ + "Microsoft.AspNetCore.App.Runtime.win-x86" \ + "Microsoft.NETCore.App.Composite" \ + "Microsoft.NETCore.App.Host.linux-arm" \ + "Microsoft.NETCore.App.Host.linux-arm64" \ + "Microsoft.NETCore.App.Host.linux-musl-arm" \ + "Microsoft.NETCore.App.Host.linux-musl-arm64" \ + "Microsoft.NETCore.App.Host.linux-musl-x64" \ + "Microsoft.NETCore.App.Host.linux-x64" \ + "Microsoft.NETCore.App.Host.osx-arm64" \ + "Microsoft.NETCore.App.Host.osx-x64" \ + "Microsoft.NETCore.App.Host.win-arm" \ + "Microsoft.NETCore.App.Host.win-arm64" \ + "Microsoft.NETCore.App.Host.win-x64" \ + "Microsoft.NETCore.App.Host.win-x86" \ + "Microsoft.NETCore.App.Ref" \ + "Microsoft.NETCore.App.Runtime.linux-arm" \ + "Microsoft.NETCore.App.Runtime.linux-arm64" \ + "Microsoft.NETCore.App.Runtime.linux-musl-arm" \ + "Microsoft.NETCore.App.Runtime.linux-musl-arm64" \ + "Microsoft.NETCore.App.Runtime.linux-musl-x64" \ + "Microsoft.NETCore.App.Runtime.linux-x64" \ + "Microsoft.NETCore.App.Runtime.osx-arm64" \ + "Microsoft.NETCore.App.Runtime.osx-x64" \ + "Microsoft.NETCore.App.Runtime.win-arm" \ + "Microsoft.NETCore.App.Runtime.win-arm64" \ + "Microsoft.NETCore.App.Runtime.win-x64" \ + "Microsoft.NETCore.App.Runtime.win-x86" \ + "Microsoft.NETCore.DotNetAppHost" \ + "Microsoft.NETCore.DotNetHost" \ + "Microsoft.NETCore.DotNetHostPolicy" \ + "Microsoft.NETCore.DotNetHostResolver" \ + "runtime.linux-arm64.Microsoft.NETCore.DotNetAppHost" \ + "runtime.linux-arm64.Microsoft.NETCore.DotNetHost" \ + "runtime.linux-arm64.Microsoft.NETCore.DotNetHostPolicy" \ + "runtime.linux-arm64.Microsoft.NETCore.DotNetHostResolver" \ + "runtime.linux-arm.Microsoft.NETCore.DotNetAppHost" \ + "runtime.linux-arm.Microsoft.NETCore.DotNetHost" \ + "runtime.linux-arm.Microsoft.NETCore.DotNetHostPolicy" \ + "runtime.linux-arm.Microsoft.NETCore.DotNetHostResolver" \ + "runtime.linux-musl-arm64.Microsoft.NETCore.DotNetAppHost" \ + "runtime.linux-musl-arm64.Microsoft.NETCore.DotNetHost" \ + "runtime.linux-musl-arm64.Microsoft.NETCore.DotNetHostPolicy" \ + "runtime.linux-musl-arm64.Microsoft.NETCore.DotNetHostResolver" \ + "runtime.linux-musl-arm.Microsoft.NETCore.DotNetAppHost" \ + "runtime.linux-musl-arm.Microsoft.NETCore.DotNetHost" \ + "runtime.linux-musl-arm.Microsoft.NETCore.DotNetHostPolicy" \ + "runtime.linux-musl-arm.Microsoft.NETCore.DotNetHostResolver" \ + "runtime.linux-musl-x64.Microsoft.NETCore.DotNetAppHost" \ + "runtime.linux-musl-x64.Microsoft.NETCore.DotNetHost" \ + "runtime.linux-musl-x64.Microsoft.NETCore.DotNetHostPolicy" \ + "runtime.linux-musl-x64.Microsoft.NETCore.DotNetHostResolver" \ + "runtime.linux-x64.Microsoft.NETCore.DotNetAppHost" \ + "runtime.linux-x64.Microsoft.NETCore.DotNetHost" \ + "runtime.linux-x64.Microsoft.NETCore.DotNetHostPolicy" \ + "runtime.linux-x64.Microsoft.NETCore.DotNetHostResolver" \ + "runtime.osx-arm64.Microsoft.NETCore.DotNetAppHost" \ + "runtime.osx-arm64.Microsoft.NETCore.DotNetHost" \ + "runtime.osx-arm64.Microsoft.NETCore.DotNetHostPolicy" \ + "runtime.osx-arm64.Microsoft.NETCore.DotNetHostResolver" \ + "runtime.osx-x64.Microsoft.NETCore.DotNetAppHost" \ + "runtime.osx-x64.Microsoft.NETCore.DotNetHost" \ + "runtime.osx-x64.Microsoft.NETCore.DotNetHostPolicy" \ + "runtime.osx-x64.Microsoft.NETCore.DotNetHostResolver" \ + "runtime.win-arm64.Microsoft.NETCore.DotNetAppHost" \ + "runtime.win-arm64.Microsoft.NETCore.DotNetHost" \ + "runtime.win-arm64.Microsoft.NETCore.DotNetHostPolicy" \ + "runtime.win-arm64.Microsoft.NETCore.DotNetHostResolver" \ + "runtime.win-arm.Microsoft.NETCore.DotNetAppHost" \ + "runtime.win-arm.Microsoft.NETCore.DotNetHost" \ + "runtime.win-arm.Microsoft.NETCore.DotNetHostPolicy" \ + "runtime.win-arm.Microsoft.NETCore.DotNetHostResolver" \ + "runtime.win-x64.Microsoft.NETCore.DotNetAppHost" \ + "runtime.win-x64.Microsoft.NETCore.DotNetHost" \ + "runtime.win-x64.Microsoft.NETCore.DotNetHostPolicy" \ + "runtime.win-x64.Microsoft.NETCore.DotNetHostResolver" \ + "runtime.win-x86.Microsoft.NETCore.DotNetAppHost" \ + "runtime.win-x86.Microsoft.NETCore.DotNetHost" \ + "runtime.win-x86.Microsoft.NETCore.DotNetHostPolicy" \ + "runtime.win-x86.Microsoft.NETCore.DotNetHostResolver" \ + ) + + local nuget_url="$(curl -f "https://api.nuget.org/v3/index.json" | jq --raw-output '.resources[] | select(."@type" == "PackageBaseAddress/3.0.0")."@id"')" + + for pkg in "${pkgs[@]}"; do + local url hash + url="${nuget_url}${pkg,,}/${version,,}/${pkg,,}.${version,,}.nupkg" + hash="$(nix-prefetch-url "$url")" + echo " (fetchNuGet { pname = \"${pkg}\"; version = \"${version}\"; sha256 = \"${hash}\"; })" + done +} + main () { pname=$(basename "$0") if [[ ! "$*" =~ ^.*[0-9]{1,}\.[0-9]{1,}.*$ ]]; then @@ -67,12 +195,18 @@ Examples: for sem_version in "$@"; do echo "Generating ./versions/${sem_version}.nix" patch_specified=false + # Check if a patch was specified as an argument. + # If so, generate file for the specific version. + # If only x.y version was provided, get the latest patch + # version of the given x.y version. if [[ "$sem_version" =~ ^[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}$ ]]; then patch_specified=true elif [[ ! "$sem_version" =~ ^[0-9]{1,}\.[0-9]{1,}$ ]]; then continue fi + # Make sure the x.y version is properly passed to .NET release metadata url. + # Then get the json file and parse it to find the latest patch release. major_minor=$(sed 's/^\([0-9]*\.[0-9]*\).*$/\1/' <<< "$sem_version") content=$(curl -sL https://dotnetcli.blob.core.windows.net/dotnet/release-metadata/"$major_minor"/releases.json) major_minor_patch=$([ "$patch_specified" == true ] && echo "$sem_version" || jq -r '."latest-release"' <<< "$content") @@ -109,6 +243,9 @@ Examples: inherit icu; version = \"${sdk_version}\"; $(platform_sources "$sdk_files") + packages = { fetchNuGet }: [ +$(sdk_packages "${runtime_version}") + ]; }; }" > "./versions/${sem_version}.nix" echo "Generated ./versions/${sem_version}.nix" diff --git a/pkgs/development/compilers/dotnet/versions/3.1.nix b/pkgs/development/compilers/dotnet/versions/3.1.nix index 53c78b579d7b..f9a34bbb169c 100644 --- a/pkgs/development/compilers/dotnet/versions/3.1.nix +++ b/pkgs/development/compilers/dotnet/versions/3.1.nix @@ -57,5 +57,8 @@ sha512 = "370cba4685e07d1cdb5d7f9b754812b237802ace679c9b9985c6e5c4dc09f500580f1413679a288615079bd155b68b362adb00151b2b8f5ca7c3718ab9e16194"; }; }; + packages = { fetchNuGet }: [ + + ]; }; } diff --git a/pkgs/development/compilers/dotnet/versions/5.0.nix b/pkgs/development/compilers/dotnet/versions/5.0.nix index 9e5980569c82..4a792f59d016 100644 --- a/pkgs/development/compilers/dotnet/versions/5.0.nix +++ b/pkgs/development/compilers/dotnet/versions/5.0.nix @@ -57,5 +57,8 @@ sha512 = "70beea069db182cca211cf04d7a80f3d6a3987d76cbd2bb60590ee76b93a4041b1b86ad91057cddbbaddd501c72327c1bc0a5fec630f38063f84bd60ba2b4792"; }; }; + packages = { fetchNuGet }: [ + + ]; }; } diff --git a/pkgs/development/compilers/dotnet/versions/6.0.nix b/pkgs/development/compilers/dotnet/versions/6.0.nix index 6d156c380006..00e1ddedd8e5 100644 --- a/pkgs/development/compilers/dotnet/versions/6.0.nix +++ b/pkgs/development/compilers/dotnet/versions/6.0.nix @@ -69,5 +69,98 @@ sha512 = "59caea897a56b785245dcd3a6082247aeb879c39ecfab16db60e9dc3db447ca4e3ebe68e992c0551af886cd81f6f0088cb1433f1be6df865afa357f90f37ccf6"; }; }; + packages = { fetchNuGet }: [ + (fetchNuGet { pname = "Microsoft.AspNetCore.App.Ref"; version = "6.0.7"; sha256 = "028dlrbgs6d9gdvkl48lksm9gagsch5ih974l5wwfpdgx693v4wl"; }) + (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.linux-arm"; version = "6.0.7"; sha256 = "1y5l528qp08bghm7qdk223g9ki6mv1hhmixhw5zfdzscp0wf11dh"; }) + (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.linux-arm64"; version = "6.0.7"; sha256 = "013xk8m2bkh99s0l5wz8k01pw9r7kwlywsngqciwvqk44vr265ga"; }) + (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.linux-musl-arm"; version = "6.0.7"; sha256 = "0pl8lr2chnscrbjckqw2ydck15fgxffsmkm7sqbcg9x9pwc0mkap"; }) + (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.linux-musl-arm64"; version = "6.0.7"; sha256 = "140333iig3wc0iv76gk97cd6bqsjyhmhkf0myd04m9ds5dcwpxks"; }) + (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.linux-musl-x64"; version = "6.0.7"; sha256 = "1qfwhpvj9d3xp53y8mhhsamvnihy0czjhj63zxzc3fa21jpiscyy"; }) + (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.linux-x64"; version = "6.0.7"; sha256 = "03i5yqhklgm4p536a3vxwgkbyivwschgvn639xwx846g2ghdqnf2"; }) + (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.osx-arm64"; version = "6.0.7"; sha256 = "01l2wr1lvfa63jn9j3ydgys6j0hcs30w880k0dd50q1jkm24cq4m"; }) + (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.osx-x64"; version = "6.0.7"; sha256 = "1kzcw6gxd7ky32zpiwvmzgd5yy6vyjk8p600jwaagz63z36zaa3k"; }) + (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.win-arm"; version = "6.0.7"; sha256 = "1dkc3px04mpzd8zlkxcld63kqlncd8fs1dm3qdfg83sx7nzzf9xl"; }) + (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.win-arm64"; version = "6.0.7"; sha256 = "1hy3wcy7dsw4pl8bcqy84i8hgxk6b1cm30chj2gjahx5yy1gwzr0"; }) + (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.win-x64"; version = "6.0.7"; sha256 = "07h9b4fqna61j206hk5jrf9mrffg63ii2icn9h6x19h4pr9bf340"; }) + (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.win-x86"; version = "6.0.7"; sha256 = "1mjjb8a1g1fsw1qbhixc5hjwnkn35551pmfdl9l702zhd9hwf0s9"; }) + (fetchNuGet { pname = "Microsoft.NETCore.App.Composite"; version = "6.0.7"; sha256 = "0l6765cbdmdh71raq5snxd56w71clfbm4iwi93y3n67skpjkn6ml"; }) + (fetchNuGet { pname = "Microsoft.NETCore.App.Host.linux-arm"; version = "6.0.7"; sha256 = "1h8ziaf6qdsm14h1cx7573r0nsr3cwv7sczg9j9lqaizwxmqg8dq"; }) + (fetchNuGet { pname = "Microsoft.NETCore.App.Host.linux-arm64"; version = "6.0.7"; sha256 = "0354iizqhwhnxcgrn5p8gqv50dnyj5vdyrikwqhv6yd178ardw00"; }) + (fetchNuGet { pname = "Microsoft.NETCore.App.Host.linux-musl-arm"; version = "6.0.7"; sha256 = "17bsbx0hdzkl3axxfd4xav7q455mkw1wvr3j1r0q0z2gic0x3p23"; }) + (fetchNuGet { pname = "Microsoft.NETCore.App.Host.linux-musl-arm64"; version = "6.0.7"; sha256 = "0lky1ihhlwjsdb0pb77vx663yji53pnkl9ij3z58pxdknldf0ayb"; }) + (fetchNuGet { pname = "Microsoft.NETCore.App.Host.linux-musl-x64"; version = "6.0.7"; sha256 = "1gswphp5w6hbz60bymksf9i6iwlqg5hx8w2l3x83cfpw9q0pw5kd"; }) + (fetchNuGet { pname = "Microsoft.NETCore.App.Host.linux-x64"; version = "6.0.7"; sha256 = "1i19iqz89fh54k3126daqrdwn0sxp00ziw0d2hd8z6dkf49vbvmx"; }) + (fetchNuGet { pname = "Microsoft.NETCore.App.Host.osx-arm64"; version = "6.0.7"; sha256 = "059q3gnvhg7ywbdrvnra8zrcwxa5si50fakh71dg0rnwnivpngj9"; }) + (fetchNuGet { pname = "Microsoft.NETCore.App.Host.osx-x64"; version = "6.0.7"; sha256 = "0q61220ii4biz02w37jqi84cnzgspzrrfqpg2g3mkhamb0lgq3c6"; }) + (fetchNuGet { pname = "Microsoft.NETCore.App.Host.win-arm"; version = "6.0.7"; sha256 = "0aswrsx45f5ql94mbz6qgj4rcd585mvsmg8lbm9yzqavnkxw37q9"; }) + (fetchNuGet { pname = "Microsoft.NETCore.App.Host.win-arm64"; version = "6.0.7"; sha256 = "1ax2cyk9zfav69lr6pr223gm4ydqdwjb13pc2mxzb7j9x2z4dj8q"; }) + (fetchNuGet { pname = "Microsoft.NETCore.App.Host.win-x64"; version = "6.0.7"; sha256 = "0vqng4wqlkl9d3qphh0zzd1k2f53flvwk3k847iaxxdijvlr0b65"; }) + (fetchNuGet { pname = "Microsoft.NETCore.App.Host.win-x86"; version = "6.0.7"; sha256 = "0xmkfsvzcyk5akaz3k220xx6xli2kimzaqcnfpmyh9l66zkykrym"; }) + (fetchNuGet { pname = "Microsoft.NETCore.App.Ref"; version = "6.0.7"; sha256 = "0kgbxc6czq2sz1i7cjlv58jsisvc936m1zzj5f9qfv9c4aka2hig"; }) + (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.linux-arm"; version = "6.0.7"; sha256 = "0fm8p7dpq12pv9qar8h7s1rz1dcyki7dh2424xrr49p8d58gmdsf"; }) + (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.linux-arm64"; version = "6.0.7"; sha256 = "1kddakhs8bhrj14qmah78b164ia9277hjdvz8cd61b17f93iz7kd"; }) + (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.linux-musl-arm"; version = "6.0.7"; sha256 = "0lzp9fc2h4h46ycy1dpbkqdp8qxm7xmfphfc3lgxr6jj9j123qac"; }) + (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.linux-musl-arm64"; version = "6.0.7"; sha256 = "1hlks5p0i05xixarma211v09rr1n6r5qzmzjy0ca2gvgf9lv5xg1"; }) + (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.linux-musl-x64"; version = "6.0.7"; sha256 = "04ryakvm54y5a0652hk77f8my3xq7faqn2v50i0w014njq1jyd5a"; }) + (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.linux-x64"; version = "6.0.7"; sha256 = "0pci9m6phhdvmk698dm7mzgxlmzf7wbk992s705iqzahdl2ra3sr"; }) + (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.osx-arm64"; version = "6.0.7"; sha256 = "0ij8vixb7ymwxa8yxrhizqjkxbh8hkfg47bk9fmkaw9ab94jhj93"; }) + (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.osx-x64"; version = "6.0.7"; sha256 = "0xd2vkrav41fcf86p7ddjqiarjchsl5wy1haxiw7nr0bq3hzmirv"; }) + (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.win-arm"; version = "6.0.7"; sha256 = "0ks2mslr021rwh3k5x7cd28494q16sjr5fw3wx5ba4bagf56wyyr"; }) + (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.win-arm64"; version = "6.0.7"; sha256 = "1r1alh763xc40y3iqy2iwb91d273sf1hvgqhvwccyck30m9mqisl"; }) + (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.win-x64"; version = "6.0.7"; sha256 = "00ihv8c7h9fkyldwvkqf9wpzi0rr9wrhg7fai374ipmsj9kn6xl0"; }) + (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.win-x86"; version = "6.0.7"; sha256 = "1jz71dxps71hb7qay2x93p34bvni7a7dgxk137h162ac4qaa5dn7"; }) + (fetchNuGet { pname = "Microsoft.NETCore.DotNetAppHost"; version = "6.0.7"; sha256 = "0a2vpn7j4h9phqv7azc9lczrkybln4ddf458j49dkjv3ghrav81z"; }) + (fetchNuGet { pname = "Microsoft.NETCore.DotNetHost"; version = "6.0.7"; sha256 = "0j1if6nfi3sn1s8jdp08ks8v8526h275as61zh57kwmss5iczl4i"; }) + (fetchNuGet { pname = "Microsoft.NETCore.DotNetHostPolicy"; version = "6.0.7"; sha256 = "19cjlpmg0r6f2b2q1jllivlmjkv47bzl32l5xpq3ppn2l6qxs35x"; }) + (fetchNuGet { pname = "Microsoft.NETCore.DotNetHostResolver"; version = "6.0.7"; sha256 = "11nayi9ai5qd9l944rap6fskzaw3nvmv8wmgf564cv4diphy8995"; }) + (fetchNuGet { pname = "runtime.linux-arm64.Microsoft.NETCore.DotNetAppHost"; version = "6.0.7"; sha256 = "1kdv31lz32gywpffa3qiyrmrvqxgxk0zggr0a2235x33zalw9l27"; }) + (fetchNuGet { pname = "runtime.linux-arm64.Microsoft.NETCore.DotNetHost"; version = "6.0.7"; sha256 = "0wi08fp0rxif89g0bmyg0ksk5f02xg7hyahignhqh26qpc7d608s"; }) + (fetchNuGet { pname = "runtime.linux-arm64.Microsoft.NETCore.DotNetHostPolicy"; version = "6.0.7"; sha256 = "0ns8lgqby70cnbij3lprgwzsgqzlv4db98qmcdvlnshv6lqqfd86"; }) + (fetchNuGet { pname = "runtime.linux-arm64.Microsoft.NETCore.DotNetHostResolver"; version = "6.0.7"; sha256 = "0x1sjdzvqmvmgg6dsn427r5i3776cphhzpmfjlj4sfilsfpygihp"; }) + (fetchNuGet { pname = "runtime.linux-arm.Microsoft.NETCore.DotNetAppHost"; version = "6.0.7"; sha256 = "12f24lnzb9m3dl06qklbc08577mf5vc9zibxabdidk83h7k7p0qc"; }) + (fetchNuGet { pname = "runtime.linux-arm.Microsoft.NETCore.DotNetHost"; version = "6.0.7"; sha256 = "0garwnx2j86psq11pcd1z8vvnmhyn3x0fss0c4rza9c3bivh70wz"; }) + (fetchNuGet { pname = "runtime.linux-arm.Microsoft.NETCore.DotNetHostPolicy"; version = "6.0.7"; sha256 = "18mgsgmdvm38pxy5jr1wglgz0a1fk5gm8awscmy5y5dcx7qghy3s"; }) + (fetchNuGet { pname = "runtime.linux-arm.Microsoft.NETCore.DotNetHostResolver"; version = "6.0.7"; sha256 = "12ksjis47q9dnnibx6snsnbgz07g1a6fsyrmir39b8m1cq5bbg0r"; }) + (fetchNuGet { pname = "runtime.linux-musl-arm64.Microsoft.NETCore.DotNetAppHost"; version = "6.0.7"; sha256 = "1midq986vs6qwz0b34wmrbv5yk4clqmjhnqgkmfd8bxxflzglg9w"; }) + (fetchNuGet { pname = "runtime.linux-musl-arm64.Microsoft.NETCore.DotNetHost"; version = "6.0.7"; sha256 = "0ba37pr3x44n2mhi5kld0cvh2w81fvgwdfl6g1llr1a9ncl8dbq4"; }) + (fetchNuGet { pname = "runtime.linux-musl-arm64.Microsoft.NETCore.DotNetHostPolicy"; version = "6.0.7"; sha256 = "01pj41baqhkzk1nbqpy6khwakjrq5741wnnb1ny0j0i4mny7aa3i"; }) + (fetchNuGet { pname = "runtime.linux-musl-arm64.Microsoft.NETCore.DotNetHostResolver"; version = "6.0.7"; sha256 = "1g0zmc71rf1c2gfwm5zn7qdhisr726rf1fqs9n9nisz7pj0c719k"; }) + (fetchNuGet { pname = "runtime.linux-musl-arm.Microsoft.NETCore.DotNetAppHost"; version = "6.0.7"; sha256 = "0jr9ig4hga3iyxfwihlswpdfxlln66b16gfmb70qizn3jigwwvkh"; }) + (fetchNuGet { pname = "runtime.linux-musl-arm.Microsoft.NETCore.DotNetHost"; version = "6.0.7"; sha256 = "0wmm9yv20h7wp10xrca6hmv80isjzrw793zkwi591qah99rm7q44"; }) + (fetchNuGet { pname = "runtime.linux-musl-arm.Microsoft.NETCore.DotNetHostPolicy"; version = "6.0.7"; sha256 = "0dp94sm7gpzyw882141salqrpk54fp7fgmaqmr5xir2q6r7wxmaf"; }) + (fetchNuGet { pname = "runtime.linux-musl-arm.Microsoft.NETCore.DotNetHostResolver"; version = "6.0.7"; sha256 = "05w0wkin5ydhrgqissdsdzxz39c4fh7msx2h5b50m84ixalqrkgf"; }) + (fetchNuGet { pname = "runtime.linux-musl-x64.Microsoft.NETCore.DotNetAppHost"; version = "6.0.7"; sha256 = "17anarmiq2n1damyg5yjnm22z4v6fkv30dri6nz1987r0fdn2waf"; }) + (fetchNuGet { pname = "runtime.linux-musl-x64.Microsoft.NETCore.DotNetHost"; version = "6.0.7"; sha256 = "1i9z2xh5r5bfncfd2h469zi46wykkikmbhkf9sys4jpfng78krdn"; }) + (fetchNuGet { pname = "runtime.linux-musl-x64.Microsoft.NETCore.DotNetHostPolicy"; version = "6.0.7"; sha256 = "0xm0l5iil6zi6cdnhnnlqzn4bw88gyabajz4wxrklcj7kz8mgm81"; }) + (fetchNuGet { pname = "runtime.linux-musl-x64.Microsoft.NETCore.DotNetHostResolver"; version = "6.0.7"; sha256 = "03bjmb5ad8s7vj5cpbijmpr21z82d565wv0mg0h5iqlk02v5jw9g"; }) + (fetchNuGet { pname = "runtime.linux-x64.Microsoft.NETCore.DotNetAppHost"; version = "6.0.7"; sha256 = "1wqah3lc8q949w7gi94jmp2hy6ld4s1jxbmm0zj3xjqrq0gmqzqw"; }) + (fetchNuGet { pname = "runtime.linux-x64.Microsoft.NETCore.DotNetHost"; version = "6.0.7"; sha256 = "0vpk34xr3i9bvr7cgl22ss3gj2gmsg6drjv9mj1hksnd7fzb9m9r"; }) + (fetchNuGet { pname = "runtime.linux-x64.Microsoft.NETCore.DotNetHostPolicy"; version = "6.0.7"; sha256 = "08swlx9khbyc34lxi59dgkc3fhbap2abm565dnpizmg4jqn7zz7s"; }) + (fetchNuGet { pname = "runtime.linux-x64.Microsoft.NETCore.DotNetHostResolver"; version = "6.0.7"; sha256 = "1lkxnbfpf3f8yj0srq8iavy12i14r0nhcpjxff7ypnk2z7xyc098"; }) + (fetchNuGet { pname = "runtime.osx-arm64.Microsoft.NETCore.DotNetAppHost"; version = "6.0.7"; sha256 = "1is814drvhf81xnq04npr5x56f8mxnr92vmc8bv66d8320yp8z1k"; }) + (fetchNuGet { pname = "runtime.osx-arm64.Microsoft.NETCore.DotNetHost"; version = "6.0.7"; sha256 = "0qqzk3r0mlldfpzm40gzrd0q6danfdd4h6l9fmjwwpmadj18dsg3"; }) + (fetchNuGet { pname = "runtime.osx-arm64.Microsoft.NETCore.DotNetHostPolicy"; version = "6.0.7"; sha256 = "1x7iqnksx4n4sb2ms5ibygkhfcnxbvkvamkx2s0rrbkghy25zndh"; }) + (fetchNuGet { pname = "runtime.osx-arm64.Microsoft.NETCore.DotNetHostResolver"; version = "6.0.7"; sha256 = "04m2asmr63vxapgga4gadbrp18349sxzyn7ryn74lg6sqzdpvdr1"; }) + (fetchNuGet { pname = "runtime.osx-x64.Microsoft.NETCore.DotNetAppHost"; version = "6.0.7"; sha256 = "0ck53135666f917lib6ahb32nxk78r65755v94hhv4g2xdbk813r"; }) + (fetchNuGet { pname = "runtime.osx-x64.Microsoft.NETCore.DotNetHost"; version = "6.0.7"; sha256 = "0mig9c1xn6vdj1xdf20fvy9scw270l52rr2kwfjgppf4px661p77"; }) + (fetchNuGet { pname = "runtime.osx-x64.Microsoft.NETCore.DotNetHostPolicy"; version = "6.0.7"; sha256 = "0dwa93brfc4mpjrjrz10jm3ina6kv1v75hdny00m5jfla366k6gj"; }) + (fetchNuGet { pname = "runtime.osx-x64.Microsoft.NETCore.DotNetHostResolver"; version = "6.0.7"; sha256 = "05svx1hz2n9qv6hj4grk0z7rkpw5v3s9059xpkjsb0h0f0y4zx6g"; }) + (fetchNuGet { pname = "runtime.win-arm64.Microsoft.NETCore.DotNetAppHost"; version = "6.0.7"; sha256 = "0adyh8w348fw9pilj4giiriv4dxxlqgjvrbrcbkc6xdbn9085lav"; }) + (fetchNuGet { pname = "runtime.win-arm64.Microsoft.NETCore.DotNetHost"; version = "6.0.7"; sha256 = "10nq0apr0askhq8z4kmna8gzqiazw4x94nz1c81qm7why0kyv0ws"; }) + (fetchNuGet { pname = "runtime.win-arm64.Microsoft.NETCore.DotNetHostPolicy"; version = "6.0.7"; sha256 = "17fxrkxf82jyihp9qkfab6dz8kkz6y437hi123mwyh274qfvcj61"; }) + (fetchNuGet { pname = "runtime.win-arm64.Microsoft.NETCore.DotNetHostResolver"; version = "6.0.7"; sha256 = "0x6h4q5v153z5ym1rjzxgxrm3x87jqpiz52bmsgzv5vb1nkbhcnh"; }) + (fetchNuGet { pname = "runtime.win-arm.Microsoft.NETCore.DotNetAppHost"; version = "6.0.7"; sha256 = "09b28pkjxxk1qrij83vjmf16zb8vpipdawzzkk09fw27rspbcckp"; }) + (fetchNuGet { pname = "runtime.win-arm.Microsoft.NETCore.DotNetHost"; version = "6.0.7"; sha256 = "1r8plgiddlgarij4v60d0dzv5j1jqmnjhwhkaggfkzysgp16yvqi"; }) + (fetchNuGet { pname = "runtime.win-arm.Microsoft.NETCore.DotNetHostPolicy"; version = "6.0.7"; sha256 = "0qzal5v635206c0m4bcm5x29i7ff4y4yg705wv3yqb4b653lxcsy"; }) + (fetchNuGet { pname = "runtime.win-arm.Microsoft.NETCore.DotNetHostResolver"; version = "6.0.7"; sha256 = "0k9g1n6ansv157jmsfczl2kasnsyvll8ka0yvhzgvwx7rxi7f006"; }) + (fetchNuGet { pname = "runtime.win-x64.Microsoft.NETCore.DotNetAppHost"; version = "6.0.7"; sha256 = "0ccahvy9787vb990mn0r2aj3yl8ykzs9wzvh3jk5y7x27zhpsd28"; }) + (fetchNuGet { pname = "runtime.win-x64.Microsoft.NETCore.DotNetHost"; version = "6.0.7"; sha256 = "0vhisvl2w6dyjmgdrkyhccjhnqlnx24drb1vypwhr6xdmx9r6mv1"; }) + (fetchNuGet { pname = "runtime.win-x64.Microsoft.NETCore.DotNetHostPolicy"; version = "6.0.7"; sha256 = "1zv9r7yhhbqa8vpyiw4an2gdai1icp7dshq228lnadgll3slzaj2"; }) + (fetchNuGet { pname = "runtime.win-x64.Microsoft.NETCore.DotNetHostResolver"; version = "6.0.7"; sha256 = "02ylic2qyy6ayg1d76axhh61jsr64fi0svsnfj2s34iiifq8faah"; }) + (fetchNuGet { pname = "runtime.win-x86.Microsoft.NETCore.DotNetAppHost"; version = "6.0.7"; sha256 = "0gfkrvg1c6zq8dzp8pzjv3cbpy79z0gbym340cq8z235z7a2sijm"; }) + (fetchNuGet { pname = "runtime.win-x86.Microsoft.NETCore.DotNetHost"; version = "6.0.7"; sha256 = "1f0gbq6j5vhqznjgffaxg4pibl33l9k7zldn43wrzdr8ma5c6ily"; }) + (fetchNuGet { pname = "runtime.win-x86.Microsoft.NETCore.DotNetHostPolicy"; version = "6.0.7"; sha256 = "0a00frccimbza86kjrf1397bbsvsiggry1ihb4c4rk4d8qc2maq9"; }) + (fetchNuGet { pname = "runtime.win-x86.Microsoft.NETCore.DotNetHostResolver"; version = "6.0.7"; sha256 = "0ppvrdwh32xr7rxlhc59lilj220cayk9f44p0qqygp3z20l1gzkl"; }) + ]; }; }