summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Kubacki <michael.kubacki@microsoft.com>2024-08-02 15:35:08 -0400
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>2024-08-05 19:30:26 +0000
commit51ada84cd57c5ef6c75a72aeb002226cf9180b21 (patch)
tree3cd5ec1c268394ddfcac7b1197ffb7138fef04fe
parent59ad8aeda6352e5da12aaab08ede719ac3a832e5 (diff)
downloadedk2-51ada84cd57c5ef6c75a72aeb002226cf9180b21.tar.gz
edk2-51ada84cd57c5ef6c75a72aeb002226cf9180b21.tar.bz2
edk2-51ada84cd57c5ef6c75a72aeb002226cf9180b21.zip
.github/request-reviews.yml: Move workflow Py code to file
To make the Python code used within the action more mantainable over time, it is moved to a standalone script in .github/scripts. No functional changes are made to the workflow itself. Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com>
-rw-r--r--.github/scripts/RequestPrReviewers.py98
-rw-r--r--.github/workflows/request-reviews.yml64
2 files changed, 99 insertions, 63 deletions
diff --git a/.github/scripts/RequestPrReviewers.py b/.github/scripts/RequestPrReviewers.py
new file mode 100644
index 0000000000..fdff657617
--- /dev/null
+++ b/.github/scripts/RequestPrReviewers.py
@@ -0,0 +1,98 @@
+## @file
+# Used in a CI workflow to request reviewers for a pull request.
+#
+# Refer to the following link for a list of pre-defined GitHub workflow
+# environment variables:
+# https://docs.github.com/actions/reference/environment-variables
+#
+# Copyright (c) Microsoft Corporation.
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+
+import git
+import GitHub
+import os
+import sys
+
+
+"""Request Pull Request Reviewers Helpers"""
+
+
+def request_pr_reviewers():
+ """Request pull request reviewers for a GitHub PR.
+
+ This function is intended to be used in a GitHub Actions workflow to
+ request reviewers for a pull request triggered by a GitHub event. The
+ function makes assumptions about GitHub workflow environment variables and
+ the pull request context in which it is run.
+
+ The function will exit with a non-zero status indicating an error if a
+ critical error occurs during execution so the workflow fails.
+
+ The following environment variables are expected to be set before calling
+ this function. The recommend GitHub context values are show for reference:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ ORG_NAME: ${{ github.repository_owner }}
+ PR_NUMBER: ${{ github.event.number}}
+ REPO_NAME: ${{ github.event.pull_request.base.repo.name }}
+ TARGET_BRANCH: ${{ github.event.pull_request.base.ref }}
+ WORKSPACE_PATH: ${{ github.workspace }}
+ """
+ WORKSPACE_PATH = os.environ["WORKSPACE_PATH"]
+ GET_MAINTAINER_LOCAL_PATH = os.path.join(
+ WORKSPACE_PATH, os.environ["GET_MAINTAINER_REL_PATH"]
+ )
+
+ # Step 1: Get the GitHub created PR commit SHA (contains all changes in a single commit)
+ pr_commit_sha = GitHub.get_pr_sha(
+ os.environ["GH_TOKEN"],
+ os.environ["ORG_NAME"],
+ os.environ["REPO_NAME"],
+ int(os.environ["PR_NUMBER"]),
+ )
+ if not pr_commit_sha:
+ sys.exit(1)
+
+ print(
+ f"::notice title=PR Commit SHA::Looking at files in consolidated PR commit: {pr_commit_sha}"
+ )
+
+ # Step 2: Fetch only the PR commit to get the files changed in the PR
+ git.Repo(WORKSPACE_PATH).remotes.origin.fetch(pr_commit_sha, depth=1)
+
+ # Step 3: Get the list of reviewers for the PR
+ 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 New Reviewers Found!::No reviewers found for this PR.")
+ sys.exit(0)
+
+ print(
+ f"::notice title=Preliminary Reviewer List::Total reviewer candidates for "
+ f"PR {os.environ['PR_NUMBER']}: {', '.join(reviewers)}"
+ )
+
+ # Step 4: Add the reviewers to the PR
+ # Note the final requested reviewer list in the workflow run for reference
+ 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."
+ )
+
+
+if __name__ == '__main__':
+ request_pr_reviewers()
diff --git a/.github/workflows/request-reviews.yml b/.github/workflows/request-reviews.yml
index 15de2cb0e5..13330561f2 100644
--- a/.github/workflows/request-reviews.yml
+++ b/.github/workflows/request-reviews.yml
@@ -56,7 +56,6 @@ jobs:
run: pip install -r .github/scripts/requirements.txt --upgrade
- name: Add Reviewers to Pull Request
- shell: python
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ORG_NAME: ${{ github.repository_owner }}
@@ -64,65 +63,4 @@ jobs:
REPO_NAME: ${{ github.event.pull_request.base.repo.name }}
TARGET_BRANCH: ${{ github.event.pull_request.base.ref }}
WORKSPACE_PATH: ${{ github.workspace }}
- run: |
- import git
- import os
- import sys
-
- sys.path.append(os.path.join(os.environ["WORKSPACE_PATH"], ".github"))
- from scripts import GitHub
-
- WORKSPACE_PATH = os.environ["WORKSPACE_PATH"]
- GET_MAINTAINER_LOCAL_PATH = os.path.join(
- WORKSPACE_PATH, os.environ["GET_MAINTAINER_REL_PATH"]
- )
-
- # Step 1: Get the GitHub created PR commit SHA (contains all changes in a single commit)
- pr_commit_sha = GitHub.get_pr_sha(
- os.environ["GH_TOKEN"],
- os.environ["ORG_NAME"],
- os.environ["REPO_NAME"],
- int(os.environ["PR_NUMBER"]),
- )
- if not pr_commit_sha:
- sys.exit(1)
-
- print(
- f"::notice title=PR Commit SHA::Looking at files in consolidated PR commit: {pr_commit_sha}"
- )
-
- # Step 2: Fetch only the PR commit to get the files changed in the PR
- git.Repo(WORKSPACE_PATH).remotes.origin.fetch(pr_commit_sha, depth=1)
-
- # Step 3: Get the list of reviewers for the PR
- 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 New Reviewers Found!::No reviewers found for this PR.")
- sys.exit(0)
-
- print(
- f"::notice title=Preliminary Reviewer List::Total reviewer candidates for "
- f"PR {os.environ['PR_NUMBER']}: {', '.join(reviewers)}"
- )
-
- # Step 4: Add the reviewers to the PR
- # Note the final requested reviewer list in the workflow run for reference
- 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."
- )
+ run: python .github/scripts/RequestPrReviewers.py