Unverified Commit 8dceeb6a authored by David McFarland's avatar David McFarland Committed by GitHub
Browse files

dotnet: improve package fallbacks (#480456)

parents 8807adf8 67d167a0
Loading
Loading
Loading
Loading
+0 −5
Original line number Diff line number Diff line
@@ -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",
+62 −55
Original line number Diff line number Diff line
@@ -100,25 +100,24 @@ 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
      let
        withBaseRuntimes =
          if fallback.version == base.version then
            base.unwrapped
          else
      pkgs.callPackage ./wrapper.nix { } "sdk" (
            (pkgs.combinePackages [
              base.runtime
              base.aspnetcore
          (overlay.overrideAttrs (old: {
            passthru = old.passthru // {
              inherit (base)
                packages
                targetPackages
                ;
            };
          }))
              fallback
            ]).unwrapped.overrideAttrs
              (old: {
            name = overlay.unwrapped.name;
                name = fallback.unwrapped.name;
                # resolve symlinks so DOTNET_ROOT is self-contained
                postBuild = ''
                  mv "$out"/share/dotnet{,~}
@@ -126,45 +125,52 @@ let
                  rm -r "$out"/share/dotnet~
                ''
                + old.postBuild;
                passthru = old.passthru // {
                  inherit (base)
                    runtime
                    aspnetcore
                    ;
                  inherit (fallback.unwrapped)
                    pname
                    version
                    ;
                };
              });

        withFallbackPackages = withBaseRuntimes.overrideAttrs (old: {
          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;
                hasILCompiler = base.hasILCompiler || fallback.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;
                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;
                  inherit (base)
                    targetPackages
                    runtime
                    aspnetcore
                    ;
                  inherit (overlay.unwrapped)
                    pname
                    version
                    ;
                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;
+6 −1
Original line number Diff line number Diff line
@@ -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)
    ];
  };

+6 −0
Original line number Diff line number Diff line
@@ -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[@]}"
}

+5 −0
Original line number Diff line number Diff line
@@ -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";
Loading