summary refs log tree commit diff
path: root/maintainers/scripts/update-dotnet-lockfiles.nix
diff options
context:
space:
mode:
Diffstat (limited to 'maintainers/scripts/update-dotnet-lockfiles.nix')
-rw-r--r--maintainers/scripts/update-dotnet-lockfiles.nix72
1 files changed, 72 insertions, 0 deletions
diff --git a/maintainers/scripts/update-dotnet-lockfiles.nix b/maintainers/scripts/update-dotnet-lockfiles.nix
new file mode 100644
index 00000000000..22ceff1ffa9
--- /dev/null
+++ b/maintainers/scripts/update-dotnet-lockfiles.nix
@@ -0,0 +1,72 @@
+/*
+  To run:
+
+      nix-shell maintainers/scripts/update-dotnet-lockfiles.nix
+
+  This script finds all the derivations in nixpkgs that have a 'fetch-deps'
+  attribute, and runs all of them sequentially. This is useful to test changes
+  to 'fetch-deps', 'nuget-to-nix', or other changes to the dotnet build
+  infrastructure. Regular updates should be done through the individual packages
+  update scripts.
+ */
+let
+  pkgs = import ../.. {};
+
+  inherit (pkgs) lib;
+
+  packagesWith = cond: pkgs:
+    let
+      packagesWithInner = attrs:
+        lib.unique (
+          lib.concatLists (
+            lib.mapAttrsToList (name: elem:
+              let
+                result = builtins.tryEval elem;
+              in
+                if result.success then
+                  let
+                    value = result.value;
+                  in
+                    if lib.isDerivation value then
+                      lib.optional (cond value) value
+                    else
+                      if lib.isAttrs value && (value.recurseForDerivations or false || value.recurseForRelease or false) then
+                        packagesWithInner value
+                      else []
+                else []) attrs));
+    in
+      packagesWithInner pkgs;
+
+  packages =
+    packagesWith (pkgs: pkgs ? fetch-deps) pkgs;
+
+  helpText = ''
+    Please run:
+
+        % nix-shell maintainers/scripts/update-dotnet-lockfiles.nix
+  '';
+
+  fetchScripts = map (p: p.fetch-deps) packages;
+
+in pkgs.stdenv.mkDerivation {
+  name = "nixpkgs-update-dotnet-lockfiles";
+  buildCommand = ''
+    echo ""
+    echo "----------------------------------------------------------------"
+    echo ""
+    echo "Not possible to update packages using \`nix-build\`"
+    echo ""
+    echo "${helpText}"
+    echo "----------------------------------------------------------------"
+    exit 1
+  '';
+  shellHook = ''
+    unset shellHook # do not contaminate nested shells
+    set -e
+    for x in $fetchScripts; do
+      $x
+    done
+    exit
+  '';
+  inherit fetchScripts;
+}