| | |
| |
|
| | 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 = [] |
| |
|
| | for issue in issues: |
| | changelog = ENTRY.findall(issue.body) |
| | if changelog: |
| | (msg,) = changelog |
| | if not msg.startswith("* "): |
| | msg = "* " + msg |
| | if not msg.endswith("."): |
| | msg += "." |
| |
|
| | msg += f"\n `#{issue.number} <{issue.html_url}>`_" |
| |
|
| | print(Syntax(msg, "rst", theme="ansi_light", word_wrap=True)) |
| | print() |
| |
|
| | else: |
| | missing.append(issue) |
| |
|
| | 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() |
| |
|