dotnet: improve package fallbacks (#480456)
This commit is contained in:
@@ -309,11 +309,6 @@
|
||||
"version": "5.0.0",
|
||||
"hash": "sha256-THQ8Z7DAoMDEqAS7feAmAt82NvU7H90Y+jYwC7NwL+0="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.AspNetCore.App.Internal.Assets",
|
||||
"version": "10.0.2",
|
||||
"hash": "sha256-nh+JRXHTI01RUDFeEw4yep4iMxci5R7zKyRX2Tkd/mc="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.AspNetCore.Authentication.JwtBearer",
|
||||
"version": "10.0.1",
|
||||
|
||||
@@ -100,71 +100,77 @@ let
|
||||
|
||||
# combine an SDK with the runtime/packages from a base SDK
|
||||
combineSdk =
|
||||
base: overlay:
|
||||
if (overlay.runtime.version != base.runtime.version) then
|
||||
throw "combineSdk: unable to combine ${overlay.name} with ${base.name} because runtime versions don't match (${overlay.runtime.version} != ${base.runtime.version})"
|
||||
base: fallback:
|
||||
if (fallback.runtime.version != base.runtime.version) then
|
||||
throw "combineSdk: unable to combine ${fallback.name} with ${base.name} because runtime versions don't match (${fallback.runtime.version} != ${base.runtime.version})"
|
||||
else if base.meta.broken then
|
||||
fallback
|
||||
else
|
||||
pkgs.callPackage ./wrapper.nix { } "sdk" (
|
||||
(pkgs.combinePackages [
|
||||
base.runtime
|
||||
base.aspnetcore
|
||||
(overlay.overrideAttrs (old: {
|
||||
passthru = old.passthru // {
|
||||
inherit (base)
|
||||
packages
|
||||
targetPackages
|
||||
;
|
||||
};
|
||||
}))
|
||||
]).unwrapped.overrideAttrs
|
||||
(old: {
|
||||
name = overlay.unwrapped.name;
|
||||
# resolve symlinks so DOTNET_ROOT is self-contained
|
||||
postBuild = ''
|
||||
mv "$out"/share/dotnet{,~}
|
||||
cp -Lr "$out"/share/dotnet{~,}
|
||||
rm -r "$out"/share/dotnet~
|
||||
''
|
||||
+ old.postBuild;
|
||||
passthru =
|
||||
old.passthru
|
||||
// (
|
||||
let
|
||||
# if only overlay has a working ILCompiler, use it
|
||||
hostRid = pkgs.systemToDotnetRid base.stdenv.hostPlatform.system;
|
||||
hasILCompiler = base.hasILCompiler || overlay.hasILCompiler;
|
||||
packageName = "runtime.${hostRid}.Microsoft.DotNet.ILCompiler";
|
||||
packages =
|
||||
if !base.hasILCompiler && overlay.hasILCompiler then
|
||||
lib.filter (x: x.pname != packageName) base.packages
|
||||
++ lib.filter (x: x.pname == packageName) overlay.packages
|
||||
else
|
||||
base.packages;
|
||||
in
|
||||
{
|
||||
inherit hasILCompiler packages;
|
||||
let
|
||||
withBaseRuntimes =
|
||||
if fallback.version == base.version then
|
||||
base.unwrapped
|
||||
else
|
||||
(pkgs.combinePackages [
|
||||
base.runtime
|
||||
base.aspnetcore
|
||||
fallback
|
||||
]).unwrapped.overrideAttrs
|
||||
(old: {
|
||||
name = fallback.unwrapped.name;
|
||||
# resolve symlinks so DOTNET_ROOT is self-contained
|
||||
postBuild = ''
|
||||
mv "$out"/share/dotnet{,~}
|
||||
cp -Lr "$out"/share/dotnet{~,}
|
||||
rm -r "$out"/share/dotnet~
|
||||
''
|
||||
+ old.postBuild;
|
||||
passthru = old.passthru // {
|
||||
inherit (base)
|
||||
targetPackages
|
||||
runtime
|
||||
aspnetcore
|
||||
;
|
||||
inherit (overlay.unwrapped)
|
||||
inherit (fallback.unwrapped)
|
||||
pname
|
||||
version
|
||||
;
|
||||
}
|
||||
);
|
||||
})
|
||||
);
|
||||
};
|
||||
});
|
||||
|
||||
withFallbackPackages = withBaseRuntimes.overrideAttrs (old: {
|
||||
passthru =
|
||||
old.passthru
|
||||
// (
|
||||
let
|
||||
hostRid = pkgs.systemToDotnetRid base.stdenv.hostPlatform.system;
|
||||
hasILCompiler = base.hasILCompiler || fallback.hasILCompiler;
|
||||
packageName = "runtime.${hostRid}.Microsoft.DotNet.ILCompiler";
|
||||
mergePackages =
|
||||
a: b:
|
||||
let
|
||||
names = lib.genAttrs' a (p: lib.nameValuePair p.pname null);
|
||||
in
|
||||
a ++ lib.filter (p: !lib.hasAttr p.pname names) b;
|
||||
packages = mergePackages base.packages fallback.packages;
|
||||
targetPackages = lib.mapAttrs (
|
||||
name: value: mergePackages value fallback.targetPackages.${name}
|
||||
) base.targetPackages;
|
||||
in
|
||||
{
|
||||
inherit hasILCompiler packages targetPackages;
|
||||
}
|
||||
);
|
||||
});
|
||||
in
|
||||
pkgs.callPackage ./wrapper.nix { } "sdk" withFallbackPackages;
|
||||
|
||||
in
|
||||
pkgs
|
||||
// rec {
|
||||
# use binary SDK here to avoid downgrading feature band
|
||||
sdk_8_0_1xx = if !pkgs.dotnet_8.vmr.meta.broken then pkgs.dotnet_8.sdk else pkgs.sdk_8_0_1xx-bin;
|
||||
sdk_9_0_1xx = if !pkgs.dotnet_9.vmr.meta.broken then pkgs.dotnet_9.sdk else pkgs.sdk_9_0_1xx-bin;
|
||||
sdk_10_0_1xx =
|
||||
if !pkgs.dotnet_10.vmr.meta.broken then pkgs.dotnet_10.sdk else pkgs.sdk_10_0_1xx-bin;
|
||||
sdk_8_0_1xx = combineSdk pkgs.dotnet_8.sdk pkgs.sdk_8_0_1xx-bin;
|
||||
sdk_9_0_1xx = combineSdk pkgs.dotnet_9.sdk pkgs.sdk_9_0_1xx-bin;
|
||||
sdk_10_0_1xx = combineSdk pkgs.dotnet_10.sdk pkgs.sdk_10_0_1xx-bin;
|
||||
# source-built SDK only exists for _1xx feature band
|
||||
# https://github.com/dotnet/source-build/issues/3667
|
||||
sdk_8_0_4xx = combineSdk sdk_8_0_1xx pkgs.sdk_8_0_4xx-bin;
|
||||
@@ -172,9 +178,10 @@ pkgs
|
||||
sdk_8_0 = sdk_8_0_4xx;
|
||||
sdk_9_0 = sdk_9_0_3xx;
|
||||
sdk_10_0 = sdk_10_0_1xx;
|
||||
sdk_8_0-source = sdk_8_0_1xx;
|
||||
sdk_9_0-source = sdk_9_0_1xx;
|
||||
sdk_10_0-source = sdk_10_0_1xx;
|
||||
sdk_8_0-source = if !pkgs.dotnet_8.vmr.meta.broken then pkgs.dotnet_8.sdk else pkgs.sdk_8_0_1xx-bin;
|
||||
sdk_9_0-source = if !pkgs.dotnet_9.vmr.meta.broken then pkgs.dotnet_9.sdk else pkgs.sdk_9_0_1xx-bin;
|
||||
sdk_10_0-source =
|
||||
if !pkgs.dotnet_10.vmr.meta.broken then pkgs.dotnet_10.sdk else pkgs.sdk_10_0_1xx-bin;
|
||||
runtime_8_0 = sdk_8_0.runtime;
|
||||
runtime_9_0 = sdk_9_0.runtime;
|
||||
runtime_10_0 = sdk_10_0.runtime;
|
||||
|
||||
@@ -94,8 +94,10 @@ let
|
||||
(mkPackage "Microsoft.DotNet.ILCompiler" runtime.version)
|
||||
(mkPackage "Microsoft.NET.ILLink.Tasks" runtime.version)
|
||||
(mkPackage "Microsoft.NETCore.App.Crossgen2.${hostRid}" runtime.version)
|
||||
(mkPackage "runtime.${hostRid}.Microsoft.DotNet.ILCompiler" runtime.version)
|
||||
]
|
||||
++ lib.optional vmr.hasILCompiler (
|
||||
mkPackage "runtime.${hostRid}.Microsoft.DotNet.ILCompiler" runtime.version
|
||||
)
|
||||
++ lib.optionals (lib.versionOlder runtime.version "9") [
|
||||
(mkPackage "Microsoft.NETCore.DotNetHost" runtime.version)
|
||||
(mkPackage "Microsoft.NETCore.DotNetHostPolicy" runtime.version)
|
||||
@@ -114,6 +116,9 @@ let
|
||||
(mkPackage "runtime.${targetRid}.Microsoft.NETCore.DotNetHost" runtime.version)
|
||||
(mkPackage "runtime.${targetRid}.Microsoft.NETCore.DotNetHostPolicy" runtime.version)
|
||||
(mkPackage "runtime.${targetRid}.Microsoft.NETCore.DotNetHostResolver" runtime.version)
|
||||
]
|
||||
++ lib.optionals (lib.versionAtLeast runtime.version "10") [
|
||||
(mkPackage "Microsoft.NETCore.App.Runtime.NativeAOT.${targetRid}" runtime.version)
|
||||
];
|
||||
};
|
||||
|
||||
|
||||
@@ -128,6 +128,12 @@ aspnetcore_packages () {
|
||||
Microsoft.AspNetCore.App.Ref
|
||||
)
|
||||
|
||||
if versionAtLeast "$version" 10; then
|
||||
pkgs+=(
|
||||
Microsoft.AspNetCore.App.Internal.Assets
|
||||
)
|
||||
fi
|
||||
|
||||
generate_package_list "$version" ' ' "${pkgs[@]}"
|
||||
}
|
||||
|
||||
|
||||
@@ -14,6 +14,11 @@ let
|
||||
version = "10.0.2";
|
||||
hash = "sha512-MeDkxsB9ir694B2z0nIG7ZZ6DISLmbU7aOwCusO6AadYjitxjv+e9TuY1Y0ijwuYNjxukBIj45nF/fCEg6CGHw==";
|
||||
})
|
||||
(fetchNupkg {
|
||||
pname = "Microsoft.AspNetCore.App.Internal.Assets";
|
||||
version = "10.0.2";
|
||||
hash = "sha512-v9Au9ZSo3ZOe77StttCPCtOZkY7xSFXSyyWMR9Y0Kx3ZKegVp4zg7TJwz4osTgQp7EKyXlbDpvjUbgly51XbmA==";
|
||||
})
|
||||
(fetchNupkg {
|
||||
pname = "Microsoft.NETCore.DotNetAppHost";
|
||||
version = "10.0.2";
|
||||
|
||||
@@ -33,6 +33,7 @@ stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
license
|
||||
maintainers
|
||||
platforms
|
||||
broken
|
||||
;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user