From e903c2a00102eb8a8c6c50c9491393876ee6c4d2 Mon Sep 17 00:00:00 2001 From: Akash Date: Wed, 9 Apr 2025 18:17:48 +0530 Subject: [PATCH 1/9] only admins can assign others --- .github/utilities/issue_assign.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/.github/utilities/issue_assign.py b/.github/utilities/issue_assign.py index 69622ea5e5..24dd75fb4f 100755 --- a/.github/utilities/issue_assign.py +++ b/.github/utilities/issue_assign.py @@ -2,7 +2,8 @@ It checks if a comment on an issue or PR includes the trigger phrase (as defined) and a mentioned user. -If it does, it assigns the issue to the mentioned user. +If it does, it assigns the issue to the mentioned user and +only users with write access can assign other users. """ import json @@ -20,6 +21,7 @@ issue = repo.get_issue(number=issue_number) comment_body = context_dict["event"]["comment"]["body"] pr = context_dict["event"]["issue"].get("pull_request") +commenter = context_dict["event"]["comment"]["user"]["login"] # Assign tagged used to the issue if the comment includes the trigger phrase body = comment_body.lower() @@ -28,5 +30,13 @@ mentioned_users = [user[1:] for user in mentioned_users] mentioned_users.remove("aeon-actions-bot") + permission = repo.get_collaborator_permission(commenter) + for user in mentioned_users: - issue.add_to_assignees(user) + + if (user == commenter) or (permission in ["admin", "write"]): + issue.add_to_assignees(user) + else: + comment_msg = f"""@{commenter}, you cannot assign @{user} because you lack write access. + Only users with write access can assign others.""" + issue.create_comment(comment_msg) From 6d6a4bb468862ec7d1cb75072a030ab75308e3dc Mon Sep 17 00:00:00 2001 From: Akash Date: Wed, 9 Apr 2025 22:09:12 +0530 Subject: [PATCH 2/9] improve comment message --- .github/utilities/issue_assign.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/utilities/issue_assign.py b/.github/utilities/issue_assign.py index 24dd75fb4f..532626fcd9 100755 --- a/.github/utilities/issue_assign.py +++ b/.github/utilities/issue_assign.py @@ -31,12 +31,15 @@ mentioned_users.remove("aeon-actions-bot") permission = repo.get_collaborator_permission(commenter) - + for user in mentioned_users: - + if (user == commenter) or (permission in ["admin", "write"]): issue.add_to_assignees(user) else: - comment_msg = f"""@{commenter}, you cannot assign @{user} because you lack write access. - Only users with write access can assign others.""" + comment_msg = ( + f"@{commenter}, you cannot assign @{user}" + " because you lack write access.\n" + "Only users with write access can assign others." + ) issue.create_comment(comment_msg) From 6dd73be01b8b09e49f2953a8cd3f6f593766b3fd Mon Sep 17 00:00:00 2001 From: shinymack <128881349+shinymack@users.noreply.github.com> Date: Sat, 12 Apr 2025 17:13:12 +0000 Subject: [PATCH 3/9] Automatic `pre-commit` fixes --- .github/utilities/issue_assign.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/utilities/issue_assign.py b/.github/utilities/issue_assign.py index 3dcbf520b5..b05f6920b3 100755 --- a/.github/utilities/issue_assign.py +++ b/.github/utilities/issue_assign.py @@ -34,7 +34,7 @@ mentioned_users = re.findall(r"@[a-zA-Z0-9_-]+", comment_body) mentioned_users = [user[1:] for user in mentioned_users] mentioned_users.remove("aeon-actions-bot") - + # Get permission of the commenter permission = repo.get_collaborator_permission(commenter) @@ -49,7 +49,7 @@ ) issue.create_comment(comment_msg) continue - + user_obj = g.get_user(user) permission = repo.get_collaborator_permission(user_obj) From bc80e6352221e392b25c52049b2727341d1066ba Mon Sep 17 00:00:00 2001 From: Akash Date: Sat, 12 Apr 2025 22:51:35 +0530 Subject: [PATCH 4/9] fixes according to latest code --- .github/utilities/issue_assign.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/utilities/issue_assign.py b/.github/utilities/issue_assign.py index b05f6920b3..a582a6ba6e 100755 --- a/.github/utilities/issue_assign.py +++ b/.github/utilities/issue_assign.py @@ -41,7 +41,7 @@ for user in mentioned_users: # Checking if the mentioned user is the commenter or admin - if not((user == commenter) or (permission in ["admin", "write"]): + if not((user == commenter) or (permission in ["admin", "write"])): comment_msg = ( f"@{commenter}, you cannot assign @{user}" " because you lack write access.\n" From 4bf6b7019ebeb1bb61a91271c7f08bde042fb20e Mon Sep 17 00:00:00 2001 From: shinymack <128881349+shinymack@users.noreply.github.com> Date: Sat, 12 Apr 2025 17:22:21 +0000 Subject: [PATCH 5/9] Automatic `pre-commit` fixes --- .github/utilities/issue_assign.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/utilities/issue_assign.py b/.github/utilities/issue_assign.py index a582a6ba6e..865e16836f 100755 --- a/.github/utilities/issue_assign.py +++ b/.github/utilities/issue_assign.py @@ -41,7 +41,7 @@ for user in mentioned_users: # Checking if the mentioned user is the commenter or admin - if not((user == commenter) or (permission in ["admin", "write"])): + if not ((user == commenter) or (permission in ["admin", "write"])): comment_msg = ( f"@{commenter}, you cannot assign @{user}" " because you lack write access.\n" From 6f6bb883f7886f1d4872fcdc466133f03ebe93f7 Mon Sep 17 00:00:00 2001 From: Akash Date: Sat, 12 Apr 2025 23:17:52 +0530 Subject: [PATCH 6/9] changes according to latest code --- .github/utilities/issue_assign.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/utilities/issue_assign.py b/.github/utilities/issue_assign.py index 865e16836f..9ebfbb3027 100755 --- a/.github/utilities/issue_assign.py +++ b/.github/utilities/issue_assign.py @@ -35,13 +35,15 @@ mentioned_users = [user[1:] for user in mentioned_users] mentioned_users.remove("aeon-actions-bot") - # Get permission of the commenter + # Get permissions of the commenter permission = repo.get_collaborator_permission(commenter) for user in mentioned_users: # Checking if the mentioned user is the commenter or admin - if not ((user == commenter) or (permission in ["admin", "write"])): + if (user == commenter) or (permission in ["admin", "write"]): + pass + else: comment_msg = ( f"@{commenter}, you cannot assign @{user}" " because you lack write access.\n" From cddee39c1ffcb9777150a118f8550fdb52dfe5c2 Mon Sep 17 00:00:00 2001 From: Akash Date: Sat, 12 Apr 2025 23:45:25 +0530 Subject: [PATCH 7/9] resolve merge conflicts --- .github/utilities/issue_assign.py | 105 +++++++++++++++--------------- 1 file changed, 53 insertions(+), 52 deletions(-) diff --git a/.github/utilities/issue_assign.py b/.github/utilities/issue_assign.py index 9ebfbb3027..c2d496d20b 100755 --- a/.github/utilities/issue_assign.py +++ b/.github/utilities/issue_assign.py @@ -2,9 +2,7 @@ It checks if a comment on an issue or PR includes the trigger phrase (as defined) and a mentioned user. - -If it does, it assigns the issue to the mentioned user and -only users with write access can assign other users. +If it does, it assigns the issue to the mentioned user. Users without write access can only have up to 2 open issues assigned. Users with write access (or admin) are exempt from this limit. If a non-write user already has 2 or more open issues, the bot @@ -28,61 +26,64 @@ pr = context_dict["event"]["issue"].get("pull_request") commenter = context_dict["event"]["comment"]["user"]["login"] -# Assign tagged used to the issue if the comment includes the trigger phrase body = comment_body.lower() -if "@aeon-actions-bot" in body and "assign" in body and not pr: - mentioned_users = re.findall(r"@[a-zA-Z0-9_-]+", comment_body) - mentioned_users = [user[1:] for user in mentioned_users] - mentioned_users.remove("aeon-actions-bot") - - # Get permissions of the commenter - permission = repo.get_collaborator_permission(commenter) +if "@aeon-actions-bot" in body and not pr: + # Assign commenter if comment includes "assign me" + if "assign me" in body: + issue.add_to_assignees(commenter) + # Assign tagged used to the issue if the comment includes the trigger phrase + elif "assign" in body: + mentioned_users = re.findall(r"@[a-zA-Z0-9_-]+", comment_body) + mentioned_users = [user[1:] for user in mentioned_users] + mentioned_users.remove("aeon-actions-bot") - for user in mentioned_users: + # Get permissions of the commenter + commenter_permission = repo.get_collaborator_permission(commenter) - # Checking if the mentioned user is the commenter or admin - if (user == commenter) or (permission in ["admin", "write"]): - pass - else: - comment_msg = ( - f"@{commenter}, you cannot assign @{user}" - " because you lack write access.\n" - "Only users with write access can assign others." - ) - issue.create_comment(comment_msg) - continue + for user in mentioned_users: + if (user == commenter) or (commenter_permission in ["admin", "write"]): + pass + else: + comment_msg = ( + f"@{commenter}, you cannot assign @{user}" + " because you lack write access.\n" + "Only users with write access can assign others." + ) + issue.create_comment(comment_msg) + continue - user_obj = g.get_user(user) - permission = repo.get_collaborator_permission(user_obj) + user_obj = g.get_user(user) + permission = repo.get_collaborator_permission(user_obj) - if permission in ["admin", "write"]: - issue.add_to_assignees(user) - else: - # First check if the user is already assigned to this issue - if user in [assignee.login for assignee in issue.assignees]: - continue + if permission in ["admin", "write"]: + issue.add_to_assignees(user) + else: + # First check if the user is already assigned to this issue + if user in [assignee.login for assignee in issue.assignees]: + continue - # search for open issues only - query = f"repo:{repo.full_name} is:issue is:open assignee:{user}" - issues_assigned_to_user = g.search_issues(query) - assigned_count = issues_assigned_to_user.totalCount + # search for open issues only + query = f"repo:{repo.full_name} is:issue is:open assignee:{user}" + issues_assigned_to_user = g.search_issues(query) + assigned_count = issues_assigned_to_user.totalCount - if assigned_count >= 2: - # link to issue - assigned_issues_list = [ - f"[#{assigned_issue.number}]({assigned_issue.html_url})" - for assigned_issue in issues_assigned_to_user - ] + if assigned_count >= 2: + # link to issue + assigned_issues_list = [ + f"[#{assigned_issue.number}]({assigned_issue.html_url})" + for assigned_issue in issues_assigned_to_user + ] - comment_message = ( - f"@{user}, you already have {assigned_count} open issues assigned. " - "Users without write access are limited to self-assigning two" - "issues.\n\n" - "Here are the open issues assigned to you:\n" - + "\n".join( - f"- {issue_link}" for issue_link in assigned_issues_list + comment_message = ( + f"@{user}, you already have {assigned_count} " + f"open issues assigned." + "Users without write access are limited to self-assigning two" + "issues.\n\n" + "Here are the open issues assigned to you:\n" + + "\n".join( + f"- {issue_link}" for issue_link in assigned_issues_list + ) ) - ) - issue.create_comment(comment_message) - else: - issue.add_to_assignees(user) + issue.create_comment(comment_message) + else: + issue.add_to_assignees(user) From 47d267c50358d4e607c42cb051e39959720df34e Mon Sep 17 00:00:00 2001 From: shinymack <128881349+shinymack@users.noreply.github.com> Date: Sat, 12 Apr 2025 18:17:25 +0000 Subject: [PATCH 8/9] Automatic `pre-commit` fixes --- .github/utilities/issue_assign.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/utilities/issue_assign.py b/.github/utilities/issue_assign.py index 04130469f4..c2d496d20b 100755 --- a/.github/utilities/issue_assign.py +++ b/.github/utilities/issue_assign.py @@ -73,7 +73,7 @@ f"[#{assigned_issue.number}]({assigned_issue.html_url})" for assigned_issue in issues_assigned_to_user ] - + comment_message = ( f"@{user}, you already have {assigned_count} " f"open issues assigned." From 31325dd0cd62552e8634c5e719e6ec3839f69ee3 Mon Sep 17 00:00:00 2001 From: Akash Date: Sun, 13 Apr 2025 00:57:20 +0530 Subject: [PATCH 9/9] adjust according to latest code --- .github/utilities/issue_assign.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/utilities/issue_assign.py b/.github/utilities/issue_assign.py index 04130469f4..053a798068 100755 --- a/.github/utilities/issue_assign.py +++ b/.github/utilities/issue_assign.py @@ -41,9 +41,7 @@ commenter_permission = repo.get_collaborator_permission(commenter) for user in mentioned_users: - if (user == commenter) or (commenter_permission in ["admin", "write"]): - pass - else: + if user != commenter and commenter_permission not in ["admin", "write"]: comment_msg = ( f"@{commenter}, you cannot assign @{user}" " because you lack write access.\n" @@ -51,6 +49,9 @@ ) issue.create_comment(comment_msg) continue + elif user != commenter and commenter_permission in ["admin", "write"]: + issue.add_to_assignees(user) + continue user_obj = g.get_user(user) permission = repo.get_collaborator_permission(user_obj) @@ -73,7 +74,7 @@ f"[#{assigned_issue.number}]({assigned_issue.html_url})" for assigned_issue in issues_assigned_to_user ] - + comment_message = ( f"@{user}, you already have {assigned_count} " f"open issues assigned."