diff options
Diffstat (limited to 'maintainers')
-rw-r--r-- | maintainers/scripts/update-dotnet-lockfiles.nix | 72 |
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 0000000000000..22ceff1ffa996 --- /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; +} |