mirror of
https://github.com/CHN-beta/nixpkgs.git
synced 2026-01-10 09:50:28 +08:00
ci,modules: Backport additions of #431450
Reason: keep ci directory in sync - https://github.com/NixOS/nixpkgs/pull/431450#issuecomment-3209546418 This requires that we have a modules directory, in which case the easy and robust solution is to only port the addition parts of the refactor. It's about as easy as a .keep file, but more useful. This means that some duplication is created, but we avoid backporting the changes to the documentation generation, which is a somewhat complex component I'd rather not touch until these changes have been proven out on unstable.
This commit is contained in:
@@ -30,6 +30,7 @@ let
|
||||
"doc"
|
||||
"lib"
|
||||
"maintainers"
|
||||
"modules"
|
||||
"nixos"
|
||||
"pkgs"
|
||||
".version"
|
||||
|
||||
9
modules/README.md
Normal file
9
modules/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
# `<nixpkgs>/modules`
|
||||
|
||||
This directory hosts subdirectories representing each module [class](https://nixos.org/manual/nixpkgs/stable/#module-system-lib-evalModules-param-class) for which the `nixpkgs` repository has user-importable modules.
|
||||
|
||||
Exceptions:
|
||||
- `_class = "nixos";` modules go in the `<nixpkgs>/nixos/modules` tree
|
||||
- modules whose only purpose is to test code in this repository
|
||||
|
||||
The emphasis is on _importable_ modules, i.e. ones that aren't inherent to and built into the Module System application.
|
||||
63
modules/generic/meta-maintainers.nix
Normal file
63
modules/generic/meta-maintainers.nix
Normal file
@@ -0,0 +1,63 @@
|
||||
# Test:
|
||||
# ./meta-maintainers/test.nix
|
||||
{ lib, ... }:
|
||||
let
|
||||
inherit (lib)
|
||||
mkOption
|
||||
mkOptionType
|
||||
types
|
||||
;
|
||||
|
||||
maintainer = mkOptionType {
|
||||
name = "maintainer";
|
||||
check = email: lib.elem email (lib.attrValues lib.maintainers);
|
||||
merge = loc: defs: {
|
||||
# lib.last: Perhaps this could be merged instead, if "at most once per module"
|
||||
# is a problem (see option description).
|
||||
${(lib.last defs).file} = (lib.last defs).value;
|
||||
};
|
||||
};
|
||||
|
||||
listOfMaintainers = types.listOf maintainer // {
|
||||
merge =
|
||||
loc: defs:
|
||||
lib.zipAttrs (
|
||||
lib.flatten (
|
||||
lib.imap1 (
|
||||
n: def:
|
||||
lib.imap1 (
|
||||
m: def':
|
||||
maintainer.merge (loc ++ [ "[${toString n}-${toString m}]" ]) [
|
||||
{
|
||||
inherit (def) file;
|
||||
value = def';
|
||||
}
|
||||
]
|
||||
) def.value
|
||||
) defs
|
||||
)
|
||||
);
|
||||
};
|
||||
in
|
||||
{
|
||||
_class = null; # not specific to NixOS
|
||||
options = {
|
||||
meta = {
|
||||
maintainers = mkOption {
|
||||
type = listOfMaintainers;
|
||||
default = [ ];
|
||||
example = lib.literalExpression ''[ lib.maintainers.alice lib.maintainers.bob ]'';
|
||||
description = ''
|
||||
List of maintainers of each module.
|
||||
This option should be defined at most once per module.
|
||||
|
||||
The option value is not a list of maintainers, but an attribute set that maps module file names to lists of maintainers.
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
meta.maintainers = with lib.maintainers; [
|
||||
pierron
|
||||
roberth
|
||||
];
|
||||
}
|
||||
34
modules/generic/meta-maintainers/test.nix
Normal file
34
modules/generic/meta-maintainers/test.nix
Normal file
@@ -0,0 +1,34 @@
|
||||
# Run:
|
||||
# $ nix-instantiate --eval 'modules/generic/meta-maintainers/test.nix'
|
||||
#
|
||||
# Expected output:
|
||||
# { }
|
||||
#
|
||||
# Debugging:
|
||||
# drop .test from the end of this file, then use nix repl on it
|
||||
rec {
|
||||
lib = import ../../../lib;
|
||||
|
||||
example = lib.evalModules {
|
||||
modules = [
|
||||
../meta-maintainers.nix
|
||||
{
|
||||
_file = "eelco.nix";
|
||||
meta.maintainers = [ lib.maintainers.eelco ];
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
test =
|
||||
assert
|
||||
example.config.meta.maintainers == {
|
||||
${toString ../meta-maintainers.nix} = [
|
||||
lib.maintainers.pierron
|
||||
lib.maintainers.roberth
|
||||
];
|
||||
"eelco.nix" = [ lib.maintainers.eelco ];
|
||||
};
|
||||
{ };
|
||||
|
||||
}
|
||||
.test
|
||||
Reference in New Issue
Block a user