From patchwork Fri May 23 19:55:05 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ludovic_Court=C3=A8s?= X-Patchwork-Id: 42889 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id E3B0027BC4D; Fri, 23 May 2025 20:56:26 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-7.4 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_BLOCKED,RCVD_IN_MSPIKE_H2, RCVD_IN_VALIDITY_CERTIFIED,RCVD_IN_VALIDITY_RPBL,RCVD_IN_VALIDITY_SAFE, SPF_HELO_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id C009827BC49 for ; Fri, 23 May 2025 20:56:26 +0100 (BST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uIYUt-0008B5-Hn; Fri, 23 May 2025 15:56:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uIYUs-0008Af-Dq for guix-patches@gnu.org; Fri, 23 May 2025 15:56:02 -0400 Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uIYUs-0004RP-3p for guix-patches@gnu.org; Fri, 23 May 2025 15:56:02 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debbugs.gnu.org; s=debbugs-gnu-org; h=MIME-Version:References:In-Reply-To:Date:From:To:Subject; bh=G+pJjNUNEQmrKIbKxn6Gjx5mlQjzirRKNzlVmsxx0Mc=; b=VUt5Um2Og0VtAfiaFgY9uQdL2VKK475MsT1XT1eRbcwuXm0qunvM0oHVGyz0IU3qj/UekRAZ8gmVGNh1e4bG6NE73Cmc9zpcZwINOQVmHjgpOE/XLK6qTJtTI10fdwufd970Qxz7QhO7I0L5pKNaaR2smF5FPGaY6mTUpoDjKs0Epxn9J4sGmVM/WFmhxMBDb9QuKrk/eqYRcy9gaAaA7p+0j9l/8BYn+F1yjTWWwno2LzWo2xQC0FVqlzDAhT1gd8PNHYGYk3hjNotKXA5YJnBoDuUn7m+mCS1dtl8uRuoYBazDIERkeV20O+TZyFbz3h23vpDbEZgQpqzi8ScaVQ==; Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1uIYUr-0000ym-V9 for guix-patches@gnu.org; Fri, 23 May 2025 15:56:01 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#78568] [PATCH 1/5] teams: Add =?utf-8?b?4oCYY29kZW93bmVycw==?= =?utf-8?b?4oCZ?= command in help message. Resent-From: Ludovic =?utf-8?q?Court=C3=A8s?= Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Fri, 23 May 2025 19:56:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 78568 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 78568@debbugs.gnu.org Cc: Ludovic =?utf-8?q?Court=C3=A8s?= Received: via spool by 78568-submit@debbugs.gnu.org id=B78568.17480301363642 (code B ref 78568); Fri, 23 May 2025 19:56:01 +0000 Received: (at 78568) by debbugs.gnu.org; 23 May 2025 19:55:36 +0000 Received: from localhost ([127.0.0.1]:51035 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uIYUR-0000wd-QG for submit@debbugs.gnu.org; Fri, 23 May 2025 15:55:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38334) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uIYUQ-0000wG-6i for 78568@debbugs.gnu.org; Fri, 23 May 2025 15:55:34 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uIYUK-0004NQ-8m; Fri, 23 May 2025 15:55:28 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-Version:References:In-Reply-To:Date:Subject:To: From; bh=G+pJjNUNEQmrKIbKxn6Gjx5mlQjzirRKNzlVmsxx0Mc=; b=lMm3kC66iRKHhrZ+qvs2 mA3wpddu0fKPHNlRwU5VnPNVJhD7DzDzSXXJcjALMjgz0pSmKQ6wHM3JqcGWSd7zAPTPiqvPtT6WR bE+GIA3yeIvQ1GLDtG5riSdSqcDJzZuBr+w4ik3O9hnm+0dDmwZJNYwRRAjZ2m0eCTzu9KhlPaniS UMZCYKph4Zssw408s+bqB3VPMIYpxEVjcTygahKRz/smQ4Vf0lFX7CEV9X+ptgOtW4PDKY7P9tV60 j7erXgfaXChYj99QMEXTTliXw5W1eYpqNZBPSuZTp//Lr0rpd+BaIKqQF8cE1gp5gSsY6lkNS53Ge nrr+oRt+9n6Atw==; From: Ludovic =?utf-8?q?Court=C3=A8s?= Date: Fri, 23 May 2025 21:55:05 +0200 Message-ID: X-Mailer: git-send-email 2.49.0 In-Reply-To: References: MIME-Version: 1.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org X-getmail-retrieved-from-mailbox: Patches * etc/teams.scm (main): Add ‘codeowners’ command in help message. Change-Id: I859997aba2b8829173e608e5ba1c8ab59b79d9c5 --- etc/teams.scm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/etc/teams.scm b/etc/teams.scm index f7617e724e..a57d132787 100755 --- a/etc/teams.scm +++ b/etc/teams.scm @@ -1107,6 +1107,8 @@ (define (main . args) get-maintainer compatibility mode with Linux get_maintainer.pl show - display properties~%")))) + display properties + codeowners + write a 'CODEOWNERS' file suitable for Codeberg on standard output~%")))) (apply main (cdr (command-line))) From patchwork Fri May 23 19:55:06 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ludovic_Court=C3=A8s?= X-Patchwork-Id: 42887 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 0F15027BC4C; Fri, 23 May 2025 20:56:20 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-7.4 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_BLOCKED,RCVD_IN_MSPIKE_H2, RCVD_IN_VALIDITY_CERTIFIED,RCVD_IN_VALIDITY_RPBL,RCVD_IN_VALIDITY_SAFE, SPF_HELO_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id CA0D227BC49 for ; Fri, 23 May 2025 20:56:19 +0100 (BST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uIYUu-0008Ba-G6; Fri, 23 May 2025 15:56:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uIYUs-0008As-T6 for guix-patches@gnu.org; Fri, 23 May 2025 15:56:02 -0400 Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uIYUs-0004RV-K3 for guix-patches@gnu.org; Fri, 23 May 2025 15:56:02 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debbugs.gnu.org; s=debbugs-gnu-org; h=MIME-Version:References:In-Reply-To:Date:From:To:Subject; bh=5xHjdOdyw7ieKQ0HxBqonMLqJEFt0hONSsBz84NW5VU=; b=IU0j4biXpzFmL4DvuLwrqZ/kBXPpTYY/iwU0mCpV8qClRsuG+VsDGLXR8pQ2VeYBF/wemb0sQUOqJrjhKvjOEH5mi9Ly0LK2NAHN0CFO1c7/YhauVF1Q/lAYKT8nlX8Q42kn/l298yIWm3baE+hKFsGk0LBeMp8i877TAR8YttXsiBLKGFO2PCilyd5skkWV85eqZ5/QFFHz6SJ1FHnBuyItjb04suS4twupZb5hRLds3kL4y2zx7Z+zGoHLJESyI9Y00r74QAqnMR4xD0mON0F8rswqI7y7uZgvC03/oSF7nfqWtFz5g+E3ktFFfnhDlUoLLgYtl2v1l5qH/HBVsQ==; Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1uIYUs-0000yv-En for guix-patches@gnu.org; Fri, 23 May 2025 15:56:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#78568] [PATCH 2/5] teams: Use suitable team identifiers for Codeberg. Resent-From: Ludovic =?utf-8?q?Court=C3=A8s?= Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Fri, 23 May 2025 19:56:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 78568 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 78568@debbugs.gnu.org Cc: Ludovic =?utf-8?q?Court=C3=A8s?= Received: via spool by 78568-submit@debbugs.gnu.org id=B78568.17480301403671 (code B ref 78568); Fri, 23 May 2025 19:56:02 +0000 Received: (at 78568) by debbugs.gnu.org; 23 May 2025 19:55:40 +0000 Received: from localhost ([127.0.0.1]:51041 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uIYUW-0000x8-4q for submit@debbugs.gnu.org; Fri, 23 May 2025 15:55:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39546) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uIYUS-0000wJ-BQ for 78568@debbugs.gnu.org; Fri, 23 May 2025 15:55:36 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uIYUN-0004Oe-2m; Fri, 23 May 2025 15:55:31 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-Version:References:In-Reply-To:Date:Subject:To: From; bh=5xHjdOdyw7ieKQ0HxBqonMLqJEFt0hONSsBz84NW5VU=; b=BoYYMn61N/ALPe28TFgw 3/yjwA+AeVElm6rKbRKuKVmHkIZauQFCIYg9+IA/MShzr8UOI0aJBTRPuJcAMVDIzH2820CQDtsb/ nkKxsnkZjbyjhhD7BqTmNUg8WlSiYDfHDisyl9gRr3e8itN+nUR3uP8Awu2mq2BpruJ4swkgj06iB ILSliH0VLPZGRUpwKWwGYwBPlgs9j6/mOdYlmAU7BE3r9T75QYNLlg+5+MtMoxcVaxi6oDdjHyBtU Vs/1qRc6jf13goHXqYjOZZOLEDrnWCOClP6Nz+vjbjgivqngtHu7W8UmMfSSoPhRFJocN9z9HAF9d rozAENA2x5Aceg==; From: Ludovic =?utf-8?q?Court=C3=A8s?= Date: Fri, 23 May 2025 21:55:06 +0200 Message-ID: X-Mailer: git-send-email 2.49.0 In-Reply-To: References: MIME-Version: 1.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org X-getmail-retrieved-from-mailbox: Patches The “c++” team has to be called “cpp”. * etc/teams.scm (team-id->forgejo-id): New procedure. (team->codeowners-snippet): Use it. Change-Id: I10619d8833b5c747504f26b7b0eedb9d61bfd812 --- etc/teams.scm | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/etc/teams.scm b/etc/teams.scm index a57d132787..9fa189a92c 100755 --- a/etc/teams.scm +++ b/etc/teams.scm @@ -1024,13 +1024,27 @@ (define (patch->teams patch-file) (find-team-by-scope (apply diff-revisions (git-patch->revisions patch-file))))) +(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))) + (define (team->codeowners-snippet team) (string-join (map (lambda (scope) (format #f "~50a @guix/~a" (if (regexp*? scope) (regexp*-pattern scope) (regexp-quote scope)) - (team-id team))) + (team-id->forgejo-id (team-id team)))) (team-scope team)) "\n" 'suffix)) From patchwork Fri May 23 19:55:07 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Ludovic_Court=C3=A8s?= X-Patchwork-Id: 42890 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id A688627BC4C; Fri, 23 May 2025 20:56:35 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-7.4 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_BLOCKED,RCVD_IN_MSPIKE_H2, RCVD_IN_VALIDITY_CERTIFIED,RCVD_IN_VALIDITY_RPBL,RCVD_IN_VALIDITY_SAFE, SPF_HELO_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id 694BB27BC49 for ; Fri, 23 May 2025 20:56:35 +0100 (BST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uIYUv-0008Be-0B; Fri, 23 May 2025 15:56:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uIYUt-0008B4-BC for guix-patches@gnu.org; Fri, 23 May 2025 15:56:03 -0400 Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uIYUt-0004Rc-2W for guix-patches@gnu.org; Fri, 23 May 2025 15:56:03 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debbugs.gnu.org; s=debbugs-gnu-org; h=MIME-Version:References:In-Reply-To:Date:From:To:Subject; bh=rKnx0NJv/UpoE5uY3IxFr5SxpSO6RCBDVv0nrTvIcYM=; b=ptm1of96ixI1J6C+Ui//sCugCjNo9exnYFXVTFef/DEcdHJm/Weu5wwECDmNMuGflvf7J6adg44jQgX0K9ixcw0JbgZUgNaH8G/1hvG21uAovhqhgxPz8L02RCNstyWsl46a4HRg/8cDu+34/JkIQmSsdjiuQ8pB2UAboLpmH2N3HTB+/xHBbZDLP9n2eFql1/3Yn2yJ92iD0XRLT+hasNL5rZ6Bh8gZCi8Ps1gADm7bQsicABjLUTcJv8RGetQH+iQwBkiSqaTQh8BAOwbOi+iNhx3PseFOnlD9hhWpJx/OJCZYSHPaxWGft8kLPMdz7v9NqIwOf2W1Z77q7loQHw==; Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1uIYUs-0000z4-UB for guix-patches@gnu.org; Fri, 23 May 2025 15:56:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#78568] [PATCH 3/5] teams: Add missing team descriptions. Resent-From: Ludovic =?utf-8?q?Court=C3=A8s?= Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Fri, 23 May 2025 19:56:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 78568 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 78568@debbugs.gnu.org Cc: Ludovic =?utf-8?q?Court=C3=A8s?= Received: via spool by 78568-submit@debbugs.gnu.org id=B78568.17480301463697 (code B ref 78568); Fri, 23 May 2025 19:56:02 +0000 Received: (at 78568) by debbugs.gnu.org; 23 May 2025 19:55:46 +0000 Received: from localhost ([127.0.0.1]:51047 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uIYUb-0000xY-Jm for submit@debbugs.gnu.org; Fri, 23 May 2025 15:55:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39560) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uIYUU-0000wM-HP for 78568@debbugs.gnu.org; Fri, 23 May 2025 15:55:38 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uIYUP-0004Q8-6K; Fri, 23 May 2025 15:55:33 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-Version:References:In-Reply-To:Date:Subject:To: From; bh=rKnx0NJv/UpoE5uY3IxFr5SxpSO6RCBDVv0nrTvIcYM=; b=LG0+m2O4DdpQ0ZvEQDrw 0Fb+xbpl+o19Agp2x+GBEuiz5sRImJkNeY/gyAufkirgcUmfTyy9Qtw/E4wMrfgu9h7pr5aQ6QzYd qGn6JJzmgocWQelpL6s8M9NCSOxKtvT03zYQNFUqz1tCmeUOFqRaEnRKiLKsh4Ddp0mmdVEzfMA1V AmrPHh/FWW3Gzo/vSrVfAzry7tTAi1dLHumcKYcl/HOMFG8LOKVfsZ8wbXgjl7gaB/60swf9FHJLR 3hOBaEFmjNGti27gDzNHdmM6eZ6jneD+weRmJ3YA50hQELYTqgI9fQuwjTJTSQUKbQebi456tZP2I SfIJW4X6ZlPFyA==; From: Ludovic =?utf-8?q?Court=C3=A8s?= Date: Fri, 23 May 2025 21:55:07 +0200 Message-ID: <64771be5798f10c2f7913ef23c9a14acd46d9c2d.1748029404.git.ludo@gnu.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: References: MIME-Version: 1.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org X-getmail-retrieved-from-mailbox: Patches * etc/teams.scm (bootstrap, hurd): Add #:description. Change-Id: I531907763c746420a60daf6a5c33ec586565db07 --- etc/teams.scm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/etc/teams.scm b/etc/teams.scm index 9fa189a92c..4b06d3a937 100755 --- a/etc/teams.scm +++ b/etc/teams.scm @@ -126,6 +126,7 @@ (define-team audio (define-team bootstrap (team 'bootstrap #:name "Bootstrap" + #:description "Full-source bootstrap: stage0, Mes, Gash, etc." #:scope (list "gnu/packages/commencement.scm" "gnu/packages/mes.scm"))) @@ -355,6 +356,7 @@ (define-team home (define-team hurd (team 'hurd #:name "Team for the Hurd" + #:description "GNU Hurd packages and operating system support." #:scope (list "gnu/system/hurd.scm" "gnu/system/images/hurd.scm" "gnu/build/hurd-boot.scm" From patchwork Fri May 23 19:55:08 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ludovic_Court=C3=A8s?= X-Patchwork-Id: 42886 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id DED0827BC4C; Fri, 23 May 2025 20:56:16 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-7.4 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_BLOCKED,RCVD_IN_MSPIKE_H2, RCVD_IN_VALIDITY_CERTIFIED,RCVD_IN_VALIDITY_RPBL,RCVD_IN_VALIDITY_SAFE, SPF_HELO_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id 082D027BC49 for ; Fri, 23 May 2025 20:56:16 +0100 (BST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uIYUw-0008CY-2Y; Fri, 23 May 2025 15:56:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uIYUu-0008Bc-Q1 for guix-patches@gnu.org; Fri, 23 May 2025 15:56:04 -0400 Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uIYUu-0004Rr-Da for guix-patches@gnu.org; Fri, 23 May 2025 15:56:04 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debbugs.gnu.org; s=debbugs-gnu-org; h=MIME-Version:References:In-Reply-To:Date:From:To:Subject; bh=Rx3LKXsW6VOrl27Ks5Ldn6svIVbVSkKiD+IPiETzgZs=; b=bHV7oC9Nhs3/JVavhqF9PfRq87HdzxoEXfqSJm7xfiW9boyr8AsiNWwPLXoWMFnKBgeKJcXu71LJLZZbFfWR//L7xd9ReJeS18e6LhVcO7H9wr9TLbmvlpue8EsuCv1MpGANeXUPhAAeHAqod9NxV1F4F6acrnk1hneXJQ+LlgJZTWQZCFI5/GOtLB03haLG9ny6/MbL0j4z/G/QOdeklMgjJMbcVv7aOx3hQ0Kwm8PlTuA74Wbw0Ld7ogRc4pEliGg2m8y2zklZ32lLmXbkQJAEOIKm0prfZuR8LBQovY0XxqSx/DRHAVM9Too0qnDwEhU3BVQHw8LtG2SNdZastQ==; Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1uIYUu-0000zM-4d for guix-patches@gnu.org; Fri, 23 May 2025 15:56:04 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#78568] [PATCH 4/5] teams: Add Codeberg accounts to records. Resent-From: Ludovic =?utf-8?q?Court=C3=A8s?= Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Fri, 23 May 2025 19:56:04 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 78568 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 78568@debbugs.gnu.org Cc: Ludovic =?utf-8?q?Court=C3=A8s?= Received: via spool by 78568-submit@debbugs.gnu.org id=B78568.17480301573739 (code B ref 78568); Fri, 23 May 2025 19:56:04 +0000 Received: (at 78568) by debbugs.gnu.org; 23 May 2025 19:55:57 +0000 Received: from localhost ([127.0.0.1]:51051 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uIYUc-0000xi-Tr for submit@debbugs.gnu.org; Fri, 23 May 2025 15:55:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39570) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uIYUW-0000wc-AF for 78568@debbugs.gnu.org; Fri, 23 May 2025 15:55:43 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uIYUQ-0004QI-JL; Fri, 23 May 2025 15:55:34 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-Version:References:In-Reply-To:Date:Subject:To: From; bh=Rx3LKXsW6VOrl27Ks5Ldn6svIVbVSkKiD+IPiETzgZs=; b=UjYufHE3HDiD1jQfebSu YxbyIyjfhlu5rxYxdhQaO8NVZB1UiGd8i4MddzLxJAauzcRW938nWUnsrKsB4cwI3O04yX04CzLlk vUQn2nSfCF7JkYaN7Am3XUB8C0hQIhlMGajYY2eEN00DLe4R1mawrkOuGkqOay36iLv+hq6oG8zOt GtUNR2pxvk0c9xUNoHquVNOd0AmGquWPxdVvVR3IbBIOKwhnOOPCZWKnU8Zlv0SHhIm5l5hDf0iUh Xz25MaPuMUL4tsRNUd395AnnLtcpphC7lDcIDwe0rr/y3N1BOg/8Obrf4/PUpp4w9aIpSKKpVCOVN YytMmFAdrQaH9Q==; From: Ludovic =?utf-8?q?Court=C3=A8s?= Date: Fri, 23 May 2025 21:55:08 +0200 Message-ID: X-Mailer: git-send-email 2.49.0 In-Reply-To: References: MIME-Version: 1.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org X-getmail-retrieved-from-mailbox: Patches Based on the committer accounts given in the thread at . * etc/teams.scm ()[account]: Add field. (person): Add ‘account’ parameter. : Add known Codeberg account names. Change-Id: Iad3b10c328b0df5d3c68d98ffee7f7c8ec4c8e23 --- etc/teams.scm | 95 +++++++++++++++++++++++++++++++++------------------ 1 file changed, 62 insertions(+), 33 deletions(-) diff --git a/etc/teams.scm b/etc/teams.scm index 4b06d3a937..e881e916ab 100755 --- a/etc/teams.scm +++ b/etc/teams.scm @@ -75,13 +75,14 @@ (define-record-type (scope team-scope)) (define-record-type - (make-person name email) + (make-person name email account) person? (name person-name) - (email person-email)) + (email person-email) + (account person-codeberg-account)) -(define* (person name #:optional email) - (make-person name email)) +(define* (person name #:optional email account) + (make-person name email account)) (define* (team id #:key name description (members '()) (scope '())) @@ -672,24 +673,29 @@ (define-team zig (define-member (person "Eric Bavier" - "bavier@posteo.net") + "bavier@posteo.net" + "bavier") science) (define-member (person "Lars-Dominik Braun" - "lars@6xq.net") + "lars@6xq.net" + "ldb") python haskell) (define-member (person "Jonathan Brielmaier" - "jonathan.brielmaier@web.de") + "jonathan.brielmaier@web.de" + "jonsger") mozilla) (define-member (person "Ludovic Courtès" - "ludo@gnu.org") + "ludo@gnu.org" + "civodul") core home bootstrap core-packages installer documentation mentors) (define-member (person "Andreas Enge" - "andreas@enge.fr") + "andreas@enge.fr" + "enge") bootstrap core-packages lxqt science tex) (define-member (person "Tanguy Le Carrour" @@ -701,15 +707,18 @@ (define-member (person "Tobias Geerinckx-Rice" core mentors) (define-member (person "Steve George" - "steve@futurile.net") + "steve@futurile.net" + "futurile") rust) (define-member (person "Leo Famulari" - "leo@famulari.name") + "leo@famulari.name" + "lfam") kernel) (define-member (person "Efraim Flashner" - "efraim@flashner.co.il") + "efraim@flashner.co.il" + "efraim") embedded bootstrap rust) (define-member (person "jgart" @@ -717,11 +726,13 @@ (define-member (person "jgart" lisp mentors) (define-member (person "Guillaume Le Vaillant" - "glv@posteo.net") + "glv@posteo.net" + "glv") lisp) (define-member (person "Julien Lepiller" - "julien@lepiller.eu") + "julien@lepiller.eu" + "roptat") java ocaml translations) (define-member (person "Philip McGrath" @@ -729,23 +740,28 @@ (define-member (person "Philip McGrath" racket) (define-member (person "Mathieu Othacehe" - "othacehe@gnu.org") + "othacehe@gnu.org" + "mothacehe") core installer mentors) (define-member (person "Florian Pelz" - "pelzflorian@pelzflorian.de") + "pelzflorian@pelzflorian.de" + "pelzflorian") translations) (define-member (person "Liliana Marie Prikler" - "liliana.prikler@gmail.com") + "liliana.prikler@gmail.com" + "lilyp") emacs games gnome) (define-member (person "Ricardo Wurmus" - "rekado@elephly.net") + "rekado@elephly.net" + "rekado") r sugar) (define-member (person "Christopher Baines" - "guix@cbaines.net") + "guix@cbaines.net" + "cbaines") core mentors ruby) (define-member (person "Andrew Tropin" @@ -769,19 +785,22 @@ (define-member (person "Simon Tournier" julia core mentors r) (define-member (person "宋文武" - "iyzsong@envs.net") + "iyzsong@envs.net" + "iyzsong") games localization lxqt qt xfce) (define-member (person "Vagrant Cascadian" - "vagrant@debian.org") + "vagrant@debian.org" + "vagrantc") embedded) -(define-member (person "Vagrant Cascadian" +(define-member (person "Vagrant Cascadian" ;XXX: duplicate "vagrant@reproducible-builds.org") reproduciblebuilds) (define-member (person "Maxim Cournoyer" - "maxim.cournoyer@gmail.com") + "maxim.cournoyer@gmail.com" + "apteryx") documentation gnome qt telephony electronics) (define-member (person "Katherine Cox-Buday" @@ -797,7 +816,8 @@ (define-member (person "Gabriel Wicki" audio documentation electronics embedded) (define-member (person "Ekaitz Zarraga" - "ekaitz@elenq.tech") + "ekaitz@elenq.tech" + "ekaitz-zarraga") bootstrap zig electronics) (define-member (person "Divya Ranjan Pattanaik" @@ -805,7 +825,8 @@ (define-member (person "Divya Ranjan Pattanaik" emacs rust haskell) (define-member (person "Clément Lassieur" - "clement@lassieur.org") + "clement@lassieur.org" + "snape") mozilla) (define-member (person "Sharlatan Hellseher" @@ -817,7 +838,8 @@ (define-member (person "Vivien Kraus" gnome) (define-member (person "Mark H Weaver" - "mhw@netris.org") + "mhw@netris.org" + "mhw") mozilla) (define-member (person "Adam Faiz" @@ -829,7 +851,8 @@ (define-member (person "Laurent Gatto" r) (define-member (person "Nicolas Goaziou" - "guix@nicolasgoaziou.fr") + "guix@nicolasgoaziou.fr" + "ngz") tex) (define-member (person "André Batista" @@ -837,15 +860,18 @@ (define-member (person "André Batista" mozilla) (define-member (person "Janneke Nieuwenhuizen" - "janneke@gnu.org") + "janneke@gnu.org" + "janneke") bootstrap core-packages home hurd installer) (define-member (person "Ian Eure" - "ian@retrospec.tv") + "ian@retrospec.tv" + "ieure") mozilla emacs) (define-member (person "Zheng Junjie" - "z572@z572.online") + "z572@z572.online" + "z572") core-packages qt kde) (define-member (person "Sughosha" @@ -853,7 +879,8 @@ (define-member (person "Sughosha" kde) (define-member (person "Jelle Licht" - "jlicht@fsfe.org") + "jlicht@fsfe.org" + "jlicht") javascript) (define-member (person "Cayetano Santos" @@ -861,11 +888,13 @@ (define-member (person "Cayetano Santos" emacs electronics) (define-member (person "Greg Hogan" - "code@greghogan.com") + "code@greghogan.com" + "greghogan") c++) (define-member (person "Hilton Chain" - "hako@ultrarare.space") + "hako@ultrarare.space" + "hako") emacs home localization mozilla rust zig) (define-member (person "Noé Lopez" From patchwork Fri May 23 19:55:09 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ludovic_Court=C3=A8s?= X-Patchwork-Id: 42888 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 6C16F27BC4C; Fri, 23 May 2025 20:56:26 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-7.4 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_BLOCKED,RCVD_IN_MSPIKE_H2, RCVD_IN_VALIDITY_CERTIFIED,RCVD_IN_VALIDITY_RPBL,RCVD_IN_VALIDITY_SAFE, SPF_HELO_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id 8E8A927BC49 for ; Fri, 23 May 2025 20:56:25 +0100 (BST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uIYUu-0008Bd-S4; Fri, 23 May 2025 15:56:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uIYUt-0008BD-Uq for guix-patches@gnu.org; Fri, 23 May 2025 15:56:03 -0400 Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uIYUt-0004Rj-LH for guix-patches@gnu.org; Fri, 23 May 2025 15:56:03 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debbugs.gnu.org; s=debbugs-gnu-org; h=MIME-Version:References:In-Reply-To:Date:From:To:Subject; bh=NF17NZo+6lgD6OjXe5QFwjqQkMTETXWivWhzlDaiB3Y=; b=S+BNicoOfZw1wATX5vDLtrnmXFrD1nbqyfVUGbfdX7KEXhi+i1xLRXP38WafUAgse1sdZxuUBsg5g+EhpxV4T7SFsK/R7ZtHFM+TdGD+xKNZq2bzFURJQbIWrpltnnv/9+2GHJMCCrl0WEcs38Vfq49OhKEFYHxQLSay1RRt1ujrt+kNb0ebB2j3fjknCCsGmym6ZmxA7Sny1d98jy+RkFk/wdZmncToqaSk6U/l7AGilZjDfYO2OrS26j0S/NDFi3GX8NZc48OqRolF35MC9UpBgQkkmHaJc5UdWK9Vg6imacd+Ik5JBT6cWOukRHc6LekCMLEMys/P8xrv1MfErg==; Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1uIYUt-0000zB-HE for guix-patches@gnu.org; Fri, 23 May 2025 15:56:03 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#78568] [PATCH 5/5] teams: Add =?utf-8?b?4oCYc3luYy1jb2RlYmVy?= =?utf-8?b?Zy10ZWFtc+KAmQ==?= action. Resent-From: Ludovic =?utf-8?q?Court=C3=A8s?= Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Fri, 23 May 2025 19:56:03 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 78568 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 78568@debbugs.gnu.org Cc: Ludovic =?utf-8?q?Court=C3=A8s?= Received: via spool by 78568-submit@debbugs.gnu.org id=B78568.17480301473705 (code B ref 78568); Fri, 23 May 2025 19:56:03 +0000 Received: (at 78568) by debbugs.gnu.org; 23 May 2025 19:55:47 +0000 Received: from localhost ([127.0.0.1]:51049 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uIYUc-0000xf-3M for submit@debbugs.gnu.org; Fri, 23 May 2025 15:55:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39580) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uIYUW-0000wf-W1 for 78568@debbugs.gnu.org; Fri, 23 May 2025 15:55:42 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uIYUR-0004QQ-GJ; Fri, 23 May 2025 15:55:35 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-Version:References:In-Reply-To:Date:Subject:To: From; bh=NF17NZo+6lgD6OjXe5QFwjqQkMTETXWivWhzlDaiB3Y=; b=gEEIQX6vQhlq8J6eies6 jkVpcqmhHxaAWUyz2tjvWUSL1p37o9lioSiiesKLAonCtoXLtkDFSfXXhGVaILvbqCsXHPwIo0u3x Zv3jM8s+1jUqcxkvmkJ8Ij76I/K/eE6QSL4kjr9bq0w6v70+pJOV6xXpQgQjdCoKbWvlL8sow809v gEgEBSJNNXGkmHpADL+hoBGG2XBKZNQWGznDN1I4BIF7iapq0RalLIoUpHPYPZ39EIWjk0fD9VFeX sxwgUr8qiar0HEqaa0Yo79vzOX1wH+uBNaxggT26VlQbsnS7kpZ2zWrERGUkN6QNkOpvOi0afpILa XHBsEfzc+YocgA==; From: Ludovic =?utf-8?q?Court=C3=A8s?= Date: Fri, 23 May 2025 21:55:09 +0200 Message-ID: X-Mailer: git-send-email 2.49.0 In-Reply-To: References: MIME-Version: 1.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org X-getmail-retrieved-from-mailbox: Patches * etc/teams.scm (): New JSON mapping. (unit-map->json, json->unit-map): New procedures. (%default-forgejo-team-units, %default-forgejo-team-unit-map) (%codeberg-organization): New variables. (codeberg-url, forgejo-http-headers): New procedures. (&forgejo-error): New record type. (process-url-components, define-forgejo-request): New macros. (organization-teams, create-team, add-team-member) (team->forgejo-team, synchronize-team, synchronize-teams): New procedures. (main): Add ‘sync-codeberg-teams’ action. Change-Id: I6b1f437a3407bc2d44965519990deb524afa9528 --- etc/teams.scm | 252 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 250 insertions(+), 2 deletions(-) diff --git a/etc/teams.scm b/etc/teams.scm index e881e916ab..08ca891e0d 100755 --- a/etc/teams.scm +++ b/etc/teams.scm @@ -41,12 +41,21 @@ (use-modules (srfi srfi-1) (srfi srfi-9) (srfi srfi-26) + (srfi srfi-34) + (srfi srfi-35) + (srfi srfi-71) (ice-9 format) (ice-9 regex) (ice-9 match) (ice-9 rdelim) (guix ui) - (git)) + (git) + (json) + (web client) + (web request) + (web response) + (rnrs bytevectors) + (guix base64)) (define-record-type (%make-regexp* pat flag rx) @@ -116,6 +125,241 @@ (define-syntax-rule (define-member person teams ...) team (cons p (team-members team))))) (quote (teams ...))))) + +;;; +;;; Forgejo support. +;;; + +;; Forgejo team. This corresponds to both the 'Team' and 'CreateTeamOption' +;; structures in Forgejo. +(define-json-mapping + 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)) + +(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 . + +(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) + +(define-forgejo-request (delete-team team) + "Delete TEAM, a Forgejo team." + (DELETE "teams" (number->string (forgejo-team-id team))) + => 204) + +(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) + +(define (team->forgejo-team team) + "Return a Forgejo team derived from TEAM, a 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)) + +(define* (synchronize-team token team + #:key + (current-teams + (organization-teams token + %codeberg-organization)) + (log-port (current-error-port))) + "Synchronize TEAM, a record, so that its metadata and list of members +are accurate on Codeberg. Lookup team IDs among CURRENT-TEAMS." + (let ((forgejo-team + (find (let ((name (team-id->forgejo-id (team-id team)))) + (lambda (candidate) + (string=? (forgejo-team-name candidate) name))) + current-teams))) + (when forgejo-team + ;; Delete the previously-created team. + (format log-port "team '~a' already exists; deleting it~%" + (forgejo-team-name forgejo-team)) + (delete-team token forgejo-team)) + + ;; Create the team. + (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)))) + +(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))) + teams))) + (define-team audio @@ -1132,6 +1376,8 @@ (define (main . args) (list-teams team-names)) (("codeowners") (export-codeowners (current-output-port))) + (("sync-codeberg-teams" token) + (synchronize-teams token)) (anything (format (current-error-port) "Usage: etc/teams.scm [] @@ -1154,6 +1400,8 @@ (define (main . args) show display properties codeowners - write a 'CODEOWNERS' file suitable for Codeberg on standard output~%")))) + write a 'CODEOWNERS' file suitable for Codeberg on standard output + sync-codeberg-teams + create or update the list of teams at Codeberg~%")))) (apply main (cdr (command-line)))