diff --git a/ci/eval/compare/maintainers.nix b/ci/eval/compare/maintainers.nix index 8fb43be4d8e7..9b641d6ec60f 100644 --- a/ci/eval/compare/maintainers.nix +++ b/ci/eval/compare/maintainers.nix @@ -53,9 +53,7 @@ let // { # 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; @@ -64,7 +62,8 @@ let (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. diff --git a/pkgs/stdenv/generic/check-meta.nix b/pkgs/stdenv/generic/check-meta.nix index f5e4dc5fe3c7..57cbc175d201 100644 --- a/pkgs/stdenv/generic/check-meta.nix +++ b/pkgs/stdenv/generic/check-meta.nix @@ -411,6 +411,10 @@ let 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 = @@ -589,11 +593,24 @@ let ) ] ++ 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. unfree = hasUnfreeLicense attrs;