Include co-authors in release announcement (#12795)

As noted in #12789, the `release.py` script did not consider `Co-authored-by` fields, and since we introduced the new backport bot, this problem became more apparent due to how the backport commit and PR are generated.

Previously, the list of authors produced by the script in the #12789 branch was:

```
* Avasam
* Bruno Oliveira
* Ronny Pfannschmidt
* Sviatoslav Sydorenko (Святослав Сидоренко)
```

With this script:

```
* Anthony Sottile
* Avasam
* Bruno Oliveira
* Christian Clauss
* Eugene Mwangi
* Florian Bruhin
* GTowers1
* Nauman Ahmed
* Pierre Sassoulas
* Reagan Lee
* Ronny Pfannschmidt
* Stefaan Lippens
* Sviatoslav Sydorenko (Святослав Сидоренко)
* dongfangtianyu
```
This commit is contained in:
Bruno Oliveira 2024-09-09 18:28:15 -03:00 committed by GitHub
parent 7316b42df2
commit e8504ed49b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 15 additions and 4 deletions

View File

@ -6,6 +6,7 @@ from __future__ import annotations
import argparse
import os
from pathlib import Path
import re
from subprocess import call
from subprocess import check_call
from subprocess import check_output
@ -16,17 +17,27 @@ from colorama import init
def announce(version: str, template_name: str, doc_version: str) -> None:
"""Generates a new release announcement entry in the docs."""
# Get our list of authors
# Get our list of authors and co-authors.
stdout = check_output(["git", "describe", "--abbrev=0", "--tags"], encoding="UTF-8")
last_version = stdout.strip()
rev_range = f"{last_version}..HEAD"
stdout = check_output(
["git", "log", f"{last_version}..HEAD", "--format=%aN"], encoding="UTF-8"
authors = check_output(
["git", "log", rev_range, "--format=%aN"], encoding="UTF-8"
).splitlines()
co_authors_output = check_output(
["git", "log", rev_range, "--format=%(trailers:key=Co-authored-by) "],
encoding="UTF-8",
)
co_authors: list[str] = []
for co_author_line in co_authors_output.splitlines():
if m := re.search(r"Co-authored-by: (.+?)<", co_author_line):
co_authors.append(m.group(1).strip())
contributors = {
name
for name in stdout.splitlines()
for name in authors + co_authors
if not name.endswith("[bot]") and name != "pytest bot"
}