pybind11/tools/make_changelog.py

93 lines
2.1 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
from __future__ import annotations
import re
import ghapi.all
from rich import print
from rich.syntax import Syntax
ENTRY = re.compile(
r"""
Suggested \s changelog \s entry:
.*
```rst
\s*
(.*?)
\s*
```
""",
re.DOTALL | re.VERBOSE,
)
print()
api = ghapi.all.GhApi(owner="pybind", repo="pybind11")
issues_pages = ghapi.page.paged(
api.issues.list_for_repo, labels="needs changelog", state="closed"
)
issues = (issue for page in issues_pages for issue in page)
missing = []
cats_descr = {
"feat": "New Features",
"feat(types)": "",
"feat(cmake)": "",
"fix": "Bug fixes",
"fix(types)": "",
"fix(cmake)": "",
"docs": "Documentation",
"tests": "Tests",
"ci": "CI",
"chore": "Other",
"unknown": "Uncategorised",
}
cats: dict[str, list[str]] = {c: [] for c in cats_descr}
for issue in issues:
changelog = ENTRY.findall(issue.body or "")
if not changelog or not changelog[0]:
missing.append(issue)
else:
(msg,) = changelog
if msg.startswith("- "):
msg = msg[2:]
if not msg.startswith("* "):
msg = "* " + msg
if not msg.endswith("."):
msg += "."
msg += f"\n `#{issue.number} <{issue.html_url}>`_"
chore(deps): update pre-commit hooks (#5459) * chore(deps): update pre-commit hooks updates: - [github.com/pre-commit/mirrors-clang-format: v19.1.3 → v19.1.4](https://github.com/pre-commit/mirrors-clang-format/compare/v19.1.3...v19.1.4) - [github.com/astral-sh/ruff-pre-commit: v0.7.2 → v0.8.1](https://github.com/astral-sh/ruff-pre-commit/compare/v0.7.2...v0.8.1) - [github.com/sirosen/texthooks: 0.6.7 → 0.6.8](https://github.com/sirosen/texthooks/compare/0.6.7...0.6.8) - [github.com/PyCQA/pylint: v3.3.1 → v3.3.2](https://github.com/PyCQA/pylint/compare/v3.3.1...v3.3.2) - [github.com/python-jsonschema/check-jsonschema: 0.29.4 → 0.30.0](https://github.com/python-jsonschema/check-jsonschema/compare/0.29.4...0.30.0) * Resolve ruff pre-commit errors: ``` ruff.....................................................................Failed - hook id: ruff - exit code: 1 warning: The following rules have been removed and ignoring them has no effect: - PT004 docs/benchmark.py:51:17: UP031 Use format specifiers instead of percent format | 50 | for cl in range(nclasses): 51 | decl += "class cl%03i {\n" % cl | ^^^^^^^^^^^^^^^^^^ UP031 52 | decl += "public:\n" 53 | bindings += f' py::class_<cl{cl:03}>("cl{cl:03}")\n' | = help: Replace with format specifiers docs/benchmark.py:88:15: UP031 Use format specifiers instead of percent format | 86 | elapsed = (n2 - n1).total_seconds() 87 | size = os.stat("test.so").st_size 88 | print(" {%i, %f, %i}," % (nclasses * nfns, elapsed, size)) | ^^^^^^^^^^^^^^^^^^ UP031 89 | print("}") | = help: Replace with format specifiers tools/make_changelog.py:62:9: PLC0206 Extracting value from dictionary without calling `.items()` | 61 | msg += f"\n `#{issue.number} <{issue.html_url}>`_" 62 | for cat in cats: | _________^ 63 | | if issue.title.lower().startswith(f"{cat}:"): 64 | | cats[cat].append(msg) 65 | | break 66 | | else: 67 | | cats["unknown"].append(msg) | |_______________________________________^ PLC0206 68 | 69 | for cat, msgs in cats.items(): | Found 3 errors. ``` --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Ralf W. Grosse-Kunstleve <rgrossekunst@nvidia.com>
2024-12-08 23:21:49 +00:00
for cat, cat_list in cats.items():
if issue.title.lower().startswith(f"{cat}:"):
chore(deps): update pre-commit hooks (#5459) * chore(deps): update pre-commit hooks updates: - [github.com/pre-commit/mirrors-clang-format: v19.1.3 → v19.1.4](https://github.com/pre-commit/mirrors-clang-format/compare/v19.1.3...v19.1.4) - [github.com/astral-sh/ruff-pre-commit: v0.7.2 → v0.8.1](https://github.com/astral-sh/ruff-pre-commit/compare/v0.7.2...v0.8.1) - [github.com/sirosen/texthooks: 0.6.7 → 0.6.8](https://github.com/sirosen/texthooks/compare/0.6.7...0.6.8) - [github.com/PyCQA/pylint: v3.3.1 → v3.3.2](https://github.com/PyCQA/pylint/compare/v3.3.1...v3.3.2) - [github.com/python-jsonschema/check-jsonschema: 0.29.4 → 0.30.0](https://github.com/python-jsonschema/check-jsonschema/compare/0.29.4...0.30.0) * Resolve ruff pre-commit errors: ``` ruff.....................................................................Failed - hook id: ruff - exit code: 1 warning: The following rules have been removed and ignoring them has no effect: - PT004 docs/benchmark.py:51:17: UP031 Use format specifiers instead of percent format | 50 | for cl in range(nclasses): 51 | decl += "class cl%03i {\n" % cl | ^^^^^^^^^^^^^^^^^^ UP031 52 | decl += "public:\n" 53 | bindings += f' py::class_<cl{cl:03}>("cl{cl:03}")\n' | = help: Replace with format specifiers docs/benchmark.py:88:15: UP031 Use format specifiers instead of percent format | 86 | elapsed = (n2 - n1).total_seconds() 87 | size = os.stat("test.so").st_size 88 | print(" {%i, %f, %i}," % (nclasses * nfns, elapsed, size)) | ^^^^^^^^^^^^^^^^^^ UP031 89 | print("}") | = help: Replace with format specifiers tools/make_changelog.py:62:9: PLC0206 Extracting value from dictionary without calling `.items()` | 61 | msg += f"\n `#{issue.number} <{issue.html_url}>`_" 62 | for cat in cats: | _________^ 63 | | if issue.title.lower().startswith(f"{cat}:"): 64 | | cats[cat].append(msg) 65 | | break 66 | | else: 67 | | cats["unknown"].append(msg) | |_______________________________________^ PLC0206 68 | 69 | for cat, msgs in cats.items(): | Found 3 errors. ``` --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Ralf W. Grosse-Kunstleve <rgrossekunst@nvidia.com>
2024-12-08 23:21:49 +00:00
cat_list.append(msg)
break
else:
cats["unknown"].append(msg)
for cat, msgs in cats.items():
if msgs:
desc = cats_descr[cat]
print(f"[bold]{desc}:" if desc else f".. {cat}")
print()
for msg in msgs:
print(Syntax(msg, "rst", theme="ansi_light", word_wrap=True))
print()
print()
if missing:
print()
print("[blue]" + "-" * 30)
print()
for issue in missing:
print(f"[red bold]Missing:[/red bold][red] {issue.title}")
print(f"[red] {issue.html_url}\n")
print("[bold]Template:\n")
msg = "## Suggested changelog entry:\n\n```rst\n\n```"
print(Syntax(msg, "md", theme="ansi_light"))
print()