2023-10-20 22:19:24 -04:00
|
|
|
|
#!/bin/sh
|
2023-10-31 13:57:15 -04:00
|
|
|
|
# -*- mode: scheme; -*-
|
2023-10-20 22:19:24 -04:00
|
|
|
|
# Extra care is taken here to ensure this script can run in most environments,
|
|
|
|
|
|
# since it is invoked by 'git send-email'.
|
|
|
|
|
|
pre_inst_env_maybe=
|
|
|
|
|
|
command -v guix > /dev/null || pre_inst_env_maybe=./pre-inst-env
|
|
|
|
|
|
exec $pre_inst_env_maybe guix repl -- "$0" "$@"
|
2022-07-03 14:11:29 +02:00
|
|
|
|
!#
|
|
|
|
|
|
|
|
|
|
|
|
;;; GNU Guix --- Functional package management for GNU
|
2024-02-13 20:03:28 +01:00
|
|
|
|
;;; Copyright © 2022-2024 Ricardo Wurmus <rekado@elephly.net>
|
2022-09-07 17:05:00 +02:00
|
|
|
|
;;; Copyright © 2022 Mathieu Othacehe <othacehe@gnu.org>
|
2025-09-18 12:25:39 +09:00
|
|
|
|
;;; Copyright © 2022, 2023, 2025 Maxim Cournoyer <maxim@guixotic.coop>
|
2022-11-17 21:28:18 +01:00
|
|
|
|
;;; Copyright © 2022 Simon Tournier <zimon.toutoune@gmail.com>
|
2025-02-13 14:46:37 +01:00
|
|
|
|
;;; Copyright © 2025 Jelle Licht <jlicht@fsfe.org>
|
2025-02-20 10:22:15 +01:00
|
|
|
|
;;; Copyright © 2025 Cayetano Santos <csantosb@inventati.org>
|
2025-05-10 17:12:50 +02:00
|
|
|
|
;;; Copyright © 2025 Ludovic Courtès <ludo@gnu.org>
|
2022-07-03 14:11:29 +02:00
|
|
|
|
;;;
|
|
|
|
|
|
;;; This file is part of GNU Guix.
|
|
|
|
|
|
;;;
|
|
|
|
|
|
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
|
|
|
|
|
;;; under the terms of the GNU General Public License as published by
|
|
|
|
|
|
;;; the Free Software Foundation; either version 3 of the License, or (at
|
|
|
|
|
|
;;; your option) any later version.
|
|
|
|
|
|
;;;
|
|
|
|
|
|
;;; GNU Guix is distributed in the hope that it will be useful, but
|
|
|
|
|
|
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
|
;;; GNU General Public License for more details.
|
|
|
|
|
|
;;;
|
|
|
|
|
|
;;; You should have received a copy of the GNU General Public License
|
|
|
|
|
|
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
|
|
|
|
|
|
;;; Commentary:
|
|
|
|
|
|
|
2022-09-07 17:05:00 +02:00
|
|
|
|
;; This code defines development teams and team members, as well as their
|
|
|
|
|
|
;; scope.
|
2022-07-03 14:11:29 +02:00
|
|
|
|
|
|
|
|
|
|
;;; Code:
|
|
|
|
|
|
|
2025-06-09 19:02:41 +02:00
|
|
|
|
(define-module (teams)
|
|
|
|
|
|
#:use-module (srfi srfi-1)
|
|
|
|
|
|
#:use-module (srfi srfi-9)
|
|
|
|
|
|
#:use-module (srfi srfi-26)
|
|
|
|
|
|
#:use-module (srfi srfi-34)
|
|
|
|
|
|
#:use-module (srfi srfi-35)
|
|
|
|
|
|
#:use-module (srfi srfi-71)
|
|
|
|
|
|
#:use-module (ice-9 format)
|
|
|
|
|
|
#:use-module (ice-9 regex)
|
|
|
|
|
|
#:use-module (ice-9 match)
|
|
|
|
|
|
#:use-module (ice-9 rdelim)
|
|
|
|
|
|
#:use-module (guix ui)
|
|
|
|
|
|
#:use-module (git)
|
|
|
|
|
|
#:use-module (json)
|
|
|
|
|
|
#:use-module (web client)
|
|
|
|
|
|
#:use-module (web request)
|
|
|
|
|
|
#:use-module (web response)
|
|
|
|
|
|
#:use-module (rnrs bytevectors)
|
|
|
|
|
|
#:use-module (guix base64))
|
2022-07-03 14:11:29 +02:00
|
|
|
|
|
etc: teams: Sort and improve display of regular expression in 'scope' field.
Fixes <https://issues.guix.gnu.org/65208>.
* etc/teams.scm.in (<regexp*>): New record type.
(make-regexp*, regexp-exec*): New procedures.
(python, haskell, julia, java, emacs, rust, core, translations, installer,
home): Use it.
(find-team-by-scope): Use it.
(list-teams): Use it.
Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Modified-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Reported-by: Greg Hogan <code@greghogan.com>
2022-11-17 21:28:20 +01:00
|
|
|
|
(define-record-type <regexp*>
|
|
|
|
|
|
(%make-regexp* pat flag rx)
|
|
|
|
|
|
regexp*?
|
|
|
|
|
|
(pat regexp*-pattern)
|
|
|
|
|
|
(flag regexp*-flag)
|
|
|
|
|
|
(rx regexp*-rx))
|
|
|
|
|
|
|
|
|
|
|
|
;;; Work around regexp implementation.
|
|
|
|
|
|
;;; This record allows to track the regexp pattern and then display it.
|
|
|
|
|
|
(define* (make-regexp* pat #:optional (flag regexp/extended))
|
|
|
|
|
|
"Alternative to `make-regexp' producing annotated <regexp*> objects."
|
|
|
|
|
|
(%make-regexp* pat flag (make-regexp pat flag)))
|
|
|
|
|
|
|
2023-08-30 15:37:42 -04:00
|
|
|
|
(define (regexp*-exec rx* str)
|
etc: teams: Sort and improve display of regular expression in 'scope' field.
Fixes <https://issues.guix.gnu.org/65208>.
* etc/teams.scm.in (<regexp*>): New record type.
(make-regexp*, regexp-exec*): New procedures.
(python, haskell, julia, java, emacs, rust, core, translations, installer,
home): Use it.
(find-team-by-scope): Use it.
(list-teams): Use it.
Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Modified-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Reported-by: Greg Hogan <code@greghogan.com>
2022-11-17 21:28:20 +01:00
|
|
|
|
"Execute the RX* regexp, a <regexp*> object."
|
|
|
|
|
|
(regexp-exec (regexp*-rx rx*) str))
|
|
|
|
|
|
|
2022-07-03 14:11:29 +02:00
|
|
|
|
(define-record-type <team>
|
2022-09-07 17:05:00 +02:00
|
|
|
|
(make-team id name description members scope)
|
2022-07-03 14:11:29 +02:00
|
|
|
|
team?
|
|
|
|
|
|
(id team-id)
|
|
|
|
|
|
(name team-name)
|
|
|
|
|
|
(description team-description)
|
2022-09-07 17:05:00 +02:00
|
|
|
|
(members team-members set-team-members!)
|
|
|
|
|
|
(scope team-scope))
|
2022-07-03 14:11:29 +02:00
|
|
|
|
|
|
|
|
|
|
(define-record-type <person>
|
2025-05-23 14:45:51 +02:00
|
|
|
|
(make-person name email account)
|
2022-07-03 14:11:29 +02:00
|
|
|
|
person?
|
|
|
|
|
|
(name person-name)
|
2025-05-23 14:45:51 +02:00
|
|
|
|
(email person-email)
|
|
|
|
|
|
(account person-codeberg-account))
|
2022-07-03 14:11:29 +02:00
|
|
|
|
|
2025-05-23 14:45:51 +02:00
|
|
|
|
(define* (person name #:optional email account)
|
|
|
|
|
|
(make-person name email account))
|
2022-07-03 14:11:29 +02:00
|
|
|
|
|
2022-09-07 17:05:00 +02:00
|
|
|
|
(define* (team id #:key name description (members '())
|
|
|
|
|
|
(scope '()))
|
2022-07-03 14:11:29 +02:00
|
|
|
|
(make-team id
|
|
|
|
|
|
(or name (symbol->string id))
|
|
|
|
|
|
description
|
2022-09-07 17:05:00 +02:00
|
|
|
|
members
|
|
|
|
|
|
scope))
|
2022-07-03 14:11:29 +02:00
|
|
|
|
|
|
|
|
|
|
(define %teams
|
|
|
|
|
|
(make-hash-table))
|
|
|
|
|
|
|
|
|
|
|
|
(define-syntax define-team
|
|
|
|
|
|
(lambda (x)
|
|
|
|
|
|
(syntax-case x ()
|
|
|
|
|
|
((_ id value)
|
|
|
|
|
|
#`(begin
|
|
|
|
|
|
(define-public id value)
|
|
|
|
|
|
(hash-set! %teams 'id id))))))
|
|
|
|
|
|
|
|
|
|
|
|
(define-syntax-rule (define-member person teams ...)
|
|
|
|
|
|
(let ((p person))
|
|
|
|
|
|
(for-each (lambda (team-id)
|
|
|
|
|
|
(let ((team
|
|
|
|
|
|
(hash-ref %teams team-id
|
|
|
|
|
|
(lambda ()
|
|
|
|
|
|
(error (format #false
|
|
|
|
|
|
"Unknown team ~a for ~a~%"
|
|
|
|
|
|
team-id p))))))
|
|
|
|
|
|
(set-team-members!
|
|
|
|
|
|
team (cons p (team-members team)))))
|
|
|
|
|
|
(quote (teams ...)))))
|
|
|
|
|
|
|
2025-05-23 18:09:23 +02:00
|
|
|
|
|
|
|
|
|
|
;;;
|
|
|
|
|
|
;;; Forgejo support.
|
|
|
|
|
|
;;;
|
|
|
|
|
|
|
|
|
|
|
|
;; Forgejo team. This corresponds to both the 'Team' and 'CreateTeamOption'
|
|
|
|
|
|
;; structures in Forgejo.
|
|
|
|
|
|
(define-json-mapping <forgejo-team>
|
|
|
|
|
|
forgejo-team forgejo-team?
|
|
|
|
|
|
json->forgejo-team <=> forgejo-team->json
|
|
|
|
|
|
(name forgejo-team-name)
|
|
|
|
|
|
(id forgejo-team-id) ;integer
|
|
|
|
|
|
(description forgejo-team-description)
|
|
|
|
|
|
(all-repositories? forgejo-team-all-repositories?
|
|
|
|
|
|
"includes_all_repositories")
|
|
|
|
|
|
(can-create-org-repository? forgejo-team-can-create-org-repository?
|
|
|
|
|
|
"can_create_org_repo")
|
|
|
|
|
|
(permission forgejo-team-permission
|
|
|
|
|
|
"permission" string->symbol symbol->string)
|
|
|
|
|
|
;; A 'units' field exists but is deprecated in favor of 'units_map'.
|
|
|
|
|
|
(unit-map forgejo-team-unit-map
|
|
|
|
|
|
"units_map" json->unit-map unit-map->json))
|
|
|
|
|
|
|
|
|
|
|
|
(define (unit-map->json lst)
|
|
|
|
|
|
(map (match-lambda
|
|
|
|
|
|
((unit . permission)
|
|
|
|
|
|
(cons unit (symbol->string permission))))
|
|
|
|
|
|
lst))
|
|
|
|
|
|
|
|
|
|
|
|
(define (json->unit-map lst)
|
|
|
|
|
|
(map (match-lambda
|
|
|
|
|
|
((unit . permission)
|
|
|
|
|
|
(cons unit (string->symbol permission))))
|
|
|
|
|
|
lst))
|
|
|
|
|
|
|
|
|
|
|
|
(define %default-forgejo-team-units
|
|
|
|
|
|
'("repo.code" "repo.issues" "repo.pulls" "repo.releases"
|
|
|
|
|
|
"repo.wiki" "repo.ext_wiki" "repo.ext_issues" "repo.projects"
|
|
|
|
|
|
"repo.packages" "repo.actions"))
|
|
|
|
|
|
|
|
|
|
|
|
(define %default-forgejo-team-unit-map
|
|
|
|
|
|
;; Everything (including "repo.code") is read-only by default, except a few
|
|
|
|
|
|
;; units.
|
|
|
|
|
|
(map (match-lambda
|
|
|
|
|
|
("repo.pulls" (cons "repo.pulls" 'write))
|
|
|
|
|
|
("repo.issues" (cons "repo.issues" 'write))
|
|
|
|
|
|
("repo.wiki" (cons "repo.wiki" 'write))
|
|
|
|
|
|
(unit (cons unit 'read)))
|
|
|
|
|
|
%default-forgejo-team-units))
|
|
|
|
|
|
|
2025-05-29 17:48:15 +02:00
|
|
|
|
;; Forgejo user, as returned by 'forgejo-team-members'.
|
|
|
|
|
|
(define-json-mapping <forgejo-user>
|
|
|
|
|
|
forgejo-user forgejo-user?
|
|
|
|
|
|
json->forgejo-user <=> forgejo-user->json
|
|
|
|
|
|
(id forgejo-user-id) ;integer
|
|
|
|
|
|
(active? forgejo-user-active? "active") ;boolean
|
|
|
|
|
|
(login forgejo-user-login) ;string
|
|
|
|
|
|
(full-name forgejo-user-full-name "full_name") ;string
|
|
|
|
|
|
;; Various fields omitted.
|
|
|
|
|
|
)
|
|
|
|
|
|
|
2025-05-23 18:09:23 +02:00
|
|
|
|
(define (forgejo-http-headers token)
|
|
|
|
|
|
"Return the HTTP headers for basic authorization with TOKEN."
|
|
|
|
|
|
`((content-type . (application/json (charset . "UTF-8")))
|
|
|
|
|
|
;; The "Auth Basic" scheme needs a base64-encoded colon-separated user and
|
|
|
|
|
|
;; token values. Forgejo doesn't seem to care for the user part but the
|
|
|
|
|
|
;; colon seems to be necessary for the token value to get extracted.
|
|
|
|
|
|
(authorization . (basic . ,(base64-encode
|
|
|
|
|
|
(string->utf8
|
|
|
|
|
|
(string-append ":" token)))))))
|
|
|
|
|
|
|
|
|
|
|
|
;; Error with a Forgejo request.
|
|
|
|
|
|
(define-condition-type &forgejo-error &error
|
|
|
|
|
|
forgejo-error?
|
|
|
|
|
|
(url forgejo-error-url)
|
|
|
|
|
|
(method forgejo-error-method)
|
|
|
|
|
|
(response forgejo-error-response))
|
|
|
|
|
|
|
|
|
|
|
|
(define %codeberg-organization
|
|
|
|
|
|
;; Name of the organization at codeberg.org.
|
|
|
|
|
|
"guix")
|
|
|
|
|
|
|
|
|
|
|
|
(define* (codeberg-url items #:key (parameters '()))
|
|
|
|
|
|
"Construct a Codeberg API URL with the path components ITEMS and query
|
|
|
|
|
|
PARAMETERS."
|
|
|
|
|
|
(define query
|
|
|
|
|
|
(match parameters
|
|
|
|
|
|
(() "")
|
|
|
|
|
|
(((keys . values) ...)
|
|
|
|
|
|
(string-append "?" (string-join
|
|
|
|
|
|
(map (lambda (key value)
|
|
|
|
|
|
(string-append key "=" value)) ;XXX: hackish
|
|
|
|
|
|
keys values)
|
|
|
|
|
|
"&")))))
|
|
|
|
|
|
|
|
|
|
|
|
(string-append "https://codeberg.org/api/v1/"
|
|
|
|
|
|
(string-join items "/")
|
|
|
|
|
|
query))
|
|
|
|
|
|
|
|
|
|
|
|
(define-syntax process-url-components
|
|
|
|
|
|
(syntax-rules (&)
|
|
|
|
|
|
"Helper macro to construct a Codeberg URL."
|
|
|
|
|
|
((_ components ... & parameters)
|
|
|
|
|
|
(codeberg-url (list components ...)
|
|
|
|
|
|
#:parameters parameters))
|
|
|
|
|
|
((_ components ...)
|
|
|
|
|
|
(codeberg-url (list components ...)))))
|
|
|
|
|
|
|
|
|
|
|
|
(define-syntax define-forgejo-request
|
|
|
|
|
|
(syntax-rules (=>)
|
|
|
|
|
|
"Define a procedure that performs a Forgejo request."
|
|
|
|
|
|
((_ (proc parameters ...)
|
|
|
|
|
|
docstring
|
|
|
|
|
|
(verb components ...)
|
|
|
|
|
|
body
|
|
|
|
|
|
=> code
|
|
|
|
|
|
deserialize)
|
|
|
|
|
|
(define (proc token parameters ...)
|
|
|
|
|
|
docstring
|
|
|
|
|
|
(let* ((url (process-url-components components ...))
|
|
|
|
|
|
(response port (http-request url
|
|
|
|
|
|
#:method 'verb
|
|
|
|
|
|
#:streaming? #t
|
|
|
|
|
|
#:headers (forgejo-http-headers token)
|
|
|
|
|
|
#:body body)))
|
|
|
|
|
|
(if (= code (response-code response))
|
|
|
|
|
|
(let ((value (deserialize port)))
|
|
|
|
|
|
(when port (close-port port))
|
|
|
|
|
|
value)
|
|
|
|
|
|
(begin
|
|
|
|
|
|
(when port (close-port port))
|
|
|
|
|
|
(raise (condition (&forgejo-error (url url)
|
|
|
|
|
|
(method 'verb)
|
|
|
|
|
|
(response response)))))))))
|
|
|
|
|
|
((_ (proc parameters ...)
|
|
|
|
|
|
docstring
|
|
|
|
|
|
(method components ...)
|
|
|
|
|
|
=> code
|
|
|
|
|
|
deserialize)
|
|
|
|
|
|
(define-forgejo-request (proc parameters ...)
|
|
|
|
|
|
docstring
|
|
|
|
|
|
(method components ...)
|
|
|
|
|
|
""
|
|
|
|
|
|
=> code
|
|
|
|
|
|
deserialize))
|
|
|
|
|
|
((_ (proc parameters ...)
|
|
|
|
|
|
docstring
|
|
|
|
|
|
(method components ...)
|
|
|
|
|
|
=> code)
|
|
|
|
|
|
(define-forgejo-request (proc parameters ...)
|
|
|
|
|
|
docstring
|
|
|
|
|
|
(method components ...)
|
|
|
|
|
|
""
|
|
|
|
|
|
=> code
|
|
|
|
|
|
(const *unspecified*)))))
|
|
|
|
|
|
|
|
|
|
|
|
;; API documentation at <https://codeberg.org/api/swagger>.
|
|
|
|
|
|
|
|
|
|
|
|
(define-forgejo-request (organization-teams organization)
|
|
|
|
|
|
"Return the list of teams of ORGANIZATION."
|
|
|
|
|
|
(GET "orgs" organization "teams"
|
|
|
|
|
|
& '(("limit" . "100"))) ;get up to 100 teams
|
|
|
|
|
|
=> 200
|
|
|
|
|
|
(lambda (port)
|
|
|
|
|
|
(map json->forgejo-team (vector->list (json->scm port)))))
|
|
|
|
|
|
|
|
|
|
|
|
(define-forgejo-request (create-team organization team)
|
|
|
|
|
|
"Create TEAM, a Forgejo team, under ORGANIZATION."
|
|
|
|
|
|
(POST "orgs" organization "teams")
|
|
|
|
|
|
(forgejo-team->json team)
|
|
|
|
|
|
=> 201
|
|
|
|
|
|
json->forgejo-team)
|
|
|
|
|
|
|
2025-05-29 17:48:15 +02:00
|
|
|
|
(define-forgejo-request (edit-team team)
|
|
|
|
|
|
"Update TEAM, a Forgejo team."
|
|
|
|
|
|
(PATCH "teams" (number->string (forgejo-team-id team)))
|
|
|
|
|
|
(forgejo-team->json team)
|
|
|
|
|
|
=> 200
|
|
|
|
|
|
json->forgejo-team)
|
|
|
|
|
|
|
2025-05-23 18:09:23 +02:00
|
|
|
|
(define-forgejo-request (delete-team team)
|
|
|
|
|
|
"Delete TEAM, a Forgejo team."
|
|
|
|
|
|
(DELETE "teams" (number->string (forgejo-team-id team)))
|
|
|
|
|
|
=> 204)
|
|
|
|
|
|
|
2025-05-29 17:48:15 +02:00
|
|
|
|
(define-forgejo-request (forgejo-team-members team)
|
|
|
|
|
|
"Return the list of account names of the members of TEAM, a Forgejo team."
|
|
|
|
|
|
(GET "teams" (number->string (forgejo-team-id team)) "members"
|
|
|
|
|
|
& '(("limit" . "100"))) ;get up to 100 members
|
|
|
|
|
|
=> 200
|
|
|
|
|
|
(lambda (port)
|
|
|
|
|
|
(set-port-encoding! port "UTF-8")
|
|
|
|
|
|
(map json->forgejo-user (vector->list (json->scm port)))))
|
|
|
|
|
|
|
2025-05-23 18:09:23 +02:00
|
|
|
|
(define-forgejo-request (add-team-member team user)
|
|
|
|
|
|
"Add USER (a string) to TEAM, a Forgejo team."
|
|
|
|
|
|
(PUT "teams" (number->string (forgejo-team-id team))
|
|
|
|
|
|
"members" user)
|
|
|
|
|
|
=> 204)
|
|
|
|
|
|
|
2025-06-09 19:03:17 +02:00
|
|
|
|
(define-forgejo-request (repository-teams owner repository)
|
|
|
|
|
|
"Return the list of teams assigned to REPOSITORY of OWNER."
|
|
|
|
|
|
(GET "repos" owner repository "teams"
|
|
|
|
|
|
& '(("limit" . "100"))) ;get up to 100 teams
|
|
|
|
|
|
=> 200
|
|
|
|
|
|
(lambda (port)
|
|
|
|
|
|
(map json->forgejo-team (vector->list (json->scm port)))))
|
|
|
|
|
|
|
|
|
|
|
|
(define-forgejo-request (add-repository-team owner repository team-name)
|
|
|
|
|
|
"Add TEAM-NAME as a team of OWNER's REPOSITORY."
|
|
|
|
|
|
(PUT "repos" owner repository "teams" team-name)
|
|
|
|
|
|
=> 204)
|
|
|
|
|
|
|
2025-05-23 18:09:23 +02:00
|
|
|
|
(define (team->forgejo-team team)
|
|
|
|
|
|
"Return a Forgejo team derived from TEAM, a <team> record."
|
|
|
|
|
|
(forgejo-team (team-id->forgejo-id (team-id team))
|
|
|
|
|
|
#f
|
|
|
|
|
|
(or (team-description team) "")
|
|
|
|
|
|
#f ;all-repositories?
|
|
|
|
|
|
#f ;can-create-org-repository?
|
|
|
|
|
|
'read ;permission
|
|
|
|
|
|
%default-forgejo-team-unit-map))
|
|
|
|
|
|
|
2025-05-29 17:48:15 +02:00
|
|
|
|
(define* (update-team token forgejo-team team
|
|
|
|
|
|
#:key (log-port (current-error-port)))
|
|
|
|
|
|
"Update FORGEJO-TEAM on the server so that it matches TEAM."
|
|
|
|
|
|
(format log-port "updating team '~a'~%"
|
|
|
|
|
|
(forgejo-team-name forgejo-team))
|
|
|
|
|
|
|
|
|
|
|
|
;; Update metadata: description, permissions, etc.
|
|
|
|
|
|
(edit-team token forgejo-team)
|
|
|
|
|
|
|
|
|
|
|
|
;; Update the list of members so it matches those of TEAM.
|
|
|
|
|
|
(let* ((current (map forgejo-user-login
|
|
|
|
|
|
(forgejo-team-members token forgejo-team)))
|
|
|
|
|
|
(target (filter-map person-codeberg-account
|
|
|
|
|
|
(team-members team)))
|
|
|
|
|
|
(to-add (lset-difference string=? target current))
|
|
|
|
|
|
(to-remove (lset-difference string=? current target)))
|
|
|
|
|
|
(for-each (lambda (user)
|
|
|
|
|
|
(format log-port "adding '~a' to team '~a'~%"
|
|
|
|
|
|
user (forgejo-team-name forgejo-team))
|
|
|
|
|
|
(add-team-member token forgejo-team user))
|
|
|
|
|
|
to-add)
|
|
|
|
|
|
(for-each (lambda (user)
|
|
|
|
|
|
(format log-port "removing '~a' from team '~a'~%"
|
|
|
|
|
|
user (forgejo-team-name forgejo-team)))
|
|
|
|
|
|
to-remove)))
|
|
|
|
|
|
|
2025-05-23 18:09:23 +02:00
|
|
|
|
(define* (synchronize-team token team
|
|
|
|
|
|
#:key
|
|
|
|
|
|
(current-teams
|
|
|
|
|
|
(organization-teams token
|
|
|
|
|
|
%codeberg-organization))
|
|
|
|
|
|
(log-port (current-error-port)))
|
|
|
|
|
|
"Synchronize TEAM, a <team> record, so that its metadata and list of members
|
2025-05-29 17:48:15 +02:00
|
|
|
|
are accurate on Codeberg, either by creating it or by updating it if it
|
|
|
|
|
|
already exists. Lookup team IDs among CURRENT-TEAMS."
|
2025-05-23 18:09:23 +02:00
|
|
|
|
(let ((forgejo-team
|
|
|
|
|
|
(find (let ((name (team-id->forgejo-id (team-id team))))
|
|
|
|
|
|
(lambda (candidate)
|
|
|
|
|
|
(string=? (forgejo-team-name candidate) name)))
|
|
|
|
|
|
current-teams)))
|
2025-05-29 17:48:15 +02:00
|
|
|
|
(if forgejo-team
|
|
|
|
|
|
(update-team token forgejo-team team
|
|
|
|
|
|
#:log-port log-port)
|
|
|
|
|
|
(let ((forgejo-team
|
|
|
|
|
|
(create-team token %codeberg-organization
|
|
|
|
|
|
(or forgejo-team
|
|
|
|
|
|
(team->forgejo-team team)))))
|
|
|
|
|
|
(format log-port "created team '~a'~%"
|
|
|
|
|
|
(forgejo-team-name forgejo-team))
|
|
|
|
|
|
(let ((members (filter-map person-codeberg-account
|
|
|
|
|
|
(team-members team))))
|
|
|
|
|
|
(for-each (lambda (member)
|
|
|
|
|
|
(add-team-member token forgejo-team member))
|
|
|
|
|
|
members)
|
|
|
|
|
|
(format log-port "added ~a members to team '~a'~%"
|
|
|
|
|
|
(length members)
|
|
|
|
|
|
(forgejo-team-name forgejo-team))
|
|
|
|
|
|
forgejo-team)))))
|
2025-05-23 18:09:23 +02:00
|
|
|
|
|
|
|
|
|
|
(define (synchronize-teams token)
|
|
|
|
|
|
"Push all the existing teams on Codeberg."
|
|
|
|
|
|
(let ((teams (sort-teams
|
|
|
|
|
|
(hash-map->list (lambda (_ value) value) %teams))))
|
|
|
|
|
|
(format (current-error-port)
|
|
|
|
|
|
"creating ~a teams in the '~a' organization at Codeberg...~%"
|
|
|
|
|
|
(length teams) %codeberg-organization)
|
|
|
|
|
|
|
|
|
|
|
|
;; Arrange to compute the list of existing teams once and for all.
|
|
|
|
|
|
(for-each (let ((teams (organization-teams token
|
|
|
|
|
|
%codeberg-organization)))
|
|
|
|
|
|
(lambda (team)
|
|
|
|
|
|
(synchronize-team token team
|
|
|
|
|
|
#:current-teams teams)))
|
2025-06-09 19:03:17 +02:00
|
|
|
|
teams)
|
|
|
|
|
|
|
|
|
|
|
|
;; Ensure all the teams are associated with the main repository.
|
|
|
|
|
|
(let ((repository-teams (repository-teams token
|
|
|
|
|
|
%codeberg-organization
|
|
|
|
|
|
"guix")))
|
|
|
|
|
|
(for-each (lambda (missing)
|
|
|
|
|
|
(format (current-error-port)
|
|
|
|
|
|
"adding team '~a' to '~a/guix'~%"
|
|
|
|
|
|
(team-id missing) %codeberg-organization)
|
|
|
|
|
|
(add-repository-team token %codeberg-organization "guix"
|
|
|
|
|
|
(team-id->forgejo-id
|
|
|
|
|
|
(team-id missing))))
|
|
|
|
|
|
(let ((names (map forgejo-team-name repository-teams)))
|
|
|
|
|
|
(remove (lambda (team)
|
|
|
|
|
|
(member (team-id->forgejo-id (team-id team))
|
|
|
|
|
|
names))
|
|
|
|
|
|
teams))))))
|
2025-05-23 18:09:23 +02:00
|
|
|
|
|
2022-07-03 14:11:29 +02:00
|
|
|
|
|
|
|
|
|
|
|
2025-08-18 11:29:21 +02:00
|
|
|
|
(define-team ai
|
|
|
|
|
|
(team 'ai
|
|
|
|
|
|
#:name "Artificial Intelligence"
|
|
|
|
|
|
#:description "Packages related to AI, ML and LLM."
|
|
|
|
|
|
#:scope (list "gnu/packages/machine-learning.scm")))
|
|
|
|
|
|
|
2025-04-29 20:23:50 +02:00
|
|
|
|
(define-team audio
|
|
|
|
|
|
(team 'audio
|
|
|
|
|
|
#:name "Audio team"
|
|
|
|
|
|
#:description "Audio related packages."
|
2025-06-18 11:47:52 +02:00
|
|
|
|
#:scope (list "gnu/packages/audio.scm"
|
gnu: Add FluidPlug plugins.
* gnu/packages/fluidplug.scm: New file;
(fluidplug-lv2): New variable;
(fluidplug-plugin->package): New procedure;
(fluidplug-airfont320-lv2, fluidplug-avl-drumkits-perc-lv2,
fluidplug-black-pearl-4a-lv2, fluidplug-black-pearl-4b-lv2,
fluidplug-black-pearl-5-lv2, fluidplug-red-zeppelin-4-lv2,
fluidplug-red-zeppelin-5-lv2, fluidplug-fluidgm-lv2,
fluidplug-fluidbass-lv2, fluidplug-fluidbrass-lv2,
fluidplug-fluidchromperc-lv2, fluidplug-fluiddrums-lv2,
fluidplug-fluidensemble-lv2, fluidplug-fluidethnic-lv2,
fluidplug-fluidguitars-lv2, fluidplug-fluidorgans-lv2,
fluidplug-fluidpercussion-lv2, fluidplug-fluidpianos-lv2,
fluidplug-fluidpipes-lv2, fluidplug-fluidreeds-lv2,
fluidplug-fluidsoundfx-lv2, fluidplug-fluidstrings-lv2,
fluidplug-fluidsynthfx-lv2, fluidplug-fluidsynthleads-lv2,
fluidplug-fluidsynthpads-lv2): New variables.
* gnu/local.mk: Add it.
* CODEOWNERS: Add it to audio team's scope.
* etc/teams.scm: Add it to audio team's scope.
Change-Id: I3692e2ed462bf71abe56d07712b8846a4228ad90
2024-03-06 21:07:24 +01:00
|
|
|
|
"gnu/packages/fluidplug.scm"
|
2025-06-18 11:47:52 +02:00
|
|
|
|
"gnu/packages/xiph.scm")))
|
2022-07-03 14:11:29 +02:00
|
|
|
|
|
2023-01-18 11:17:36 -08:00
|
|
|
|
(define-team bootstrap
|
|
|
|
|
|
(team 'bootstrap
|
|
|
|
|
|
#:name "Bootstrap"
|
2025-05-23 21:41:56 +02:00
|
|
|
|
#:description "Full-source bootstrap: stage0, Mes, Gash, etc."
|
2023-12-18 18:53:50 +01:00
|
|
|
|
#:scope (list "gnu/packages/commencement.scm"
|
|
|
|
|
|
"gnu/packages/mes.scm")))
|
2023-01-18 11:17:36 -08:00
|
|
|
|
|
2025-04-29 20:23:50 +02:00
|
|
|
|
(define-team c++
|
|
|
|
|
|
(team 'c++
|
|
|
|
|
|
#:name "C/C++ team"
|
|
|
|
|
|
#:description
|
|
|
|
|
|
"C and C++ libraries and tools."
|
|
|
|
|
|
#:scope (list "gnu/build-system/cmake.scm"
|
|
|
|
|
|
"gnu/build/cmake-build-system.scm"
|
|
|
|
|
|
"gnu/packages/c.scm"
|
|
|
|
|
|
"gnu/packages/cmake.scm"
|
|
|
|
|
|
"gnu/packages/cpp.scm"
|
|
|
|
|
|
"gnu/packages/ninja.scm"
|
|
|
|
|
|
"gnu/packages/valgrind.scm")))
|
2022-07-03 14:11:29 +02:00
|
|
|
|
|
|
|
|
|
|
(define-team core
|
|
|
|
|
|
(team 'core
|
2022-09-07 17:09:52 +02:00
|
|
|
|
#:name "Core / Tools / Internals"
|
|
|
|
|
|
#:scope
|
|
|
|
|
|
(list "guix/avahi.scm"
|
|
|
|
|
|
"guix/base16.scm"
|
|
|
|
|
|
"guix/base32.scm"
|
|
|
|
|
|
"guix/base64.scm"
|
|
|
|
|
|
"guix/bzr-download.scm"
|
|
|
|
|
|
"guix/cache.scm"
|
|
|
|
|
|
"guix/channels.scm"
|
|
|
|
|
|
"guix/ci.scm"
|
|
|
|
|
|
"guix/colors.scm"
|
|
|
|
|
|
"guix/combinators.scm"
|
|
|
|
|
|
"guix/config.scm"
|
|
|
|
|
|
"guix/cpio.scm"
|
|
|
|
|
|
"guix/cpu.scm"
|
|
|
|
|
|
"guix/cve.scm"
|
|
|
|
|
|
"guix/cvs-download.scm"
|
|
|
|
|
|
"guix/deprecation.scm"
|
|
|
|
|
|
"guix/derivations.scm"
|
|
|
|
|
|
"guix/describe.scm"
|
|
|
|
|
|
"guix/diagnostics.scm"
|
|
|
|
|
|
"guix/discovery.scm"
|
|
|
|
|
|
"guix/docker.scm"
|
|
|
|
|
|
"guix/download.scm"
|
|
|
|
|
|
"guix/elf.scm"
|
|
|
|
|
|
"guix/ftp-client.scm"
|
|
|
|
|
|
"guix/gexp.scm"
|
|
|
|
|
|
"guix/git-authenticate.scm"
|
|
|
|
|
|
"guix/git-download.scm"
|
|
|
|
|
|
"guix/git.scm"
|
|
|
|
|
|
"guix/glob.scm"
|
|
|
|
|
|
"guix/gnu-maintenance.scm"
|
|
|
|
|
|
"guix/gnupg.scm"
|
|
|
|
|
|
"guix/grafts.scm"
|
|
|
|
|
|
"guix/graph.scm"
|
|
|
|
|
|
"guix/hash.scm"
|
|
|
|
|
|
"guix/hg-download.scm"
|
|
|
|
|
|
"guix/http-client.scm"
|
|
|
|
|
|
"guix/i18n.scm"
|
|
|
|
|
|
"guix/inferior.scm"
|
|
|
|
|
|
"guix/ipfs.scm"
|
|
|
|
|
|
"guix/least-authority.scm"
|
|
|
|
|
|
"guix/licenses.scm"
|
|
|
|
|
|
"guix/lint.scm"
|
|
|
|
|
|
"guix/man-db.scm"
|
|
|
|
|
|
"guix/memoization.scm"
|
|
|
|
|
|
"guix/modules.scm"
|
|
|
|
|
|
"guix/monad-repl.scm"
|
|
|
|
|
|
"guix/monads.scm"
|
|
|
|
|
|
"guix/narinfo.scm"
|
|
|
|
|
|
"guix/nar.scm"
|
|
|
|
|
|
"guix/openpgp.scm"
|
|
|
|
|
|
"guix/packages.scm"
|
|
|
|
|
|
"guix/pki.scm"
|
|
|
|
|
|
"guix/platform.scm"
|
|
|
|
|
|
"guix/profiles.scm"
|
|
|
|
|
|
"guix/profiling.scm"
|
|
|
|
|
|
"guix/progress.scm"
|
|
|
|
|
|
"guix/quirks.scm"
|
|
|
|
|
|
"guix/read-print.scm"
|
|
|
|
|
|
"guix/records.scm"
|
|
|
|
|
|
"guix/remote.scm"
|
|
|
|
|
|
"guix/repl.scm"
|
|
|
|
|
|
"guix/search-paths.scm"
|
|
|
|
|
|
"guix/self.scm"
|
|
|
|
|
|
"guix/serialization.scm"
|
|
|
|
|
|
"guix/sets.scm"
|
|
|
|
|
|
"guix/ssh.scm"
|
|
|
|
|
|
"guix/status.scm"
|
|
|
|
|
|
"guix/store.scm"
|
|
|
|
|
|
"guix/substitutes.scm"
|
|
|
|
|
|
"guix/svn-download.scm"
|
|
|
|
|
|
"guix/swh.scm"
|
|
|
|
|
|
"guix/tests.scm"
|
|
|
|
|
|
"guix/transformations.scm"
|
|
|
|
|
|
"guix/ui.scm"
|
|
|
|
|
|
"guix/upstream.scm"
|
|
|
|
|
|
"guix/utils.scm"
|
|
|
|
|
|
"guix/workers.scm"
|
etc: teams: Sort and improve display of regular expression in 'scope' field.
Fixes <https://issues.guix.gnu.org/65208>.
* etc/teams.scm.in (<regexp*>): New record type.
(make-regexp*, regexp-exec*): New procedures.
(python, haskell, julia, java, emacs, rust, core, translations, installer,
home): Use it.
(find-team-by-scope): Use it.
(list-teams): Use it.
Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Modified-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Reported-by: Greg Hogan <code@greghogan.com>
2022-11-17 21:28:20 +01:00
|
|
|
|
(make-regexp* "^guix/platforms/")
|
|
|
|
|
|
(make-regexp* "^guix/scripts/")
|
2025-05-28 19:30:06 +02:00
|
|
|
|
(make-regexp* "^guix/store/")
|
|
|
|
|
|
(make-regexp* "^nix/"))))
|
2022-07-03 14:11:29 +02:00
|
|
|
|
|
2023-12-18 18:53:50 +01:00
|
|
|
|
(define-team core-packages
|
|
|
|
|
|
(team 'core-packages
|
|
|
|
|
|
#:name "Core packages"
|
|
|
|
|
|
#:description "Core packages: the GNU tool chain, Guile, Coreutils, etc."
|
|
|
|
|
|
#:scope (list "gnu/packages/base.scm"
|
|
|
|
|
|
"gnu/packages/bootstrap.scm"
|
|
|
|
|
|
"gnu/packages/commencement.scm"
|
|
|
|
|
|
"gnu/packages/cross-base.scm"
|
|
|
|
|
|
"gnu/packages/gcc.scm"
|
|
|
|
|
|
"gnu/packages/guile.scm"
|
2024-02-25 15:59:51 -05:00
|
|
|
|
"gnu/packages/ld-wrapper.in"
|
2023-12-18 18:53:50 +01:00
|
|
|
|
"gnu/packages/make-bootstrap.scm"
|
2024-09-06 18:39:38 +02:00
|
|
|
|
"gnu/packages/multiprecision.scm"
|
2023-12-18 18:53:50 +01:00
|
|
|
|
"guix/build/gnu-build-system.scm"
|
|
|
|
|
|
"guix/build/utils.scm"
|
|
|
|
|
|
"guix/build-system/gnu.scm")))
|
|
|
|
|
|
|
2025-08-14 12:41:35 -07:00
|
|
|
|
(define-team debian
|
|
|
|
|
|
(team 'debian
|
|
|
|
|
|
#:name "Debian team"
|
|
|
|
|
|
#:description
|
|
|
|
|
|
"Packages related to Debian and Debian derivatives."
|
|
|
|
|
|
#:scope (list "gnu/packages/debian.scm")))
|
|
|
|
|
|
|
2025-04-29 20:23:50 +02:00
|
|
|
|
(define-team documentation
|
|
|
|
|
|
(team 'documentation
|
|
|
|
|
|
#:name "Documentation"
|
|
|
|
|
|
#:description "Documentation: the manual and cookbook."
|
|
|
|
|
|
#:scope (list (make-regexp* "\\.texi$")
|
|
|
|
|
|
"doc/build.scm"
|
|
|
|
|
|
"gnu/system/examples/bare-bones.tmpl"
|
|
|
|
|
|
"gnu/system/examples/lightweight-desktop.tmpl"
|
|
|
|
|
|
"gnu/system/examples/desktop.tmpl")))
|
|
|
|
|
|
|
|
|
|
|
|
(define-team electronics
|
|
|
|
|
|
(team 'electronics
|
|
|
|
|
|
#:name "Electronics team"
|
|
|
|
|
|
#:description "Electronics and hardware related packages."
|
gnu: Merge fpga in electronics module.
* gnu/local.mk: Drop fpga.scm.
* etc/teams: Drop fpga.scm.
* CODEOWNERS: Drop fpga.scm.
* po/packages/POTFILES.in: Drop fpga.scm.
* gnu/packages/fpga.scm: Remove file.
(abc, abc-yosyshq, apycula, fftgen, gtkwave, iverilog, icestorm, libfst)
(nextpnr, nextpnr-ice40, nvc, openfpgaloader, python-hdlmake)
(python-migen, python-myhdl, python-vunit, systemc, verilator)
(yosys, yosys-clang): Move from here…
* gnu/packages/electronics.scm: … to here.
Change-Id: Ia920313a383d21210b217e3bf3f5c60c4682fc43
2025-09-14 18:43:57 +02:00
|
|
|
|
#:scope (list "gnu/packages/electronics.scm"
|
2025-04-29 20:23:50 +02:00
|
|
|
|
"gnu/packages/libftdi.scm"
|
2025-09-17 11:59:36 +02:00
|
|
|
|
"gnu/packages/engineering.scm"
|
|
|
|
|
|
"gnu/packages/flashing-tools.scm")))
|
2025-04-29 20:23:50 +02:00
|
|
|
|
|
|
|
|
|
|
(define-team emacs
|
|
|
|
|
|
(team 'emacs
|
|
|
|
|
|
#:name "Emacs team"
|
|
|
|
|
|
#:description "The extensible, customizable text editor and its
|
|
|
|
|
|
ecosystem."
|
|
|
|
|
|
#:scope (list "gnu/packages/aux-files/emacs/guix-emacs.el"
|
2025-02-26 12:39:46 -05:00
|
|
|
|
"gnu/packages/aux-files/emacs/comp-integrity.el"
|
2025-04-29 20:23:50 +02:00
|
|
|
|
(make-regexp* "^gnu/packages/emacs(-.+|)\\.scm$")
|
|
|
|
|
|
"gnu/packages/tree-sitter.scm"
|
|
|
|
|
|
"guix/build/emacs-build-system.scm"
|
|
|
|
|
|
"guix/build/emacs-utils.scm"
|
|
|
|
|
|
"guix/build-system/emacs.scm"
|
|
|
|
|
|
"guix/import/elpa.scm"
|
|
|
|
|
|
"guix/scripts/import/elpa.scm"
|
|
|
|
|
|
"tests/elpa.scm")))
|
|
|
|
|
|
|
|
|
|
|
|
(define-team embedded
|
|
|
|
|
|
(team 'embedded
|
|
|
|
|
|
#:name "Embedded"
|
|
|
|
|
|
#:scope (list "gnu/packages/bootloaders.scm"
|
|
|
|
|
|
"gnu/packages/firmware.scm")))
|
|
|
|
|
|
|
2022-07-03 14:11:29 +02:00
|
|
|
|
(define-team games
|
|
|
|
|
|
(team 'games
|
2022-09-25 20:52:35 +02:00
|
|
|
|
#:name "Games and Toys"
|
|
|
|
|
|
#:description "Packaging programs for amusement."
|
2024-10-03 16:23:22 +09:00
|
|
|
|
#:scope (list "gnu/packages/emulators.scm"
|
|
|
|
|
|
"gnu/packages/games.scm"
|
2022-09-25 20:52:35 +02:00
|
|
|
|
"gnu/packages/game-development.scm"
|
gnu: Rename minetest to luanti.
* gnu/packages/luanti.scm: New file.
(luanti, luanti-server, luanti-topic, luanti-moreores, luanti-sound-api-core)
(luanti-basic-materials, luanti-coloredwood, luanti-ethereal)
(luanti-homedecor-modpack, luanti-mesecons, luanti-mineclone, luanti-mobs)
(luanti-mobs-animal, luanti-mobs-monster, luanti-pipeworks, luanti-technic)
(luanti-throwing, luanti-throwing-arrows, luanti-worldedit)
(luanti-unifieddyes, luanti-unified-inventory, luanti-advtrains)
(luanti-basic-trains, luanti-oneblock, luanti-wielded-light): New variables.
* gnu/packages/minetest.scm:
(minetest, minetest-server, minetest-topic, minetest-moreores)
(minetest-sound-api-core, minetest-basic-materials, minetest-coloredwood)
(minetest-ethereal, minetest-homedecor-modpack, minetest-mesecons)
(minetest-mineclone, minetest-mobs, minetest-mobs-animal)
(minetest-mobs-monster, minetest-pipeworks, minetest-technic)
(minetest-throwing, minetest-throwing-arrows, minetest-worldedit)
(minetest-unifieddyes, minetest-unified-inventory, minetest-advtrains)
(minetest-basic-trains, minetest-oneblock, minetest-wielded-light): Deprecate
in favor of the above.
(minetest-game): Move to…
* gnu/packages/luanti.scm (minetest-game): … here.
* gnu/local.mk (GNU_SYSTEM_MODULES): Register luanti.scm.
* guix/build-system/luanti.scm: New file.
(luanti-mod-build-system): New public variable.
* guix/build-system/minetest.scm (minetest-mod-build-system): Deprecate in
favor of luanti-mod-build-system.
* guix/build/luanti-build-system.scm: New file, renamed from…
* guix/build/minetest-build-system.scm: … this. Deprecate in favor of
luanti-build-system.
* guix/import/luanti.scm: New file, renamed from guix/import/minetest.scm.
(%contentdb-api): Switch to “https://content.luanti.org/api/”.
(luanti-package?, latest-luanti-release, luanti->guix-package)
(luanti-recursive-import, %luanti-updater): New public variables.
* guix/import/minetest.scm (minetest-package?, latest-minetest-release)
(minetest->guix-package, minetest-recursive-import, %minetest-updater):
Deprecate in favor of the luanti variants above.
* guix/scripts/import/luanti.scm: New file, renamed from
guix/scripts/import/minetest.scm.
(guix-import-luanti): New public variable.
* guix/scripts/import/minetest.scm (guix-import-minetest): Deprecate in favor
of guix-import-luanti.
* tests/minetest.scm: Rename to…
* tests/luanti.scm: … this.
* Makefile.am (MODULES, SCM_TESTS): Adjust accordingly.
* etc/teams.scm (games): Adjust accordingly.
* CODEOWNERS: Adjust accordingly.
2025-06-29 15:20:47 +02:00
|
|
|
|
"gnu/packages/luanti.scm"
|
2022-09-25 20:52:35 +02:00
|
|
|
|
"gnu/packages/esolangs.scm" ; granted, rather niche
|
|
|
|
|
|
"gnu/packages/motti.scm"
|
gnu: Rename minetest to luanti.
* gnu/packages/luanti.scm: New file.
(luanti, luanti-server, luanti-topic, luanti-moreores, luanti-sound-api-core)
(luanti-basic-materials, luanti-coloredwood, luanti-ethereal)
(luanti-homedecor-modpack, luanti-mesecons, luanti-mineclone, luanti-mobs)
(luanti-mobs-animal, luanti-mobs-monster, luanti-pipeworks, luanti-technic)
(luanti-throwing, luanti-throwing-arrows, luanti-worldedit)
(luanti-unifieddyes, luanti-unified-inventory, luanti-advtrains)
(luanti-basic-trains, luanti-oneblock, luanti-wielded-light): New variables.
* gnu/packages/minetest.scm:
(minetest, minetest-server, minetest-topic, minetest-moreores)
(minetest-sound-api-core, minetest-basic-materials, minetest-coloredwood)
(minetest-ethereal, minetest-homedecor-modpack, minetest-mesecons)
(minetest-mineclone, minetest-mobs, minetest-mobs-animal)
(minetest-mobs-monster, minetest-pipeworks, minetest-technic)
(minetest-throwing, minetest-throwing-arrows, minetest-worldedit)
(minetest-unifieddyes, minetest-unified-inventory, minetest-advtrains)
(minetest-basic-trains, minetest-oneblock, minetest-wielded-light): Deprecate
in favor of the above.
(minetest-game): Move to…
* gnu/packages/luanti.scm (minetest-game): … here.
* gnu/local.mk (GNU_SYSTEM_MODULES): Register luanti.scm.
* guix/build-system/luanti.scm: New file.
(luanti-mod-build-system): New public variable.
* guix/build-system/minetest.scm (minetest-mod-build-system): Deprecate in
favor of luanti-mod-build-system.
* guix/build/luanti-build-system.scm: New file, renamed from…
* guix/build/minetest-build-system.scm: … this. Deprecate in favor of
luanti-build-system.
* guix/import/luanti.scm: New file, renamed from guix/import/minetest.scm.
(%contentdb-api): Switch to “https://content.luanti.org/api/”.
(luanti-package?, latest-luanti-release, luanti->guix-package)
(luanti-recursive-import, %luanti-updater): New public variables.
* guix/import/minetest.scm (minetest-package?, latest-minetest-release)
(minetest->guix-package, minetest-recursive-import, %minetest-updater):
Deprecate in favor of the luanti variants above.
* guix/scripts/import/luanti.scm: New file, renamed from
guix/scripts/import/minetest.scm.
(guix-import-luanti): New public variable.
* guix/scripts/import/minetest.scm (guix-import-minetest): Deprecate in favor
of guix-import-luanti.
* tests/minetest.scm: Rename to…
* tests/luanti.scm: … this.
* Makefile.am (MODULES, SCM_TESTS): Adjust accordingly.
* etc/teams.scm (games): Adjust accordingly.
* CODEOWNERS: Adjust accordingly.
2025-06-29 15:20:47 +02:00
|
|
|
|
"guix/build/luanti-build-system.scm")))
|
2022-07-03 14:11:29 +02:00
|
|
|
|
|
2025-04-29 20:23:50 +02:00
|
|
|
|
(define-team gnome
|
|
|
|
|
|
(team 'gnome
|
|
|
|
|
|
#:name "Gnome team"
|
|
|
|
|
|
#:description
|
|
|
|
|
|
"The Gnome desktop environment, along with core technologies such as
|
|
|
|
|
|
GLib/GIO, GTK, GStreamer and Webkit."
|
2025-05-18 21:56:55 +09:00
|
|
|
|
#:scope (list (make-regexp* "etc/teams/gnome")
|
|
|
|
|
|
"gnu/packages/glib.scm"
|
2025-04-29 20:23:50 +02:00
|
|
|
|
"gnu/packages/gstreamer.scm"
|
|
|
|
|
|
"gnu/packages/gtk.scm"
|
|
|
|
|
|
"gnu/packages/gnome.scm"
|
|
|
|
|
|
"gnu/packages/gnome-xyz.scm"
|
|
|
|
|
|
"gnu/packages/webkit.scm"
|
|
|
|
|
|
"gnu/services/desktop.scm"
|
|
|
|
|
|
"guix/build/glib-or-gtk-build-system.scm"
|
|
|
|
|
|
"guix/build/meson-build-system.scm")))
|
|
|
|
|
|
|
|
|
|
|
|
(define-team go
|
|
|
|
|
|
(team 'go
|
|
|
|
|
|
#:name "Go team"
|
|
|
|
|
|
#:scope (list "gnu/packages/configuration-management.scm"
|
|
|
|
|
|
(make-regexp* "gnu/packages/golang(-.+|)\\.scm$")
|
|
|
|
|
|
"gnu/packages/syncthing.scm"
|
|
|
|
|
|
"gnu/packages/terraform.scm"
|
|
|
|
|
|
"guix/build-system/go.scm"
|
|
|
|
|
|
"guix/build/go-build-system.scm"
|
|
|
|
|
|
"guix/import/go.scm"
|
|
|
|
|
|
"guix/scripts/import/go.scm"
|
2025-09-17 00:28:37 +02:00
|
|
|
|
"tests/import/go.scm")))
|
2025-04-29 20:23:50 +02:00
|
|
|
|
|
|
|
|
|
|
(define-team haskell
|
|
|
|
|
|
(team 'haskell
|
|
|
|
|
|
#:name "Haskell team"
|
|
|
|
|
|
#:description
|
|
|
|
|
|
"GHC, Hugs, Haskell packages, the \"hackage\" and \"stackage\" importers, and
|
|
|
|
|
|
the haskell-build-system."
|
|
|
|
|
|
#:scope
|
|
|
|
|
|
(list "gnu/packages/dhall.scm"
|
|
|
|
|
|
;; Match haskell.scm and haskell-*.scm.
|
|
|
|
|
|
(make-regexp* "^gnu/packages/haskell(-.+|)\\.scm$")
|
|
|
|
|
|
"gnu/packages/purescript.scm"
|
|
|
|
|
|
"guix/build/haskell-build-system.scm"
|
|
|
|
|
|
"guix/build-system/haskell.scm"
|
|
|
|
|
|
"guix/import/cabal.scm"
|
|
|
|
|
|
"guix/import/hackage.scm"
|
|
|
|
|
|
"guix/import/stackage.scm"
|
|
|
|
|
|
"guix/scripts/import/hackage.scm")))
|
|
|
|
|
|
|
|
|
|
|
|
(define-team home
|
|
|
|
|
|
(team 'home
|
|
|
|
|
|
#:name "Team for \"Guix Home\""
|
|
|
|
|
|
#:scope (list (make-regexp* "^(gnu|guix/scripts)/home(\\.scm$|/)")
|
|
|
|
|
|
"tests/guix-home.sh"
|
|
|
|
|
|
"tests/home-import.scm"
|
|
|
|
|
|
"tests/home-services.scm")))
|
|
|
|
|
|
|
2025-08-02 13:11:53 +02:00
|
|
|
|
(define-team hpc
|
|
|
|
|
|
(team 'hpc
|
|
|
|
|
|
#:name "Hpc team"
|
|
|
|
|
|
#:description "High performance computing related packages."
|
|
|
|
|
|
#:scope (list "gnu/packages/mpi.scm"
|
|
|
|
|
|
"gnu/packages/rocm.scm"
|
|
|
|
|
|
"gnu/packages/sycl.scm"
|
|
|
|
|
|
"gnu/packages/tbb.scm"
|
|
|
|
|
|
"gnu/packages/vulkan.scm")))
|
|
|
|
|
|
|
2025-04-29 20:23:50 +02:00
|
|
|
|
(define-team hurd
|
|
|
|
|
|
(team 'hurd
|
|
|
|
|
|
#:name "Team for the Hurd"
|
2025-05-23 21:41:56 +02:00
|
|
|
|
#:description "GNU Hurd packages and operating system support."
|
2025-04-29 20:23:50 +02:00
|
|
|
|
#:scope (list "gnu/system/hurd.scm"
|
|
|
|
|
|
"gnu/system/images/hurd.scm"
|
|
|
|
|
|
"gnu/build/hurd-boot.scm"
|
|
|
|
|
|
"gnu/services/hurd.scm"
|
|
|
|
|
|
"gnu/packages/hurd.scm")))
|
|
|
|
|
|
|
|
|
|
|
|
(define-team installer
|
|
|
|
|
|
(team 'installer
|
|
|
|
|
|
#:name "Installer script and system installer"
|
|
|
|
|
|
#:scope (list (make-regexp* "^gnu/installer(\\.scm$|/)"))))
|
|
|
|
|
|
|
|
|
|
|
|
(define-team java
|
|
|
|
|
|
(team 'java
|
|
|
|
|
|
#:name "Java and Maven team"
|
|
|
|
|
|
#:description
|
|
|
|
|
|
"The JDK and JRE, the Maven build system, Java packages, the ant-build-system,
|
|
|
|
|
|
and the maven-build-system."
|
|
|
|
|
|
#:scope
|
|
|
|
|
|
(list ;; Match java.scm and java-*.scm.
|
|
|
|
|
|
(make-regexp* "^gnu/packages/java(-.+|)\\.scm$")
|
|
|
|
|
|
;; Match maven.scm and maven-*.scm
|
|
|
|
|
|
(make-regexp* "^gnu/packages/maven(-.+|)\\.scm$")
|
|
|
|
|
|
"guix/build/ant-build-system.scm"
|
|
|
|
|
|
"guix/build/java-utils.scm"
|
|
|
|
|
|
"guix/build/maven-build-system.scm"
|
|
|
|
|
|
;; The maven directory
|
|
|
|
|
|
(make-regexp* "^guix/build/maven/")
|
|
|
|
|
|
"guix/build-system/ant.scm"
|
|
|
|
|
|
"guix/build-system/maven.scm")))
|
|
|
|
|
|
|
|
|
|
|
|
(define-team javascript
|
|
|
|
|
|
(team 'javascript
|
|
|
|
|
|
#:name "JavaScript team"
|
|
|
|
|
|
#:description
|
|
|
|
|
|
"JavaScript/Node.js packages, the node build system."
|
|
|
|
|
|
#:scope (list "gnu/packages/node-xyz.scm"
|
|
|
|
|
|
"gnu/packages/node.scm"
|
|
|
|
|
|
"guix/build-system/node.scm"
|
|
|
|
|
|
"guix/build/node-build-system.scm"
|
|
|
|
|
|
"guix/import/npm-binary.scm"
|
|
|
|
|
|
"guix/scripts/import/npm-binary.scm")))
|
|
|
|
|
|
|
|
|
|
|
|
(define-team julia
|
|
|
|
|
|
(team 'julia
|
|
|
|
|
|
#:name "Julia team"
|
|
|
|
|
|
#:description
|
|
|
|
|
|
"The Julia language, Julia packages, and the julia-build-system."
|
|
|
|
|
|
#:scope (list (make-regexp* "^gnu/packages/julia(-.+|)\\.scm$")
|
|
|
|
|
|
"guix/build/julia-build-system.scm"
|
|
|
|
|
|
"guix/build-system/julia.scm")))
|
|
|
|
|
|
|
|
|
|
|
|
(define-team kde
|
|
|
|
|
|
(team 'kde
|
|
|
|
|
|
#:name "KDE team"
|
|
|
|
|
|
#:description
|
|
|
|
|
|
"The plasma desktop environment, and KDE Applications."
|
|
|
|
|
|
#:scope (list (make-regexp* "^gnu/packages/(kde)(-.+|)\\.scm$")
|
|
|
|
|
|
"gnu/packages/education.scm")))
|
|
|
|
|
|
|
|
|
|
|
|
(define-team kernel
|
|
|
|
|
|
(team 'kernel
|
|
|
|
|
|
#:name "Linux-libre kernel team"
|
|
|
|
|
|
#:scope (list "gnu/build/linux-modules.scm"
|
2025-05-17 00:08:48 +09:00
|
|
|
|
(make-regexp* "^gnu/packages/aux-files/linux-libre.*$")
|
2025-04-29 20:23:50 +02:00
|
|
|
|
"gnu/packages/linux.scm"
|
|
|
|
|
|
"gnu/tests/linux-modules.scm"
|
|
|
|
|
|
"guix/build/linux-module-build-system.scm"
|
|
|
|
|
|
"guix/build-system/linux-module.scm")))
|
|
|
|
|
|
|
|
|
|
|
|
(define-team lisp
|
|
|
|
|
|
(team 'lisp
|
|
|
|
|
|
#:name "Lisp team"
|
|
|
|
|
|
#:description
|
|
|
|
|
|
"Common Lisp and similar languages, Common Lisp packages and the
|
|
|
|
|
|
asdf-build-system."
|
|
|
|
|
|
#:scope (list (make-regexp* "^gnu/packages/lisp(-.+|)\\.scm$")
|
|
|
|
|
|
"guix/build/asdf-build-system.scm"
|
|
|
|
|
|
"guix/build/lisp-utils.scm"
|
|
|
|
|
|
"guix/build-system/asdf.scm")))
|
|
|
|
|
|
|
2022-12-09 14:51:44 +08:00
|
|
|
|
(define-team localization
|
|
|
|
|
|
(team 'localization
|
|
|
|
|
|
#:name "Localization (l10n) team"
|
|
|
|
|
|
#:description
|
|
|
|
|
|
"Localization of your system to specific languages."
|
|
|
|
|
|
#:scope (list "gnu/packages/anthy.scm"
|
|
|
|
|
|
"gnu/packages/fcitx5.scm"
|
|
|
|
|
|
"gnu/packages/fonts.scm"
|
|
|
|
|
|
"gnu/packages/ibus.scm")))
|
|
|
|
|
|
|
2025-04-29 20:23:50 +02:00
|
|
|
|
(define-team lxqt
|
|
|
|
|
|
(team 'lxqt
|
|
|
|
|
|
#:name "LXQt team"
|
|
|
|
|
|
#:description "LXQt desktop environment."
|
|
|
|
|
|
#:scope (list "gnu/packages/lxqt.scm")))
|
2022-07-03 14:11:29 +02:00
|
|
|
|
|
|
|
|
|
|
(define-team mentors
|
|
|
|
|
|
(team 'mentors
|
|
|
|
|
|
#:name "Mentors"
|
|
|
|
|
|
#:description
|
|
|
|
|
|
"A group of mentors who chaperone contributions by newcomers."))
|
|
|
|
|
|
|
2022-07-13 20:03:35 +02:00
|
|
|
|
(define-team mozilla
|
|
|
|
|
|
(team 'mozilla
|
|
|
|
|
|
#:name "Mozilla"
|
2022-08-05 09:41:03 -05:00
|
|
|
|
#:description
|
2024-09-03 18:57:23 -03:00
|
|
|
|
"Taking care of Icedove and Web Browsers based on Mozilla Thunderbird
|
|
|
|
|
|
and Firefox."
|
2023-12-20 17:34:12 +01:00
|
|
|
|
#:scope (list "gnu/build/icecat-extension.scm"
|
|
|
|
|
|
"gnu/packages/browser-extensions.scm"
|
2024-02-05 18:44:21 +01:00
|
|
|
|
"gnu/packages/gnuzilla.scm"
|
2024-09-03 18:57:23 -03:00
|
|
|
|
"gnu/packages/librewolf.scm"
|
2024-02-05 18:44:21 +01:00
|
|
|
|
"gnu/packages/tor-browsers.scm")))
|
2022-07-13 20:03:35 +02:00
|
|
|
|
|
2025-04-29 20:23:50 +02:00
|
|
|
|
(define-team ocaml
|
|
|
|
|
|
(team 'ocaml
|
|
|
|
|
|
#:name "OCaml and Dune team"
|
|
|
|
|
|
#:description
|
|
|
|
|
|
"The OCaml language, the Dune build system, OCaml packages, the \"opam\"
|
|
|
|
|
|
importer, and the ocaml-build-system."
|
|
|
|
|
|
#:scope
|
|
|
|
|
|
(list "gnu/packages/ocaml.scm"
|
|
|
|
|
|
"gnu/packages/coq.scm"
|
|
|
|
|
|
"guix/build/ocaml-build-system.scm"
|
|
|
|
|
|
"guix/build/dune-build-system.scm"
|
|
|
|
|
|
"guix/build-system/ocaml.scm"
|
|
|
|
|
|
"guix/build-system/dune.scm"
|
|
|
|
|
|
"guix/import/opam.scm"
|
|
|
|
|
|
"guix/scripts/import/opam.scm"
|
|
|
|
|
|
"tests/opam.scm")))
|
|
|
|
|
|
|
|
|
|
|
|
(define-team python
|
|
|
|
|
|
(team 'python
|
|
|
|
|
|
#:name "Python team"
|
|
|
|
|
|
#:description
|
|
|
|
|
|
"Python, Python packages, the \"pypi\" importer, and the python-build-system."
|
|
|
|
|
|
#:scope
|
|
|
|
|
|
(list "gnu/packages/django.scm"
|
|
|
|
|
|
"gnu/packages/jupyter.scm"
|
|
|
|
|
|
(make-regexp* "^gnu/packages/python(-.+|)\\.scm$")
|
|
|
|
|
|
"gnu/packages/sphinx.scm"
|
|
|
|
|
|
"gnu/packages/tryton.scm"
|
|
|
|
|
|
"guix/build/pyproject-build-system.scm"
|
|
|
|
|
|
"guix/build-system/pyproject.scm"
|
|
|
|
|
|
"guix/build/python-build-system.scm"
|
|
|
|
|
|
"guix/build-system/python.scm"
|
|
|
|
|
|
"guix/import/pypi.scm"
|
|
|
|
|
|
"guix/scripts/import/pypi.scm"
|
2025-09-16 19:07:04 +02:00
|
|
|
|
"tests/import/pypi.scm")))
|
2025-04-29 20:23:50 +02:00
|
|
|
|
|
|
|
|
|
|
(define-team qt
|
|
|
|
|
|
(team 'qt
|
|
|
|
|
|
#:name "Qt team"
|
|
|
|
|
|
#:description
|
|
|
|
|
|
"The Qt toolkit/library and the qt-build-system,
|
|
|
|
|
|
as well as some packages using Qt."
|
|
|
|
|
|
#:scope (list "gnu/packages/qt.scm"
|
|
|
|
|
|
"guix/build-system/qt.scm"
|
|
|
|
|
|
"guix/build/qt-build-system.scm"
|
|
|
|
|
|
"guix/build/qt-utils.scm")))
|
|
|
|
|
|
|
|
|
|
|
|
(define-team r
|
|
|
|
|
|
(team 'r
|
|
|
|
|
|
#:name "R team"
|
|
|
|
|
|
#:description
|
|
|
|
|
|
"The R language, CRAN and Bioconductor repositories, the \"cran\" importer,
|
|
|
|
|
|
and the r-build-system."
|
|
|
|
|
|
#:scope (list "gnu/packages/bioconductor.scm"
|
|
|
|
|
|
"gnu/packages/cran.scm"
|
|
|
|
|
|
"guix/build/r-build-system.scm"
|
|
|
|
|
|
"guix/build-system/r.scm"
|
|
|
|
|
|
"guix/import/cran.scm"
|
|
|
|
|
|
"guix/scripts/import/cran.scm"
|
2025-09-17 01:03:44 +02:00
|
|
|
|
"tests/import/cran.scm")))
|
2025-04-29 20:23:50 +02:00
|
|
|
|
|
2022-08-27 14:55:43 -04:00
|
|
|
|
(define-team racket
|
|
|
|
|
|
(team 'racket
|
|
|
|
|
|
#:name "Racket team"
|
|
|
|
|
|
#:description
|
|
|
|
|
|
"The Racket language and Racket-based languages, Racket packages,
|
|
|
|
|
|
Racket's variant of Chez Scheme, and development of a Racket build system and
|
2022-09-27 19:00:27 +01:00
|
|
|
|
importer."
|
2022-11-17 19:45:33 -05:00
|
|
|
|
#:scope (list "gnu/packages/chez.scm"
|
|
|
|
|
|
"gnu/packages/racket.scm")))
|
2025-09-02 18:09:14 +02:00
|
|
|
|
|
|
|
|
|
|
(define-team release
|
|
|
|
|
|
(team 'release
|
|
|
|
|
|
#:name "Release team"
|
|
|
|
|
|
#:description
|
|
|
|
|
|
"The current release team. Members are expected to change with each
|
|
|
|
|
|
release."
|
|
|
|
|
|
#:scope (list "NEWS"
|
|
|
|
|
|
"etc/manifests/release.scm")))
|
2022-08-27 14:55:43 -04:00
|
|
|
|
|
2023-01-03 21:36:58 -08:00
|
|
|
|
(define-team reproduciblebuilds
|
|
|
|
|
|
(team 'reproduciblebuilds
|
|
|
|
|
|
#:name "Reproducible Builds team"
|
|
|
|
|
|
#:description
|
|
|
|
|
|
"Reproducible Builds tooling and issues that affect any guix packages."
|
|
|
|
|
|
#:scope (list "gnu/packages/diffoscope.scm")))
|
|
|
|
|
|
|
2025-04-29 20:23:50 +02:00
|
|
|
|
(define-team ruby
|
|
|
|
|
|
(team 'ruby
|
|
|
|
|
|
#:name "Ruby team"
|
|
|
|
|
|
#:scope (list "gnu/packages/ruby.scm"
|
|
|
|
|
|
"guix/build/ruby-build-system.scm"
|
|
|
|
|
|
"guix/build-system/ruby.scm"
|
|
|
|
|
|
"guix/import/gem.scm"
|
|
|
|
|
|
"guix/scripts/import/gem.scm"
|
2025-09-17 00:51:24 +02:00
|
|
|
|
"tests/import/gem.scm")))
|
2025-04-29 20:23:50 +02:00
|
|
|
|
|
|
|
|
|
|
(define-team rust
|
|
|
|
|
|
(team 'rust
|
|
|
|
|
|
#:name "Rust"
|
|
|
|
|
|
#:scope (list (make-regexp* "^gnu/packages/(crates|rust)(-.+|)\\.scm$")
|
|
|
|
|
|
"gnu/packages/sequoia.scm"
|
|
|
|
|
|
"guix/build/cargo-build-system.scm"
|
|
|
|
|
|
"guix/build/cargo-utils.scm"
|
|
|
|
|
|
"guix/build-system/cargo.scm"
|
|
|
|
|
|
"guix/import/crate.scm"
|
2025-02-24 12:50:26 +08:00
|
|
|
|
"guix/import/crate/cargo-lock.scm"
|
2025-04-29 20:23:50 +02:00
|
|
|
|
"guix/scripts/import/crate.scm"
|
2025-09-17 00:25:22 +02:00
|
|
|
|
"tests/import/crate.scm")))
|
2025-04-29 20:23:50 +02:00
|
|
|
|
|
|
|
|
|
|
(define-team science
|
|
|
|
|
|
(team 'science
|
|
|
|
|
|
#:name "Science team"
|
|
|
|
|
|
#:description "The main science disciplines and fields related
|
|
|
|
|
|
packages (e.g. Astronomy, Chemistry, Math, Physics etc.)"
|
2025-07-08 20:44:07 +01:00
|
|
|
|
#:scope (list (make-regexp* "^gnu/packages/fortran(-.+|)\\.scm$")
|
|
|
|
|
|
"gnu/packages/algebra.scm"
|
2025-04-29 20:23:50 +02:00
|
|
|
|
"gnu/packages/astronomy.scm"
|
|
|
|
|
|
"gnu/packages/chemistry.scm"
|
2025-07-08 20:44:07 +01:00
|
|
|
|
"gnu/packages/geo.scm"
|
|
|
|
|
|
"gnu/packages/graph.scm"
|
|
|
|
|
|
"gnu/packages/lean.scm"
|
|
|
|
|
|
"gnu/packages/maths.scm"
|
|
|
|
|
|
"gnu/packages/medical.scm"
|
|
|
|
|
|
"gnu/packages/sagemath.scm"
|
|
|
|
|
|
"gnu/packages/statistics.scm")))
|
2025-04-29 20:23:50 +02:00
|
|
|
|
|
|
|
|
|
|
(define-team sugar
|
|
|
|
|
|
(team 'sugar
|
|
|
|
|
|
#:name "Sugar team"
|
2023-03-17 18:37:11 +01:00
|
|
|
|
#:description
|
2025-04-29 20:23:50 +02:00
|
|
|
|
"Everything related to the Sugar Desktop and learning environment."
|
|
|
|
|
|
#:scope (list "gnu/packages/sugar.scm")))
|
2023-03-17 18:37:11 +01:00
|
|
|
|
|
2025-04-29 20:23:50 +02:00
|
|
|
|
(define-team sysadmin
|
|
|
|
|
|
(team 'sysadmin
|
|
|
|
|
|
#:name "Sysadmin team"
|
2025-03-05 19:17:15 +08:00
|
|
|
|
#:description
|
2025-04-29 20:23:50 +02:00
|
|
|
|
"Networking, server clustering, high availability."
|
|
|
|
|
|
#:scope (list "gnu/packages/admin.scm"
|
|
|
|
|
|
"gnu/packages/acl.scm"
|
|
|
|
|
|
"gnu/packages/adns.scm"
|
|
|
|
|
|
"gnu/packages/antivirus.scm"
|
|
|
|
|
|
"gnu/packages/apparmor.scm"
|
|
|
|
|
|
"gnu/packages/authentication.scm"
|
|
|
|
|
|
"gnu/packages/cluster.scm"
|
|
|
|
|
|
"gnu/packages/configuration-management"
|
|
|
|
|
|
"gnu/packages/databases.scm"
|
|
|
|
|
|
"gnu/packages/distributed.scm"
|
|
|
|
|
|
"gnu/packages/dns.scm"
|
|
|
|
|
|
"gnu/packages/high-availability.scm"
|
|
|
|
|
|
"gnu/packages/kerberos.scm"
|
|
|
|
|
|
"gnu/packages/logging.scm"
|
|
|
|
|
|
"gnu/packages/monitoring.scm"
|
|
|
|
|
|
"gnu/packages/nfs.scm"
|
|
|
|
|
|
"gnu/packages/openldap.scm"
|
|
|
|
|
|
"gnu/packages/openstack.scm"
|
|
|
|
|
|
"gnu/packages/prometheus.scm"
|
2025-08-15 20:08:16 +01:00
|
|
|
|
"gnu/packages/rdesktop.scm"
|
2025-04-29 20:23:50 +02:00
|
|
|
|
"gnu/packages/selinux.scm"
|
|
|
|
|
|
"gnu/packages/storage.scm"
|
|
|
|
|
|
"gnu/packages/task-runners.scm"
|
|
|
|
|
|
"gnu/packages/terraform.scm"
|
2025-08-15 20:08:16 +01:00
|
|
|
|
"gnu/packages/virtualization.scm"
|
|
|
|
|
|
"gnu/packages/vnc.scm")))
|
2025-04-29 20:23:50 +02:00
|
|
|
|
|
|
|
|
|
|
(define-team telephony
|
|
|
|
|
|
(team 'telephony
|
|
|
|
|
|
#:name "Telephony team"
|
|
|
|
|
|
#:description
|
|
|
|
|
|
"Telephony packages and services such as Jami, Linphone, etc."
|
|
|
|
|
|
#:scope (list "gnu/build/jami-service.scm"
|
|
|
|
|
|
"gnu/packages/jami.scm"
|
|
|
|
|
|
"gnu/packages/linphone.scm"
|
|
|
|
|
|
"gnu/packages/telephony.scm"
|
|
|
|
|
|
"gnu/services/telephony.scm"
|
|
|
|
|
|
"gnu/tests/data/jami-dummy-account.dat"
|
|
|
|
|
|
"gnu/tests/telephony.scm"
|
|
|
|
|
|
"tests/services/telephony.scm")))
|
|
|
|
|
|
|
|
|
|
|
|
(define-team tex
|
|
|
|
|
|
(team 'tex
|
|
|
|
|
|
#:name "TeX team"
|
|
|
|
|
|
#:description
|
|
|
|
|
|
"TeX, LaTeX, XeLaTeX, LuaTeX, TeXLive, the texlive-build-system, and
|
|
|
|
|
|
the \"texlive\" importer."
|
|
|
|
|
|
#:scope (list "gnu/packages/tex.scm"
|
|
|
|
|
|
"gnu/packages/texlive.scm"
|
|
|
|
|
|
"guix/build/texlive-build-system.scm"
|
|
|
|
|
|
"guix/build-system/texlive.scm"
|
|
|
|
|
|
"guix/import/texlive.scm"
|
|
|
|
|
|
"guix/scripts/import/texlive.scm"
|
|
|
|
|
|
"tests/texlive.scm")))
|
|
|
|
|
|
|
|
|
|
|
|
(define-team translations
|
|
|
|
|
|
(team 'translations
|
|
|
|
|
|
#:name "Translations"
|
|
|
|
|
|
#:scope (list "etc/news.scm"
|
|
|
|
|
|
(make-regexp* "^po/"))))
|
2025-03-05 19:17:15 +08:00
|
|
|
|
|
2023-03-02 14:55:30 +08:00
|
|
|
|
(define-team xfce
|
|
|
|
|
|
(team 'xfce
|
|
|
|
|
|
#:name "Xfce team"
|
|
|
|
|
|
#:description "Xfce desktop environment."
|
|
|
|
|
|
#:scope (list "gnu/packages/xfce.scm")))
|
|
|
|
|
|
|
2023-11-11 01:21:15 +01:00
|
|
|
|
(define-team zig
|
|
|
|
|
|
(team 'zig
|
|
|
|
|
|
#:name "Zig team"
|
|
|
|
|
|
#:description "Zig, Zig packages, and the zig-build system"
|
|
|
|
|
|
#:scope (list "gnu/packages/zig.scm"
|
|
|
|
|
|
"gnu/packages/zig-xyz.scm"
|
|
|
|
|
|
"guix/build/zig-build-system.scm"
|
|
|
|
|
|
"guix/build-system/zig.scm")))
|
|
|
|
|
|
|
2022-07-03 14:11:29 +02:00
|
|
|
|
|
2022-08-05 09:41:03 -05:00
|
|
|
|
(define-member (person "Eric Bavier"
|
2025-05-23 14:45:51 +02:00
|
|
|
|
"bavier@posteo.net"
|
|
|
|
|
|
"bavier")
|
2022-08-05 09:41:03 -05:00
|
|
|
|
science)
|
|
|
|
|
|
|
2022-07-07 20:06:49 +02:00
|
|
|
|
(define-member (person "Lars-Dominik Braun"
|
2025-05-23 14:45:51 +02:00
|
|
|
|
"lars@6xq.net"
|
|
|
|
|
|
"ldb")
|
2022-07-07 20:06:49 +02:00
|
|
|
|
python haskell)
|
|
|
|
|
|
|
2022-07-13 20:06:26 +02:00
|
|
|
|
(define-member (person "Jonathan Brielmaier"
|
2025-05-23 14:45:51 +02:00
|
|
|
|
"jonathan.brielmaier@web.de"
|
|
|
|
|
|
"jonsger")
|
2022-07-13 20:06:26 +02:00
|
|
|
|
mozilla)
|
|
|
|
|
|
|
2022-07-03 14:11:29 +02:00
|
|
|
|
(define-member (person "Ludovic Courtès"
|
2025-05-23 14:45:51 +02:00
|
|
|
|
"ludo@gnu.org"
|
|
|
|
|
|
"civodul")
|
2025-09-25 14:27:15 +02:00
|
|
|
|
core core-packages hpc installer
|
|
|
|
|
|
mentors)
|
2022-07-03 14:11:29 +02:00
|
|
|
|
|
2022-07-03 15:56:54 +02:00
|
|
|
|
(define-member (person "Andreas Enge"
|
2025-05-23 14:45:51 +02:00
|
|
|
|
"andreas@enge.fr"
|
|
|
|
|
|
"enge")
|
2024-09-06 18:35:16 +02:00
|
|
|
|
bootstrap core-packages lxqt science tex)
|
2022-07-03 14:11:29 +02:00
|
|
|
|
|
2024-02-23 19:11:43 +01:00
|
|
|
|
(define-member (person "Tanguy Le Carrour"
|
2025-08-28 14:00:27 +08:00
|
|
|
|
"tanguy@bioneland.org"
|
|
|
|
|
|
"tanguybl")
|
2024-02-23 19:11:43 +01:00
|
|
|
|
python home)
|
|
|
|
|
|
|
2022-12-11 01:00:00 +01:00
|
|
|
|
(define-member (person "Tobias Geerinckx-Rice"
|
2025-05-29 17:46:30 +02:00
|
|
|
|
"me@tobias.gr"
|
|
|
|
|
|
"nckx")
|
2024-06-16 14:15:14 -04:00
|
|
|
|
core mentors)
|
2022-12-11 01:00:00 +01:00
|
|
|
|
|
2025-02-28 15:54:05 +00:00
|
|
|
|
(define-member (person "Steve George"
|
2025-05-23 14:45:51 +02:00
|
|
|
|
"steve@futurile.net"
|
|
|
|
|
|
"futurile")
|
2025-02-28 15:54:05 +00:00
|
|
|
|
rust)
|
|
|
|
|
|
|
2022-07-03 22:49:32 -04:00
|
|
|
|
(define-member (person "Leo Famulari"
|
2025-05-23 14:45:51 +02:00
|
|
|
|
"leo@famulari.name"
|
|
|
|
|
|
"lfam")
|
2022-07-03 22:49:32 -04:00
|
|
|
|
kernel)
|
|
|
|
|
|
|
2022-07-03 22:01:17 +03:00
|
|
|
|
(define-member (person "Efraim Flashner"
|
2025-05-23 14:45:51 +02:00
|
|
|
|
"efraim@flashner.co.il"
|
|
|
|
|
|
"efraim")
|
2025-09-02 18:13:32 +02:00
|
|
|
|
embedded bootstrap release rust)
|
2022-07-03 22:01:17 +03:00
|
|
|
|
|
2022-07-07 09:34:48 -05:00
|
|
|
|
(define-member (person "jgart"
|
2025-06-02 11:03:02 +02:00
|
|
|
|
"jgart@dismail.de"
|
|
|
|
|
|
"jgart")
|
2025-03-22 17:14:28 -05:00
|
|
|
|
lisp mentors)
|
2022-07-07 09:34:48 -05:00
|
|
|
|
|
2022-09-09 18:00:12 +02:00
|
|
|
|
(define-member (person "Guillaume Le Vaillant"
|
2025-05-23 14:45:51 +02:00
|
|
|
|
"glv@posteo.net"
|
|
|
|
|
|
"glv")
|
2022-09-09 18:00:12 +02:00
|
|
|
|
lisp)
|
|
|
|
|
|
|
2022-07-06 22:12:47 +02:00
|
|
|
|
(define-member (person "Julien Lepiller"
|
2025-05-23 14:45:51 +02:00
|
|
|
|
"julien@lepiller.eu"
|
|
|
|
|
|
"roptat")
|
2022-07-06 22:12:47 +02:00
|
|
|
|
java ocaml translations)
|
|
|
|
|
|
|
2022-08-27 14:55:44 -04:00
|
|
|
|
(define-member (person "Philip McGrath"
|
2025-06-02 11:03:02 +02:00
|
|
|
|
"philip@philipmcgrath.com"
|
|
|
|
|
|
"LiberalArtist")
|
2022-08-27 14:55:44 -04:00
|
|
|
|
racket)
|
|
|
|
|
|
|
2022-08-05 17:14:59 +02:00
|
|
|
|
(define-member (person "Mathieu Othacehe"
|
2025-05-23 14:45:51 +02:00
|
|
|
|
"othacehe@gnu.org"
|
|
|
|
|
|
"mothacehe")
|
2022-08-11 14:46:21 +02:00
|
|
|
|
core installer mentors)
|
2022-08-05 17:14:59 +02:00
|
|
|
|
|
2022-07-06 22:51:14 +02:00
|
|
|
|
(define-member (person "Florian Pelz"
|
2025-05-23 14:45:51 +02:00
|
|
|
|
"pelzflorian@pelzflorian.de"
|
|
|
|
|
|
"pelzflorian")
|
2024-10-14 12:44:56 +02:00
|
|
|
|
translations)
|
2022-07-06 22:51:14 +02:00
|
|
|
|
|
2022-07-03 17:10:32 +02:00
|
|
|
|
(define-member (person "Liliana Marie Prikler"
|
2025-05-23 14:45:51 +02:00
|
|
|
|
"liliana.prikler@gmail.com"
|
|
|
|
|
|
"lilyp")
|
2023-03-17 18:37:11 +01:00
|
|
|
|
emacs games gnome)
|
2022-07-03 17:10:32 +02:00
|
|
|
|
|
2022-07-03 17:08:36 +02:00
|
|
|
|
(define-member (person "Ricardo Wurmus"
|
2025-05-23 14:45:51 +02:00
|
|
|
|
"rekado@elephly.net"
|
|
|
|
|
|
"rekado")
|
2024-06-16 22:55:37 +02:00
|
|
|
|
r sugar)
|
2022-07-03 17:08:36 +02:00
|
|
|
|
|
2022-07-08 23:36:24 +01:00
|
|
|
|
(define-member (person "Christopher Baines"
|
2025-05-23 14:45:51 +02:00
|
|
|
|
"guix@cbaines.net"
|
|
|
|
|
|
"cbaines")
|
2022-07-08 23:36:24 +01:00
|
|
|
|
core mentors ruby)
|
|
|
|
|
|
|
2022-09-13 12:34:49 +03:00
|
|
|
|
(define-member (person "Andrew Tropin"
|
2025-05-23 14:45:51 +02:00
|
|
|
|
"andrew@trop.in"
|
|
|
|
|
|
"abcdw")
|
2022-09-13 12:34:49 +03:00
|
|
|
|
home emacs)
|
|
|
|
|
|
|
2022-09-26 17:14:51 +00:00
|
|
|
|
(define-member (person "pukkamustard"
|
2025-08-28 14:00:27 +08:00
|
|
|
|
"pukkamustard@posteo.net"
|
|
|
|
|
|
"pukkamustard")
|
2022-09-26 17:14:51 +00:00
|
|
|
|
ocaml)
|
|
|
|
|
|
|
2022-09-26 16:26:36 +02:00
|
|
|
|
(define-member (person "Josselin Poiret"
|
|
|
|
|
|
"dev@jpoiret.xyz")
|
|
|
|
|
|
core installer)
|
|
|
|
|
|
|
2022-09-27 19:00:28 +01:00
|
|
|
|
(define-member (person "("
|
|
|
|
|
|
"paren@disroot.org")
|
2024-12-26 23:23:24 +01:00
|
|
|
|
)
|
2022-09-27 19:00:28 +01:00
|
|
|
|
|
2022-09-27 12:33:36 +02:00
|
|
|
|
(define-member (person "Simon Tournier"
|
|
|
|
|
|
"zimon.toutoune@gmail.com")
|
2024-06-04 18:14:04 +02:00
|
|
|
|
julia core mentors r)
|
2022-09-27 12:33:36 +02:00
|
|
|
|
|
2022-12-09 14:51:45 +08:00
|
|
|
|
(define-member (person "宋文武"
|
2025-05-23 14:45:51 +02:00
|
|
|
|
"iyzsong@envs.net"
|
|
|
|
|
|
"iyzsong")
|
2024-03-08 20:02:00 +08:00
|
|
|
|
games localization lxqt qt xfce)
|
2022-12-09 14:51:45 +08:00
|
|
|
|
|
2023-05-24 16:03:59 -07:00
|
|
|
|
(define-member (person "Vagrant Cascadian"
|
2025-05-23 14:45:51 +02:00
|
|
|
|
"vagrant@debian.org"
|
|
|
|
|
|
"vagrantc")
|
2025-08-14 12:41:35 -07:00
|
|
|
|
debian embedded)
|
2023-05-24 16:03:59 -07:00
|
|
|
|
|
2025-05-23 14:45:51 +02:00
|
|
|
|
(define-member (person "Vagrant Cascadian" ;XXX: duplicate
|
2025-06-14 12:58:07 -07:00
|
|
|
|
"vagrant@reproducible-builds.org"
|
|
|
|
|
|
"vagrantc")
|
2023-01-03 21:39:15 -08:00
|
|
|
|
reproduciblebuilds)
|
|
|
|
|
|
|
2023-04-02 17:39:20 +02:00
|
|
|
|
(define-member (person "Maxim Cournoyer"
|
2025-09-18 12:25:39 +09:00
|
|
|
|
"maxim@guixotic.coop"
|
2025-05-23 14:45:51 +02:00
|
|
|
|
"apteryx")
|
2025-02-20 10:22:17 +01:00
|
|
|
|
documentation gnome qt telephony electronics)
|
2023-04-02 17:39:20 +02:00
|
|
|
|
|
2023-08-15 12:06:27 -06:00
|
|
|
|
(define-member (person "Katherine Cox-Buday"
|
|
|
|
|
|
"cox.katherine.e+guix@gmail.com")
|
|
|
|
|
|
emacs go lisp)
|
|
|
|
|
|
|
2023-09-11 11:41:13 +03:00
|
|
|
|
(define-member (person "Munyoki Kilyungi"
|
2025-06-02 11:03:02 +02:00
|
|
|
|
"me@bonfacemunyoki.com"
|
|
|
|
|
|
"BonfaceKilz")
|
2023-09-11 11:41:13 +03:00
|
|
|
|
python lisp)
|
|
|
|
|
|
|
2023-10-26 23:38:11 +02:00
|
|
|
|
(define-member (person "Gabriel Wicki"
|
2025-06-14 14:03:26 +02:00
|
|
|
|
"gabriel@erlikon.ch"
|
|
|
|
|
|
"gabber")
|
2025-04-29 20:21:46 +02:00
|
|
|
|
audio documentation electronics embedded)
|
2023-10-26 23:38:11 +02:00
|
|
|
|
|
2023-11-11 01:22:17 +01:00
|
|
|
|
(define-member (person "Ekaitz Zarraga"
|
2025-05-23 14:45:51 +02:00
|
|
|
|
"ekaitz@elenq.tech"
|
|
|
|
|
|
"ekaitz-zarraga")
|
2025-03-11 23:43:48 +01:00
|
|
|
|
bootstrap zig electronics)
|
2023-11-11 01:22:17 +01:00
|
|
|
|
|
2025-01-05 08:02:45 +00:00
|
|
|
|
(define-member (person "Divya Ranjan Pattanaik"
|
2025-05-23 14:45:51 +02:00
|
|
|
|
"divya@subvertising.org"
|
|
|
|
|
|
"divyaranjan")
|
2025-01-05 08:02:45 +00:00
|
|
|
|
emacs rust haskell)
|
|
|
|
|
|
|
2023-12-20 17:27:51 +01:00
|
|
|
|
(define-member (person "Clément Lassieur"
|
2025-05-23 14:45:51 +02:00
|
|
|
|
"clement@lassieur.org"
|
|
|
|
|
|
"snape")
|
2023-12-20 17:27:51 +01:00
|
|
|
|
mozilla)
|
|
|
|
|
|
|
2024-01-12 00:39:32 +00:00
|
|
|
|
(define-member (person "Sharlatan Hellseher"
|
2025-05-23 14:45:51 +02:00
|
|
|
|
"sharlatanus@gmail.com"
|
|
|
|
|
|
"Hellseher")
|
2025-07-08 20:56:54 +01:00
|
|
|
|
go julia python science sysadmin)
|
2024-01-12 00:39:32 +00:00
|
|
|
|
|
2024-01-13 18:33:50 +01:00
|
|
|
|
(define-member (person "Vivien Kraus"
|
|
|
|
|
|
"vivien@planete-kraus.eu")
|
|
|
|
|
|
gnome)
|
|
|
|
|
|
|
2024-02-03 13:26:03 -05:00
|
|
|
|
(define-member (person "Mark H Weaver"
|
2025-05-23 14:45:51 +02:00
|
|
|
|
"mhw@netris.org"
|
|
|
|
|
|
"mhw")
|
2024-02-03 13:26:03 -05:00
|
|
|
|
mozilla)
|
|
|
|
|
|
|
2024-03-06 19:25:55 +08:00
|
|
|
|
(define-member (person "Adam Faiz"
|
|
|
|
|
|
"adam.faiz@disroot.org")
|
|
|
|
|
|
games)
|
|
|
|
|
|
|
2024-07-03 18:23:39 +02:00
|
|
|
|
(define-member (person "Laurent Gatto"
|
|
|
|
|
|
"laurent.gatto@gmail.com")
|
|
|
|
|
|
r)
|
|
|
|
|
|
|
2024-07-04 09:57:11 +02:00
|
|
|
|
(define-member (person "Nicolas Goaziou"
|
2025-05-23 14:45:51 +02:00
|
|
|
|
"guix@nicolasgoaziou.fr"
|
|
|
|
|
|
"ngz")
|
2024-07-04 09:57:11 +02:00
|
|
|
|
tex)
|
2024-07-03 18:23:39 +02:00
|
|
|
|
|
2024-09-03 18:56:56 -03:00
|
|
|
|
(define-member (person "André Batista"
|
2025-05-23 14:45:51 +02:00
|
|
|
|
"nandre@riseup.net"
|
|
|
|
|
|
"madage")
|
2024-09-03 18:56:56 -03:00
|
|
|
|
mozilla)
|
|
|
|
|
|
|
2024-12-03 14:26:40 +01:00
|
|
|
|
(define-member (person "Janneke Nieuwenhuizen"
|
2025-05-23 14:45:51 +02:00
|
|
|
|
"janneke@gnu.org"
|
|
|
|
|
|
"janneke")
|
2024-12-03 14:26:40 +01:00
|
|
|
|
bootstrap core-packages home hurd installer)
|
|
|
|
|
|
|
2025-01-07 20:24:41 -08:00
|
|
|
|
(define-member (person "Ian Eure"
|
2025-05-23 14:45:51 +02:00
|
|
|
|
"ian@retrospec.tv"
|
|
|
|
|
|
"ieure")
|
2025-01-07 20:24:41 -08:00
|
|
|
|
mozilla emacs)
|
|
|
|
|
|
|
2025-02-07 13:00:18 +08:00
|
|
|
|
(define-member (person "Zheng Junjie"
|
2025-05-23 14:45:51 +02:00
|
|
|
|
"z572@z572.online"
|
2025-05-29 17:46:30 +02:00
|
|
|
|
"Z572")
|
2025-03-05 19:18:09 +08:00
|
|
|
|
core-packages qt kde)
|
2025-02-07 13:00:18 +08:00
|
|
|
|
|
2025-03-13 07:22:14 +05:30
|
|
|
|
(define-member (person "Sughosha"
|
2025-09-23 22:41:17 +09:00
|
|
|
|
"sughosha@disroot.org"
|
|
|
|
|
|
"SameExpert")
|
2025-09-17 12:05:30 +02:00
|
|
|
|
audio kde)
|
2025-03-13 07:22:14 +05:30
|
|
|
|
|
2025-02-13 14:46:38 +01:00
|
|
|
|
(define-member (person "Jelle Licht"
|
2025-05-23 14:45:51 +02:00
|
|
|
|
"jlicht@fsfe.org"
|
|
|
|
|
|
"jlicht")
|
2025-02-13 14:46:38 +01:00
|
|
|
|
javascript)
|
|
|
|
|
|
|
2025-02-20 10:22:16 +01:00
|
|
|
|
(define-member (person "Cayetano Santos"
|
2025-06-02 11:03:02 +02:00
|
|
|
|
"csantosb@inventati.org"
|
|
|
|
|
|
"csantosb")
|
2025-08-02 13:11:53 +02:00
|
|
|
|
ai emacs electronics hpc)
|
2025-02-20 10:22:16 +01:00
|
|
|
|
|
2025-02-27 21:32:25 +00:00
|
|
|
|
(define-member (person "Greg Hogan"
|
2025-05-23 14:45:51 +02:00
|
|
|
|
"code@greghogan.com"
|
|
|
|
|
|
"greghogan")
|
2025-02-27 21:32:25 +00:00
|
|
|
|
c++)
|
2025-04-01 23:35:03 +08:00
|
|
|
|
|
|
|
|
|
|
(define-member (person "Hilton Chain"
|
2025-05-23 14:45:51 +02:00
|
|
|
|
"hako@ultrarare.space"
|
|
|
|
|
|
"hako")
|
2025-04-01 23:35:03 +08:00
|
|
|
|
emacs home localization mozilla rust zig)
|
2025-04-14 11:00:05 +02:00
|
|
|
|
|
|
|
|
|
|
(define-member (person "Noé Lopez"
|
2025-05-23 14:45:51 +02:00
|
|
|
|
"noelopez@free.fr"
|
|
|
|
|
|
"Baleine")
|
2025-09-02 18:13:32 +02:00
|
|
|
|
gnome release)
|
2025-05-02 15:13:50 +05:30
|
|
|
|
|
|
|
|
|
|
(define-member (person "Ashvith Shetty"
|
2025-09-04 18:05:54 +05:30
|
|
|
|
"ashvithshetty0010@zohomail.in"
|
|
|
|
|
|
"Ashvith")
|
|
|
|
|
|
games go javascript sysadmin xfce)
|
2025-04-27 20:08:39 -07:00
|
|
|
|
|
|
|
|
|
|
(define-member (person "Trevor Richards"
|
|
|
|
|
|
"trev@trevdev.ca")
|
|
|
|
|
|
lisp emacs)
|
|
|
|
|
|
|
2025-06-08 11:42:34 +02:00
|
|
|
|
(define-member (person "Konrad Hinsen"
|
|
|
|
|
|
"guix@khinsen.fastmail.net"
|
|
|
|
|
|
"khinsen")
|
|
|
|
|
|
lisp)
|
|
|
|
|
|
|
2025-06-12 19:58:15 -03:00
|
|
|
|
(define-member (person "Vinicius Monego"
|
|
|
|
|
|
"monego@posteo.net"
|
|
|
|
|
|
"monego")
|
|
|
|
|
|
python science)
|
|
|
|
|
|
|
2025-06-25 14:15:13 +02:00
|
|
|
|
(define-member (person "Nicolas Graves"
|
|
|
|
|
|
"ngraves@ngraves.fr"
|
2025-09-28 18:31:01 +02:00
|
|
|
|
"nicolas-graves")
|
2025-06-25 14:15:13 +02:00
|
|
|
|
javascript python ruby)
|
|
|
|
|
|
|
2025-07-01 15:06:43 +00:00
|
|
|
|
(define-member (person "Yelninei"
|
|
|
|
|
|
"yelninei@tutamail.com"
|
|
|
|
|
|
"Yelninei")
|
|
|
|
|
|
hurd)
|
|
|
|
|
|
|
2025-08-01 21:53:08 +02:00
|
|
|
|
(define-member (person "Giacomo Leidi"
|
|
|
|
|
|
"goodoldpaul@autistici.org"
|
|
|
|
|
|
"fishinthecalculator")
|
|
|
|
|
|
audio)
|
|
|
|
|
|
|
2025-09-03 23:01:31 -05:00
|
|
|
|
(define-member (person "Saku Laesvuori"
|
|
|
|
|
|
"saku@laesvuori.fi"
|
|
|
|
|
|
"slaesvuo")
|
|
|
|
|
|
haskell)
|
|
|
|
|
|
|
2025-09-02 18:13:32 +02:00
|
|
|
|
(define-member (person "Rodion Goritskov"
|
|
|
|
|
|
"rodion@goritskov.com"
|
|
|
|
|
|
"rodion-goritskov")
|
|
|
|
|
|
release)
|
|
|
|
|
|
|
2025-09-24 11:48:56 +02:00
|
|
|
|
(define-member (person "Rutherther"
|
|
|
|
|
|
"rutherther@ditigal.xyz"
|
|
|
|
|
|
"Rutherther")
|
|
|
|
|
|
release)
|
|
|
|
|
|
|
2022-07-03 14:11:29 +02:00
|
|
|
|
|
|
|
|
|
|
(define (find-team name)
|
|
|
|
|
|
(or (hash-ref %teams (string->symbol name))
|
|
|
|
|
|
(error (format #false
|
2023-08-15 12:06:27 -06:00
|
|
|
|
"no such team: ~a~%" name))))
|
2022-07-03 14:11:29 +02:00
|
|
|
|
|
2022-09-07 17:05:00 +02:00
|
|
|
|
(define (find-team-by-scope files)
|
|
|
|
|
|
"Return the team(s) which scope matches at least one of the FILES, as list
|
|
|
|
|
|
of file names as string."
|
|
|
|
|
|
(hash-fold
|
|
|
|
|
|
(lambda (key team acc)
|
|
|
|
|
|
(if (any (lambda (file)
|
2022-09-09 17:27:23 +02:00
|
|
|
|
(any (match-lambda
|
|
|
|
|
|
((? string? scope)
|
|
|
|
|
|
(string=? scope file))
|
2023-08-30 15:37:42 -04:00
|
|
|
|
((? regexp*? scope)
|
|
|
|
|
|
(regexp*-exec scope file)))
|
2022-09-07 17:05:00 +02:00
|
|
|
|
(team-scope team)))
|
|
|
|
|
|
files)
|
|
|
|
|
|
(cons team acc)
|
|
|
|
|
|
acc))
|
|
|
|
|
|
'()
|
|
|
|
|
|
%teams))
|
|
|
|
|
|
|
2022-07-03 14:11:29 +02:00
|
|
|
|
(define (cc . teams)
|
|
|
|
|
|
"Return arguments for `git send-email' to notify the members of the given
|
|
|
|
|
|
TEAMS when a patch is received by Debbugs."
|
2023-05-08 14:21:17 -04:00
|
|
|
|
(let ((members (append-map team-members teams)))
|
|
|
|
|
|
(unless (null? members)
|
|
|
|
|
|
(format #true "--add-header=\"X-Debbugs-Cc: ~{~a~^, ~}\""
|
|
|
|
|
|
(map person-email (sort-members members))))))
|
|
|
|
|
|
|
|
|
|
|
|
(define (sort-members members)
|
|
|
|
|
|
"Deduplicate and sort MEMBERS alphabetically by their name."
|
|
|
|
|
|
(sort (delete-duplicates members equal?)
|
|
|
|
|
|
(lambda (m1 m2)
|
|
|
|
|
|
(string<? (person-name m1) (person-name m2)))))
|
|
|
|
|
|
|
|
|
|
|
|
(define (member->string member)
|
|
|
|
|
|
"Return the 'email <name>' string representation of MEMBER."
|
|
|
|
|
|
(let* ((name (person-name member))
|
|
|
|
|
|
(quoted-name/maybe (if (string-contains name ",")
|
|
|
|
|
|
(string-append "\"" name "\"")
|
|
|
|
|
|
name)))
|
|
|
|
|
|
(format #false "~a <~a>" quoted-name/maybe (person-email member))))
|
2022-07-03 14:11:29 +02:00
|
|
|
|
|
2023-08-29 13:32:54 -04:00
|
|
|
|
(define* (list-members team #:key (prefix ""))
|
2022-07-03 14:11:29 +02:00
|
|
|
|
"Print the members of the given TEAM."
|
2023-08-29 13:32:54 -04:00
|
|
|
|
(for-each (lambda (member)
|
|
|
|
|
|
(format #t "~a~a~%" prefix (member->string member)))
|
|
|
|
|
|
(sort-members (team-members team))))
|
2022-07-03 14:11:29 +02:00
|
|
|
|
|
2023-08-29 13:53:49 -04:00
|
|
|
|
(define (print-team team)
|
|
|
|
|
|
"Print TEAM, a <team> record object."
|
|
|
|
|
|
(format #t
|
|
|
|
|
|
"\
|
2022-07-03 14:11:29 +02:00
|
|
|
|
id: ~a
|
|
|
|
|
|
name: ~a
|
|
|
|
|
|
description: ~a
|
2022-09-07 17:05:00 +02:00
|
|
|
|
~amembers:
|
2022-07-03 14:11:29 +02:00
|
|
|
|
"
|
2022-11-17 21:28:19 +01:00
|
|
|
|
(team-id team)
|
|
|
|
|
|
(team-name team)
|
|
|
|
|
|
(or (and=> (team-description team)
|
|
|
|
|
|
(lambda (text)
|
|
|
|
|
|
(string->recutils
|
|
|
|
|
|
(fill-paragraph text (%text-width)
|
|
|
|
|
|
(string-length "description: ")))))
|
|
|
|
|
|
"<none>")
|
|
|
|
|
|
(match (team-scope team)
|
|
|
|
|
|
(() "")
|
etc: teams: Sort and improve display of regular expression in 'scope' field.
Fixes <https://issues.guix.gnu.org/65208>.
* etc/teams.scm.in (<regexp*>): New record type.
(make-regexp*, regexp-exec*): New procedures.
(python, haskell, julia, java, emacs, rust, core, translations, installer,
home): Use it.
(find-team-by-scope): Use it.
(list-teams): Use it.
Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Modified-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Reported-by: Greg Hogan <code@greghogan.com>
2022-11-17 21:28:20 +01:00
|
|
|
|
(scope (format #f "scope:~%~{+ ~a~^~%~}~%"
|
|
|
|
|
|
(sort (map (match-lambda
|
|
|
|
|
|
((? regexp*? rx)
|
|
|
|
|
|
(regexp*-pattern rx))
|
|
|
|
|
|
(item item))
|
|
|
|
|
|
scope)
|
|
|
|
|
|
string<?)))))
|
2022-11-17 21:28:19 +01:00
|
|
|
|
(list-members team #:prefix "+ ")
|
|
|
|
|
|
(newline))
|
2023-08-29 13:53:49 -04:00
|
|
|
|
|
|
|
|
|
|
(define (sort-teams teams)
|
|
|
|
|
|
"Sort TEAMS, a list of <team> record objects."
|
|
|
|
|
|
(sort teams
|
|
|
|
|
|
(lambda (team1 team2)
|
|
|
|
|
|
(string<? (symbol->string (team-id team1))
|
|
|
|
|
|
(symbol->string (team-id team2))))))
|
|
|
|
|
|
|
2022-11-17 21:28:18 +01:00
|
|
|
|
(define* (list-teams #:optional team-names)
|
2023-08-29 13:53:49 -04:00
|
|
|
|
"Print all teams, their scope and their members."
|
|
|
|
|
|
(for-each print-team
|
2022-11-17 21:28:18 +01:00
|
|
|
|
(sort-teams
|
|
|
|
|
|
(if team-names
|
|
|
|
|
|
(map find-team team-names)
|
|
|
|
|
|
(hash-map->list (lambda (_ value) value) %teams)))))
|
2022-07-03 14:11:29 +02:00
|
|
|
|
|
2022-09-07 17:05:00 +02:00
|
|
|
|
|
|
|
|
|
|
(define (diff-revisions rev-start rev-end)
|
|
|
|
|
|
"Return the list of added, modified or removed files between REV-START
|
|
|
|
|
|
and REV-END, two git revision strings."
|
|
|
|
|
|
(let* ((repository (repository-open (getcwd)))
|
|
|
|
|
|
(commit1 (commit-lookup repository
|
|
|
|
|
|
(object-id
|
|
|
|
|
|
(revparse-single repository rev-start))))
|
|
|
|
|
|
(commit2 (commit-lookup repository
|
|
|
|
|
|
(object-id
|
|
|
|
|
|
(revparse-single repository rev-end))))
|
|
|
|
|
|
(diff (diff-tree-to-tree repository
|
|
|
|
|
|
(commit-tree commit1)
|
|
|
|
|
|
(commit-tree commit2)))
|
|
|
|
|
|
(files '()))
|
|
|
|
|
|
(diff-foreach
|
|
|
|
|
|
diff
|
|
|
|
|
|
(lambda (delta progress)
|
|
|
|
|
|
(set! files
|
|
|
|
|
|
(cons (diff-file-path (diff-delta-old-file delta)) files))
|
|
|
|
|
|
0)
|
|
|
|
|
|
(const 0)
|
|
|
|
|
|
(const 0)
|
|
|
|
|
|
(const 0))
|
|
|
|
|
|
files))
|
|
|
|
|
|
|
2022-12-19 16:17:10 -05:00
|
|
|
|
(define (git-patch->commit-id file)
|
2023-10-12 23:14:00 -04:00
|
|
|
|
"Parse the commit ID from FILE, a patch produced with git."
|
2022-12-19 16:17:10 -05:00
|
|
|
|
(call-with-input-file file
|
|
|
|
|
|
(lambda (port)
|
2023-10-12 23:14:00 -04:00
|
|
|
|
(let loop ((line (read-line port)))
|
|
|
|
|
|
(when (eof-object? line)
|
|
|
|
|
|
(error "could not find 'from' commit in patch" file))
|
|
|
|
|
|
(let ((m (string-match "^From ([0-9a-f]{40})" line)))
|
|
|
|
|
|
(if m
|
|
|
|
|
|
(match:substring m 1)
|
|
|
|
|
|
(loop (read-line port))))))))
|
2022-12-19 16:17:10 -05:00
|
|
|
|
|
2022-12-27 09:57:56 -05:00
|
|
|
|
(define (git-patch->revisions file)
|
|
|
|
|
|
"Return the start and end revisions of FILE, a patch file produced with git."
|
|
|
|
|
|
(let* ((rev-end (git-patch->commit-id file))
|
|
|
|
|
|
(rev-start (string-append rev-end "^")))
|
|
|
|
|
|
(list rev-start rev-end)))
|
|
|
|
|
|
|
2023-04-22 23:35:59 -04:00
|
|
|
|
(define (patch->teams patch-file)
|
|
|
|
|
|
"Return the name of the teams in scope for the changes in PATCH-FILE."
|
|
|
|
|
|
(map (compose symbol->string team-id)
|
|
|
|
|
|
(find-team-by-scope (apply diff-revisions
|
|
|
|
|
|
(git-patch->revisions patch-file)))))
|
|
|
|
|
|
|
2025-05-23 18:08:05 +02:00
|
|
|
|
(define (team-id->forgejo-id id)
|
|
|
|
|
|
"Return a name (string) suitable as a Forgejo team name."
|
|
|
|
|
|
(define valid ;"AlphaDashDot"
|
|
|
|
|
|
(char-set-union char-set:ascii (char-set #\-) (char-set #\.)))
|
|
|
|
|
|
|
|
|
|
|
|
(define (valid? chr)
|
|
|
|
|
|
(char-set-contains? valid chr))
|
|
|
|
|
|
|
|
|
|
|
|
(string-map (match-lambda
|
|
|
|
|
|
(#\+ #\p) ;special case for "c++"
|
|
|
|
|
|
((? valid? chr) chr)
|
|
|
|
|
|
(_ #\-))
|
|
|
|
|
|
(symbol->string id)))
|
|
|
|
|
|
|
2025-05-10 17:12:50 +02:00
|
|
|
|
(define (team->codeowners-snippet team)
|
|
|
|
|
|
(string-join (map (lambda (scope)
|
|
|
|
|
|
(format #f "~50a @guix/~a"
|
|
|
|
|
|
(if (regexp*? scope)
|
2025-06-20 17:23:40 +02:00
|
|
|
|
(let ((regexp (regexp*-pattern scope)))
|
|
|
|
|
|
;; Caret may not match as expected in
|
|
|
|
|
|
;; 'CODEOWNERS' so drop it.
|
|
|
|
|
|
(if (string-prefix? "^" regexp)
|
|
|
|
|
|
(string-drop regexp 1)
|
|
|
|
|
|
regexp))
|
2025-05-10 17:12:50 +02:00
|
|
|
|
(regexp-quote scope))
|
2025-05-23 18:08:05 +02:00
|
|
|
|
(team-id->forgejo-id (team-id team))))
|
2025-05-10 17:12:50 +02:00
|
|
|
|
(team-scope team))
|
|
|
|
|
|
"\n"
|
|
|
|
|
|
'suffix))
|
|
|
|
|
|
|
|
|
|
|
|
(define (export-codeowners port)
|
|
|
|
|
|
(let ((teams (sort-teams
|
|
|
|
|
|
(hash-map->list (lambda (_ value) value) %teams))))
|
|
|
|
|
|
(display "\
|
|
|
|
|
|
# This -*- conf -*- file was generated by './etc/teams.scm codeowners'.
|
|
|
|
|
|
#
|
|
|
|
|
|
# It describes the expected reviewers for a pull request based on the
|
|
|
|
|
|
# changed files. Unlike what the name of the file suggests they don't
|
|
|
|
|
|
# own the code (ownership is collective in this house!) but merely have
|
|
|
|
|
|
# a good understanding of that area of the codebase and therefore are
|
|
|
|
|
|
# usually suited as a reviewer.\n\n"
|
|
|
|
|
|
port)
|
|
|
|
|
|
(for-each (lambda (team)
|
|
|
|
|
|
(display (team->codeowners-snippet team) port)
|
|
|
|
|
|
(newline port))
|
|
|
|
|
|
teams)))
|
|
|
|
|
|
|
2022-09-07 17:05:00 +02:00
|
|
|
|
|
2022-07-03 14:11:29 +02:00
|
|
|
|
(define (main . args)
|
|
|
|
|
|
(match args
|
|
|
|
|
|
(("cc" . team-names)
|
|
|
|
|
|
(apply cc (map find-team team-names)))
|
2022-12-27 09:57:56 -05:00
|
|
|
|
(("cc-members" patch-file)
|
|
|
|
|
|
(unless (file-exists? patch-file)
|
|
|
|
|
|
(error "patch file does not exist:" patch-file))
|
|
|
|
|
|
(apply main "cc-members" (git-patch->revisions patch-file)))
|
2022-09-07 17:05:00 +02:00
|
|
|
|
(("cc-members" rev-start rev-end)
|
|
|
|
|
|
(apply cc (find-team-by-scope
|
|
|
|
|
|
(diff-revisions rev-start rev-end))))
|
2023-04-22 23:35:59 -04:00
|
|
|
|
(("cc-members-header-cmd" patch-file)
|
2023-05-08 14:21:17 -04:00
|
|
|
|
(let* ((teams (map find-team (patch->teams patch-file)))
|
|
|
|
|
|
(members (sort-members (append-map team-members teams))))
|
|
|
|
|
|
(unless (null? members)
|
|
|
|
|
|
(format #true "X-Debbugs-Cc: ~{~a~^, ~}"
|
|
|
|
|
|
(map member->string members)))))
|
2023-04-23 10:52:07 -04:00
|
|
|
|
(("cc-mentors-header-cmd" patch-file)
|
2023-05-08 14:21:17 -04:00
|
|
|
|
(format #true "X-Debbugs-Cc: ~{~a~^, ~}"
|
|
|
|
|
|
(map member->string
|
|
|
|
|
|
(sort-members (team-members (find-team "mentors"))))))
|
2022-12-19 16:17:10 -05:00
|
|
|
|
(("get-maintainer" patch-file)
|
2023-04-22 23:35:59 -04:00
|
|
|
|
(apply main "list-members" (patch->teams patch-file)))
|
2022-07-03 14:11:29 +02:00
|
|
|
|
(("list-teams" . args)
|
|
|
|
|
|
(list-teams))
|
|
|
|
|
|
(("list-members" . team-names)
|
|
|
|
|
|
(for-each
|
|
|
|
|
|
(lambda (team-name)
|
|
|
|
|
|
(list-members (find-team team-name)))
|
|
|
|
|
|
team-names))
|
2022-11-17 21:28:18 +01:00
|
|
|
|
(("show" . team-names)
|
|
|
|
|
|
(list-teams team-names))
|
2025-05-10 17:12:50 +02:00
|
|
|
|
(("codeowners")
|
|
|
|
|
|
(export-codeowners (current-output-port)))
|
2025-05-23 18:09:23 +02:00
|
|
|
|
(("sync-codeberg-teams" token)
|
|
|
|
|
|
(synchronize-teams token))
|
2022-07-03 14:11:29 +02:00
|
|
|
|
(anything
|
|
|
|
|
|
(format (current-error-port)
|
2022-10-27 11:09:09 -04:00
|
|
|
|
"Usage: etc/teams.scm <command> [<args>]
|
|
|
|
|
|
|
|
|
|
|
|
Commands:
|
2022-12-27 09:57:56 -05:00
|
|
|
|
cc <team-name>
|
|
|
|
|
|
get git send-email flags for cc-ing <team-name>
|
2023-04-23 10:52:07 -04:00
|
|
|
|
cc-members <start> <end> | <patch>
|
2022-12-27 09:57:56 -05:00
|
|
|
|
cc teams related to files changed between revisions or in a patch file
|
2023-04-22 23:35:59 -04:00
|
|
|
|
cc-members-header-cmd <patch>
|
|
|
|
|
|
cc-members variant for use with 'git send-email --header-cmd'
|
2023-04-23 10:52:07 -04:00
|
|
|
|
cc-mentors-header-cmd <patch>
|
|
|
|
|
|
command to use with 'git send-email --header-cmd' to notify mentors
|
2022-12-27 09:57:56 -05:00
|
|
|
|
list-teams
|
|
|
|
|
|
list teams and their members
|
|
|
|
|
|
list-members <team-name>
|
|
|
|
|
|
list members belonging to <team-name>
|
|
|
|
|
|
get-maintainer <patch>
|
2022-11-17 21:28:18 +01:00
|
|
|
|
compatibility mode with Linux get_maintainer.pl
|
|
|
|
|
|
show <team-name>
|
2025-05-23 17:50:32 +02:00
|
|
|
|
display <team-name> properties
|
|
|
|
|
|
codeowners
|
2025-05-23 18:09:23 +02:00
|
|
|
|
write a 'CODEOWNERS' file suitable for Codeberg on standard output
|
|
|
|
|
|
sync-codeberg-teams <token>
|
|
|
|
|
|
create or update the list of teams at Codeberg~%"))))
|
2022-07-03 14:11:29 +02:00
|
|
|
|
|
|
|
|
|
|
(apply main (cdr (command-line)))
|