Skip to content

Commit da98d72

Browse files
committed
Add support for posting comment in GitHubIntegration #349
Signed-off-by: tdruez <tdruez@nexb.com>
1 parent 9f2f1f4 commit da98d72

2 files changed

Lines changed: 39 additions & 5 deletions

File tree

workflow/integrations/github.py

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ def sync(self, request):
4141
if external_issue: # Update existing issue on GitHib
4242
self.update_issue(
4343
repo_id=repo_id,
44-
issue_number=external_issue.issue_id,
44+
issue_id=external_issue.issue_id,
4545
title=make_issue_title(request),
4646
body=make_issue_body(request),
4747
state="closed" if request.is_closed else "open",
@@ -61,6 +61,7 @@ def sync(self, request):
6161
)
6262

6363
def create_issue(self, repo_id, title, body=None, labels=None):
64+
"""Create a new GitHub issue."""
6465
url = f"{self.api_url}/repos/{repo_id}/issues"
6566
data = {"title": title}
6667
if body:
@@ -76,8 +77,9 @@ def create_issue(self, repo_id, title, body=None, labels=None):
7677
)
7778
return response.json()
7879

79-
def update_issue(self, repo_id, issue_number, title=None, body=None, state=None):
80-
url = f"{self.api_url}/repos/{repo_id}/issues/{issue_number}"
80+
def update_issue(self, repo_id, issue_id, title=None, body=None, state=None):
81+
"""Update an existing GitHub issue."""
82+
url = f"{self.api_url}/repos/{repo_id}/issues/{issue_id}"
8183
data = {}
8284
if title:
8385
data["title"] = title
@@ -94,6 +96,19 @@ def update_issue(self, repo_id, issue_number, title=None, body=None, state=None)
9496
)
9597
return response.json()
9698

99+
def post_comment(self, repo_id, issue_id, comment_body):
100+
"""Post a comment on an existing GitHub issue."""
101+
url = f"{self.api_url}/repos/{repo_id}/issues/{issue_id}/comments"
102+
data = {"body": comment_body}
103+
104+
response = requests.post(
105+
url,
106+
json=data,
107+
headers=self.get_headers(),
108+
timeout=self.default_timeout,
109+
)
110+
return response.json()
111+
97112

98113
def make_issue_title(request):
99114
return f"[DEJACODE] {request.title}"

workflow/models.py

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -425,8 +425,8 @@ def save(self, *args, **kwargs):
425425

426426
# `previous_object_id` logic is only required on edition.
427427
previous_object_id = None
428-
is_addition = self.pk
429-
if is_addition:
428+
is_change = self.pk
429+
if is_change:
430430
previous_object_id = self.__class__.objects.get(pk=self.pk).object_id
431431

432432
super().save(*args, **kwargs)
@@ -661,6 +661,13 @@ class Meta:
661661
def __str__(self):
662662
return f"{self.user.username}: {self.text[:50]}..."
663663

664+
def save(self, *args, **kwargs):
665+
"""Call the handle_integrations method on save, only for addition."""
666+
is_addition = not self.pk
667+
super().save(*args, **kwargs)
668+
if is_addition:
669+
self.handle_integrations()
670+
664671
def has_delete_permission(self, user):
665672
"""
666673
Only the Commenter or an administrator with the proper permissions
@@ -716,6 +723,18 @@ def serialize_hook(self, hook):
716723
"data": data,
717724
}
718725

726+
def handle_integrations(self):
727+
external_issue = self.request.external_issue
728+
if not external_issue:
729+
return
730+
731+
if external_issue.platform == ExternalIssueLink.Platform.GITHUB:
732+
GitHubIntegration(dataspace=self.dataspace).post_comment(
733+
repo_id=external_issue.repo,
734+
issue_id=external_issue.issue_id,
735+
comment_body=self.text,
736+
)
737+
719738

720739
class RequestTemplateQuerySet(DataspacedQuerySet):
721740
def actives(self):

0 commit comments

Comments
 (0)