[llvm] github-automation: Use a single comment for team mentions on pull req… (PR #66037)
Tom Stellard via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 11 19:09:29 PDT 2023
https://github.com/tstellar created https://github.com/llvm/llvm-project/pull/66037:
…uests
This will reduce the number of notifications created when a pull request label is added. Each team will only get a notification when their team's label is added and not when other teams' labels are added.
>From 15be1ddc1338261446786c7ad1149ac7a219a869 Mon Sep 17 00:00:00 2001
From: Tom Stellard <tstellar at redhat.com>
Date: Mon, 11 Sep 2023 18:57:42 -0700
Subject: [PATCH] github-automation: Use a single comment for team mentions on
pull requests
This will reduce the number of notifications created when a pull request
label is added. Each team will only get a notification when their
team's label is added and not when other teams' labels are added.
---
.github/workflows/pr-subscriber.yml | 8 ++++++++
llvm/utils/git/github-automation.py | 21 +++++++++++++++++++--
2 files changed, 27 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/pr-subscriber.yml b/.github/workflows/pr-subscriber.yml
index 3b18c8b35e97d1a..14e6cb33c57f9f6 100644
--- a/.github/workflows/pr-subscriber.yml
+++ b/.github/workflows/pr-subscriber.yml
@@ -9,6 +9,14 @@ on:
permissions:
contents: read
+concurrency:
+ # Ideally, we would use the PR number in the concurrency group, but we don't
+ # have access to it here. We need to ensure only one job is running for
+ # each PR at a time, because there is a potentaill race condition when
+ # updating the issue comment.
+ group: "PR Subscriber"
+ cancel-in-progress: false
+
jobs:
auto-subscribe:
runs-on: ubuntu-latest
diff --git a/llvm/utils/git/github-automation.py b/llvm/utils/git/github-automation.py
index 7df20ea8457155b..a7b88ed383a1238 100755
--- a/llvm/utils/git/github-automation.py
+++ b/llvm/utils/git/github-automation.py
@@ -83,6 +83,15 @@ def __init__(self, token: str, repo: str, pr_number: int, label_name: str):
self.org = github.Github(token).get_organization(self.repo.organization.login)
self.pr = self.repo.get_issue(pr_number).as_pull_request()
self._team_name = "pr-subscribers-{}".format(label_name).lower()
+ self.COMMENT_TAG = "<!--LLVM PR SUMMARY COMMENT-->\n"
+
+ def get_summary_comment(self) -> github.IssueComment.IssueComment:
+ for comment in self.pr.as_issue().get_comments():
+ if not self.COMMENT_TAG in comment.body:
+ continue
+ return comment
+ return None
+
def run(self) -> bool:
patch = None
@@ -119,10 +128,12 @@ def run(self) -> bool:
patch_link = f"\nPatch is {human_readable_size(len(patch))}, truncated to {human_readable_size(DIFF_LIMIT)} below, full version: {self.pr.diff_url}\n"
diff_stats = diff_stats[0:DIFF_LIMIT] + "...\n<truncated>\n"
diff_stats += "</pre>"
+ team_mention = "@llvm/{}".format(team.slug)
body = self.pr.body
comment = (
- "@llvm/{}".format(team.slug)
+ self.COMMENT_TAG
+ + team_mention
+ "\n\n<details>\n"
+ f"<summary>Changes</summary>\n\n"
+ f"{body}\n--\n"
@@ -132,7 +143,13 @@ def run(self) -> bool:
+ "</details>"
)
- self.pr.as_issue().create_comment(comment)
+ summary_comment = self.get_summary_comment()
+ if not summary_comment:
+ self.pr.as_issue().create_comment(comment)
+ elif team_mention + "\n" in summary_comment.body:
+ print("Team {} already mentioned.".format(team.slug))
+ else:
+ summary_comment.edit(summary_comment.body.replace(self.COMMENT_TAG, self.COMMENT_TAG + team_mention + "\n"))
return True
def _get_curent_team(self) -> Optional[github.Team.Team]:
More information about the llvm-commits
mailing list