38
38
FIREBASE_URL = '%s/repos/%s/%s' % (BASE_URL , OWNER , REPO )
39
39
logging .set_verbosity (logging .INFO )
40
40
41
- def requests_retry_session (retries = RETRIES ,
42
- backoff_factor = BACKOFF ,
41
+ def requests_retry_session (retries = RETRIES ,
42
+ backoff_factor = BACKOFF ,
43
43
status_forcelist = RETRY_STATUS ):
44
44
session = requests .Session ()
45
45
retry = Retry (total = retries ,
@@ -84,7 +84,7 @@ def update_issue_comment(token, issue_number, comment):
84
84
85
85
def search_issues_by_label (label ):
86
86
"""https://docs.github.com/en/rest/reference/search#search-issues-and-pull-requests"""
87
- url = f'{ BASE_URL } /search/issues?q=repo:{ OWNER } /{ REPO } +label:"{ label } "+is:issue'
87
+ url = f'{ BASE_URL } /search/issues?q=repo:{ OWNER } /{ REPO } +label:"{ label } "+is:issue'
88
88
headers = {'Accept' : 'application/vnd.github.v3+json' }
89
89
with requests_retry_session ().get (url , headers = headers , timeout = TIMEOUT ) as response :
90
90
logging .info ("search_issues_by_label: %s response: %s" , url , response )
@@ -93,7 +93,7 @@ def search_issues_by_label(label):
93
93
94
94
def list_comments (token , issue_number ):
95
95
"""https://docs.github.com/en/rest/reference/issues#list-issue-comments"""
96
- url = f'{ FIREBASE_URL } /issues/{ issue_number } /comments'
96
+ url = f'{ FIREBASE_URL } /issues/{ issue_number } /comments'
97
97
headers = {'Accept' : 'application/vnd.github.v3+json' , 'Authorization' : f'token { token } ' }
98
98
with requests_retry_session ().get (url , headers = headers , timeout = TIMEOUT ) as response :
99
99
logging .info ("list_comments: %s response: %s" , url , response )
@@ -102,7 +102,7 @@ def list_comments(token, issue_number):
102
102
103
103
def add_comment (token , issue_number , comment ):
104
104
"""https://docs.github.com/en/rest/reference/issues#create-an-issue-comment"""
105
- url = f'{ FIREBASE_URL } /issues/{ issue_number } /comments'
105
+ url = f'{ FIREBASE_URL } /issues/{ issue_number } /comments'
106
106
headers = {'Accept' : 'application/vnd.github.v3+json' , 'Authorization' : f'token { token } ' }
107
107
data = {'body' : comment }
108
108
with requests .post (url , headers = headers , data = json .dumps (data ), timeout = TIMEOUT ) as response :
@@ -111,7 +111,7 @@ def add_comment(token, issue_number, comment):
111
111
112
112
def update_comment (token , comment_id , comment ):
113
113
"""https://docs.github.com/en/rest/reference/issues#update-an-issue-comment"""
114
- url = f'{ FIREBASE_URL } /issues/comments/{ comment_id } '
114
+ url = f'{ FIREBASE_URL } /issues/comments/{ comment_id } '
115
115
headers = {'Accept' : 'application/vnd.github.v3+json' , 'Authorization' : f'token { token } ' }
116
116
data = {'body' : comment }
117
117
with requests_retry_session ().patch (url , headers = headers , data = json .dumps (data ), timeout = TIMEOUT ) as response :
@@ -120,15 +120,15 @@ def update_comment(token, comment_id, comment):
120
120
121
121
def delete_comment (token , comment_id ):
122
122
"""https://docs.github.com/en/rest/reference/issues#delete-an-issue-comment"""
123
- url = f'{ FIREBASE_URL } /issues/comments/{ comment_id } '
123
+ url = f'{ FIREBASE_URL } /issues/comments/{ comment_id } '
124
124
headers = {'Accept' : 'application/vnd.github.v3+json' , 'Authorization' : f'token { token } ' }
125
125
with requests .delete (url , headers = headers , timeout = TIMEOUT ) as response :
126
126
logging .info ("delete_comment: %s response: %s" , url , response )
127
127
128
128
129
129
def add_label (token , issue_number , label ):
130
130
"""https://docs.github.com/en/rest/reference/issues#add-labels-to-an-issue"""
131
- url = f'{ FIREBASE_URL } /issues/{ issue_number } /labels'
131
+ url = f'{ FIREBASE_URL } /issues/{ issue_number } /labels'
132
132
headers = {}
133
133
headers = {'Accept' : 'application/vnd.github.v3+json' , 'Authorization' : f'token { token } ' }
134
134
data = [label ]
@@ -138,15 +138,15 @@ def add_label(token, issue_number, label):
138
138
139
139
def delete_label (token , issue_number , label ):
140
140
"""https://docs.github.com/en/rest/reference/issues#delete-a-label"""
141
- url = f'{ FIREBASE_URL } /issues/{ issue_number } /labels/{ label } '
141
+ url = f'{ FIREBASE_URL } /issues/{ issue_number } /labels/{ label } '
142
142
headers = {'Accept' : 'application/vnd.github.v3+json' , 'Authorization' : f'token { token } ' }
143
143
with requests .delete (url , headers = headers , timeout = TIMEOUT ) as response :
144
144
logging .info ("delete_label: %s response: %s" , url , response )
145
145
146
146
147
147
def list_artifacts (token , run_id ):
148
148
"""https://docs.github.com/en/rest/reference/actions#list-workflow-run-artifacts"""
149
- url = f'{ FIREBASE_URL } /actions/runs/{ run_id } /artifacts'
149
+ url = f'{ FIREBASE_URL } /actions/runs/{ run_id } /artifacts'
150
150
headers = {'Accept' : 'application/vnd.github.v3+json' , 'Authorization' : f'token { token } ' }
151
151
with requests_retry_session ().get (url , headers = headers , timeout = TIMEOUT ) as response :
152
152
logging .info ("list_artifacts: %s response: %s" , url , response )
@@ -155,9 +155,40 @@ def list_artifacts(token, run_id):
155
155
156
156
def download_artifact (token , artifact_id , output_path ):
157
157
"""https://docs.github.com/en/rest/reference/actions#download-an-artifact"""
158
- url = f'{ FIREBASE_URL } /actions/artifacts/{ artifact_id } /zip'
158
+ url = f'{ FIREBASE_URL } /actions/artifacts/{ artifact_id } /zip'
159
159
headers = {'Accept' : 'application/vnd.github.v3+json' , 'Authorization' : f'token { token } ' }
160
160
with requests .get (url , headers = headers , stream = True , timeout = TIMEOUT ) as response :
161
161
logging .info ("download_artifact: %s response: %s" , url , response )
162
162
with open (output_path , 'wb' ) as file :
163
163
shutil .copyfileobj (response .raw , file )
164
+
165
+
166
+ def dismiss_review (token , pull_number , review_id , message ):
167
+ """https://docs.github.com/en/rest/reference/pulls#dismiss-a-review-for-a-pull-request"""
168
+ url = f'{ FIREBASE_URL } /pulls/{ pull_number } /reviews/{ review_id } /dismissals'
169
+ headers = {'Accept' : 'application/vnd.github.v3+json' , 'Authorization' : f'token { token } ' }
170
+ data = {'message' : message }
171
+ with requests .put (url , headers = headers , data = json .dumps (data ),
172
+ stream = True , timeout = TIMEOUT ) as response :
173
+ logging .info ("dismiss_review: %s response: %s" , url , response )
174
+ return response .json ()
175
+
176
+ def get_reviews (token , pull_number ):
177
+ """https://docs.github.com/en/rest/reference/pulls#list-reviews-for-a-pull-request"""
178
+ url = f'{ FIREBASE_URL } /pulls/{ pull_number } /reviews'
179
+ headers = {'Accept' : 'application/vnd.github.v3+json' , 'Authorization' : f'token { token } ' }
180
+ page = 1
181
+ per_page = 100
182
+ results = []
183
+ keep_going = True
184
+ while keep_going :
185
+ params = {'per_page' : per_page , 'page' : page }
186
+ page = page + 1
187
+ keep_going = False
188
+ with requests .get (url , headers = headers , params = params ,
189
+ stream = True , timeout = TIMEOUT ) as response :
190
+ logging .info ("get_reviews: %s response: %s" , url , response )
191
+ results = results + response .json ()
192
+ # If exactly per_page results were retrieved, read the next page.
193
+ keep_going = (len (response .json ()) == per_page )
194
+ return results
0 commit comments