[25.05] lib.teams: Sync from GitHub (members/shortName/scope) (#456422)

This commit is contained in:
Wolfgang Walther
2025-10-28 16:10:42 +00:00
committed by GitHub
12 changed files with 1334 additions and 380 deletions

84
.github/workflows/teams.yml vendored Normal file
View File

@@ -0,0 +1,84 @@
name: Teams
on:
schedule:
# Every Tuesday at 19:42 (randomly chosen)
- cron: '42 19 * * 1'
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: 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.
This PR can be merged without taking any further action.

View File

@@ -32,6 +32,8 @@
/lib/asserts.nix @infinisil @hsjobeki @Profpatsch
/lib/path/* @infinisil @hsjobeki
/lib/fileset @infinisil @hsjobeki
/maintainers/github-teams.json @infinisil
/maintainers/computed-team-list.nix @infinisil
## Standard environmentrelated libraries
/lib/customisation.nix @alyssais @NixOS/stdenv
/lib/derivations.nix @alyssais @NixOS/stdenv

View File

@@ -0,0 +1,85 @@
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 org = context.repo.owner
const result = {}
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))
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,
team_slug: team.slug,
role: 'member',
}),
)
const maintainers = makeUserSet(
await github.paginate(github.rest.teams.listMembersInOrg, {
org,
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,
team_slug: team.slug,
}),
)
}
}
const teams = await github.paginate(github.rest.repos.listTeams, {
...context.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)
}
}

View File

@@ -83,4 +83,15 @@ program
}
})
program
.command('get-teams')
.description('Fetch the list of teams with GitHub and output it to a file')
.argument('<owner>', 'Owner of the GitHub repository to label (Example: NixOS)')
.argument('<repo>', '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
await run(getTeams, owner, repo, undefined, { ...options, outFile })
})
await program.parse()

View File

@@ -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;

View File

@@ -24,11 +24,19 @@ 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 = [ ];
};
githubTeams = lib.mkOption {
type = types.listOf types.str;
github = lib.mkOption {
type = types.str;
default = "";
};
githubId = lib.mkOption {
type = types.int;
default = 0;
};
githubMaintainers = lib.mkOption {
type = types.listOf (types.submodule ./maintainer-module.nix);
default = [ ];
};
};

View File

@@ -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,

View File

@@ -0,0 +1,59 @@
# 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
# 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
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
# 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 (
!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
// {
githubId = githubTeam.id;
shortName = githubTeam.name;
scope = githubTeam.description;
members =
maintainerSetToList attrs.github githubTeam.maintainers
++ maintainerSetToList attrs.github githubTeam.members;
githubMaintainers = maintainerSetToList attrs.github githubTeam.maintainers;
}
else
attrs
) teams

File diff suppressed because it is too large Load Diff

View File

@@ -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";
@@ -20729,6 +20736,11 @@
githubId = 77415970;
name = "Redhawk";
};
redianthus = {
github = "redianthus";
githubId = 16472988;
name = "redianthus";
};
redlonghead = {
email = "git@beardit.net";
github = "Redlonghead";
@@ -22034,6 +22046,11 @@
githubId = 99875823;
name = "Michael Savedra";
};
savtrip = {
github = "savtrip";
githubId = 42227195;
name = "Sav Tripodi";
};
savyajha = {
email = "savya.jha@hawkradius.com";
github = "savyajha";

View File

@@ -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}) {
@@ -71,14 +52,12 @@ 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->{githubTeams}) {
foreach (@{$team_config->{githubTeams}}) {
print {*STDERR} " \@NixOS/${_}";
push @github_members, @{github_team_members($_, $github_user, $github_token)};
}
if (defined $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;
# Members
@@ -90,9 +69,11 @@ 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";
}
print {*STDOUT} "Everyone else: \@NixOS/nixpkgs-committers\n";

View File

@@ -1,13 +1,11 @@
/*
List of maintainer teams.
name = {
# Required
members = [ maintainer1 maintainer2 ];
scope = "Maintain foo packages.";
shortName = "foo";
# Optional
enableFeatureFreezePing = true;
githubTeams = [ "my-subsystem" ];
github = "my-subsystem";
};
where
@@ -18,7 +16,12 @@
- `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 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:
nix eval -f lib teams.someTeam.githubMaintainers --json | jq
More fields may be added in the future.
@@ -46,16 +49,7 @@ with lib.maintainers;
};
android = {
members = [
adrian-gierakowski
hadilq
johnrtitor
numinit
RossComputerGuy
];
scope = "Maintain Android-related tooling in nixpkgs.";
githubTeams = [ "android" ];
shortName = "Android";
github = "android";
enableFeatureFreezePing = true;
};
@@ -95,19 +89,7 @@ with lib.maintainers;
};
beam = {
members = [
adamcstephens
ankhers
Br1ght0ne
DianaOlympos
gleber
happysalada
minijackson
yurrriq
];
githubTeams = [ "beam" ];
scope = "Maintain BEAM-related packages and modules.";
shortName = "BEAM";
github = "beam";
enableFeatureFreezePing = true;
};
@@ -171,34 +153,11 @@ with lib.maintainers;
};
categorization = {
members = [
aleksana
fgaz
getpsyched
lyndeno
natsukium
philiptaron
pyrotelekinetic
raskin
sigmasquadron
tomodachi94
];
githubTeams = [ "categorization" ];
scope = "Maintain the categorization system in Nixpkgs, per RFC 146. This team has authority over all categorization issues in Nixpkgs.";
shortName = "Categorization";
github = "categorization";
};
ci = {
members = [
MattSturgeon
mic92
philiptaron
wolfgangwalther
zowoq
];
githubTeams = [ "nixpkgs-ci" ];
scope = "Maintain Nixpkgs' in-tree Continuous Integration, including GitHub Actions.";
shortName = "CI";
github = "nixpkgs-ci";
};
cinnamon = {
@@ -215,7 +174,6 @@ with lib.maintainers;
members = [ floriansanderscc ];
scope = "Maintain Clever Cloud related packages.";
shortName = "CleverCloud";
githubTeams = [ "CleverCloud" ];
};
cloudposse = {
@@ -241,21 +199,7 @@ with lib.maintainers;
};
cosmic = {
members = [
a-kenji
ahoneybun
drakon64
griffi-gh
HeitorAugustoLN
nyabinary
pandapip1
qyliss
thefossguy
michaelBelsanti
];
githubTeams = [ "cosmic" ];
shortName = "cosmic";
scope = "Maintain the COSMIC DE and related packages.";
github = "cosmic";
enableFeatureFreezePing = true;
};
@@ -269,15 +213,7 @@ with lib.maintainers;
};
cuda = {
members = [
connorbaker
prusnak
samuela
SomeoneSerge
];
scope = "Maintain CUDA-enabled packages";
shortName = "Cuda";
githubTeams = [ "cuda-maintainers" ];
github = "cuda-maintainers";
};
cyberus = {
@@ -292,14 +228,7 @@ with lib.maintainers;
};
darwin = {
members = [
emily
reckenrode
toonn
];
githubTeams = [ "darwin-core" ];
scope = "Maintain core platform support and packages for macOS and other Apple platforms.";
shortName = "Darwin";
github = "darwin-core";
enableFeatureFreezePing = true;
};
@@ -350,10 +279,7 @@ with lib.maintainers;
};
docs = {
members = [ ];
githubTeams = [ "documentation-team" ];
scope = "Maintain nixpkgs/NixOS documentation and tools for building it.";
shortName = "Docs";
github = "documentation-team";
enableFeatureFreezePing = true;
};
@@ -382,36 +308,13 @@ with lib.maintainers;
};
enlightenment = {
members = [ romildo ];
githubTeams = [ "enlightenment" ];
scope = "Maintain Enlightenment desktop environment and related packages.";
shortName = "Enlightenment";
enableFeatureFreezePing = true;
};
# Dummy group for the "everyone else" section
feature-freeze-everyone-else = {
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";
github = "enlightenment";
enableFeatureFreezePing = true;
};
flutter = {
members = [
mkg20001
RossComputerGuy
FlafyDev
hacker1024
];
scope = "Maintain Flutter and Dart-related packages and build tools";
shortName = "flutter";
enableFeatureFreezePing = false;
githubTeams = [ "flutter" ];
github = "flutter";
};
flyingcircus = {
@@ -469,18 +372,7 @@ with lib.maintainers;
};
geospatial = {
members = [
autra
imincik
l0b0
nh2
nialov
sikmir
willcohen
];
githubTeams = [ "geospatial" ];
scope = "Maintain geospatial packages.";
shortName = "Geospatial";
github = "geospatial";
enableFeatureFreezePing = true;
};
@@ -497,15 +389,7 @@ with lib.maintainers;
};
gnome = {
members = [
bobby285271
hedning
jtojnar
dasj19
];
githubTeams = [ "gnome" ];
scope = "Maintain GNOME desktop environment and platform.";
shortName = "GNOME";
github = "gnome";
enableFeatureFreezePing = true;
};
@@ -520,17 +404,7 @@ with lib.maintainers;
};
golang = {
members = [
kalbasit
katexochen
mic92
zowoq
qbit
mfrw
];
githubTeams = [ "golang" ];
scope = "Maintain Golang compilers.";
shortName = "Go";
github = "golang";
enableFeatureFreezePing = true;
};
@@ -546,15 +420,7 @@ with lib.maintainers;
};
haskell = {
members = [
cdepillabout
maralorn
sternenseemann
wolfgangwalther
];
githubTeams = [ "haskell" ];
scope = "Maintain Haskell packages and infrastructure.";
shortName = "Haskell";
github = "haskell";
enableFeatureFreezePing = true;
};
@@ -580,16 +446,7 @@ with lib.maintainers;
};
hyprland = {
members = [
donovanglover
fufexan
johnrtitor
khaneliman
NotAShelf
];
githubTeams = [ "hyprland" ];
scope = "Maintain Hyprland compositor and ecosystem";
shortName = "Hyprland";
github = "hyprland";
enableFeatureFreezePing = true;
};
@@ -613,15 +470,7 @@ with lib.maintainers;
};
java = {
githubTeams = [ "java" ];
members = [
chayleaf
fliegendewurst
infinidoge
tomodachi94
];
shortName = "Java";
scope = "Maintainers of the Nixpkgs Java ecosystem (JDK, JVM, Java, Gradle, Maven, Ant, and adjacent projects)";
github = "java";
enableFeatureFreezePing = true;
};
@@ -658,17 +507,7 @@ with lib.maintainers;
};
k3s = {
githubTeams = [ "k3s" ];
members = [
euank
frederictobiasc
marcusramberg
mic92
rorosen
wrmilling
];
scope = "Maintain K3s package, NixOS module, NixOS tests, update script";
shortName = "K3s";
github = "k3s";
};
kodi = {
@@ -721,16 +560,7 @@ with lib.maintainers;
};
lisp = {
members = [
raskin
lukego
nagy
uthar
hraban
];
githubTeams = [ "lisp" ];
scope = "Maintain the Lisp ecosystem.";
shortName = "lisp";
github = "lisp";
enableFeatureFreezePing = true;
};
@@ -748,18 +578,7 @@ with lib.maintainers;
};
llvm = {
members = [
dtzWill
ericson2314
lovek323
qyliss
RossComputerGuy
rrbutani
sternenseemann
];
githubTeams = [ "llvm" ];
scope = "Maintain LLVM package sets and related packages";
shortName = "LLVM";
github = "llvm";
enableFeatureFreezePing = true;
};
@@ -770,10 +589,13 @@ with lib.maintainers;
enableFeatureFreezePing = true;
};
loongarch64 = {
github = "loongarch64";
enableFeatureFreezePing = true;
};
lua = {
githubTeams = [ "lua" ];
scope = "Maintain the lua ecosystem.";
shortName = "lua";
github = "lua";
enableFeatureFreezePing = true;
};
@@ -788,10 +610,7 @@ with lib.maintainers;
};
lumina = {
members = [ romildo ];
githubTeams = [ "lumina" ];
scope = "Maintain lumina desktop environment and related packages.";
shortName = "Lumina";
github = "lumina";
enableFeatureFreezePing = true;
};
@@ -808,19 +627,12 @@ with lib.maintainers;
};
lxqt = {
members = [ romildo ];
githubTeams = [ "lxqt" ];
scope = "Maintain LXQt desktop environment and related packages.";
shortName = "LXQt";
github = "lxqt";
enableFeatureFreezePing = true;
};
marketing = {
members = [
tomberek
];
scope = "Marketing of Nix/NixOS/nixpkgs.";
shortName = "Marketing";
github = "marketing-team";
enableFeatureFreezePing = true;
};
@@ -884,15 +696,7 @@ with lib.maintainers;
};
neovim = {
members = [
GaetanLepage
khaneliman
mrcjkb
perchun
];
githubTeams = [ "neovim" ];
scope = "Maintain the vim and neovim text editors and related packages.";
shortName = "Vim/Neovim";
github = "neovim";
};
nextcloud = {
@@ -948,10 +752,7 @@ with lib.maintainers;
};
ocaml = {
members = [ alizter ];
githubTeams = [ "ocaml" ];
scope = "Maintain the OCaml compiler and package set.";
shortName = "OCaml";
github = "ocaml";
enableFeatureFreezePing = true;
};
@@ -983,13 +784,7 @@ with lib.maintainers;
};
pantheon = {
members = [
davidak
bobby285271
];
githubTeams = [ "pantheon" ];
scope = "Maintain Pantheon desktop environment and platform.";
shortName = "Pantheon";
github = "pantheon";
enableFeatureFreezePing = true;
};
@@ -1005,27 +800,12 @@ with lib.maintainers;
};
php = {
members = [
aanderse
drupol
ma27
piotrkwiecinski
talyz
];
githubTeams = [ "php" ];
scope = "Maintain PHP related packages and extensions.";
shortName = "PHP";
github = "php";
enableFeatureFreezePing = true;
};
podman = {
members = [
saschagrunert
vdemeester
];
githubTeams = [ "podman" ];
scope = "Maintain Podman and CRI-O related packages and modules.";
shortName = "Podman";
github = "podman";
};
postgres = {
@@ -1050,18 +830,7 @@ with lib.maintainers;
};
qt-kde = {
members = [
ilya-fedin
k900
LunNova
mjm
nickcao
SuperSandro2000
ttuegel
];
githubTeams = [ "qt-kde" ];
scope = "Maintain the Qt framework, KDE application suite, Plasma desktop environment and related projects.";
shortName = "Qt / KDE";
github = "qt-kde";
enableFeatureFreezePing = true;
};
@@ -1087,43 +856,12 @@ with lib.maintainers;
shortName = "Red Code Labs";
};
release = {
members = [ ];
githubTeams = [ "nixos-release-managers" ];
scope = "Manage the current nixpkgs/NixOS release.";
shortName = "Release";
};
rocm = {
members = [
Flakebi
GZGavinZhao
LunNova
mschwaig
];
githubTeams = [ "rocm-maintainers" ];
scope = "Maintain ROCm and related packages.";
shortName = "ROCm";
};
ruby = {
members = [ ];
scope = "Maintain the Ruby interpreter and related packages.";
shortName = "Ruby";
enableFeatureFreezePing = true;
github = "rocm";
};
rust = {
members = [
figsoda
mic92
tjni
winter
zowoq
];
githubTeams = [ "rust" ];
scope = "Maintain the Rust compiler toolchain and nixpkgs integration.";
shortName = "Rust";
github = "rust";
enableFeatureFreezePing = true;
};
@@ -1139,16 +877,7 @@ with lib.maintainers;
};
sdl = {
members = [
evythedemon
grimmauld
jansol
marcin-serwin
pbsds
];
githubTeams = [ "SDL" ];
scope = "Maintain core SDL libraries.";
shortName = "SDL";
github = "sdl";
enableFeatureFreezePing = true;
};
@@ -1166,18 +895,8 @@ with lib.maintainers;
};
stdenv = {
members = [
artturin
emily
ericson2314
philiptaron
reckenrode
RossComputerGuy
];
scope = "Maintain the standard environment and its surrounding logic.";
shortName = "stdenv";
enableFeatureFreezePing = true;
githubTeams = [ "stdenv" ];
github = "stdenv";
};
steam = {
@@ -1211,10 +930,7 @@ with lib.maintainers;
};
systemd = {
members = [ ];
githubTeams = [ "systemd" ];
scope = "Maintain systemd for NixOS.";
shortName = "systemd";
github = "systemd";
enableFeatureFreezePing = true;
};
@@ -1243,16 +959,8 @@ 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;
githubTeams = [ "xen-project" ];
github = "xen-project";
};
xfce = {