release_notes.py: guard against stale GitHub index when checking unresolved issues The milestone filter endpoint can return issues whose milestone was already removed, causing a false "unresolved issues" failure. Re-fetch each open issue individually to verify its milestone is still set before blocking. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
diff --git a/dev-tools/release_notes.py b/dev-tools/release_notes.py index 439d566..21fcda0 100755 --- a/dev-tools/release_notes.py +++ b/dev-tools/release_notes.py
@@ -102,7 +102,18 @@ print("No issues found for the specified milestone.", file=sys.stderr) sys.exit(1) - unresolved_issues = [issue for issue in issues if issue["state"] != "closed"] + def is_truly_open(issue): + if issue["state"] == "closed": + return False + # Re-fetch the issue directly to guard against stale index returning issues + # whose milestone was already removed (known GitHub API inconsistency) + url = f"{GITHUB_API_BASE_URL}/repos/{owner}/{repo}/issues/{issue['number']}" + r = requests.get(url, headers=headers) + if r.status_code != 200: + return True # conservative: treat as unresolved if we can't verify + return r.json().get("milestone") is not None + + unresolved_issues = [issue for issue in issues if is_truly_open(issue)] if unresolved_issues: print("The release is not completed since unresolved issues were found:", file=sys.stderr) for issue in unresolved_issues: