diff --git a/ci/OWNERS b/ci/OWNERS index d1d215935b1f..b459a496cdf3 100644 --- a/ci/OWNERS +++ b/ci/OWNERS @@ -33,6 +33,7 @@ /lib/path/* @infinisil @hsjobeki /lib/fileset @infinisil @hsjobeki /maintainers/github-teams.json @infinisil +/maintainers/computed-team-list.nix @infinisil ## Standard environment–related libraries /lib/customisation.nix @alyssais @NixOS/stdenv /lib/derivations.nix @alyssais @NixOS/stdenv diff --git a/lib/default.nix b/lib/default.nix index afd9ecd2154c..157e4e2be278 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -63,7 +63,7 @@ let customisation = callLibs ./customisation.nix; derivations = callLibs ./derivations.nix; maintainers = import ../maintainers/maintainer-list.nix; - teams = callLibs ../maintainers/team-list.nix; + teams = callLibs ../maintainers/computed-team-list.nix; meta = callLibs ./meta.nix; versions = callLibs ./versions.nix; diff --git a/maintainers/README.md b/maintainers/README.md index 1bcaaea1a5c3..6b5c8fe1c2c4 100644 --- a/maintainers/README.md +++ b/maintainers/README.md @@ -158,13 +158,17 @@ If the team lists no specific membership policy, feel free to merge changes to t > [!IMPORTANT] > If a team says it is a closed group, do not merge additions to the team without an approval by at least one existing member. -A corresponding GitHub team can be created by any org member. +#### Synced GitHub teams + +As an alternative to tracking team members in `team-list.nix`, a corresponding GitHub team can be created by any org member and its members subsequently managed directly on GitHub. When creating the team it should be created with the `nixpkgs-maintainers` team as parent. Once approved, the team will have the right privileges to be pinged and requested for review in Nixpkgs. > [!TIP] > The team name should be as short as possible; because it is nested under the maintainers group, no -maintainers suffix is needed. +After the first [weekly team sync](../.github/workflows/team-sync.yml) with the new team, it's then also possible to link it to the entry in `team-list.nix` by setting its `github` field to the GitHub team name. + # Maintainer scripts Various utility scripts, which are mainly useful for nixpkgs maintainers, are available under `./scripts/`. diff --git a/maintainers/computed-team-list.nix b/maintainers/computed-team-list.nix new file mode 100644 index 000000000000..f9413d76e453 --- /dev/null +++ b/maintainers/computed-team-list.nix @@ -0,0 +1,49 @@ +# Extends ./team-list.nix with synced GitHub information from ./github-teams.json +{ lib }: +let + githubTeams = lib.importJSON ./github-teams.json; + teams = import ./team-list.nix { inherit lib; }; + + # A fast maintainer id lookup table + maintainersById = lib.pipe lib.maintainers [ + lib.attrValues + (lib.groupBy (attrs: toString attrs.githubId)) + (lib.mapAttrs (_: lib.head)) + ]; + + maintainerSetToList = + githubTeam: + lib.mapAttrsToList ( + login: id: + maintainersById.${toString id} + or (throw "lib.teams: No maintainer entry for GitHub user @${login} who's part of the @NixOS/${githubTeam} team") + ); + +in +lib.mapAttrs ( + name: attrs: + if attrs ? github then + let + githubTeam = + githubTeams.${attrs.github} + or (throw "lib.teams.${name}: Corresponding GitHub team ${attrs.github} not known yet, make sure to create it and wait for the regular team sync"); + in + assert lib.assertMsg (!attrs ? shortName) + "lib.teams.${name}: Both `shortName` and `github` is set, but the former is synced from the latter"; + assert lib.assertMsg ( + !attrs ? scope + ) "lib.teams.${name}: Both `scope` and `github` is set, but the former is synced from the latter"; + assert lib.assertMsg ( + !attrs ? members + ) "lib.teams.${name}: Both `members` and `github` is set, but the former is synced from the latter"; + attrs + // { + shortName = githubTeam.name; + scope = githubTeam.description; + members = + maintainerSetToList attrs.github githubTeam.maintainers + ++ maintainerSetToList attrs.github githubTeam.members; + } + else + attrs +) teams diff --git a/maintainers/team-list.nix b/maintainers/team-list.nix index ebfd4d5c43d3..8d3db897020b 100644 --- a/maintainers/team-list.nix +++ b/maintainers/team-list.nix @@ -1,11 +1,9 @@ /* List of maintainer teams. name = { - # Required members = [ maintainer1 maintainer2 ]; scope = "Maintain foo packages."; shortName = "foo"; - # Optional enableFeatureFreezePing = true; github = "my-subsystem"; }; @@ -18,7 +16,7 @@ - `enableFeatureFreezePing` will ping this team during the Feature Freeze announcements on releases - There is limited mention capacity in a single post, so this should be reserved for critical components or larger ecosystems within nixpkgs. - - `github` will ping the specified GitHub team as well + - `github` will ping the specified GitHub team and sync the `members`, `scope` and `shortName` fields from it More fields may be added in the future. @@ -56,16 +54,7 @@ with lib.maintainers; }; android = { - members = [ - adrian-gierakowski - hadilq - johnrtitor - numinit - RossComputerGuy - ]; - scope = "Maintain Android-related tooling in nixpkgs."; github = "android"; - shortName = "Android"; enableFeatureFreezePing = true; }; @@ -106,20 +95,7 @@ with lib.maintainers; }; beam = { - members = [ - adamcstephens - ankhers - Br1ght0ne - DianaOlympos - gleber - happysalada - minijackson - yurrriq - savtrip - ]; github = "beam"; - scope = "Maintain BEAM-related packages and modules."; - shortName = "BEAM"; enableFeatureFreezePing = true; }; @@ -193,34 +169,11 @@ with lib.maintainers; }; categorization = { - members = [ - aleksana - fgaz - getpsyched - lyndeno - natsukium - philiptaron - pyrotelekinetic - raskin - sigmasquadron - tomodachi94 - ]; github = "categorization"; - scope = "Maintain the categorization system in Nixpkgs, per RFC 146. This team has authority over all categorization issues in Nixpkgs."; - shortName = "Categorization"; }; ci = { - members = [ - MattSturgeon - mic92 - philiptaron - wolfgangwalther - zowoq - ]; github = "nixpkgs-ci"; - scope = "Maintain Nixpkgs' in-tree Continuous Integration, including GitHub Actions."; - shortName = "CI"; }; cinnamon = { @@ -262,21 +215,7 @@ with lib.maintainers; }; cosmic = { - members = [ - a-kenji - ahoneybun - drakon64 - griffi-gh - HeitorAugustoLN - nyabinary - pandapip1 - qyliss - thefossguy - michaelBelsanti - ]; github = "cosmic"; - shortName = "cosmic"; - scope = "Maintain the COSMIC DE and related packages."; enableFeatureFreezePing = true; }; @@ -290,15 +229,6 @@ with lib.maintainers; }; cuda = { - members = [ - connorbaker - GaetanLepage - prusnak - samuela - SomeoneSerge - ]; - scope = "Maintain CUDA-enabled packages"; - shortName = "Cuda"; github = "cuda-maintainers"; }; @@ -315,14 +245,7 @@ with lib.maintainers; }; darwin = { - members = [ - emily - reckenrode - toonn - ]; github = "darwin-core"; - scope = "Maintain core platform support and packages for macOS and other Apple platforms."; - shortName = "Darwin"; enableFeatureFreezePing = true; }; @@ -366,14 +289,7 @@ with lib.maintainers; }; docs = { - members = [ - alejandrosame - wamirez - hsjobeki - ]; github = "documentation-team"; - scope = "Maintain nixpkgs/NixOS documentation and tools for building it."; - shortName = "Docs"; enableFeatureFreezePing = true; }; @@ -414,22 +330,11 @@ with lib.maintainers; }; enlightenment = { - members = [ romildo ]; github = "enlightenment"; - scope = "Maintain Enlightenment desktop environment and related packages."; - shortName = "Enlightenment"; enableFeatureFreezePing = true; }; flutter = { - members = [ - mkg20001 - RossComputerGuy - FlafyDev - hacker1024 - ]; - scope = "Maintain Flutter and Dart-related packages and build tools"; - shortName = "flutter"; enableFeatureFreezePing = false; github = "flutter"; }; @@ -490,18 +395,7 @@ with lib.maintainers; }; geospatial = { - members = [ - autra - imincik - l0b0 - nh2 - nialov - sikmir - willcohen - ]; github = "geospatial"; - scope = "Maintain geospatial, remote sensing and OpenStreetMap software."; - shortName = "Geospatial"; enableFeatureFreezePing = true; }; @@ -518,15 +412,7 @@ with lib.maintainers; }; gnome = { - members = [ - bobby285271 - hedning - jtojnar - dasj19 - ]; github = "gnome"; - scope = "Maintain GNOME desktop environment and platform."; - shortName = "GNOME"; enableFeatureFreezePing = true; }; @@ -541,17 +427,7 @@ with lib.maintainers; }; golang = { - members = [ - kalbasit - katexochen - mic92 - zowoq - qbit - mfrw - ]; github = "golang"; - scope = "Maintain Golang compilers."; - shortName = "Go"; enableFeatureFreezePing = true; }; @@ -567,15 +443,7 @@ with lib.maintainers; }; haskell = { - members = [ - cdepillabout - maralorn - sternenseemann - wolfgangwalther - ]; github = "haskell"; - scope = "Maintain Haskell packages and infrastructure."; - shortName = "Haskell"; enableFeatureFreezePing = true; }; @@ -601,16 +469,7 @@ with lib.maintainers; }; hyprland = { - members = [ - donovanglover - fufexan - johnrtitor - khaneliman - NotAShelf - ]; github = "hyprland"; - scope = "Maintain Hyprland compositor and ecosystem"; - shortName = "Hyprland"; enableFeatureFreezePing = true; }; @@ -632,15 +491,6 @@ with lib.maintainers; java = { github = "java"; - members = [ - chayleaf - fliegendewurst - infinidoge - tomodachi94 - msgilligan - ]; - shortName = "Java"; - scope = "Maintainers of the Nixpkgs Java ecosystem (JDK, JVM, Java, Gradle, Maven, Ant, and adjacent projects)"; enableFeatureFreezePing = true; }; @@ -679,17 +529,6 @@ with lib.maintainers; k3s = { github = "k3s"; - members = [ - euank - frederictobiasc - heywoodlh - marcusramberg - mic92 - rorosen - wrmilling - ]; - scope = "Maintain K3s package, NixOS module, NixOS tests, update script"; - shortName = "K3s"; }; kodi = { @@ -741,16 +580,7 @@ with lib.maintainers; }; lisp = { - members = [ - raskin - lukego - nagy - uthar - hraban - ]; github = "lisp"; - scope = "Maintain the Lisp ecosystem."; - shortName = "lisp"; enableFeatureFreezePing = true; }; @@ -768,19 +598,7 @@ with lib.maintainers; }; llvm = { - members = [ - dtzWill - emily - ericson2314 - lovek323 - qyliss - RossComputerGuy - rrbutani - sternenseemann - ]; github = "llvm"; - scope = "Maintain LLVM package sets and related packages"; - shortName = "LLVM"; enableFeatureFreezePing = true; }; @@ -792,30 +610,12 @@ with lib.maintainers; }; loongarch64 = { - members = [ - aleksana - Cryolitia - darkyzhou - dramforever - wegank - ]; github = "loongarch64"; - scope = "Maintain LoongArch64 related packages and code"; - shortName = "LoongArch64"; enableFeatureFreezePing = true; }; lua = { - members = [ - raskin - khaneliman - teto - arobyn - scoder12 - ]; github = "lua"; - scope = "Maintain the lua ecosystem."; - shortName = "lua"; enableFeatureFreezePing = true; }; @@ -830,10 +630,7 @@ with lib.maintainers; }; lumina = { - members = [ romildo ]; github = "lumina"; - scope = "Maintain lumina desktop environment and related packages."; - shortName = "Lumina"; enableFeatureFreezePing = true; }; @@ -849,23 +646,12 @@ with lib.maintainers; }; lxqt = { - members = [ romildo ]; github = "lxqt"; - scope = "Maintain LXQt desktop environment and related packages."; - shortName = "LXQt"; enableFeatureFreezePing = true; }; marketing = { - members = [ - djacu - flyfloh - thilobillerbeck - tomberek - ]; github = "marketing-team"; - scope = "Marketing of Nix/NixOS/nixpkgs."; - shortName = "Marketing"; enableFeatureFreezePing = true; }; @@ -929,15 +715,7 @@ with lib.maintainers; }; neovim = { - members = [ - GaetanLepage - khaneliman - mrcjkb - perchun - ]; github = "neovim"; - scope = "Maintain the vim and neovim text editors and related packages."; - shortName = "Vim/Neovim"; }; nextcloud = { @@ -995,15 +773,7 @@ with lib.maintainers; }; ocaml = { - members = [ - alizter - redianthus - romildo - ulrikstrid - ]; github = "ocaml"; - scope = "Maintain the OCaml compiler and package set."; - shortName = "OCaml"; enableFeatureFreezePing = true; }; @@ -1035,13 +805,7 @@ with lib.maintainers; }; pantheon = { - members = [ - davidak - bobby285271 - ]; github = "pantheon"; - scope = "Maintain Pantheon desktop environment and platform."; - shortName = "Pantheon"; enableFeatureFreezePing = true; }; @@ -1057,26 +821,12 @@ with lib.maintainers; }; php = { - members = [ - aanderse - ma27 - piotrkwiecinski - talyz - ]; github = "php"; - scope = "Maintain PHP related packages and extensions."; - shortName = "PHP"; enableFeatureFreezePing = true; }; podman = { - members = [ - saschagrunert - vdemeester - ]; github = "podman"; - scope = "Maintain Podman and CRI-O related packages and modules."; - shortName = "Podman"; }; postgres = { @@ -1101,23 +851,7 @@ with lib.maintainers; }; qt-kde = { - members = [ - ilya-fedin - k900 - LunNova - mjm - nickcao - SuperSandro2000 - ttuegel - fridh - shamilton - bkchr - peterhoeg - nyanloutre - ]; github = "qt-kde"; - scope = "Maintain the Qt framework, KDE application suite, Plasma desktop environment and related projects."; - shortName = "Qt / KDE"; enableFeatureFreezePing = true; }; @@ -1144,28 +878,11 @@ with lib.maintainers; }; rocm = { - members = [ - Flakebi - GZGavinZhao - LunNova - mschwaig - ]; github = "rocm"; - scope = "Maintain ROCm and related packages."; - shortName = "ROCm"; }; rust = { - members = [ - figsoda - mic92 - tjni - winter - zowoq - ]; github = "rust"; - scope = "Maintain the Rust compiler toolchain and nixpkgs integration."; - shortName = "Rust"; enableFeatureFreezePing = true; }; @@ -1180,16 +897,7 @@ with lib.maintainers; }; sdl = { - members = [ - evythedemon - grimmauld - jansol - marcin-serwin - pbsds - ]; github = "sdl"; - scope = "Maintain core SDL libraries."; - shortName = "SDL"; enableFeatureFreezePing = true; }; @@ -1216,16 +924,6 @@ with lib.maintainers; }; stdenv = { - members = [ - artturin - emily - ericson2314 - philiptaron - reckenrode - RossComputerGuy - ]; - scope = "Maintain the standard environment and its surrounding logic."; - shortName = "stdenv"; enableFeatureFreezePing = true; github = "stdenv"; }; @@ -1262,16 +960,7 @@ with lib.maintainers; }; systemd = { - members = [ - flokli - arianvp - elvishjerricco - aanderse - grimmauld - ]; github = "systemd"; - scope = "Maintain systemd for NixOS."; - shortName = "systemd"; enableFeatureFreezePing = true; }; @@ -1321,14 +1010,6 @@ with lib.maintainers; }; xen = { - members = [ - hehongbo - lach - sigmasquadron - rane - ]; - scope = "Maintain the Xen Project Hypervisor and the related tooling ecosystem."; - shortName = "Xen Project Hypervisor"; enableFeatureFreezePing = true; github = "xen-project"; };