mirror of
https://github.com/CHN-beta/nixpkgs.git
synced 2026-01-11 18:32:23 +08:00
By now, these files have been changed enough to not need the "vendored
from" notes anymore. These links would still be there when going through
the history of the file, but today GHA CI has not many similarities
anymore to what ofborg did, so these are not really helpful.
(cherry picked from commit 2aae142529)
99 lines
3.5 KiB
Nix
99 lines
3.5 KiB
Nix
{
|
|
lib,
|
|
}:
|
|
{
|
|
changedattrs,
|
|
changedpathsjson,
|
|
removedattrs,
|
|
byName ? false,
|
|
}:
|
|
let
|
|
pkgs = import ../../.. {
|
|
system = "x86_64-linux";
|
|
config = { };
|
|
overlays = [ ];
|
|
};
|
|
|
|
changedpaths = builtins.fromJSON (builtins.readFile changedpathsjson);
|
|
|
|
anyMatchingFile =
|
|
filename: builtins.any (changed: lib.strings.hasSuffix changed filename) changedpaths;
|
|
|
|
anyMatchingFiles = files: builtins.any anyMatchingFile files;
|
|
|
|
attrsWithMaintainers = lib.pipe (changedattrs ++ removedattrs) [
|
|
(builtins.map (
|
|
name:
|
|
let
|
|
# Some packages might be reported as changed on a different platform, but
|
|
# not even have an attribute on the platform the maintainers are requested on.
|
|
# Fallback to `null` for these to filter them out below.
|
|
package = lib.attrByPath (lib.splitString "." name) null pkgs;
|
|
in
|
|
{
|
|
inherit name package;
|
|
# TODO: Refactor this so we can ping entire teams instead of the individual members.
|
|
# Note that this will require keeping track of GH team IDs in "maintainers/teams.nix".
|
|
maintainers = package.meta.maintainers or [ ];
|
|
}
|
|
))
|
|
# No need to match up packages without maintainers with their files.
|
|
# This also filters out attributes where `packge = null`, which is the
|
|
# case for libintl, for example.
|
|
(builtins.filter (pkg: pkg.maintainers != [ ]))
|
|
];
|
|
|
|
relevantFilenames =
|
|
drv:
|
|
(lib.lists.unique (
|
|
builtins.map (pos: lib.strings.removePrefix (toString ../..) pos.file) (
|
|
builtins.filter (x: x != null) [
|
|
((drv.meta or { }).maintainersPosition or null)
|
|
((drv.meta or { }).teamsPosition or null)
|
|
(builtins.unsafeGetAttrPos "src" drv)
|
|
# broken because name is always set by stdenv:
|
|
# # A hack to make `nix-env -qa` and `nix search` ignore broken packages.
|
|
# # TODO(@oxij): remove this assert when something like NixOS/nix#1771 gets merged into nix.
|
|
# name = assert validity.handled; name + lib.optionalString
|
|
#(builtins.unsafeGetAttrPos "name" drv)
|
|
(builtins.unsafeGetAttrPos "pname" drv)
|
|
(builtins.unsafeGetAttrPos "version" drv)
|
|
|
|
# Use ".meta.position" for cases when most of the package is
|
|
# defined in a "common" section and the only place where
|
|
# reference to the file with a derivation the "pos"
|
|
# attribute.
|
|
#
|
|
# ".meta.position" has the following form:
|
|
# "pkgs/tools/package-management/nix/default.nix:155"
|
|
# We transform it to the following:
|
|
# { file = "pkgs/tools/package-management/nix/default.nix"; }
|
|
{ file = lib.head (lib.splitString ":" (drv.meta.position or "")); }
|
|
]
|
|
)
|
|
));
|
|
|
|
attrsWithFilenames = builtins.map (
|
|
pkg: pkg // { filenames = relevantFilenames pkg.package; }
|
|
) attrsWithMaintainers;
|
|
|
|
attrsWithModifiedFiles = builtins.filter (pkg: anyMatchingFiles pkg.filenames) attrsWithFilenames;
|
|
|
|
listToPing = lib.concatMap (
|
|
pkg:
|
|
builtins.map (maintainer: {
|
|
id = maintainer.githubId;
|
|
inherit (maintainer) github;
|
|
packageName = pkg.name;
|
|
dueToFiles = pkg.filenames;
|
|
}) pkg.maintainers
|
|
) attrsWithModifiedFiles;
|
|
|
|
byMaintainer = lib.groupBy (ping: toString ping.${if byName then "github" else "id"}) listToPing;
|
|
|
|
packagesPerMaintainer = lib.attrsets.mapAttrs (
|
|
maintainer: packages: builtins.map (pkg: pkg.packageName) packages
|
|
) byMaintainer;
|
|
in
|
|
packagesPerMaintainer
|