diff --git a/maintainers/scripts/check-hydra-by-maintainer.nix b/maintainers/scripts/check-hydra-by-maintainer.nix new file mode 100644 index 000000000000..cecf65ec66dc --- /dev/null +++ b/maintainers/scripts/check-hydra-by-maintainer.nix @@ -0,0 +1,67 @@ +{ maintainer }: +let + pkgs = import ./../../default.nix { }; + maintainer_ = pkgs.lib.maintainers.${maintainer}; + packagesWith = cond: return: prefix: set: + (pkgs.lib.flatten + (pkgs.lib.mapAttrsToList + (name: pkg: + let + result = builtins.tryEval + ( + if pkgs.lib.isDerivation pkg && cond name pkg then + # Skip packages whose closure fails on evaluation. + # This happens for pkgs like `python27Packages.djangoql` + # that have disabled Python pkgs as dependencies. + builtins.seq pkg.outPath + [ (return "${prefix}${name}") ] + else if pkg.recurseForDerivations or false || pkg.recurseForRelease or false + # then packagesWith cond return pkg + then packagesWith cond return "${name}." pkg + else [ ] + ); + in + if result.success then result.value + else [ ] + ) + set + ) + ); + + packages = packagesWith + (name: pkg: + ( + if builtins.hasAttr "meta" pkg && builtins.hasAttr "maintainers" pkg.meta + then + ( + if builtins.isList pkg.meta.maintainers + then builtins.elem maintainer_ pkg.meta.maintainers + else maintainer_ == pkg.meta.maintainers + ) + else false + ) + ) + (name: name) + ("") + pkgs; + +in +pkgs.stdenv.mkDerivation { + name = "nixpkgs-update-script"; + buildCommand = '' + echo "" + echo "----------------------------------------------------------------" + echo "" + echo "nix-shell maintainers/scripts/check-hydra-by-maintainer.nix --argstr maintainer SuperSandro2000" + echo "" + echo "----------------------------------------------------------------" + exit 1 + ''; + shellHook = '' + unset shellHook # do not contaminate nested shells + echo "Please stand by" + echo nix-shell -p hydra-check --run "hydra-check ${builtins.concatStringsSep " " packages}" + nix-shell -p hydra-check --run "hydra-check ${builtins.concatStringsSep " " packages}" + exit $? + ''; +}