|
103 | 103 | if vals[0].startswith("validate")
|
104 | 104 | ]
|
105 | 105 |
|
106 |
| -pr_sort_re = re.compile("(?<=\(Open\s)(.+)(?=\sdays)") |
| 106 | +pr_sort_re = re.compile(r"(?<=\(Open\s)(.+)(?=\sdays)") |
| 107 | +close_pr_sort_re = re.compile(r"(?<=\(Days\sopen:\s)(.+)(?=\))") |
107 | 108 |
|
108 | 109 | def run_library_checks(validators, bundle_submodules, latest_pylint, kw_args):
|
109 | 110 | """runs the various library checking functions"""
|
@@ -165,7 +166,8 @@ def run_library_checks(validators, bundle_submodules, latest_pylint, kw_args):
|
165 | 166 | insights = blinka_insights
|
166 | 167 | elif repo["name"] == "circuitpython":
|
167 | 168 | insights = core_insights
|
168 |
| - errors = validator.gather_insights(repo, insights, since) |
| 169 | + closed_metric = bool(insights == lib_insights) |
| 170 | + errors = validator.gather_insights(repo, insights, since, show_closed_metric=closed_metric) |
169 | 171 | if errors:
|
170 | 172 | print("insights error")
|
171 | 173 | for error in errors:
|
@@ -213,15 +215,26 @@ def run_library_checks(validators, bundle_submodules, latest_pylint, kw_args):
|
213 | 215 | output_handler()
|
214 | 216 | output_handler("Libraries")
|
215 | 217 | print_pr_overview(lib_insights)
|
216 |
| - output_handler("* {} open pull requests".format(len(lib_insights["open_prs"]))) |
217 |
| - sorted_prs = sorted(lib_insights["open_prs"], |
218 |
| - key=lambda days: int(pr_sort_re.search(days).group(1)), |
| 218 | + output_handler(" * Merged pull requests:") |
| 219 | + sorted_prs = sorted(lib_insights["merged_prs"], |
| 220 | + key=lambda days: int(close_pr_sort_re.search(days).group(1)), |
219 | 221 | reverse=True)
|
220 | 222 | for pr in sorted_prs:
|
221 |
| - output_handler(" * {}".format(pr)) |
| 223 | + output_handler(" * {}".format(pr)) |
222 | 224 | print_issue_overview(lib_insights)
|
223 |
| - output_handler("* {} open issues".format(len(lib_insights["open_issues"]))) |
224 |
| - output_handler(" * https://circuitpython.org/contributing") |
| 225 | + output_handler("* https://circuitpython.org/contributing") |
| 226 | + output_handler(" * {} open issues".format(len(lib_insights["open_issues"]))) |
| 227 | + open_pr_days = [ |
| 228 | + int(pr_sort_re.search(pr).group(1)) for pr in lib_insights["open_prs"] |
| 229 | + if pr_sort_re.search(pr) is not None |
| 230 | + ] |
| 231 | + output_handler( |
| 232 | + " * {0} open pull requests (Oldest: {1}, Newest: {2})".format( |
| 233 | + len(lib_insights["open_prs"]), |
| 234 | + max(open_pr_days), |
| 235 | + max((min(open_pr_days), 1)) # ensure the minumum is '1' |
| 236 | + ) |
| 237 | + ) |
225 | 238 | output_handler("Library updates in the last seven days:")
|
226 | 239 | if len(new_libs) != 0:
|
227 | 240 | output_handler("**New Libraries**")
|
@@ -280,7 +293,14 @@ def output_handler(message="", quiet=False):
|
280 | 293 |
|
281 | 294 | def print_circuitpython_download_stats():
|
282 | 295 | """Gather and report analytics on the main CircuitPython repository."""
|
283 |
| - response = github.get("/repos/adafruit/circuitpython/releases") |
| 296 | + try: |
| 297 | + response = github.get("/repos/adafruit/circuitpython/releases") |
| 298 | + except (ValueError, RuntimeError): |
| 299 | + output_handler( |
| 300 | + "Core CircuitPython GitHub download statistics request failed." |
| 301 | + ) |
| 302 | + return |
| 303 | + |
284 | 304 | if not response.ok:
|
285 | 305 | output_handler(
|
286 | 306 | "Core CircuitPython GitHub download statistics request failed."
|
@@ -419,7 +439,7 @@ def print_circuitpython_download_stats():
|
419 | 439 | output_handler()
|
420 | 440 |
|
421 | 441 | def print_pr_overview(*insights):
|
422 |
| - merged_prs = sum([x["merged_prs"] for x in insights]) |
| 442 | + merged_prs = sum([len(x["merged_prs"]) for x in insights]) |
423 | 443 | authors = set().union(*[x["pr_merged_authors"] for x in insights])
|
424 | 444 | reviewers = set().union(*[x["pr_reviewers"] for x in insights])
|
425 | 445 |
|
|
0 commit comments