-
Notifications
You must be signed in to change notification settings - Fork 0
/
gh.py
119 lines (107 loc) · 2.47 KB
/
gh.py
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import json
import subprocess
issue_columns = [
"assignees",
"author",
"body",
"closed",
"closedAt",
"comments",
"createdAt",
"id",
"labels",
"milestone",
"number",
# "projectCards",
# "projectItems",
"reactionGroups",
"state",
"title",
"updatedAt",
"url",
]
pr_columns = [
# "additions",
"assignees",
"author",
# "autoMergeRequest",
# "baseRefName",
"body",
# "changedFiles",
# "closed",
# "closedAt",
"comments",
# "commits",
"createdAt",
# "deletions",
# "files",
# "headRefName",
# "headRefOid",
# "headRepository",
# "headRepositoryOwner",
# "id",
# "isCrossRepository",
"isDraft",
"labels",
# "latestReviews",
# "maintainerCanModify",
# "mergeCommit",
# "mergeStateStatus",
# "mergeable",
# "mergedAt",
# "mergedBy",
"milestone",
"number",
# "potentialMergeCommit",
# "projectCards",
# "projectItems",
# "reactionGroups",
# "reviewDecision",
# "reviewRequests",
# "reviews",
"state",
# "statusCheckRollup",
"title",
"updatedAt",
"url",
]
def get_issues(repo, updated_after=None):
if updated_after is None:
return json.loads(
run(
f"gh issue -R {repo} list --json {','.join(issue_columns)} --limit 100000 -s all"
)
)
else:
return json.loads(
run(
f'gh issue -R {repo} list --json {",".join(issue_columns)} --limit 100000 -s all --search "updated:>{updated_after}"'
)
)
def get_project_items(org, project_id):
return json.loads(
run(
f"gh project item-list --owner {org} {project_id} --limit 2000 --format=json"
)
)
def get_prs(repo, updated_after=None):
if updated_after is None:
return json.loads(
run(
f"gh pr -R {repo} list --json {','.join(pr_columns)} --limit 1500 -s all"
)
)
else:
return json.loads(
run(
f'gh pr -R {repo} list --json {",".join(pr_columns)} --limit 1500 -s all --search "updated:>{updated_after}"'
)
)
def run(command_str):
print(command_str)
return subprocess.run(
[cmd.strip('"') for cmd in command_str.split()], stdout=subprocess.PIPE
).stdout
if __name__ == "__main__":
get_issues("NASA-AMMOS/aerie")
get_issues("NASA-AMMOS/aerie-ui")