1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0
# For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt
"""Add a release comment to all the issues mentioned in the latest release."""
import re
import sys
from scriv.scriv import Scriv
from session import get_session
scriv = Scriv()
changelog = scriv.changelog()
changelog.read()
# Get the first entry in the changelog:
for etitle, sections in changelog.entries().items():
version = etitle.split()[1] # particular to our title format.
text = "\n".join(sections)
break
comment = (
f"This is now released as part of [coverage {version}]" +
f"(https://pypi.org/project/coverage/{version})."
)
print(f"Comment will be:\n\n{comment}\n")
repo_owner = sys.argv[1]
url_matches = re.finditer(fr"https://github.com/{repo_owner}/(issues|pull)/(\d+)", text)
urls = set((m[0], m[1], m[2]) for m in url_matches)
for url, kind, number in urls:
do_comment = False
if kind == "issues":
url = f"https://api.github.com/repos/{repo_owner}/issues/{number}"
issue_data = get_session().get(url).json()
if issue_data["state"] == "closed":
do_comment = True
else:
print(f"Still open, comment manually: {url}")
else:
url = f"https://api.github.com/repos/{repo_owner}/pulls/{number}"
pull_data = get_session().get(url).json()
if pull_data["state"] == "closed":
if pull_data["merged"]:
do_comment = True
else:
print(f"Not merged, comment manually: {url}")
else:
print(f"Still open, comment manually: {url}")
if do_comment:
print(f"Commenting on {url}")
url = f"https://api.github.com/repos/{repo_owner}/issues/{number}/comments"
resp = get_session().post(url, json={"body": comment})
print(resp)
|