diff --git a/pr_agent/git_providers/bitbucket_provider.py b/pr_agent/git_providers/bitbucket_provider.py index 1470ce78..264f40cf 100644 --- a/pr_agent/git_providers/bitbucket_provider.py +++ b/pr_agent/git_providers/bitbucket_provider.py @@ -27,7 +27,7 @@ class BitbucketProvider: self.set_pr(pr_url) def is_supported(self, capability: str) -> bool: - if capability in ['get_issue_comments', 'create_inline_comment', 'publish_inline_comments']: + if capability in ['get_issue_comments', 'create_inline_comment', 'publish_inline_comments', 'get_labels']: return False return True diff --git a/pr_agent/git_providers/git_provider.py b/pr_agent/git_providers/git_provider.py index 4b0fba42..3f7c1ef2 100644 --- a/pr_agent/git_providers/git_provider.py +++ b/pr_agent/git_providers/git_provider.py @@ -60,6 +60,10 @@ class GitProvider(ABC): def publish_labels(self, labels): pass + @abstractmethod + def get_labels(self): + pass + @abstractmethod def remove_initial_comment(self): pass diff --git a/pr_agent/git_providers/github_provider.py b/pr_agent/git_providers/github_provider.py index 37f8a05f..10a50412 100644 --- a/pr_agent/git_providers/github_provider.py +++ b/pr_agent/git_providers/github_provider.py @@ -322,5 +322,12 @@ class GithubProvider(GitProvider): headers, data = self.pr._requester.requestJsonAndCheck( "PUT", f"{self.pr.issue_url}/labels", input=post_parameters ) - except: - logging.exception("Failed to publish labels") + except Exception as e: + logging.exception(f"Failed to publish labels, error: {e}") + + def get_labels(self): + try: + return [label.name for label in self.pr.labels] + except Exception as e: + logging.exception(f"Failed to get labels, error: {e}") + return [] \ No newline at end of file diff --git a/pr_agent/git_providers/gitlab_provider.py b/pr_agent/git_providers/gitlab_provider.py index 1ab4db89..f9acf1dc 100644 --- a/pr_agent/git_providers/gitlab_provider.py +++ b/pr_agent/git_providers/gitlab_provider.py @@ -35,7 +35,7 @@ class GitLabProvider(GitProvider): self.incremental = incremental def is_supported(self, capability: str) -> bool: - if capability in ['get_issue_comments', 'create_inline_comment', 'publish_inline_comments']: + if capability in ['get_issue_comments', 'create_inline_comment', 'publish_inline_comments', 'get_labels']: return False return True diff --git a/pr_agent/tools/pr_description.py b/pr_agent/tools/pr_description.py index bf5fde17..7a9bfb88 100644 --- a/pr_agent/tools/pr_description.py +++ b/pr_agent/tools/pr_description.py @@ -46,7 +46,9 @@ class PRDescription: self.git_provider.publish_comment(markdown_text) else: self.git_provider.publish_description(pr_title, pr_body) - self.git_provider.publish_labels(pr_types) + if self.git_provider.is_supported("get_labels"): + current_labels = self.git_provider.get_labels() + self.git_provider.publish_labels(pr_types + current_labels) self.git_provider.remove_initial_comment() return ""