Skip to content

Commit 489699c

Browse files
committed
add update PR script
1 parent 6144d4a commit 489699c

File tree

1 file changed

+103
-0
lines changed

1 file changed

+103
-0
lines changed

.github/update_release_pr.py

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
import os
2+
import requests
3+
4+
def get_github_prs(token, owner, repo, milestone, label, state):
5+
"""
6+
Fetches pull requests from a GitHub repository that match a given milestone and label.
7+
8+
Args:
9+
token (str): GitHub token.
10+
owner (str): The owner of the repository.
11+
repo (str): The name of the repository.
12+
milestone (str): The milestone title.
13+
label (str): The label name.
14+
state (str): State of PR, e.g. open
15+
16+
Returns:
17+
list: A list of dictionaries, where each dictionary represents a pull request.
18+
Returns an empty list if no PRs are found or an error occurs.
19+
"""
20+
headers = {
21+
"Authorization": f"token {token}",
22+
"Accept": "application/vnd.github.v3+json",
23+
}
24+
25+
milestone_id = None
26+
milestone_url = f"https://api.github.com/repos/{owner}/{repo}/milestones"
27+
params = {"state": state}
28+
29+
try:
30+
response = requests.get(milestone_url, headers=headers, params=params)
31+
response.raise_for_status()
32+
milestones = response.json()
33+
for ms in milestones:
34+
if ms["title"] == milestone:
35+
milestone_id = ms["number"]
36+
break
37+
38+
if not milestone_id:
39+
print(f"Milestone '{milestone}' not found in repository '{owner}/{repo}'.")
40+
return []
41+
42+
except requests.exceptions.RequestException as e:
43+
print(f"Error fetching milestones: {e}")
44+
return []
45+
46+
prs_url = f"https://api.github.com/repos/{owner}/{repo}/pulls"
47+
params = {
48+
"state": state,
49+
"milestone": milestone_id,
50+
"labels": label,
51+
}
52+
53+
all_prs = []
54+
page = 1
55+
while True:
56+
try:
57+
params["page"] = page
58+
response = requests.get(prs_url, headers=headers, params=params)
59+
response.raise_for_status() # Raise an exception for HTTP errors
60+
prs = response.json()
61+
62+
if not prs:
63+
break # No more PRs to fetch
64+
65+
all_prs.extend(prs)
66+
page += 1
67+
68+
except requests.exceptions.RequestException as e:
69+
print(f"Error fetching pull requests: {e}")
70+
break
71+
72+
return all_prs
73+
74+
if __name__ == "__main__":
75+
github_token = os.environ.get("GITHUB_TOKEN")
76+
77+
if not github_token:
78+
print("Error: GITHUB_TOKEN environment variable not set.")
79+
exit(1)
80+
81+
repository_owner = "flow-launcher"
82+
repository_name = "flow.launcher"
83+
target_milestone = "1.20.0"
84+
target_label = "enhancement"
85+
state = "closed"
86+
87+
print(f"Fetching PRs for {repository_owner}/{repository_name} with milestone '{target_milestone}' and label '{target_label}'...")
88+
89+
pull_requests = get_github_prs(
90+
github_token,
91+
repository_owner,
92+
repository_name,
93+
target_milestone,
94+
target_label,
95+
state
96+
)
97+
98+
if pull_requests:
99+
print(f"\nFound {len(pull_requests)} pull requests:")
100+
for pr in pull_requests:
101+
print(f"- {pr['state']} #{pr['number']}: {pr['title']} (URL: {pr['html_url']})")
102+
else:
103+
print("No matching pull requests found.")

0 commit comments

Comments
 (0)