check-meta: wrap maintainers attribute to include team members (#402991)

Changed files
+20 -4
ci
eval
compare
pkgs
stdenv
generic
+3 -4
ci/eval/compare/maintainers.nix
···
// {
# 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 =
-
meta.maintainers or [ ]
-
++ lib.flatten (map (team: team.members or [ ]) (meta.teams or [ ]));
+
maintainers = meta.maintainers or [ ];
}
) attrsWithPackages;
···
(lib.lists.unique (
builtins.map (pos: lib.strings.removePrefix (toString ../..) pos.file) (
builtins.filter (x: x != null) [
-
(builtins.unsafeGetAttrPos "maintainers" (drv.meta or { }))
+
((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.
+17
pkgs/stdenv/generic/check-meta.nix
···
isFcitxEngine = bool;
isIbusEngine = bool;
isGutenprint = bool;
+
+
# Used for the original location of the maintainer and team attributes to assist with pings.
+
maintainersPosition = any;
+
teamsPosition = any;
};
checkMetaAttr =
···
)
] ++ optional (hasOutput "man") "man";
}
+
// {
+
# CI scripts look at these to determine pings.
+
maintainersPosition = builtins.unsafeGetAttrPos "maintainers" (attrs.meta or { });
+
teamsPosition = builtins.unsafeGetAttrPos "teams" (attrs.meta or { });
+
}
// attrs.meta or { }
# Fill `meta.position` to identify the source location of the package.
// optionalAttrs (pos != null) {
position = pos.file + ":" + toString pos.line;
+
}
+
// {
+
# Maintainers should be inclusive of teams.
+
# Note that there may be external consumers of this API (repology, for instance) -
+
# if you add a new maintainer or team attribute please ensure that this expectation is still met.
+
maintainers =
+
attrs.meta.maintainers or [ ]
+
++ concatMap (team: team.members or [ ]) attrs.meta.teams or [ ];
}
// {
# Expose the result of the checks for everyone to see.