From 8cde457184d4422e1a13a70844b239beaecd1911 Mon Sep 17 00:00:00 2001 From: Sav Tripodi Date: Thu, 23 Oct 2025 09:10:31 +0200 Subject: [PATCH 01/24] maintainers: add savtrip (cherry picked from commit a2d88e8b7b1a0237a484935adb1c863776d43c44) --- maintainers/maintainer-list.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index e4667ec956b3..02292ea5bb7e 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -22034,6 +22034,11 @@ githubId = 99875823; name = "Michael Savedra"; }; + savtrip = { + github = "savtrip"; + githubId = 42227195; + name = "Sav Tripodi"; + }; savyajha = { email = "savya.jha@hawkradius.com"; github = "savyajha"; From 1f429450e76551eaa5d75a8877f201a318d6f319 Mon Sep 17 00:00:00 2001 From: Sean Gilligan Date: Wed, 2 Jul 2025 12:18:02 -0700 Subject: [PATCH 02/24] maintainers: add msgilligan (cherry picked from commit 5d75e9723bb5d7a5af8f58be3f623864212949b4) --- maintainers/maintainer-list.nix | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index 02292ea5bb7e..d6c3cf798c34 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -16780,6 +16780,13 @@ githubId = 30654959; name = "Michele Sciabarra"; }; + msgilligan = { + email = "sean@msgilligan.com"; + github = "msgilligan"; + githubId = 61612; + name = "Sean Gilligan"; + keys = [ { fingerprint = "3B66 ACFA D10F 02AA B1D5  2CB1 8DD0 D81D 7D1F C61A"; } ]; + }; msiedlarek = { email = "mikolaj@siedlarek.pl"; github = "msiedlarek"; From 44853cca138f96c4850b207352d65a3a46ad5007 Mon Sep 17 00:00:00 2001 From: zapashcanon Date: Sun, 21 Sep 2025 23:41:44 +0200 Subject: [PATCH 03/24] maintainers: add redianthus (cherry picked from commit 2236baec50513d9810951a9cf8f1fc32e237997e) --- maintainers/maintainer-list.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index d6c3cf798c34..e751150256dc 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -20736,6 +20736,11 @@ githubId = 77415970; name = "Redhawk"; }; + redianthus = { + github = "redianthus"; + githubId = 16472988; + name = "redianthus"; + }; redlonghead = { email = "git@beardit.net"; github = "Redlonghead"; From 1cf1500e081a106e89e863f5758a3a0b10447f45 Mon Sep 17 00:00:00 2001 From: Luna Nova Date: Sun, 5 Oct 2025 16:23:33 -0700 Subject: [PATCH 04/24] team-list: rename rocm-maintainers to rocm (cherry picked from commit 28f3b3d5ba5183780f850597c0f023c96ef54ec0) --- maintainers/team-list.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maintainers/team-list.nix b/maintainers/team-list.nix index 1ff7ae963868..d7f557180234 100644 --- a/maintainers/team-list.nix +++ b/maintainers/team-list.nix @@ -1101,7 +1101,7 @@ with lib.maintainers; LunNova mschwaig ]; - githubTeams = [ "rocm-maintainers" ]; + githubTeams = [ "rocm" ]; scope = "Maintain ROCm and related packages."; shortName = "ROCm"; }; From ce10e184fbbc3c7932a2290c8a8a83d8d4f8b7c9 Mon Sep 17 00:00:00 2001 From: Daniel Baker Date: Mon, 22 Sep 2025 21:25:26 -0700 Subject: [PATCH 05/24] maintainers/team-list: update marketing team to current standing (cherry picked from commit 15c6fc06c68fb32e9d3f41fb44d52f874f2ce08d) --- maintainers/team-list.nix | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/maintainers/team-list.nix b/maintainers/team-list.nix index d7f557180234..da91d4d93beb 100644 --- a/maintainers/team-list.nix +++ b/maintainers/team-list.nix @@ -817,8 +817,12 @@ with lib.maintainers; marketing = { members = [ + djacu + flyfloh + thilobillerbeck tomberek ]; + githubTeams = [ "marketing-team" ]; scope = "Marketing of Nix/NixOS/nixpkgs."; shortName = "Marketing"; enableFeatureFreezePing = true; From 01666006600b01d40cb1518bc97aba5dfda16eea Mon Sep 17 00:00:00 2001 From: jopejoe1 Date: Sat, 20 Sep 2025 19:08:20 +0200 Subject: [PATCH 06/24] maintainers.teams: remove release-engineers form feature freez ping this github team no longer exists (cherry picked from commit be5db65b27cc3884d26e511861f16c793b37a516) --- maintainers/team-list.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/maintainers/team-list.nix b/maintainers/team-list.nix index da91d4d93beb..8ff4084d06de 100644 --- a/maintainers/team-list.nix +++ b/maintainers/team-list.nix @@ -394,7 +394,6 @@ with lib.maintainers; members = [ ]; githubTeams = [ "nixpkgs-committers" - "release-engineers" ]; scope = "Dummy team for the #everyone else' section during feture freezes, not to be used as package maintainers!"; shortName = "Everyone else"; From 8f1c6f978d21d2c0567080d8298cf6ddd5ad9e05 Mon Sep 17 00:00:00 2001 From: aleksana Date: Sun, 22 Jun 2025 11:42:20 +0800 Subject: [PATCH 07/24] teams/loongarch64: init (cherry-picked from commit 2ddd879d9e107094316303f217520e6b95111c71) --- maintainers/team-list.nix | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/maintainers/team-list.nix b/maintainers/team-list.nix index 8ff4084d06de..652806731c6e 100644 --- a/maintainers/team-list.nix +++ b/maintainers/team-list.nix @@ -769,6 +769,20 @@ with lib.maintainers; enableFeatureFreezePing = true; }; + loongarch64 = { + members = [ + aleksana + Cryolitia + darkyzhou + dramforever + wegank + ]; + githubTeams = [ "loongarch64" ]; + scope = "Maintain LoongArch64 related packages and code"; + shortName = "LoongArch64"; + enableFeatureFreezePing = true; + }; + lua = { githubTeams = [ "lua" ]; scope = "Maintain the lua ecosystem."; From 6572669720c4566e9e69f3a67c2466457f32b2bd Mon Sep 17 00:00:00 2001 From: Silvan Mosberger Date: Thu, 2 Oct 2025 00:28:28 +0200 Subject: [PATCH 08/24] lib.teams: Remove .githubTeams in favor of singular .github No team was using the feature of having multiple GitHub teams, and this would make it tricky to try to sync maintainer teams with GitHub teams. (cherry picked from commit 1ea51e1f1a72e6b698c70334a5ca42443176390e) --- lib/tests/teams.nix | 6 +- maintainers/scripts/feature-freeze-teams.pl | 8 +- maintainers/team-list.nix | 84 ++++++++++----------- 3 files changed, 47 insertions(+), 51 deletions(-) diff --git a/lib/tests/teams.nix b/lib/tests/teams.nix index 6cf3aa0ef27c..ffe746a781ca 100644 --- a/lib/tests/teams.nix +++ b/lib/tests/teams.nix @@ -27,9 +27,9 @@ let type = types.listOf (types.submodule (import ./maintainer-module.nix { inherit lib; })); default = [ ]; }; - githubTeams = lib.mkOption { - type = types.listOf types.str; - default = [ ]; + github = lib.mkOption { + type = types.str; + default = ""; }; }; }; diff --git a/maintainers/scripts/feature-freeze-teams.pl b/maintainers/scripts/feature-freeze-teams.pl index 1c1a5c00907d..7d7574837ed7 100755 --- a/maintainers/scripts/feature-freeze-teams.pl +++ b/maintainers/scripts/feature-freeze-teams.pl @@ -74,11 +74,9 @@ while (my ($team_nix_key, $team_config) = each %{$data}) { print {*STDERR} "$team_config->{shortName}:"; # GitHub Teams my @github_members; - if (defined $team_config->{githubTeams}) { - foreach (@{$team_config->{githubTeams}}) { - print {*STDERR} " \@NixOS/${_}"; - push @github_members, @{github_team_members($_, $github_user, $github_token)}; - } + if (defined $team_config->{github}) { + print {*STDERR} " \@NixOS/$team_config->{github}"; + push @github_members, @{github_team_members($team_config->{github}, $github_user, $github_token)}; } my %github_members = map { $_ => 1 } @github_members; # Members diff --git a/maintainers/team-list.nix b/maintainers/team-list.nix index 652806731c6e..efde28d4ae37 100644 --- a/maintainers/team-list.nix +++ b/maintainers/team-list.nix @@ -7,7 +7,7 @@ shortName = "foo"; # Optional enableFeatureFreezePing = true; - githubTeams = [ "my-subsystem" ]; + github = "my-subsystem"; }; where @@ -18,7 +18,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. - - `githubTeams` will ping specified GitHub teams as well + - `github` will ping the specified GitHub team as well More fields may be added in the future. @@ -54,7 +54,7 @@ with lib.maintainers; RossComputerGuy ]; scope = "Maintain Android-related tooling in nixpkgs."; - githubTeams = [ "android" ]; + github = "android"; shortName = "Android"; enableFeatureFreezePing = true; }; @@ -105,7 +105,7 @@ with lib.maintainers; minijackson yurrriq ]; - githubTeams = [ "beam" ]; + github = "beam"; scope = "Maintain BEAM-related packages and modules."; shortName = "BEAM"; enableFeatureFreezePing = true; @@ -183,7 +183,7 @@ with lib.maintainers; sigmasquadron tomodachi94 ]; - githubTeams = [ "categorization" ]; + github = "categorization"; scope = "Maintain the categorization system in Nixpkgs, per RFC 146. This team has authority over all categorization issues in Nixpkgs."; shortName = "Categorization"; }; @@ -196,7 +196,7 @@ with lib.maintainers; wolfgangwalther zowoq ]; - githubTeams = [ "nixpkgs-ci" ]; + github = "nixpkgs-ci"; scope = "Maintain Nixpkgs' in-tree Continuous Integration, including GitHub Actions."; shortName = "CI"; }; @@ -215,7 +215,7 @@ with lib.maintainers; members = [ floriansanderscc ]; scope = "Maintain Clever Cloud related packages."; shortName = "CleverCloud"; - githubTeams = [ "CleverCloud" ]; + github = "CleverCloud"; }; cloudposse = { @@ -253,7 +253,7 @@ with lib.maintainers; thefossguy michaelBelsanti ]; - githubTeams = [ "cosmic" ]; + github = "cosmic"; shortName = "cosmic"; scope = "Maintain the COSMIC DE and related packages."; enableFeatureFreezePing = true; @@ -277,7 +277,7 @@ with lib.maintainers; ]; scope = "Maintain CUDA-enabled packages"; shortName = "Cuda"; - githubTeams = [ "cuda-maintainers" ]; + github = "cuda-maintainers"; }; cyberus = { @@ -297,7 +297,7 @@ with lib.maintainers; reckenrode toonn ]; - githubTeams = [ "darwin-core" ]; + github = "darwin-core"; scope = "Maintain core platform support and packages for macOS and other Apple platforms."; shortName = "Darwin"; enableFeatureFreezePing = true; @@ -351,7 +351,7 @@ with lib.maintainers; docs = { members = [ ]; - githubTeams = [ "documentation-team" ]; + github = "documentation-team"; scope = "Maintain nixpkgs/NixOS documentation and tools for building it."; shortName = "Docs"; enableFeatureFreezePing = true; @@ -383,7 +383,7 @@ with lib.maintainers; enlightenment = { members = [ romildo ]; - githubTeams = [ "enlightenment" ]; + github = "enlightenment"; scope = "Maintain Enlightenment desktop environment and related packages."; shortName = "Enlightenment"; enableFeatureFreezePing = true; @@ -392,9 +392,7 @@ with lib.maintainers; # Dummy group for the "everyone else" section feature-freeze-everyone-else = { members = [ ]; - githubTeams = [ - "nixpkgs-committers" - ]; + github = "nixpkgs-committers"; scope = "Dummy team for the #everyone else' section during feture freezes, not to be used as package maintainers!"; shortName = "Everyone else"; enableFeatureFreezePing = true; @@ -410,7 +408,7 @@ with lib.maintainers; scope = "Maintain Flutter and Dart-related packages and build tools"; shortName = "flutter"; enableFeatureFreezePing = false; - githubTeams = [ "flutter" ]; + github = "flutter"; }; flyingcircus = { @@ -477,7 +475,7 @@ with lib.maintainers; sikmir willcohen ]; - githubTeams = [ "geospatial" ]; + github = "geospatial"; scope = "Maintain geospatial packages."; shortName = "Geospatial"; enableFeatureFreezePing = true; @@ -502,7 +500,7 @@ with lib.maintainers; jtojnar dasj19 ]; - githubTeams = [ "gnome" ]; + github = "gnome"; scope = "Maintain GNOME desktop environment and platform."; shortName = "GNOME"; enableFeatureFreezePing = true; @@ -527,7 +525,7 @@ with lib.maintainers; qbit mfrw ]; - githubTeams = [ "golang" ]; + github = "golang"; scope = "Maintain Golang compilers."; shortName = "Go"; enableFeatureFreezePing = true; @@ -551,7 +549,7 @@ with lib.maintainers; sternenseemann wolfgangwalther ]; - githubTeams = [ "haskell" ]; + github = "haskell"; scope = "Maintain Haskell packages and infrastructure."; shortName = "Haskell"; enableFeatureFreezePing = true; @@ -586,7 +584,7 @@ with lib.maintainers; khaneliman NotAShelf ]; - githubTeams = [ "hyprland" ]; + github = "hyprland"; scope = "Maintain Hyprland compositor and ecosystem"; shortName = "Hyprland"; enableFeatureFreezePing = true; @@ -612,7 +610,7 @@ with lib.maintainers; }; java = { - githubTeams = [ "java" ]; + github = "java"; members = [ chayleaf fliegendewurst @@ -657,7 +655,7 @@ with lib.maintainers; }; k3s = { - githubTeams = [ "k3s" ]; + github = "k3s"; members = [ euank frederictobiasc @@ -727,7 +725,7 @@ with lib.maintainers; uthar hraban ]; - githubTeams = [ "lisp" ]; + github = "lisp"; scope = "Maintain the Lisp ecosystem."; shortName = "lisp"; enableFeatureFreezePing = true; @@ -756,7 +754,7 @@ with lib.maintainers; rrbutani sternenseemann ]; - githubTeams = [ "llvm" ]; + github = "llvm"; scope = "Maintain LLVM package sets and related packages"; shortName = "LLVM"; enableFeatureFreezePing = true; @@ -777,14 +775,14 @@ with lib.maintainers; dramforever wegank ]; - githubTeams = [ "loongarch64" ]; + github = "loongarch64"; scope = "Maintain LoongArch64 related packages and code"; shortName = "LoongArch64"; enableFeatureFreezePing = true; }; lua = { - githubTeams = [ "lua" ]; + github = "lua"; scope = "Maintain the lua ecosystem."; shortName = "lua"; enableFeatureFreezePing = true; @@ -802,7 +800,7 @@ with lib.maintainers; lumina = { members = [ romildo ]; - githubTeams = [ "lumina" ]; + github = "lumina"; scope = "Maintain lumina desktop environment and related packages."; shortName = "Lumina"; enableFeatureFreezePing = true; @@ -822,7 +820,7 @@ with lib.maintainers; lxqt = { members = [ romildo ]; - githubTeams = [ "lxqt" ]; + github = "lxqt"; scope = "Maintain LXQt desktop environment and related packages."; shortName = "LXQt"; enableFeatureFreezePing = true; @@ -835,7 +833,7 @@ with lib.maintainers; thilobillerbeck tomberek ]; - githubTeams = [ "marketing-team" ]; + github = "marketing-team"; scope = "Marketing of Nix/NixOS/nixpkgs."; shortName = "Marketing"; enableFeatureFreezePing = true; @@ -907,7 +905,7 @@ with lib.maintainers; mrcjkb perchun ]; - githubTeams = [ "neovim" ]; + github = "neovim"; scope = "Maintain the vim and neovim text editors and related packages."; shortName = "Vim/Neovim"; }; @@ -966,7 +964,7 @@ with lib.maintainers; ocaml = { members = [ alizter ]; - githubTeams = [ "ocaml" ]; + github = "ocaml"; scope = "Maintain the OCaml compiler and package set."; shortName = "OCaml"; enableFeatureFreezePing = true; @@ -1004,7 +1002,7 @@ with lib.maintainers; davidak bobby285271 ]; - githubTeams = [ "pantheon" ]; + github = "pantheon"; scope = "Maintain Pantheon desktop environment and platform."; shortName = "Pantheon"; enableFeatureFreezePing = true; @@ -1029,7 +1027,7 @@ with lib.maintainers; piotrkwiecinski talyz ]; - githubTeams = [ "php" ]; + github = "php"; scope = "Maintain PHP related packages and extensions."; shortName = "PHP"; enableFeatureFreezePing = true; @@ -1040,7 +1038,7 @@ with lib.maintainers; saschagrunert vdemeester ]; - githubTeams = [ "podman" ]; + github = "podman"; scope = "Maintain Podman and CRI-O related packages and modules."; shortName = "Podman"; }; @@ -1076,7 +1074,7 @@ with lib.maintainers; SuperSandro2000 ttuegel ]; - githubTeams = [ "qt-kde" ]; + github = "qt-kde"; scope = "Maintain the Qt framework, KDE application suite, Plasma desktop environment and related projects."; shortName = "Qt / KDE"; enableFeatureFreezePing = true; @@ -1106,7 +1104,7 @@ with lib.maintainers; release = { members = [ ]; - githubTeams = [ "nixos-release-managers" ]; + github = "nixos-release-managers"; scope = "Manage the current nixpkgs/NixOS release."; shortName = "Release"; }; @@ -1118,7 +1116,7 @@ with lib.maintainers; LunNova mschwaig ]; - githubTeams = [ "rocm" ]; + github = "rocm"; scope = "Maintain ROCm and related packages."; shortName = "ROCm"; }; @@ -1138,7 +1136,7 @@ with lib.maintainers; winter zowoq ]; - githubTeams = [ "rust" ]; + github = "rust"; scope = "Maintain the Rust compiler toolchain and nixpkgs integration."; shortName = "Rust"; enableFeatureFreezePing = true; @@ -1163,7 +1161,7 @@ with lib.maintainers; marcin-serwin pbsds ]; - githubTeams = [ "SDL" ]; + github = "SDL"; scope = "Maintain core SDL libraries."; shortName = "SDL"; enableFeatureFreezePing = true; @@ -1194,7 +1192,7 @@ with lib.maintainers; scope = "Maintain the standard environment and its surrounding logic."; shortName = "stdenv"; enableFeatureFreezePing = true; - githubTeams = [ "stdenv" ]; + github = "stdenv"; }; steam = { @@ -1229,7 +1227,7 @@ with lib.maintainers; systemd = { members = [ ]; - githubTeams = [ "systemd" ]; + github = "systemd"; scope = "Maintain systemd for NixOS."; shortName = "systemd"; enableFeatureFreezePing = true; @@ -1269,7 +1267,7 @@ with lib.maintainers; scope = "Maintain the Xen Project Hypervisor and the related tooling ecosystem."; shortName = "Xen Project Hypervisor"; enableFeatureFreezePing = true; - githubTeams = [ "xen-project" ]; + github = "xen-project"; }; xfce = { From 6c86bef326f40f0d68d6de64e727d99e9815a5e3 Mon Sep 17 00:00:00 2001 From: zapashcanon Date: Wed, 8 Oct 2025 00:05:38 +0200 Subject: [PATCH 09/24] team/ocaml: add redianthus (cherry picked from commit 470d48fc2db23e93cd5161bb5758b318a99fdd7a) --- maintainers/team-list.nix | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/maintainers/team-list.nix b/maintainers/team-list.nix index efde28d4ae37..5269c8b28e73 100644 --- a/maintainers/team-list.nix +++ b/maintainers/team-list.nix @@ -963,7 +963,10 @@ with lib.maintainers; }; ocaml = { - members = [ alizter ]; + members = [ + alizter + redianthus + ]; github = "ocaml"; scope = "Maintain the OCaml compiler and package set."; shortName = "OCaml"; From 10027056b822afe3f78baf3f981be227532c2b88 Mon Sep 17 00:00:00 2001 From: Silvan Mosberger Date: Mon, 20 Oct 2025 17:16:47 +0200 Subject: [PATCH 10/24] maintainers/scripts/feature-freeze-teams.pl: Use GitHub CLI Makes it much easier and less involved to run (cherry picked from commit 264ca123977512396408e9ccd69fc5326e7dac5b) --- maintainers/scripts/feature-freeze-teams.pl | 39 ++++++--------------- 1 file changed, 10 insertions(+), 29 deletions(-) diff --git a/maintainers/scripts/feature-freeze-teams.pl b/maintainers/scripts/feature-freeze-teams.pl index 7d7574837ed7..4fdd8aab8f2b 100755 --- a/maintainers/scripts/feature-freeze-teams.pl +++ b/maintainers/scripts/feature-freeze-teams.pl @@ -1,11 +1,11 @@ #!/usr/bin/env nix-shell -#!nix-shell -i perl -p perl -p perlPackages.JSON perlPackages.LWPUserAgent perlPackages.LWPProtocolHttps perlPackages.TermReadKey +#!nix-shell -i perl -p perl -p perlPackages.JSON github-cli # This script generates a list of teams to ping for the Feature Freeze announcement on Discourse. # It's intended to be used by Release Managers before creating such posts. # -# The script interactively reads a GitHub username and a corresponding GitHub Personal Access token. -# This is required to access the GitHub Teams API so the token needs at least the read:org privilege. +# The script uses the credentials from the GitHub CLI (gh) +# This is required to access the GitHub Teams API so it needs at least the read:org privilege. ## no critic (InputOutput::RequireCheckedSyscalls, InputOutput::ProhibitBacktickOperators) use strict; @@ -14,39 +14,21 @@ use Carp; use Cwd 'abs_path'; use File::Basename; use JSON qw(decode_json); -use LWP::UserAgent; -use Term::ReadKey qw(ReadLine ReadMode); sub github_team_members { - my ($team_name, $username, $token) = @_; + my ($team_name) = @_; my @ret; - my $req = HTTP::Request->new('GET', "https://api.github.com/orgs/NixOS/teams/$team_name/members", [ 'Accept' => 'application/vnd.github.v3+json' ]); - $req->authorization_basic($username, $token); - my $response = LWP::UserAgent->new->request($req); - - if ($response->is_success) { - my $content = decode_json($response->decoded_content); - foreach (@{$content}) { - push @ret, $_->{'login'}; - } - } else { - print {*STDERR} "!! Requesting members of GitHub Team '$team_name' failed: " . $response->status_line; + my $content = decode_json(`gh api orgs/NixOS/teams/$team_name/members`); + foreach (@{$content}) { + push @ret, $_->{'login'}; } return \@ret; } -# Read GitHub credentials -print {*STDERR} 'GitHub username: '; -my $github_user = ReadLine(0); -ReadMode('noecho'); -print {*STDERR} 'GitHub personal access token (no echo): '; -my $github_token = ReadLine(0); -ReadMode('restore'); -print {*STDERR} "\n"; -chomp $github_user; -chomp $github_token; +`gh auth status` or die "`gh` comes from `pkgs.github-cli`, or in one command: +nix-shell -p github-cli --run 'gh auth login'\n"; # Read nix output my $nix_version = `nix --version`; @@ -60,7 +42,6 @@ if ($nix_version =~ m/2[.]3[.]/msx) { my $data = decode_json($out); # Process teams -print {*STDERR} "\n"; while (my ($team_nix_key, $team_config) = each %{$data}) { # Ignore teams that don't want to be or can't be pinged if (not defined $team_config->{enableFeatureFreezePing} or not $team_config->{enableFeatureFreezePing}) { @@ -76,7 +57,7 @@ while (my ($team_nix_key, $team_config) = each %{$data}) { my @github_members; if (defined $team_config->{github}) { print {*STDERR} " \@NixOS/$team_config->{github}"; - push @github_members, @{github_team_members($team_config->{github}, $github_user, $github_token)}; + push @github_members, @{github_team_members($team_config->{github})}; } my %github_members = map { $_ => 1 } @github_members; # Members From 1de170b39c781dc4042a9a89f4a746d724ddff75 Mon Sep 17 00:00:00 2001 From: Silvan Mosberger Date: Mon, 20 Oct 2025 17:19:00 +0200 Subject: [PATCH 11/24] maintainers/scripts/feature-freeze-teams.pl: Output result to stdout (cherry picked from commit e4a1af0847d36a9b8a3c3ead3950c634003d8074) --- maintainers/scripts/feature-freeze-teams.pl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/maintainers/scripts/feature-freeze-teams.pl b/maintainers/scripts/feature-freeze-teams.pl index 4fdd8aab8f2b..2854eca5655b 100755 --- a/maintainers/scripts/feature-freeze-teams.pl +++ b/maintainers/scripts/feature-freeze-teams.pl @@ -52,11 +52,11 @@ while (my ($team_nix_key, $team_config) = each %{$data}) { next; } # Team name - print {*STDERR} "$team_config->{shortName}:"; + print {*STDOUT} "$team_config->{shortName}:"; # GitHub Teams my @github_members; if (defined $team_config->{github}) { - print {*STDERR} " \@NixOS/$team_config->{github}"; + print {*STDOUT} " \@NixOS/$team_config->{github}"; push @github_members, @{github_team_members($team_config->{github})}; } my %github_members = map { $_ => 1 } @github_members; @@ -69,9 +69,9 @@ while (my ($team_nix_key, $team_config) = each %{$data}) { if (defined $github_members{$github_handle}) { next; } - print {*STDERR} " \@$github_handle"; + print {*STDOUT} " \@$github_handle"; } } - print {*STDERR} "\n"; + print {*STDOUT} "\n"; } From 2bf8058fbe59729809198038e246045c31b193df Mon Sep 17 00:00:00 2001 From: Silvan Mosberger Date: Mon, 20 Oct 2025 17:29:18 +0200 Subject: [PATCH 12/24] lib.teams: Remove unused teams (cherry picked from commit f3f9a335b5496ff8268258ea92e2093f1d5e5807) --- maintainers/team-list.nix | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/maintainers/team-list.nix b/maintainers/team-list.nix index 5269c8b28e73..fcc1646c554a 100644 --- a/maintainers/team-list.nix +++ b/maintainers/team-list.nix @@ -1105,13 +1105,6 @@ with lib.maintainers; shortName = "Red Code Labs"; }; - release = { - members = [ ]; - github = "nixos-release-managers"; - scope = "Manage the current nixpkgs/NixOS release."; - shortName = "Release"; - }; - rocm = { members = [ Flakebi @@ -1124,13 +1117,6 @@ with lib.maintainers; shortName = "ROCm"; }; - ruby = { - members = [ ]; - scope = "Maintain the Ruby interpreter and related packages."; - shortName = "Ruby"; - enableFeatureFreezePing = true; - }; - rust = { members = [ figsoda From cfacfa09f1210059c968956dfd4c82d7abb9c5dd Mon Sep 17 00:00:00 2001 From: Silvan Mosberger Date: Mon, 20 Oct 2025 17:30:23 +0200 Subject: [PATCH 13/24] lib.teams: Remove dummy Nixpkgs committers team and hardcode into feature freeze script There's no reason this needs to be exposed under `lib.teams` (cherry picked from commit 7ff3f688eef44651c0dc3cd9a30e73b79699a641) --- maintainers/scripts/feature-freeze-teams.pl | 2 ++ maintainers/team-list.nix | 9 --------- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/maintainers/scripts/feature-freeze-teams.pl b/maintainers/scripts/feature-freeze-teams.pl index 2854eca5655b..4b1dd409b794 100755 --- a/maintainers/scripts/feature-freeze-teams.pl +++ b/maintainers/scripts/feature-freeze-teams.pl @@ -75,3 +75,5 @@ while (my ($team_nix_key, $team_config) = each %{$data}) { print {*STDOUT} "\n"; } + +print {*STDOUT} "Everyone else: \@NixOS/nixpkgs-committers\n"; diff --git a/maintainers/team-list.nix b/maintainers/team-list.nix index fcc1646c554a..e17dd5386d99 100644 --- a/maintainers/team-list.nix +++ b/maintainers/team-list.nix @@ -389,15 +389,6 @@ with lib.maintainers; enableFeatureFreezePing = true; }; - # Dummy group for the "everyone else" section - feature-freeze-everyone-else = { - members = [ ]; - github = "nixpkgs-committers"; - scope = "Dummy team for the #everyone else' section during feture freezes, not to be used as package maintainers!"; - shortName = "Everyone else"; - enableFeatureFreezePing = true; - }; - flutter = { members = [ mkg20001 From f99778e2f5a907eafca2ba4edb503305b8dd8b62 Mon Sep 17 00:00:00 2001 From: Silvan Mosberger Date: Sat, 11 Oct 2025 02:23:44 +0200 Subject: [PATCH 14/24] lib.teams: Some changes based on current GitHub state Including: - Removing a `.github` for a team that doesn't exist - Adding people to `lib.teams` that are part of the GitHub team but were never part of the team in `lib.teams` - Adjusting capitalisation of a linked GitHub team While there's more differences, all others should be done on the GitHub side, because it's things like adding/removing team members that have added/removed themselves to/from `lib.teams` in the past. (cherry picked from commit ff336e2ecdbc377b6fcaad25171d7d5fd6209839) --- maintainers/team-list.nix | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/maintainers/team-list.nix b/maintainers/team-list.nix index e17dd5386d99..2d8d15bd993f 100644 --- a/maintainers/team-list.nix +++ b/maintainers/team-list.nix @@ -215,7 +215,6 @@ with lib.maintainers; members = [ floriansanderscc ]; scope = "Maintain Clever Cloud related packages."; shortName = "CleverCloud"; - github = "CleverCloud"; }; cloudposse = { @@ -350,7 +349,11 @@ with lib.maintainers; }; docs = { - members = [ ]; + members = [ + alejandrosame + wamirez + hsjobeki + ]; github = "documentation-team"; scope = "Maintain nixpkgs/NixOS documentation and tools for building it."; shortName = "Docs"; @@ -607,6 +610,7 @@ with lib.maintainers; fliegendewurst infinidoge tomodachi94 + msgilligan ]; shortName = "Java"; scope = "Maintainers of the Nixpkgs Java ecosystem (JDK, JVM, Java, Gradle, Maven, Ant, and adjacent projects)"; @@ -773,6 +777,13 @@ with lib.maintainers; }; lua = { + members = [ + raskin + khaneliman + teto + arobyn + scoder12 + ]; github = "lua"; scope = "Maintain the lua ecosystem."; shortName = "lua"; @@ -957,6 +968,8 @@ with lib.maintainers; members = [ alizter redianthus + romildo + ulrikstrid ]; github = "ocaml"; scope = "Maintain the OCaml compiler and package set."; @@ -1067,6 +1080,11 @@ with lib.maintainers; 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."; @@ -1141,7 +1159,7 @@ with lib.maintainers; marcin-serwin pbsds ]; - github = "SDL"; + github = "sdl"; scope = "Maintain core SDL libraries."; shortName = "SDL"; enableFeatureFreezePing = true; From 159b3d1136918659f09204a79cb70c151f9d91a7 Mon Sep 17 00:00:00 2001 From: Silvan Mosberger Date: Sat, 11 Oct 2025 02:24:46 +0200 Subject: [PATCH 15/24] workflows/team-sync: init Creates a team sync workflow that pushes the current state of teams to a JSON file, which can then be ingested by `lib.teams` to expose member lists. Co-Authored-By: Alexander Bantyev (cherry picked from commit c0c66842579a9606d5e2eced724bad794d7c2f1d) --- .github/workflows/team.yml | 81 ++++++++++++++++++++++++++++++++++ ci/github-script/get-teams.js | 82 +++++++++++++++++++++++++++++++++++ ci/github-script/run | 12 +++++ 3 files changed, 175 insertions(+) create mode 100644 .github/workflows/team.yml create mode 100755 ci/github-script/get-teams.js diff --git a/.github/workflows/team.yml b/.github/workflows/team.yml new file mode 100644 index 000000000000..099ea882aa7c --- /dev/null +++ b/.github/workflows/team.yml @@ -0,0 +1,81 @@ +name: Teams + +on: + schedule: + # Every Tuesday at 19:42 (randomly chosen) + - cron: '42 19 * * 1' + + # Allows manual trigger + workflow_dispatch: + +permissions: {} + +defaults: + run: + shell: bash + +jobs: + sync: + runs-on: ubuntu-24.04-arm + steps: + - uses: actions/create-github-app-token@67018539274d69449ef7c02e8e71183d1719ab42 # v2.1.4 + id: team-token + with: + app-id: ${{ vars.OWNER_APP_ID }} + private-key: ${{ secrets.OWNER_APP_PRIVATE_KEY }} + permission-administration: read + permission-members: read + - name: Fetch source + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + sparse-checkout: | + ci/github-script + maintainers/github-teams.json + - name: Install dependencies + run: npm install bottleneck + - name: Synchronise teams + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 + with: + github-token: ${{ steps.team-token.outputs.token }} + script: | + require('./ci/github-script/get-teams.js')({ + github, + context, + core, + outFile: "maintainers/github-teams.json" + }) + + # Use a GitHub App to create the PR so that CI gets triggered + - uses: actions/create-github-app-token@67018539274d69449ef7c02e8e71183d1719ab42 # v2.1.4 + id: sync-token + with: + app-id: ${{ vars.NIXPKGS_CI_APP_ID }} + private-key: ${{ secrets.NIXPKGS_CI_APP_PRIVATE_KEY }} + permission-contents: write + permission-pull-requests: write + - name: Get GitHub App User Git String + id: user + env: + GH_TOKEN: ${{ steps.sync-token.outputs.token }} + APP_SLUG: ${{ steps.sync-token.outputs.app-slug }} + run: | + name="${APP_SLUG}[bot]" + userId=$(gh api "/users/$name" --jq .id) + email="$userId+$name@users.noreply.github.com" + echo "git-string=$name <$email>" >> "$GITHUB_OUTPUT" + - name: Create Pull Request + uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8 + with: + token: ${{ steps.sync-token.outputs.token }} + add-paths: maintainers/github-teams.json + author: ${{ steps.user.outputs.git-string }} + committer: ${{ steps.user.outputs.git-string }} + commit-message: "maintainers/github-teams.json: Automated sync" + branch: github-team-sync + title: "maintainers/github-teams.json: Automated sync" + body: | + This is an automated PR to sync the GitHub teams with access to this repository to the `lib.teams` list. + + This PR can be merged without taking any further action. + diff --git a/ci/github-script/get-teams.js b/ci/github-script/get-teams.js new file mode 100755 index 000000000000..9b6d3333f91f --- /dev/null +++ b/ci/github-script/get-teams.js @@ -0,0 +1,82 @@ +const excludeTeams = [ + /^voters.*$/, + /^nixpkgs-maintainers$/, + /^nixpkgs-committers$/, +] + +module.exports = async ({ github, context, core, outFile }) => { + const withRateLimit = require('./withRateLimit.js') + const { writeFileSync } = require('node:fs') + const result = {} + await withRateLimit({ github, core }, async (_stats) => { + /// Turn an Array of users into an Object, mapping user.login -> user.id + function makeUserSet(users) { + // Sort in-place and build result by mutation + users.sort((a, b) => (a.login > b.login ? 1 : -1)) + + return users.reduce((acc, user) => { + acc[user.login] = user.id + return acc + }, {}) + } + + /// Process a list of teams and append to the result variable + async function processTeams(teams) { + for (const team of teams) { + core.notice(`Processing team ${team.slug}`) + if (!excludeTeams.some((regex) => team.slug.match(regex))) { + const members = makeUserSet( + await github.paginate(github.rest.teams.listMembersInOrg, { + org: context.repo.owner, + team_slug: team.slug, + role: 'member', + }), + ) + const maintainers = makeUserSet( + await github.paginate(github.rest.teams.listMembersInOrg, { + org: context.repo.owner, + team_slug: team.slug, + role: 'maintainer', + }), + ) + result[team.slug] = { + description: team.description, + id: team.id, + maintainers, + members, + name: team.name, + } + } + await processTeams( + await github.paginate(github.rest.teams.listChildInOrg, { + org: context.repo.owner, + team_slug: team.slug, + }), + ) + } + } + + const teams = await github.paginate(github.rest.repos.listTeams, { + owner: context.repo.owner, + repo: context.repo.repo, + }) + + await processTeams(teams) + }) + + // Sort the teams by team name + const sorted = Object.keys(result) + .sort() + .reduce((acc, key) => { + acc[key] = result[key] + return acc + }, {}) + + const json = `${JSON.stringify(sorted, null, 2)}\n` + + if (outFile) { + writeFileSync(outFile, json) + } else { + console.log(json) + } +} diff --git a/ci/github-script/run b/ci/github-script/run index 1d974cf5355f..2d5121b75b7e 100755 --- a/ci/github-script/run +++ b/ci/github-script/run @@ -83,4 +83,16 @@ program } }) +program + .command('get-teams') + .description('Fetch the list of teams with GitHub and output it to a file') + .argument('', 'Owner of the GitHub repository to label (Example: NixOS)') + .argument('', 'Name of the GitHub repository to label (Example: nixpkgs)') + .argument('[outFile]', 'Path to the output file (Example: github-teams.json). If not set, prints to stdout') + .action(async (owner, repo, outFile, options) => { + const getTeams = (await import('./get-teams.js')).default + // TODO: Refactor this file so we don't need to pass a PR + await run(getTeams, owner, repo, undefined, { ...options, outFile }) + }) + await program.parse() From 2e8ba5b20b3ef1bd01154d62a9cecd9c0c648d31 Mon Sep 17 00:00:00 2001 From: Silvan Mosberger Date: Sat, 11 Oct 2025 02:25:17 +0200 Subject: [PATCH 16/24] maintainers/github-teams.json: Automated sync (cherry picked from commit 22406446cd35069f6d1fa3de854dc1fc90c936ee) --- ci/OWNERS | 1 + maintainers/github-teams.json | 980 ++++++++++++++++++++++++++++++++++ 2 files changed, 981 insertions(+) create mode 100644 maintainers/github-teams.json diff --git a/ci/OWNERS b/ci/OWNERS index 824e13400b3f..99f30514d23d 100644 --- a/ci/OWNERS +++ b/ci/OWNERS @@ -32,6 +32,7 @@ /lib/asserts.nix @infinisil @hsjobeki @Profpatsch /lib/path/* @infinisil @hsjobeki /lib/fileset @infinisil @hsjobeki +/maintainers/github-teams.json @infinisil ## Standard environment–related libraries /lib/customisation.nix @alyssais @NixOS/stdenv /lib/derivations.nix @alyssais @NixOS/stdenv diff --git a/maintainers/github-teams.json b/maintainers/github-teams.json new file mode 100644 index 000000000000..1b6707fedff1 --- /dev/null +++ b/maintainers/github-teams.json @@ -0,0 +1,980 @@ +{ + "acme": { + "description": "Maintain ACME-related packages and modules.", + "id": 3806126, + "maintainers": {}, + "members": { + "arianvp": 628387, + "emilazy": 18535642, + "m1cr0man": 3044438 + }, + "name": "ACME" + }, + "agda": { + "description": "Maintain Agda-related packages and modules", + "id": 14416551, + "maintainers": { + "alexarice": 17208985, + "ncfavier": 4323933, + "turion": 303489 + }, + "members": { + "phijor": 10487782 + }, + "name": "agda" + }, + "android": { + "description": "Maintain Android-related tooling in nixpkgs", + "id": 11821955, + "maintainers": { + "RossComputerGuy": 19699320, + "numinit": 369111 + }, + "members": { + "JohnRTitor": 50095635, + "adrian-gierakowski": 330177, + "hadilq": 5190539 + }, + "name": "Android" + }, + "bazel": { + "description": "Maintenance of https://bazel.build/ and related packages", + "id": 5468470, + "maintainers": { + "Profpatsch": 3153638 + }, + "members": { + "aherrmann": 732652, + "avdv": 3471749, + "ethercrow": 222467, + "groodt": 343415, + "kalbasit": 87115, + "mboes": 51356, + "uri-canva": 33242106 + }, + "name": "Bazel" + }, + "beam": { + "description": "Maintain BEAM-related packages and modules.", + "id": 4502493, + "maintainers": { + "happysalada": 5317234 + }, + "members": { + "Br1ght0ne": 12615679, + "DianaOlympos": 15774340, + "adamcstephens": 2071575, + "ankhers": 750786, + "gleber": 33185, + "yurrriq": 1866448 + }, + "name": "Beam" + }, + "bootstrapping": { + "description": "coordinates efforts towards bootstrappable builds (see https://bootstrappable.org/)", + "id": 9141350, + "maintainers": { + "zeuner": 2545850 + }, + "members": { + "philiptaron": 43863 + }, + "name": "bootstrapping" + }, + "categorization": { + "description": "Maintain the categorization system in Nixpkgs, per RFC 0146. This team has authority over all categorization issues in Nixpkgs. Matrix: https://matrix.to/#/%23nixpkgs-categorization:matrix.org", + "id": 11723948, + "maintainers": { + "7c6f434c": 1891350, + "Aleksanaa": 42209822, + "GetPsyched": 43472218, + "Lyndeno": 13490857, + "SigmaSquadron": 174749595, + "fgaz": 8182846, + "natsukium": 25083790, + "philiptaron": 43863, + "pyrotelekinetic": 29682759, + "tomodachi94": 68489118 + }, + "members": {}, + "name": "Categorization" + }, + "channel-updaters": { + "description": "Users who can update the Nixpkgs/NixOS channels", + "id": 3475569, + "maintainers": {}, + "members": { + "nixos-channel-bot": 56695723 + }, + "name": "channel-updaters" + }, + "coq": { + "description": "Coq proof assistant and package maintainers", + "id": 7617261, + "maintainers": { + "Alizter": 8614547, + "Zimmi48": 1108325, + "vbgl": 2612464 + }, + "members": {}, + "name": "Coq" + }, + "cosmic": { + "description": "Maintain the COSMIC DE and related packages.", + "id": 12734494, + "maintainers": { + "alyssais": 2768870, + "nyabinary": 97130632 + }, + "members": { + "HeitorAugustoLN": 44377258, + "Pandapip1": 45835846, + "a-kenji": 65275785, + "ahoneybun": 4884946, + "drakon64": 6444703, + "griffi-gh": 45996170, + "michaelBelsanti": 62124625, + "thefossguy": 44400303 + }, + "name": "COSMIC" + }, + "crystal-lang": { + "description": "The Crystal Lang eco-system", + "id": 3806663, + "maintainers": { + "peterhoeg": 722550 + }, + "members": { + "Br1ght0ne": 12615679, + "manveru": 3507 + }, + "name": "crystal-lang" + }, + "cuda-maintainers": { + "description": "All things CUDA and deep learning!", + "id": 5704451, + "maintainers": { + "ConnorBaker": 3880346, + "SomeoneSerge": 9720532, + "samuela": 226872 + }, + "members": { + "GaetanLepage": 33058747 + }, + "name": "cuda-maintainers" + }, + "darwin-core": { + "description": "Maintains core platform support and packages for macOS and other Apple platforms.", + "id": 11265438, + "maintainers": { + "emilazy": 18535642 + }, + "members": { + "reckenrode": 7413633, + "toonn": 1486805 + }, + "name": "darwin-core" + }, + "darwin-maintainers": { + "description": "Improve Darwin-support across Nixpkgs and help maintainers without access to Darwin hardware. Apply to join through https://github.com/NixOS/nixpkgs/issues/323144 to keep the process transparent.", + "id": 2385202, + "maintainers": { + "toonn": 1486805 + }, + "members": { + "0xMRTT": 105598867, + "21CSM": 81891917, + "Aleksanaa": 42209822, + "CorbanR": 1918683, + "Emin017": 99674037, + "Et7f3": 29592775, + "FlameFlag": 57304299, + "Guanran928": 68757440, + "LnL7": 689294, + "Mastermindaxe": 33257997, + "Moraxyc": 69713071, + "Prince213": 25235514, + "Samasaur1": 30577766, + "Sciencentistguy": 4983935, + "Steven0351": 24440751, + "afh": 16507, + "azuwis": 9315, + "booxter": 90200, + "carlossless": 498906, + "cideM": 4246921, + "cidkidnix": 67574902, + "copumpkin": 2623, + "devusb": 4951663, + "domenkozar": 126339, + "donn": 12652988, + "dwt": 57199, + "eliandoran": 21236836, + "emilazy": 18535642, + "ethancedwards8": 60861925, + "fiddlerwoaroof": 808745, + "frogamic": 10263813, + "gador": 1883533, + "griff": 4368, + "groodt": 343415, + "gshpychka": 23005347, + "hexagonal-sun": 222664, + "heywoodlh": 18178614, + "iedame": 60272, + "isabelroses": 71222764, + "jonhermansen": 660911, + "juliusrickert": 5007494, + "jwiegley": 8460, + "kashw2": 15855440, + "kevingriffin": 209729, + "khaneliman": 1778670, + "kloenk": 12898828, + "konradmalik": 13033392, + "kubukoz": 894884, + "lutzmor": 9321736, + "magistau": 43097806, + "maljub01": 350635, + "martinjlowm": 110860, + "matteo-pacini": 3139724, + "matthewbauer": 19036, + "mexisme": 329349, + "mikroskeem": 3490861, + "mirkolenz": 5160954, + "mstone": 412508, + "n8henrie": 1234956, + "niklaskorz": 590517, + "ofalvai": 1694986, + "pasqui23": 6931743, + "prusnak": 42201, + "pupbrained": 33522919, + "reckenrode": 7413633, + "ryand56": 22267679, + "samrose": 115821, + "sarahec": 11277967, + "shaunsingh": 71196912, + "sikmir": 688044, + "siraben": 8219659, + "siriobalmelli": 23038812, + "starcraft66": 1858154, + "stepbrobd": 81826728, + "stephank": 89950, + "stephenstubbs": 18033664, + "t-monaghan": 62273348, + "thefloweringash": 42933, + "tricktron": 16036882, + "uncenter": 47499684, + "uri-canva": 33242106, + "usertam": 22500027, + "veprbl": 245573, + "viraptor": 188063, + "wegank": 9713184, + "willcohen": 5185341, + "willjr": 5904828, + "wldhx": 15619766, + "yeongsheng-tan": 809030, + "youhaveme9": 58213083, + "yzx9": 41458459, + "zachcoyle": 908716 + }, + "name": "darwin-maintainers" + }, + "documentation-team": { + "description": "https://nixos.org/community/teams/documentation", + "id": 6590023, + "maintainers": { + "alejandrosame": 1078000, + "fricklerhandwerk": 6599296 + }, + "members": { + "hsjobeki": 50398876, + "wamirez": 24505474 + }, + "name": "Documentation Team" + }, + "dotnet": { + "description": "Maintain the .NET ecosystem in nixpkgs", + "id": 8173604, + "maintainers": { + "corngood": 3077118, + "mdarocha": 11572618 + }, + "members": { + "GGG-KILLER": 5892127, + "IvarWithoutBones": 41924494, + "JamieMagee": 1358764, + "anpin": 6060545, + "meenzen": 22305878, + "raphaelr": 121178 + }, + "name": "Dotnet" + }, + "emacs": { + "description": "", + "id": 2516946, + "maintainers": { + "jian-lin": 75130626, + "matthewbauer": 19036 + }, + "members": { + "AndersonTorres": 5954806, + "adisbladis": 63286, + "panchoh": 471059, + "ttuegel": 563054 + }, + "name": "emacs" + }, + "enlightenment": { + "description": "Maintainers of the Enlightenment Desktop Environment", + "id": 5937665, + "maintainers": { + "romildo": 1217934 + }, + "members": {}, + "name": "Enlightenment" + }, + "exotic-platform-maintainers": { + "description": "", + "id": 3727378, + "maintainers": { + "Ericson2314": 1055245, + "matthewbauer": 19036 + }, + "members": { + "aaronjanse": 16829510, + "alyssais": 2768870, + "emilytrau": 13267947, + "minijackson": 1200507, + "r-burns": 52847440, + "siraben": 8219659, + "sternenseemann": 3154475 + }, + "name": "exotic-platform-maintainers" + }, + "flutter": { + "description": "", + "id": 7718198, + "maintainers": { + "RossComputerGuy": 19699320 + }, + "members": { + "FlafyDev": 44374434, + "hacker1024": 20849728, + "mkg20001": 7735145 + }, + "name": "Flutter" + }, + "freedesktop": { + "description": "Maintain Freedesktop.org packages for graphical desktop.", + "id": 3806136, + "maintainers": {}, + "members": { + "jtojnar": 705123 + }, + "name": "Freedesktop" + }, + "geospatial": { + "description": "Maintain geospatial packages", + "id": 7084621, + "maintainers": { + "imincik": 476346 + }, + "members": { + "das-g": 97746, + "nh2": 399535, + "nialov": 47318483, + "sikmir": 688044, + "willcohen": 5185341 + }, + "name": "Geospatial" + }, + "gitlab": { + "description": "Maintain GitLab-related packages and modules", + "id": 8157777, + "maintainers": { + "leona-ya": 11006031, + "xanderio": 6298052, + "yayayayaka": 73759599 + }, + "members": { + "talyz": 63433 + }, + "name": "GitLab" + }, + "gnome": { + "description": "Maintain GNOME desktop environment and platform.", + "id": 3806133, + "maintainers": {}, + "members": { + "hedning": 71978, + "jtojnar": 705123 + }, + "name": "GNOME" + }, + "golang": { + "description": "", + "id": 4020424, + "maintainers": { + "Mic92": 96200, + "kalbasit": 87115, + "zowoq": 59103226 + }, + "members": { + "katexochen": 49727155, + "mfrw": 4929861, + "qbit": 68368 + }, + "name": "golang" + }, + "haskell": { + "description": "The nixpkgs Haskell team", + "id": 4769723, + "maintainers": { + "cdepillabout": 64804, + "maralorn": 1651325, + "peti": 28323, + "sternenseemann": 3154475 + }, + "members": { + "expipiplus1": 857308, + "wolfgangwalther": 9132420 + }, + "name": "Haskell" + }, + "hyprland": { + "description": "Maintain Hyprland compositor and ecosystem.", + "id": 12048885, + "maintainers": { + "khaneliman": 1778670 + }, + "members": { + "JohnRTitor": 50095635, + "NotAShelf": 62766066, + "donovanglover": 2374245, + "fufexan": 36706276 + }, + "name": "hyprland" + }, + "java": { + "description": "Maintainers of the Nixpkgs Java ecosystem (JDK, JVM, Java, Gradle, Maven, Ant, and adjacent projects); frequently lingering in #jvm:nixos.org on Matrix", + "id": 11412419, + "maintainers": { + "FliegendeWurst": 12560461, + "Infinidoge": 22727114, + "chayleaf": 9590981, + "tomodachi94": 68489118 + }, + "members": { + "msgilligan": 61612 + }, + "name": "Java" + }, + "k3s": { + "description": "Lightweight Kubernetes maintainer team (k3s)", + "id": 7725877, + "maintainers": { + "Mic92": 96200, + "euank": 2147649, + "marcusramberg": 5526, + "wrmilling": 6162814, + "yajo": 973709 + }, + "members": { + "frederictobiasc": 26125115, + "superherointj": 5861043 + }, + "name": "k3s" + }, + "kodi": { + "description": "Maintain Kodi related packages.", + "id": 4642467, + "maintainers": { + "aanderse": 7755101 + }, + "members": { + "cpages": 411324, + "edwtjo": 54799, + "minijackson": 1200507, + "peterhoeg": 722550, + "sephalon": 893474 + }, + "name": "kodi" + }, + "kubernetes": { + "description": "", + "id": 5536808, + "maintainers": { + "johanot": 998763, + "offlinehacker": 585547, + "saschagrunert": 695473, + "srhb": 219362 + }, + "members": {}, + "name": "kubernetes" + }, + "linux-kernel": { + "description": "", + "id": 13371617, + "maintainers": { + "alyssais": 2768870 + }, + "members": { + "K900": 386765, + "Ma27": 6025220, + "NeQuissimus": 628342, + "TredwellGit": 61860346 + }, + "name": "Linux kernel" + }, + "lisp": { + "description": "The nixpkgs Lisp team", + "id": 7678368, + "maintainers": { + "7c6f434c": 1891350, + "Uthar": 15697697, + "hraban": 137852, + "lukego": 13791, + "nagy": 692274 + }, + "members": {}, + "name": "lisp" + }, + "lix-maintainers": { + "description": "Lix maintainers in nixpkgs/NixOS", + "id": 13838744, + "maintainers": { + "lf-": 6652840 + }, + "members": { + "9999years": 15312184, + "Qyriad": 1542224, + "RaitoBezarius": 314564, + "alois31": 36605164 + }, + "name": "Lix maintainers" + }, + "llvm": { + "description": "Maintain LLVM package sets and related packages", + "id": 9955829, + "maintainers": { + "RossComputerGuy": 19699320, + "alyssais": 2768870 + }, + "members": { + "Ericson2314": 1055245, + "dtzWill": 817330, + "emilazy": 18535642, + "lovek323": 265084, + "rrbutani": 7833358, + "sternenseemann": 3154475 + }, + "name": "LLVM" + }, + "loongarch64": { + "description": "Maintain LoongArch64 related packages and code", + "id": 13371619, + "maintainers": { + "Aleksanaa": 42209822 + }, + "members": { + "Cryolitia": 23723294, + "darkyzhou": 7220778, + "dramforever": 2818072, + "wegank": 9713184 + }, + "name": "loongarch64" + }, + "lua": { + "description": "Deals with lua ecosystem", + "id": 5255750, + "maintainers": { + "teto": 886074 + }, + "members": { + "7c6f434c": 1891350, + "Shados": 338268, + "khaneliman": 1778670, + "spencerpogo": 34356756 + }, + "name": "lua" + }, + "lumina": { + "description": "Maintainers of the Lumina Desktop Environment", + "id": 5937661, + "maintainers": { + "romildo": 1217934 + }, + "members": {}, + "name": "Lumina" + }, + "lxc": { + "description": "LXC, LXD, Incus", + "id": 9223525, + "maintainers": { + "adamcstephens": 2071575 + }, + "members": { + "aanderse": 7755101, + "jnsgruk": 668505, + "megheaiulian": 1788114, + "mkg20001": 7735145 + }, + "name": "LXC" + }, + "lxqt": { + "description": "Maintainers of the LXQt Desktop Environment", + "id": 5937679, + "maintainers": { + "romildo": 1217934 + }, + "members": {}, + "name": "LXQt" + }, + "mate": { + "description": "Maintainers of the MATE Desktop Environment", + "id": 5937667, + "maintainers": { + "romildo": 1217934 + }, + "members": { + "bobby285271": 20080233 + }, + "name": "MATE" + }, + "neovim": { + "description": "Maintains neovim ecosystem", + "id": 6748534, + "maintainers": { + "GaetanLepage": 33058747 + }, + "members": { + "PerchunPak": 68118654, + "khaneliman": 1778670, + "mrcjkb": 12857160 + }, + "name": "neovim" + }, + "nix-formatting": { + "description": "Team to maintain the official Nix formatter and apply it to Nixpkgs", + "id": 9676823, + "maintainers": { + "infinisil": 20525370, + "jfly": 277474 + }, + "members": { + "0x4A6F": 9675338, + "MattSturgeon": 5046562, + "Sereja313": 112060595, + "dasJ": 4971975, + "piegamesde": 14054505 + }, + "name": "nix-formatting" + }, + "nix-team": { + "description": "", + "id": 174820, + "maintainers": { + "tomberek": 178444 + }, + "members": { + "Ericson2314": 1055245, + "Mic92": 96200, + "edolstra": 1148549, + "xokdvium": 145775305 + }, + "name": "Nix team" + }, + "nixos-release-managers": { + "description": "Team of Release Managers.", + "id": 3620128, + "maintainers": { + "jopejoe1": 34899572, + "leona-ya": 11006031 + }, + "members": {}, + "name": "nixos-release-managers" + }, + "nixpkgs-ci": { + "description": "Maintaining Nixpkgs CI", + "id": 13362067, + "maintainers": { + "philiptaron": 43863, + "wolfgangwalther": 9132420 + }, + "members": { + "MattSturgeon": 5046562, + "Mic92": 96200, + "zowoq": 59103226 + }, + "name": "Nixpkgs CI" + }, + "nixpkgs-core": { + "description": "Provides leadership for and has authority over Nixpkgs.", + "id": 14317027, + "maintainers": { + "K900": 386765, + "alyssais": 2768870, + "emilazy": 18535642, + "wolfgangwalther": 9132420 + }, + "members": {}, + "name": "Nixpkgs core" + }, + "nixpkgs-merge-bot": { + "description": "This team exists as a target for triggering the nixpkgs merge bot.", + "id": 13926892, + "maintainers": {}, + "members": {}, + "name": "nixpkgs-merge-bot" + }, + "node": { + "description": "Maintains Node.js runtimes and build tooling.\r\n\r\n\"JS is hecked, thanks for coming to my TED Talk\" - @lilyinstarlight", + "id": 7309872, + "maintainers": { + "lilyinstarlight": 298109, + "winterqt": 78392041 + }, + "members": {}, + "name": "Node" + }, + "ocaml": { + "description": "Maintain the ecosystem around OCaml in Nixpkgs", + "id": 7553013, + "maintainers": { + "Alizter": 8614547, + "romildo": 1217934, + "superherointj": 5861043, + "ulrikstrid": 1607770 + }, + "members": { + "redianthus": 16472988 + }, + "name": "OCaml" + }, + "pantheon": { + "description": "Maintainers of the Pantheon desktop", + "id": 4786995, + "maintainers": { + "davidak": 91113 + }, + "members": { + "bobby285271": 20080233 + }, + "name": "Pantheon" + }, + "php": { + "description": "Maintain PHP related packages and extensions.", + "id": 3806182, + "maintainers": {}, + "members": { + "Ma27": 6025220, + "aanderse": 7755101, + "drupol": 252042, + "globin": 1447245, + "talyz": 63433 + }, + "name": "php" + }, + "podman": { + "description": "Maintain Podman and CRI-O related packages and modules.", + "id": 3806184, + "maintainers": {}, + "members": { + "saschagrunert": 695473, + "vdemeester": 6508 + }, + "name": "podman" + }, + "postgres": { + "description": "Maintain the PostgreSQL package and plugins along with the NixOS module.", + "id": 11455958, + "maintainers": { + "Ma27": 6025220, + "thoughtpolice": 3416, + "wolfgangwalther": 9132420 + }, + "members": {}, + "name": "postgres" + }, + "qt-kde": { + "description": "Maintain the Qt framework, KDE Frameworks and Applications, and Plasma desktop", + "id": 4341481, + "maintainers": { + "ttuegel": 563054 + }, + "members": { + "FRidh": 2129135, + "SCOTT-HAMILTON": 24496705, + "bkchr": 5718007, + "nyanloutre": 7677321, + "peterhoeg": 722550 + }, + "name": "Qt-KDE" + }, + "reproducible": { + "description": "Team that is interested in reproducible builds", + "id": 7625643, + "maintainers": { + "raboof": 131856, + "zimbatm": 3248 + }, + "members": { + "Artturin": 56650223, + "Atemu": 18599032, + "RaitoBezarius": 314564, + "davidak": 91113, + "mschwaig": 3856390 + }, + "name": "reproducible" + }, + "risc-v": { + "description": "RISC-V team", + "id": 13425811, + "maintainers": { + "0x4A6F": 9675338 + }, + "members": { + "DarkKirb": 23011243, + "dramforever": 2818072, + "fgaz": 8182846, + "jonhermansen": 660911 + }, + "name": "RISC-V" + }, + "rocm": { + "description": "AMD ROCm stack and related", + "id": 6921873, + "maintainers": { + "mschwaig": 3856390 + }, + "members": { + "Flakebi": 6499211, + "GZGavinZhao": 74938940, + "LunNova": 782440 + }, + "name": "rocm" + }, + "rust": { + "description": "", + "id": 7304571, + "maintainers": { + "Mic92": 96200, + "figsoda": 40620903, + "winterqt": 78392041, + "zowoq": 59103226 + }, + "members": { + "tjni": 3806110 + }, + "name": "rust" + }, + "scala": { + "description": "Maintain Scala-related packages and modules.", + "id": 11193149, + "maintainers": { + "dottybot": 12519979, + "hamzaremmal": 56235032 + }, + "members": { + "natsukagami": 9061737 + }, + "name": "Scala" + }, + "sdl": { + "description": "Maintain core SDL libraries", + "id": 13033942, + "maintainers": { + "pbsds": 140964 + }, + "members": { + "LordGrimmauld": 49513131, + "evysgarden": 92547295, + "jansol": 2588851, + "marcin-serwin": 12128106 + }, + "name": "SDL" + }, + "security": { + "description": "Private reports: security@nixos.org", + "id": 2197543, + "maintainers": { + "LeSuisse": 737767, + "mweinelt": 131599, + "risicle": 807447 + }, + "members": {}, + "name": "Security" + }, + "static": { + "description": "People interested in static builds (creation of `.a` files, fully static executables, etc.) and keeping them working", + "id": 5906550, + "maintainers": { + "nh2": 399535 + }, + "members": { + "Ericson2314": 1055245, + "aherrmann": 732652, + "alyssais": 2768870, + "basvandijk": 576355, + "cdepillabout": 64804, + "dtzWill": 817330, + "lorenzleutgeb": 542154, + "matthewbauer": 19036, + "r-burns": 52847440, + "rnhmjoj": 2817565, + "sternenseemann": 3154475 + }, + "name": "static" + }, + "stdenv": { + "description": "Maintain the standard environment and its surrounding logic.", + "id": 11265412, + "maintainers": { + "RossComputerGuy": 19699320 + }, + "members": { + "Artturin": 56650223, + "Ericson2314": 1055245, + "emilazy": 18535642, + "philiptaron": 43863, + "reckenrode": 7413633 + }, + "name": "stdenv" + }, + "systemd": { + "description": "systemd on NixOS.", + "id": 3894007, + "maintainers": { + "flokli": 183879 + }, + "members": { + "ElvishJerricco": 1365692, + "LordGrimmauld": 49513131, + "aanderse": 7755101, + "arianvp": 628387 + }, + "name": "systemd" + }, + "xen-project": { + "description": "Maintains the Xen Project ecosystem on Nixpkgs. Members listed as \"Maintainers\" are recipients of Xen Security Advisories sent to xsa@nixos.org.", + "id": 11127725, + "maintainers": { + "CertainLach": 6235312, + "SigmaSquadron": 174749595, + "hehongbo": 665472 + }, + "members": { + "digitalrane": 1829286 + }, + "name": "Xen Project" + }, + "xfce": { + "description": "Maintainers of the Xfce Desktop Environment", + "id": 5421745, + "maintainers": { + "romildo": 1217934 + }, + "members": { + "bobby285271": 20080233 + }, + "name": "Xfce" + } +} From 5098220df2ed6497d9375d6d0a6c512deea5729c Mon Sep 17 00:00:00 2001 From: Silvan Mosberger Date: Sat, 11 Oct 2025 02:25:48 +0200 Subject: [PATCH 17/24] maintainers/github-teams.json: Manual adjustment of necessary changes This makes `lib.teams` be in sync with the GitHub state. Add the marketing-team so that all teams in `lib.teams` can be requested for reviews. Add these members to the respective teams: - beam: minijackson (53e70ab75490df87a165d704a9e98312b3f5137b) - beam: savtrip (f9ff37cdc3ade4bc45f501af0e7f7520a9543f1c) - cuda: prusnak (748896a2db6cafb61e6b29dfa71f904293443f6b) - geospatial: autra (7de303b4518766db2ddca9dfcbdc823430fe3869) - geospatial: l0b0 (510eb5118acff1546bb0037c6f3168496675e1e8) - gnome: bobby285271 (066634e509988232b435cf2e64c778ec4508a4b4) - gnome: dasj19 (c57c9362815e48681e9a52ec86cf81e38fe1ce6c) - k3s: heywoodlh (2ca18a8b175c961eef8aa3637c490de833fcccef) - k3s: rorosen (b9f397d445b52316eaf08b9d5072fe194ab482ec) - php: piotrkwiecinski (148e322192b7a451344fe335cc38b95043ee37d4) - qt-kde: mjm (f6bb8a922fef75dd6a81af0cfe25daca6e3b9c4b) - qt-kde: NickCao (f6bb8a922fef75dd6a81af0cfe25daca6e3b9c4b) - qt-kde: ilya-fedin (f6bb8a922fef75dd6a81af0cfe25daca6e3b9c4b) - qt-kde: K900 (f6bb8a922fef75dd6a81af0cfe25daca6e3b9c4b) - qt-kde: SuperSandro2000 (f6bb8a922fef75dd6a81af0cfe25daca6e3b9c4b) - qt-kde: LunNova (f6bb8a922fef75dd6a81af0cfe25daca6e3b9c4b) Remove these members from the respective teams: - geospatial: das-g (b93d987a8441384a6bac336318b1582d52305412) - haskell: expipiplus1 (e134422465913332a5c9cb3ec9161650f7d459c8) - haskell: peti (https://github.com/NixOS/nixpkgs/pull/450864#issuecomment-3431029084) - k3s: yajo (8b238112108d8c366856434a3e617f60cd250758) - k3s: superherointj (7354bda2081a43cfe13f7df67b09af90b309615a) - ocaml: superherointj (7354bda2081a43cfe13f7df67b09af90b309615a) - php: drupol (cabc16dc599da7ca2b320fafe80e256d0dfa5b94) - php: globin (e5d552f5b94c26e574a6333060d0864760034ee3) - documentation-team: fricklerhandwerk (https://discourse.nixos.org/t/the-next-chapter-in-nix-documentation/68425) Copy these team descriptions from `lib.teams.*.scope` to the GitHub team description: - nixpkgs-ci: Maintain Nixpkgs' in-tree Continuous Integration, including GitHub Actions - cuda: Maintain CUDA-enabled packages - darwin: Maintain core platform support and packages for macOS and other Apple platforms - documentation-team: Maintain nixpkgs/NixOS documentation and tools for building it. https://nixos.org/community/teams/documentation - enlightenment: Maintain Enlightenment desktop environment and related packages - flutter: Maintain Flutter and Dart-related packages and build tools - geospatial: Maintain geospatial, remote sensing and OpenStreetMap software - golang: Maintain Golang compilers - haskell: Maintain Haskell packages and infrastructure - k3s: Maintain K3s package, NixOS module, NixOS tests, update script - lisp: Maintain the Lisp ecosystem - lua: Maintain the lua ecosystem - lumina: Maintain lumina desktop environment and related packages - lxqt: Maintain LXQt desktop environment and related packages - neovim: Maintain the vim and neovim text editors and related packages - ocaml: Maintain the OCaml compiler and package set - pantheon: Maintain Pantheon desktop environment and platform - qt-kde: Maintain the Qt framework, KDE application suite, Plasma desktop environment and related projects - nixos-release-managers: Manage the current nixpkgs/NixOS release - rocm: Maintain ROCm and related packages - rust: Maintain the Rust compiler toolchain and nixpkgs integration - systemd: Maintain systemd for NixOS - xen-project: Maintain the Xen Project Hypervisor and the related tooling ecosystem (cherry picked from commit 6d89dcd57701a839654f78afc62466b94e55a3b2) --- maintainers/github-teams.json | 90 +++++++++++++++++++++-------------- 1 file changed, 55 insertions(+), 35 deletions(-) diff --git a/maintainers/github-teams.json b/maintainers/github-teams.json index 1b6707fedff1..b08521a210c7 100644 --- a/maintainers/github-teams.json +++ b/maintainers/github-teams.json @@ -66,6 +66,8 @@ "adamcstephens": 2071575, "ankhers": 750786, "gleber": 33185, + "minijackson": 1200507, + "savtrip": 42227195, "yurrriq": 1866448 }, "name": "Beam" @@ -151,7 +153,7 @@ "name": "crystal-lang" }, "cuda-maintainers": { - "description": "All things CUDA and deep learning!", + "description": "Maintain CUDA-enabled packages", "id": 5704451, "maintainers": { "ConnorBaker": 3880346, @@ -159,12 +161,13 @@ "samuela": 226872 }, "members": { - "GaetanLepage": 33058747 + "GaetanLepage": 33058747, + "prusnak": 42201 }, "name": "cuda-maintainers" }, "darwin-core": { - "description": "Maintains core platform support and packages for macOS and other Apple platforms.", + "description": "Maintain core platform support and packages for macOS and other Apple platforms", "id": 11265438, "maintainers": { "emilazy": 18535642 @@ -278,11 +281,10 @@ "name": "darwin-maintainers" }, "documentation-team": { - "description": "https://nixos.org/community/teams/documentation", + "description": "Maintain nixpkgs/NixOS documentation and tools for building it. https://nixos.org/community/teams/documentation", "id": 6590023, "maintainers": { - "alejandrosame": 1078000, - "fricklerhandwerk": 6599296 + "alejandrosame": 1078000 }, "members": { "hsjobeki": 50398876, @@ -323,7 +325,7 @@ "name": "emacs" }, "enlightenment": { - "description": "Maintainers of the Enlightenment Desktop Environment", + "description": "Maintain Enlightenment desktop environment and related packages", "id": 5937665, "maintainers": { "romildo": 1217934 @@ -350,7 +352,7 @@ "name": "exotic-platform-maintainers" }, "flutter": { - "description": "", + "description": "Maintain Flutter and Dart-related packages and build tools", "id": 7718198, "maintainers": { "RossComputerGuy": 19699320 @@ -372,13 +374,14 @@ "name": "Freedesktop" }, "geospatial": { - "description": "Maintain geospatial packages", + "description": "Maintain geospatial, remote sensing and OpenStreetMap software", "id": 7084621, "maintainers": { "imincik": 476346 }, "members": { - "das-g": 97746, + "autra": 1576598, + "l0b0": 168301, "nh2": 399535, "nialov": 47318483, "sikmir": 688044, @@ -404,13 +407,15 @@ "id": 3806133, "maintainers": {}, "members": { + "bobby285271": 20080233, + "dasj19": 7589338, "hedning": 71978, "jtojnar": 705123 }, "name": "GNOME" }, "golang": { - "description": "", + "description": "Maintain Golang compilers", "id": 4020424, "maintainers": { "Mic92": 96200, @@ -425,16 +430,14 @@ "name": "golang" }, "haskell": { - "description": "The nixpkgs Haskell team", + "description": "Maintain Haskell packages and infrastructure", "id": 4769723, "maintainers": { "cdepillabout": 64804, "maralorn": 1651325, - "peti": 28323, "sternenseemann": 3154475 }, "members": { - "expipiplus1": 857308, "wolfgangwalther": 9132420 }, "name": "Haskell" @@ -468,18 +471,18 @@ "name": "Java" }, "k3s": { - "description": "Lightweight Kubernetes maintainer team (k3s)", + "description": "Maintain K3s package, NixOS module, NixOS tests, update script", "id": 7725877, "maintainers": { "Mic92": 96200, "euank": 2147649, "marcusramberg": 5526, - "wrmilling": 6162814, - "yajo": 973709 + "wrmilling": 6162814 }, "members": { "frederictobiasc": 26125115, - "superherointj": 5861043 + "heywoodlh": 18178614, + "rorosen": 76747196 }, "name": "k3s" }, @@ -525,7 +528,7 @@ "name": "Linux kernel" }, "lisp": { - "description": "The nixpkgs Lisp team", + "description": "Maintain the Lisp ecosystem", "id": 7678368, "maintainers": { "7c6f434c": 1891350, @@ -583,7 +586,7 @@ "name": "loongarch64" }, "lua": { - "description": "Deals with lua ecosystem", + "description": "Maintain the lua ecosystem", "id": 5255750, "maintainers": { "teto": 886074 @@ -597,7 +600,7 @@ "name": "lua" }, "lumina": { - "description": "Maintainers of the Lumina Desktop Environment", + "description": "Maintain lumina desktop environment and related packages", "id": 5937661, "maintainers": { "romildo": 1217934 @@ -620,7 +623,7 @@ "name": "LXC" }, "lxqt": { - "description": "Maintainers of the LXQt Desktop Environment", + "description": "Maintain LXQt desktop environment and related packages", "id": 5937679, "maintainers": { "romildo": 1217934 @@ -628,6 +631,19 @@ "members": {}, "name": "LXQt" }, + "marketing-team": { + "description": "Marketing team [leader=@djacu]", + "id": 7709512, + "maintainers": { + "djacu": 7043297, + "tomberek": 178444 + }, + "members": { + "flyfloh": 74379, + "thilobillerbeck": 7442383 + }, + "name": "Marketing Team" + }, "mate": { "description": "Maintainers of the MATE Desktop Environment", "id": 5937667, @@ -640,7 +656,7 @@ "name": "MATE" }, "neovim": { - "description": "Maintains neovim ecosystem", + "description": "Maintain the vim and neovim text editors and related packages", "id": 6748534, "maintainers": { "GaetanLepage": 33058747 @@ -683,7 +699,7 @@ "name": "Nix team" }, "nixos-release-managers": { - "description": "Team of Release Managers.", + "description": "Manage the current nixpkgs/NixOS release", "id": 3620128, "maintainers": { "jopejoe1": 34899572, @@ -693,7 +709,7 @@ "name": "nixos-release-managers" }, "nixpkgs-ci": { - "description": "Maintaining Nixpkgs CI", + "description": "Maintain Nixpkgs' in-tree Continuous Integration, including GitHub Actions", "id": 13362067, "maintainers": { "philiptaron": 43863, @@ -736,12 +752,11 @@ "name": "Node" }, "ocaml": { - "description": "Maintain the ecosystem around OCaml in Nixpkgs", + "description": "Maintain the OCaml compiler and package set", "id": 7553013, "maintainers": { "Alizter": 8614547, "romildo": 1217934, - "superherointj": 5861043, "ulrikstrid": 1607770 }, "members": { @@ -750,7 +765,7 @@ "name": "OCaml" }, "pantheon": { - "description": "Maintainers of the Pantheon desktop", + "description": "Maintain Pantheon desktop environment and platform", "id": 4786995, "maintainers": { "davidak": 91113 @@ -767,8 +782,7 @@ "members": { "Ma27": 6025220, "aanderse": 7755101, - "drupol": 252042, - "globin": 1447245, + "piotrkwiecinski": 2151333, "talyz": 63433 }, "name": "php" @@ -795,15 +809,21 @@ "name": "postgres" }, "qt-kde": { - "description": "Maintain the Qt framework, KDE Frameworks and Applications, and Plasma desktop", + "description": "Maintain the Qt framework, KDE application suite, Plasma desktop environment and related projects", "id": 4341481, "maintainers": { "ttuegel": 563054 }, "members": { "FRidh": 2129135, + "K900": 386765, + "LunNova": 782440, + "NickCao": 15247171, "SCOTT-HAMILTON": 24496705, + "SuperSandro2000": 7258858, "bkchr": 5718007, + "ilya-fedin": 17829319, + "mjm": 1181, "nyanloutre": 7677321, "peterhoeg": 722550 }, @@ -840,7 +860,7 @@ "name": "RISC-V" }, "rocm": { - "description": "AMD ROCm stack and related", + "description": "Maintain ROCm and related packages", "id": 6921873, "maintainers": { "mschwaig": 3856390 @@ -853,7 +873,7 @@ "name": "rocm" }, "rust": { - "description": "", + "description": "Maintain the Rust compiler toolchain and nixpkgs integration", "id": 7304571, "maintainers": { "Mic92": 96200, @@ -940,7 +960,7 @@ "name": "stdenv" }, "systemd": { - "description": "systemd on NixOS.", + "description": "Maintain systemd for NixOS", "id": 3894007, "maintainers": { "flokli": 183879 @@ -954,7 +974,7 @@ "name": "systemd" }, "xen-project": { - "description": "Maintains the Xen Project ecosystem on Nixpkgs. Members listed as \"Maintainers\" are recipients of Xen Security Advisories sent to xsa@nixos.org.", + "description": "Maintain the Xen Project Hypervisor and the related tooling ecosystem. Members listed as \"Maintainers\" are recipients of Xen Security Advisories sent to xsa@nixos.org.", "id": 11127725, "maintainers": { "CertainLach": 6235312, From 2a57eba10889968df7b776694ec95697ec66a765 Mon Sep 17 00:00:00 2001 From: Silvan Mosberger Date: Sat, 11 Oct 2025 02:26:51 +0200 Subject: [PATCH 18/24] lib.teams: Populate fields from synced GitHub state The before and after of nix-instantiate --eval -A lib.teams --strict --json | jq 'walk(if type == "array" then sort else . end)' has been ensured to be negligible, only consisting of minor team shortName and scope differences (cherry picked from commit 428bd8f1a256bf7864a63134b96005517c1aa371) --- ci/OWNERS | 1 + lib/default.nix | 2 +- maintainers/README.md | 1 - maintainers/computed-team-list.nix | 49 +++++ maintainers/team-list.nix | 312 +---------------------------- 5 files changed, 52 insertions(+), 313 deletions(-) create mode 100644 maintainers/computed-team-list.nix diff --git a/ci/OWNERS b/ci/OWNERS index 99f30514d23d..af78c93fc30c 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 d1a1d28b8d53..657545714448 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 313bee9411ee..367b9f6cb5b7 100644 --- a/maintainers/README.md +++ b/maintainers/README.md @@ -164,7 +164,6 @@ team after giving the existing members a few days to respond. *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. - # Maintainer scripts Various utility scripts, which are mainly useful for nixpkgs maintainers, 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 2d8d15bd993f..d8611bd95258 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. @@ -46,16 +44,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; }; @@ -95,19 +84,7 @@ with lib.maintainers; }; beam = { - members = [ - adamcstephens - ankhers - Br1ght0ne - DianaOlympos - gleber - happysalada - minijackson - yurrriq - ]; github = "beam"; - scope = "Maintain BEAM-related packages and modules."; - shortName = "BEAM"; enableFeatureFreezePing = true; }; @@ -171,34 +148,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 = { @@ -240,21 +194,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; }; @@ -268,14 +208,6 @@ with lib.maintainers; }; cuda = { - members = [ - connorbaker - prusnak - samuela - SomeoneSerge - ]; - scope = "Maintain CUDA-enabled packages"; - shortName = "Cuda"; github = "cuda-maintainers"; }; @@ -291,14 +223,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; }; @@ -349,14 +274,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; }; @@ -385,22 +303,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"; }; @@ -460,18 +367,7 @@ with lib.maintainers; }; geospatial = { - members = [ - autra - imincik - l0b0 - nh2 - nialov - sikmir - willcohen - ]; github = "geospatial"; - scope = "Maintain geospatial packages."; - shortName = "Geospatial"; enableFeatureFreezePing = true; }; @@ -488,15 +384,7 @@ with lib.maintainers; }; gnome = { - members = [ - bobby285271 - hedning - jtojnar - dasj19 - ]; github = "gnome"; - scope = "Maintain GNOME desktop environment and platform."; - shortName = "GNOME"; enableFeatureFreezePing = true; }; @@ -511,17 +399,7 @@ with lib.maintainers; }; golang = { - members = [ - kalbasit - katexochen - mic92 - zowoq - qbit - mfrw - ]; github = "golang"; - scope = "Maintain Golang compilers."; - shortName = "Go"; enableFeatureFreezePing = true; }; @@ -537,15 +415,7 @@ with lib.maintainers; }; haskell = { - members = [ - cdepillabout - maralorn - sternenseemann - wolfgangwalther - ]; github = "haskell"; - scope = "Maintain Haskell packages and infrastructure."; - shortName = "Haskell"; enableFeatureFreezePing = true; }; @@ -571,16 +441,7 @@ with lib.maintainers; }; hyprland = { - members = [ - donovanglover - fufexan - johnrtitor - khaneliman - NotAShelf - ]; github = "hyprland"; - scope = "Maintain Hyprland compositor and ecosystem"; - shortName = "Hyprland"; enableFeatureFreezePing = true; }; @@ -605,15 +466,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; }; @@ -651,16 +503,6 @@ with lib.maintainers; k3s = { github = "k3s"; - members = [ - euank - frederictobiasc - marcusramberg - mic92 - rorosen - wrmilling - ]; - scope = "Maintain K3s package, NixOS module, NixOS tests, update script"; - shortName = "K3s"; }; kodi = { @@ -713,16 +555,7 @@ with lib.maintainers; }; lisp = { - members = [ - raskin - lukego - nagy - uthar - hraban - ]; github = "lisp"; - scope = "Maintain the Lisp ecosystem."; - shortName = "lisp"; enableFeatureFreezePing = true; }; @@ -740,18 +573,7 @@ with lib.maintainers; }; llvm = { - members = [ - dtzWill - ericson2314 - lovek323 - qyliss - RossComputerGuy - rrbutani - sternenseemann - ]; github = "llvm"; - scope = "Maintain LLVM package sets and related packages"; - shortName = "LLVM"; enableFeatureFreezePing = true; }; @@ -763,30 +585,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; }; @@ -801,10 +605,7 @@ with lib.maintainers; }; lumina = { - members = [ romildo ]; github = "lumina"; - scope = "Maintain lumina desktop environment and related packages."; - shortName = "Lumina"; enableFeatureFreezePing = true; }; @@ -821,23 +622,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; }; @@ -901,15 +691,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 = { @@ -965,15 +747,7 @@ with lib.maintainers; }; ocaml = { - members = [ - alizter - redianthus - romildo - ulrikstrid - ]; github = "ocaml"; - scope = "Maintain the OCaml compiler and package set."; - shortName = "OCaml"; enableFeatureFreezePing = true; }; @@ -1005,13 +779,7 @@ with lib.maintainers; }; pantheon = { - members = [ - davidak - bobby285271 - ]; github = "pantheon"; - scope = "Maintain Pantheon desktop environment and platform."; - shortName = "Pantheon"; enableFeatureFreezePing = true; }; @@ -1027,27 +795,12 @@ with lib.maintainers; }; php = { - members = [ - aanderse - drupol - 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 = { @@ -1072,23 +825,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; }; @@ -1115,28 +852,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; }; @@ -1152,16 +872,7 @@ with lib.maintainers; }; sdl = { - members = [ - evythedemon - grimmauld - jansol - marcin-serwin - pbsds - ]; github = "sdl"; - scope = "Maintain core SDL libraries."; - shortName = "SDL"; enableFeatureFreezePing = true; }; @@ -1179,16 +890,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"; }; @@ -1224,10 +925,7 @@ with lib.maintainers; }; systemd = { - members = [ ]; github = "systemd"; - scope = "Maintain systemd for NixOS."; - shortName = "systemd"; enableFeatureFreezePing = true; }; @@ -1256,14 +954,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"; }; From 2e0cd80b3531a8098f009f8d9f94a6c8b72f1cb7 Mon Sep 17 00:00:00 2001 From: Silvan Mosberger Date: Sat, 11 Oct 2025 02:34:54 +0200 Subject: [PATCH 19/24] lib.teams: Add githubMaintainers field This is so you can figure out who to ask to get added to the team Also avoid an unecessary `{ inherit lib; }` argument (cherry picked from commit ddf8b5da4a6d7fc8b30387e5a5626b0309967cca) --- lib/tests/teams.nix | 6 +++++- maintainers/computed-team-list.nix | 1 + maintainers/team-list.nix | 4 ++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/tests/teams.nix b/lib/tests/teams.nix index ffe746a781ca..726e7f63a8e9 100644 --- a/lib/tests/teams.nix +++ b/lib/tests/teams.nix @@ -24,13 +24,17 @@ let default = false; }; members = lib.mkOption { - type = types.listOf (types.submodule (import ./maintainer-module.nix { inherit lib; })); + type = types.listOf (types.submodule ./maintainer-module.nix); default = [ ]; }; github = lib.mkOption { type = types.str; default = ""; }; + githubMaintainers = lib.mkOption { + type = types.listOf (types.submodule ./maintainer-module.nix); + default = [ ]; + }; }; }; diff --git a/maintainers/computed-team-list.nix b/maintainers/computed-team-list.nix index f9413d76e453..bcb8a0f9c237 100644 --- a/maintainers/computed-team-list.nix +++ b/maintainers/computed-team-list.nix @@ -43,6 +43,7 @@ lib.mapAttrs ( members = maintainerSetToList attrs.github githubTeam.maintainers ++ maintainerSetToList attrs.github githubTeam.members; + githubMaintainers = maintainerSetToList attrs.github githubTeam.maintainers; } else attrs diff --git a/maintainers/team-list.nix b/maintainers/team-list.nix index d8611bd95258..9e6ead158edd 100644 --- a/maintainers/team-list.nix +++ b/maintainers/team-list.nix @@ -18,6 +18,10 @@ or larger ecosystems within nixpkgs. - `github` will ping the specified GitHub team and sync the `members`, `scope` and `shortName` fields from it + If `github` is specified and you'd like to be added to the team, contact one of the `githubMaintainers` of the team: + + nix eval -f lib teams.someTeam.githubMaintainers --json | jq + More fields may be added in the future. When editing this file: From 1d47e0e7924aed47f73a66ca6b5e415dd39edf8e Mon Sep 17 00:00:00 2001 From: Silvan Mosberger Date: Wed, 22 Oct 2025 17:07:07 +0200 Subject: [PATCH 20/24] lib.teams: Add githubId from associated github teams This will allow the code for https://github.com/NixOS/nixpkgs/issues/447514 to make sure that the right team is requested for review, even if it has been renamed in the meantime. While the matching is currently based on the teams slug/name and not the id, renames won't cause problems with `lib.teams`, because CI would error if there's no match. Changing this can be future work. (cherry picked from commit 7636389851e31bf2f5d7712c009105e33a66a750) --- lib/tests/teams.nix | 4 ++++ maintainers/computed-team-list.nix | 9 +++++++++ maintainers/team-list.nix | 1 + 3 files changed, 14 insertions(+) diff --git a/lib/tests/teams.nix b/lib/tests/teams.nix index 726e7f63a8e9..ed7db2b873f1 100644 --- a/lib/tests/teams.nix +++ b/lib/tests/teams.nix @@ -31,6 +31,10 @@ let type = types.str; default = ""; }; + githubId = lib.mkOption { + type = types.int; + default = 0; + }; githubMaintainers = lib.mkOption { type = types.listOf (types.submodule ./maintainer-module.nix); default = [ ]; diff --git a/maintainers/computed-team-list.nix b/maintainers/computed-team-list.nix index bcb8a0f9c237..7ee37f4283e3 100644 --- a/maintainers/computed-team-list.nix +++ b/maintainers/computed-team-list.nix @@ -20,6 +20,8 @@ let ); in +# TODO: Consider automatically exposing all GitHub teams under `lib.teams`, +# so that no manual PRs are necessary to add such teams anymore lib.mapAttrs ( name: attrs: if attrs ? github then @@ -28,6 +30,12 @@ lib.mapAttrs ( 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 + # TODO: Consider specifying `githubId` in team-list.nix and inferring `github` from it (or even dropping it) + # This would make renames easier because no additional place needs to keep track of them. + # Though in a future where all Nixpkgs GitHub teams are automatically exposed under `lib.teams`, + # this would also not be an issue anymore. + assert lib.assertMsg (!attrs ? githubId) + "lib.teams.${name}: Both `githubId` and `github` is set, but the former is synced from the latter"; 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 ( @@ -38,6 +46,7 @@ lib.mapAttrs ( ) "lib.teams.${name}: Both `members` and `github` is set, but the former is synced from the latter"; attrs // { + githubId = githubTeam.id; shortName = githubTeam.name; scope = githubTeam.description; members = diff --git a/maintainers/team-list.nix b/maintainers/team-list.nix index 9e6ead158edd..dee121458e18 100644 --- a/maintainers/team-list.nix +++ b/maintainers/team-list.nix @@ -17,6 +17,7 @@ - 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 and sync the `members`, `scope` and `shortName` fields from it + - `githubId` will be set automatically based on `github` If `github` is specified and you'd like to be added to the team, contact one of the `githubMaintainers` of the team: From 86a5657eff87a15cdf058a0867d0ca4b4450e407 Mon Sep 17 00:00:00 2001 From: Wolfgang Walther Date: Tue, 28 Oct 2025 11:39:37 +0100 Subject: [PATCH 21/24] workflows/teams: rename from team Keeping the workflow filename in-sync with the visible name. (cherry picked from commit 42de52d21a8dd9a4097836aeb06cabf9d52d3de8) --- .github/workflows/{team.yml => teams.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{team.yml => teams.yml} (100%) diff --git a/.github/workflows/team.yml b/.github/workflows/teams.yml similarity index 100% rename from .github/workflows/team.yml rename to .github/workflows/teams.yml From 73f9536aa4f8a69533c9220dca7158bbf6e9e2b8 Mon Sep 17 00:00:00 2001 From: Wolfgang Walther Date: Tue, 28 Oct 2025 11:43:07 +0100 Subject: [PATCH 22/24] workflows/teams: consistent style with other workflows These are style-only formatting changes, that are not enforced via tooling - but used consistently in the other workflow files. (cherry picked from commit 81005856bb8a20a720950f450445e5888e28b1c0) --- .github/workflows/teams.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/teams.yml b/.github/workflows/teams.yml index 099ea882aa7c..67ffdf053a80 100644 --- a/.github/workflows/teams.yml +++ b/.github/workflows/teams.yml @@ -4,8 +4,6 @@ on: schedule: # Every Tuesday at 19:42 (randomly chosen) - cron: '42 19 * * 1' - - # Allows manual trigger workflow_dispatch: permissions: {} @@ -25,6 +23,7 @@ jobs: private-key: ${{ secrets.OWNER_APP_PRIVATE_KEY }} permission-administration: read permission-members: read + - name: Fetch source uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: @@ -32,8 +31,10 @@ jobs: sparse-checkout: | ci/github-script maintainers/github-teams.json + - name: Install dependencies run: npm install bottleneck + - name: Synchronise teams uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 with: @@ -54,6 +55,7 @@ jobs: private-key: ${{ secrets.NIXPKGS_CI_APP_PRIVATE_KEY }} permission-contents: write permission-pull-requests: write + - name: Get GitHub App User Git String id: user env: @@ -64,6 +66,7 @@ jobs: userId=$(gh api "/users/$name" --jq .id) email="$userId+$name@users.noreply.github.com" echo "git-string=$name <$email>" >> "$GITHUB_OUTPUT" + - name: Create Pull Request uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8 with: From 963857162592e3c43c5f37ae6ba7c0fc82471488 Mon Sep 17 00:00:00 2001 From: Wolfgang Walther Date: Tue, 28 Oct 2025 11:53:23 +0100 Subject: [PATCH 23/24] ci/github-script/teams: use consistent style These are style-only changes, that are not enforced via tooling - but used mostly consistently in the other github-script files. (cherry picked from commit 3df31aa2555f467b0dcd7d2c6d26a3a465c1e27e) --- ci/github-script/get-teams.js | 19 +++++++++++-------- ci/github-script/run | 1 - 2 files changed, 11 insertions(+), 9 deletions(-) mode change 100755 => 100644 ci/github-script/get-teams.js diff --git a/ci/github-script/get-teams.js b/ci/github-script/get-teams.js old mode 100755 new mode 100644 index 9b6d3333f91f..0a097d23eb2f --- a/ci/github-script/get-teams.js +++ b/ci/github-script/get-teams.js @@ -7,9 +7,13 @@ const excludeTeams = [ module.exports = async ({ github, context, core, outFile }) => { const withRateLimit = require('./withRateLimit.js') const { writeFileSync } = require('node:fs') + + const org = context.repo.owner + const result = {} - await withRateLimit({ github, core }, async (_stats) => { - /// Turn an Array of users into an Object, mapping user.login -> user.id + + await withRateLimit({ github, core }, async () => { + // Turn an Array of users into an Object, mapping user.login -> user.id function makeUserSet(users) { // Sort in-place and build result by mutation users.sort((a, b) => (a.login > b.login ? 1 : -1)) @@ -20,21 +24,21 @@ module.exports = async ({ github, context, core, outFile }) => { }, {}) } - /// Process a list of teams and append to the result variable + // Process a list of teams and append to the result variable async function processTeams(teams) { for (const team of teams) { core.notice(`Processing team ${team.slug}`) if (!excludeTeams.some((regex) => team.slug.match(regex))) { const members = makeUserSet( await github.paginate(github.rest.teams.listMembersInOrg, { - org: context.repo.owner, + org, team_slug: team.slug, role: 'member', }), ) const maintainers = makeUserSet( await github.paginate(github.rest.teams.listMembersInOrg, { - org: context.repo.owner, + org, team_slug: team.slug, role: 'maintainer', }), @@ -49,7 +53,7 @@ module.exports = async ({ github, context, core, outFile }) => { } await processTeams( await github.paginate(github.rest.teams.listChildInOrg, { - org: context.repo.owner, + org, team_slug: team.slug, }), ) @@ -57,8 +61,7 @@ module.exports = async ({ github, context, core, outFile }) => { } const teams = await github.paginate(github.rest.repos.listTeams, { - owner: context.repo.owner, - repo: context.repo.repo, + ...context.repo, }) await processTeams(teams) diff --git a/ci/github-script/run b/ci/github-script/run index 2d5121b75b7e..782e3fa7db1f 100755 --- a/ci/github-script/run +++ b/ci/github-script/run @@ -91,7 +91,6 @@ program .argument('[outFile]', 'Path to the output file (Example: github-teams.json). If not set, prints to stdout') .action(async (owner, repo, outFile, options) => { const getTeams = (await import('./get-teams.js')).default - // TODO: Refactor this file so we don't need to pass a PR await run(getTeams, owner, repo, undefined, { ...options, outFile }) }) From ca4cada790ce1f8c5d8d146e19c42f46a5f7af99 Mon Sep 17 00:00:00 2001 From: Silvan Mosberger Date: Tue, 28 Oct 2025 01:20:12 +0100 Subject: [PATCH 24/24] workflows/team: Prefix PR branch with create-pull-request Allows better scoping of branch creation restrictions (cherry picked from commit 72d9fc32fe1b4b7613b5505d647b82a5b8ba6014) --- .github/workflows/teams.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/teams.yml b/.github/workflows/teams.yml index 67ffdf053a80..1cd54cd527e0 100644 --- a/.github/workflows/teams.yml +++ b/.github/workflows/teams.yml @@ -75,7 +75,7 @@ jobs: author: ${{ steps.user.outputs.git-string }} committer: ${{ steps.user.outputs.git-string }} commit-message: "maintainers/github-teams.json: Automated sync" - branch: github-team-sync + branch: pr/github-team-sync title: "maintainers/github-teams.json: Automated sync" body: | This is an automated PR to sync the GitHub teams with access to this repository to the `lib.teams` list.