3838FIREBASE_URL = '%s/repos/%s/%s' % (BASE_URL , OWNER , REPO )
3939logging .set_verbosity (logging .INFO )
4040
41- def requests_retry_session (retries = RETRIES ,
42- backoff_factor = BACKOFF ,
41+ def requests_retry_session (retries = RETRIES ,
42+ backoff_factor = BACKOFF ,
4343 status_forcelist = RETRY_STATUS ):
4444 session = requests .Session ()
4545 retry = Retry (total = retries ,
@@ -84,7 +84,7 @@ def update_issue_comment(token, issue_number, comment):
8484
8585def search_issues_by_label (label ):
8686 """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'
8888 headers = {'Accept' : 'application/vnd.github.v3+json' }
8989 with requests_retry_session ().get (url , headers = headers , timeout = TIMEOUT ) as response :
9090 logging .info ("search_issues_by_label: %s response: %s" , url , response )
@@ -93,7 +93,7 @@ def search_issues_by_label(label):
9393
9494def list_comments (token , issue_number ):
9595 """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'
9797 headers = {'Accept' : 'application/vnd.github.v3+json' , 'Authorization' : f'token { token } ' }
9898 with requests_retry_session ().get (url , headers = headers , timeout = TIMEOUT ) as response :
9999 logging .info ("list_comments: %s response: %s" , url , response )
@@ -102,7 +102,7 @@ def list_comments(token, issue_number):
102102
103103def add_comment (token , issue_number , comment ):
104104 """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'
106106 headers = {'Accept' : 'application/vnd.github.v3+json' , 'Authorization' : f'token { token } ' }
107107 data = {'body' : comment }
108108 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):
111111
112112def update_comment (token , comment_id , comment ):
113113 """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 } '
115115 headers = {'Accept' : 'application/vnd.github.v3+json' , 'Authorization' : f'token { token } ' }
116116 data = {'body' : comment }
117117 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):
120120
121121def delete_comment (token , comment_id ):
122122 """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 } '
124124 headers = {'Accept' : 'application/vnd.github.v3+json' , 'Authorization' : f'token { token } ' }
125125 with requests .delete (url , headers = headers , timeout = TIMEOUT ) as response :
126126 logging .info ("delete_comment: %s response: %s" , url , response )
127127
128128
129129def add_label (token , issue_number , label ):
130130 """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'
132132 headers = {}
133133 headers = {'Accept' : 'application/vnd.github.v3+json' , 'Authorization' : f'token { token } ' }
134134 data = [label ]
@@ -138,15 +138,15 @@ def add_label(token, issue_number, label):
138138
139139def delete_label (token , issue_number , label ):
140140 """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 } '
142142 headers = {'Accept' : 'application/vnd.github.v3+json' , 'Authorization' : f'token { token } ' }
143143 with requests .delete (url , headers = headers , timeout = TIMEOUT ) as response :
144144 logging .info ("delete_label: %s response: %s" , url , response )
145145
146146
147147def list_artifacts (token , run_id ):
148148 """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'
150150 headers = {'Accept' : 'application/vnd.github.v3+json' , 'Authorization' : f'token { token } ' }
151151 with requests_retry_session ().get (url , headers = headers , timeout = TIMEOUT ) as response :
152152 logging .info ("list_artifacts: %s response: %s" , url , response )
@@ -155,9 +155,40 @@ def list_artifacts(token, run_id):
155155
156156def download_artifact (token , artifact_id , output_path ):
157157 """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'
159159 headers = {'Accept' : 'application/vnd.github.v3+json' , 'Authorization' : f'token { token } ' }
160160 with requests .get (url , headers = headers , stream = True , timeout = TIMEOUT ) as response :
161161 logging .info ("download_artifact: %s response: %s" , url , response )
162162 with open (output_path , 'wb' ) as file :
163163 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