Link issues to PR

Closes #98
This commit is contained in:
alstr 2024-09-20 12:57:24 +01:00
parent 3e27db4be0
commit 8045cef144

39
main.py
View File

@ -136,8 +136,7 @@ class GitHubClient(object):
milestone_data = { milestone_data = {
'title': title 'title': title
} }
milestone_request = requests.post(self.milestones_url, headers=self.issue_headers, milestone_request = requests.post(self.milestones_url, headers=self.issue_headers, json=milestone_data)
data=json.dumps(milestone_data))
return milestone_request.json()['number'] if milestone_request.status_code == 201 else None return milestone_request.json()['number'] if milestone_request.status_code == 201 else None
def _get_existing_issues(self, page=1): def _get_existing_issues(self, page=1):
@ -159,8 +158,7 @@ class GitHubClient(object):
"""Post a comment on an issue.""" """Post a comment on an issue."""
issue_comment_url = f'{self.repos_url}{self.repo}/issues/{issue_number}/comments' issue_comment_url = f'{self.repos_url}{self.repo}/issues/{issue_number}/comments'
body = {'body': comment} body = {'body': comment}
update_issue_request = requests.post(issue_comment_url, headers=self.issue_headers, update_issue_request = requests.post(issue_comment_url, headers=self.issue_headers, json=body)
data=json.dumps(body))
return update_issue_request.status_code return update_issue_request.status_code
def create_issue(self, issue): def create_issue(self, issue):
@ -235,12 +233,10 @@ class GitHubClient(object):
if issue.issue_url: if issue.issue_url:
# Update existing issue. # Update existing issue.
issue_request = requests.patch(url=endpoint, headers=self.issue_headers, issue_request = requests.patch(url=endpoint, headers=self.issue_headers, json=new_issue_body)
data=json.dumps(new_issue_body))
else: else:
# Create new issue. # Create new issue.
issue_request = requests.post(url=endpoint, headers=self.issue_headers, issue_request = requests.post(url=endpoint, headers=self.issue_headers, json=new_issue_body)
data=json.dumps(new_issue_body))
request_status = issue_request.status_code request_status = issue_request.status_code
return request_status, issue_request.json()['number'] if request_status in [200, 201] else None return request_status, issue_request.json()['number'] if request_status in [200, 201] else None
@ -265,10 +261,31 @@ class GitHubClient(object):
if issue_number: if issue_number:
update_issue_url = f'{self.issues_url}/{issue_number}' update_issue_url = f'{self.issues_url}/{issue_number}'
body = {'state': 'closed'} body = {'state': 'closed'}
requests.patch(update_issue_url, headers=self.issue_headers, data=json.dumps(body)) requests.patch(update_issue_url, headers=self.issue_headers, json=body)
return self.comment_issue(issue_number, f'Closed in {self.sha}') req = self.comment_issue(issue_number, f'Closed in {self.sha}')
# Update the description if this is a PR.
if os.getenv('GITHUB_EVENT_NAME') == 'pull_request':
pr_number = os.getenv('PR_NUMBER')
if pr_number:
req = self.update_pr_body(pr_number, body)
return req
return None return None
def update_pr_body(self, pr_number, issue_number):
"""Add a close message for an issue to a PR."""
pr_url = f'{self.repos_url}{self.repo}/pulls/{pr_number}'
pr_request = requests.get(pr_url, headers=self.issue_headers)
if pr_request.status_code == 200:
pr_body = pr_request.json()['body']
close_message = f'Closes #{issue_number}'
if close_message not in pr_body:
updated_pr_body = f'{pr_body}\n\n{close_message}' if pr_body.strip() else close_message
body = {'body': updated_pr_body}
pr_update_request = requests.patch(pr_url, headers=self.issue_headers, json=body)
return pr_update_request.status_code
return pr_request.status_code
class TodoParser(object): class TodoParser(object):
"""Parser for extracting information from a given diff file.""" """Parser for extracting information from a given diff file."""
@ -885,7 +902,7 @@ if __name__ == "__main__":
print('Issue looks like a comment, will not attempt to close.') print('Issue looks like a comment, will not attempt to close.')
continue continue
status_code = client.close_issue(raw_issue) status_code = client.close_issue(raw_issue)
if status_code == 201: if status_code in [200, 201]:
print('Issue closed') print('Issue closed')
else: else:
print('Issue could not be closed') print('Issue could not be closed')