diff --git a/.github/scripts/GitHub.py b/.github/scripts/GitHub.py index 43eb5c7e4f..bc0f355206 100644 --- a/.github/scripts/GitHub.py +++ b/.github/scripts/GitHub.py @@ -202,12 +202,20 @@ def add_reviewers_to_pr( pr_author = pr.user.login.strip() - while pr_author in user_names: - user_names.remove(pr_author) + current_pr_requested_reviewers = [ + r.login.strip() for r in pr.get_review_requests()[0] + ] + current_pr_reviewed_reviewers = [r.user.login.strip() for r in pr.get_reviews()] + current_pr_reviewers = list( + set(current_pr_requested_reviewers + current_pr_reviewed_reviewers) + ) repo_collaborators = [c.login.strip() for c in repo_gh.get_collaborators()] non_collaborators = [u for u in user_names if u not in repo_collaborators] + excluded_pr_reviewers = [pr_author] + current_pr_reviewers + non_collaborators + new_pr_reviewers = [u for u in user_names if u not in excluded_pr_reviewers] + if non_collaborators: print( f"::error title=User is not a Collaborator!::{', '.join(non_collaborators)}" @@ -225,6 +233,12 @@ def add_reviewers_to_pr( f"Users requested:\n{', '.join(user_names)}", ) - pr.create_review_request(reviewers=user_names) + # Add any new reviewers to the PR if needed. + if new_pr_reviewers: + print( + f"::debug title=Adding New PR Reviewers::" f"{', '.join(new_pr_reviewers)}" + ) - return user_names + pr.create_review_request(reviewers=new_pr_reviewers) + + return new_pr_reviewers diff --git a/.github/workflows/request-reviews.yml b/.github/workflows/request-reviews.yml index b358ae089f..9b0d126649 100644 --- a/.github/workflows/request-reviews.yml +++ b/.github/workflows/request-reviews.yml @@ -84,9 +84,28 @@ jobs: reviewers = GitHub.get_reviewers_for_range(WORKSPACE_PATH, GET_MAINTAINER_LOCAL_PATH, pr_commit_sha, pr_commit_sha) if not reviewers: - print("::notice title=No Reviewers Found!::No reviewers found for this PR.") - sys.exit(1) + print("::notice title=No New Reviewers Found!::No reviewers found for this PR.") + sys.exit(0) - print(f"::notice title=Reviewer List::Reviewers found for PR {os.environ['PR_NUMBER']}:\n{', '.join(reviewers)}") + print( + f"::notice title=Preliminary Reviewer List::Total reviewer candidates for " + f"PR {os.environ['PR_NUMBER']}: {', '.join(reviewers)}" + ) - GitHub.add_reviewers_to_pr(os.environ['GH_TOKEN'], os.environ['ORG_NAME'], os.environ['REPO_NAME'], int(os.environ['PR_NUMBER']), reviewers) + new_reviewers = GitHub.add_reviewers_to_pr( + os.environ["GH_TOKEN"], + os.environ["ORG_NAME"], + os.environ["REPO_NAME"], + int(os.environ["PR_NUMBER"]), + reviewers, + ) + if new_reviewers: + print( + f"::notice title=New Reviewers Added::New reviewers requested for PR " + f"{os.environ['PR_NUMBER']}: {', '.join(new_reviewers)}" + ) + else: + print( + "::notice title=No New Reviewers Added::No reviewers were found that " + "should be newly requested." + )