mbox series
Message ID20260604121203.2955783-1-robin@jarry.cc
DateThu, 04 Jun 2026 14:11:48 +0200
Headers
show
Return-Path: <robin@jarry.cc>
Received: from ringo (2a01cb00021ec0002e23edbec21b0e73.ipv6.abo.wanadoo.fr
 [IPv6:2a01:cb00:21e:c000:2e23:edbe:c21b:e73])
	by patches.jarry.cc (Postfix) with ESMTP id B3BB91BC0272
	for <pw@patches.jarry.cc>; Thu, 04 Jun 2026 14:12:09 +0200 (CEST)
From: Robin Jarry <robin@jarry.cc>
To: pw@patches.jarry.cc
Subject: [PATCH 00/15] Implement forge bidirectional sync
Date: Thu,  4 Jun 2026 14:11:48 +0200
Message-ID: <20260604121203.2955783-1-robin@jarry.cc>
X-Mailer: git-send-email 2.54.0
MIME-Version: 1.0
List-ID: <pw.jarry.cc>
Content-Transfer-Encoding: 8bit
Series
Implement forge bidirectional sync

Message

Robin JarryJun. 4, 2026, 14:11. UTC
[00/15] Implement forge bidirectional sync

Does it work or not?

Robin Jarry (15):
  parsemail: wrap parse_mail() in a single transaction
  parsemail: fix SeriesReference race with concurrent delivery
  series: add respin tracking for patch series versions
  series: add metadata key-value store
  forge: add per-project configuration model
  forge: add backend abstraction layer
  forge: add utilities for mailing-list sync
  forge: add git mirror utilities
  forge: sync github pull requests to mailing list
  forge: sync github comments and reviews to mailing list
  forge: sync github check results to patchwork
  forge: sync patch series to github pull requests
  forge: forward mailing list comments to forge pull requests
  docs: add forge integration documentation
  deploy

 Makefile                                      | 147 +++++++
 docs/deployment/configuration.rst             |  37 ++
 docs/usage/forge.rst                          | 294 +++++++++++++
 docs/usage/index.rst                          |   1 +
 nginx.conf                                    |  62 +++
 parsemail.sh                                  |  14 +
 patchwork.service                             |  22 +
 patchwork/admin.py                            |  24 ++
 patchwork/api/series.py                       |  20 +-
 patchwork/forge/__init__.py                   | 279 ++++++++++++
 patchwork/forge/git.py                        | 287 +++++++++++++
 patchwork/forge/github/__init__.py            | 107 +++++
 patchwork/forge/github/from_ml.py             | 199 +++++++++
 patchwork/forge/github/to_ml.py               | 215 ++++++++++
 patchwork/forge/github/webhook.py             | 149 +++++++
 patchwork/forge/urls.py                       |  16 +
 patchwork/forge/util.py                       | 289 +++++++++++++
 patchwork/forge/views.py                      |  82 ++++
 patchwork/management/commands/parsemail.py    |   4 +-
 .../migrations/0049_series_respin_tracking.py |  33 ++
 patchwork/migrations/0050_series_metadata.py  |  41 ++
 patchwork/migrations/0051_forgeconfig.py      |  46 ++
 patchwork/models.py                           | 107 +++++
 patchwork/parser.py                           | 174 +++++++-
 patchwork/settings/base.py                    |  32 ++
 patchwork/settings/production.py              |  68 +++
 patchwork/templates/patchwork/submission.html |  25 ++
 patchwork/templatetags/utils.py               |   9 +
 patchwork/tests/api/test_series.py            |   2 +-
 patchwork/tests/forge/__init__.py             |   0
 patchwork/tests/forge/test_git.py             | 278 ++++++++++++
 patchwork/tests/forge/test_util.py            | 406 ++++++++++++++++++
 patchwork/tests/test_series.py                |  39 ++
 patchwork/urls.py                             |   9 +
 patchwork/views/cover.py                      |   3 +
 patchwork/views/patch.py                      |   2 +
 postfix/client_access                         |   2 +
 postfix/header_checks                         |   2 +
 postfix/main.cf                               |  53 +++
 postfix/master.cf                             |  28 ++
 postfix/recipient_bcc                         |   1 +
 postfix/transport                             |   2 +
 .../parsemail-race-fix-e5f6g7h8i9j0k1l2.yaml  |   5 +
 ...arsemail-transaction-d4e5f6g7h8i9j0k1.yaml |   6 +
 ...ries-respin-tracking-c3d4e5f6g7h8i9j0.yaml |  16 +
 uwsgi.ini                                     |  10 +
 46 files changed, 3625 insertions(+), 22 deletions(-)
 create mode 100644 Makefile
 create mode 100644 docs/usage/forge.rst
 create mode 100644 nginx.conf
 create mode 100755 parsemail.sh
 create mode 100644 patchwork.service
 create mode 100644 patchwork/forge/__init__.py
 create mode 100644 patchwork/forge/git.py
 create mode 100644 patchwork/forge/github/__init__.py
 create mode 100644 patchwork/forge/github/from_ml.py
 create mode 100644 patchwork/forge/github/to_ml.py
 create mode 100644 patchwork/forge/github/webhook.py
 create mode 100644 patchwork/forge/urls.py
 create mode 100644 patchwork/forge/util.py
 create mode 100644 patchwork/forge/views.py
 create mode 100644 patchwork/migrations/0049_series_respin_tracking.py
 create mode 100644 patchwork/migrations/0050_series_metadata.py
 create mode 100644 patchwork/migrations/0051_forgeconfig.py
 create mode 100644 patchwork/settings/production.py
 create mode 100644 patchwork/tests/forge/__init__.py
 create mode 100644 patchwork/tests/forge/test_git.py
 create mode 100644 patchwork/tests/forge/test_util.py
 create mode 100644 postfix/client_access
 create mode 100644 postfix/header_checks
 create mode 100644 postfix/main.cf
 create mode 100644 postfix/master.cf
 create mode 100644 postfix/recipient_bcc
 create mode 100644 postfix/transport
 create mode 100644 releasenotes/notes/parsemail-race-fix-e5f6g7h8i9j0k1l2.yaml
 create mode 100644 releasenotes/notes/parsemail-transaction-d4e5f6g7h8i9j0k1.yaml
 create mode 100644 releasenotes/notes/series-respin-tracking-c3d4e5f6g7h8i9j0.yaml
 create mode 100644 uwsgi.ini