about summary refs log tree commit diff
path: root/pkgs/build-support
diff options
context:
space:
mode:
authorIvv <41924494+IvarWithoutBones@users.noreply.github.com>2022-08-14 15:08:43 +0200
committerGitHub <noreply@github.com>2022-08-14 15:08:43 +0200
commit7ec728db17bc166e3c1186d27fde1345109e133c (patch)
treeff8894ab5f94c930e0ee6d67e05bbb13e9ffbd22 /pkgs/build-support
parent19f68737ffa5f3435f495d39dc9185d56afdef46 (diff)
parent08ebd9f0dfdb993ed355d75d01d9ed375ae434da (diff)
Merge pull request #181512 from mdarocha/dotnet-6-update
dotnet-sdk: 6.0.301 -> 6.0.400, refactor to streamline dotnet updates
Diffstat (limited to 'pkgs/build-support')
-rw-r--r--pkgs/build-support/dotnet/build-dotnet-module/default.nix32
-rw-r--r--pkgs/build-support/dotnet/nuget-to-nix/default.nix2
-rwxr-xr-xpkgs/build-support/dotnet/nuget-to-nix/nuget-to-nix.sh8
3 files changed, 36 insertions, 6 deletions
diff --git a/pkgs/build-support/dotnet/build-dotnet-module/default.nix b/pkgs/build-support/dotnet/build-dotnet-module/default.nix
index 339eac16b0b2d..1a5d499929ac0 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
@@ -116,7 +134,9 @@ in stdenvNoCC.mkDerivation (args // {
   passthru = {
     inherit nuget-source;
 
-    fetch-deps = writeScript "fetch-${pname}-deps" ''
+    fetch-deps = let
+      exclusions = dotnet-sdk.passthru.packages { fetchNuGet = attrs: attrs.pname; };
+    in writeScript "fetch-${pname}-deps" ''
       set -euo pipefail
       cd "$(dirname "''${BASH_SOURCE[0]}")"
 
@@ -146,8 +166,10 @@ in stdenvNoCC.mkDerivation (args // {
           ${lib.optionalString (dotnetFlags != []) (builtins.toString dotnetFlags)}
       done
 
+      echo "${lib.concatStringsSep "\n" exclusions}" > "$HOME/package_exclusions"
+
       echo "Writing lockfile..."
-      ${nuget-to-nix}/bin/nuget-to-nix "$HOME/nuget_pkgs" > "$deps_file"
+      ${nuget-to-nix}/bin/nuget-to-nix "$HOME/nuget_pkgs" "$HOME/package_exclusions" > "$deps_file"
       echo "Succesfully wrote lockfile to: $deps_file"
     '';
   } // args.passthru or {};
diff --git a/pkgs/build-support/dotnet/nuget-to-nix/default.nix b/pkgs/build-support/dotnet/nuget-to-nix/default.nix
index 18757692e92d7..e3a3e45ac20cf 100644
--- a/pkgs/build-support/dotnet/nuget-to-nix/default.nix
+++ b/pkgs/build-support/dotnet/nuget-to-nix/default.nix
@@ -8,6 +8,7 @@
 , gnused
 , jq
 , curl
+, gnugrep
 }:
 
 runCommandLocal "nuget-to-nix" {
@@ -22,6 +23,7 @@ runCommandLocal "nuget-to-nix" {
       gnused
       jq
       curl
+      gnugrep
     ];
   };
 
diff --git a/pkgs/build-support/dotnet/nuget-to-nix/nuget-to-nix.sh b/pkgs/build-support/dotnet/nuget-to-nix/nuget-to-nix.sh
index c8db14a4d918f..ad75cf6574b74 100755
--- a/pkgs/build-support/dotnet/nuget-to-nix/nuget-to-nix.sh
+++ b/pkgs/build-support/dotnet/nuget-to-nix/nuget-to-nix.sh
@@ -5,11 +5,12 @@ set -euo pipefail
 export PATH="@binPath@"
 
 if [ $# -eq 0 ]; then
-  >&2 echo "Usage: $0 [packages directory] > deps.nix"
+  >&2 echo "Usage: $0 <packages directory> [path to file with a list of excluded packages] > deps.nix"
   exit 1
 fi
 
 pkgs=$1
+exclusions=$2
 tmpfile=$(mktemp /tmp/nuget-to-nix.XXXXXX)
 trap "rm -f ${tmpfile}" EXIT
 
@@ -21,6 +22,11 @@ while read pkg_spec; do
   { read pkg_name; read pkg_version; } < <(
     # Build version part should be ignored: `3.0.0-beta2.20059.3+77df2220` -> `3.0.0-beta2.20059.3`
     sed -nE 's/.*<id>([^<]*).*/\1/p; s/.*<version>([^<+]*).*/\1/p' "$pkg_spec")
+
+  if grep "$pkg_name" "$exclusions" > /dev/null; then
+    continue
+  fi
+
   pkg_sha256="$(nix-hash --type sha256 --flat --base32 "$(dirname "$pkg_spec")"/*.nupkg)"
 
   pkg_src="$(jq --raw-output '.source' "$(dirname "$pkg_spec")/.nupkg.metadata")"