From d74befc1169af04c001783f22bf028b1a8a5c9e2 Mon Sep 17 00:00:00 2001 From: Holly Gong Date: Thu, 15 Jun 2023 11:49:19 +1000 Subject: [PATCH] Fix pr helper --- .github/workflows/pr_helper.yml | 12 ----------- infra/pr_helper.py | 37 ++++++++++++++++++--------------- 2 files changed, 20 insertions(+), 29 deletions(-) diff --git a/.github/workflows/pr_helper.yml b/.github/workflows/pr_helper.yml index 65740d916d87..30eba719f776 100644 --- a/.github/workflows/pr_helper.yml +++ b/.github/workflows/pr_helper.yml @@ -56,15 +56,3 @@ jobs: repo: context.repo.repo, body: '${{env.MESSAGE}}' }) - - - name: Add labels for valid PR - if: env.IS_READY_FOR_MERGE == 'True' - uses: actions/github-script@v6 - with: - script: | - github.rest.issues.addLabels({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - labels: ['Ready to merge'] - }) \ No newline at end of file diff --git a/infra/pr_helper.py b/infra/pr_helper.py index 45abc749da86..37c378ab78f1 100644 --- a/infra/pr_helper.py +++ b/infra/pr_helper.py @@ -26,7 +26,7 @@ OWNER = 'google' REPO = 'oss-fuzz' GITHUB_URL = 'https://github.com/' -GITHUB_NOREF_URL = 'https://www.github.com/' # Github URL that doesn't send emails on linked issues. +GITHUB_NONREF_URL = f'https://www.github.com/{OWNER}/{REPO}' # Github URL that doesn't send emails on linked issues. API_URL = 'https://api.github.com' BASE_URL = f'{API_URL}/repos/{OWNER}/{REPO}' BRANCH = 'master' @@ -75,7 +75,7 @@ def main(): pr_author = github.get_pr_author() # Gets all modified projects path. projects_path = github.get_projects_path() - verified, email = github.get_author_email() + email = github.get_author_email() for project_path in projects_path: project_url = f'{GITHUB_URL}/{OWNER}/{REPO}/tree/{BRANCH}/{project_path}' @@ -103,6 +103,7 @@ def main(): message += ( f'{pr_author} is either the primary contact or is in the CCs list ' f'of [{project_path}]({project_url}).
') + continue # Checks the previous commits. commit_sha = github.has_author_modified_project(project_path) @@ -115,16 +116,16 @@ def main(): continue # If the previous commit is not associated with a pull request. - pr_message = ( - f'{pr_author} has previously contributed to ' - f'[{project_path}]({project_url}). The previous commit was ' - f'{GITHUB_NONREF_URL}/{OWNER}/{REPO}/commit/{commit_sha}
') + pr_message = (f'{pr_author} has previously contributed to ' + f'[{project_path}]({project_url}). The previous commit was ' + f'{GITHUB_NONREF_URL}/commit/{commit_sha}
') - pr_url = github.get_pull_request_url(commit_sha) - if pr_url is not None: + previous_pr_number = github.get_pull_request_number(commit_sha) + if previous_pr_number is not None: pr_message = (f'{pr_author} has previously contributed to ' f'[{project_path}]({project_url}). ' - f'The previous PR was {pr_url}
') + f'The previous PR was [#{previous_pr_number}]' + f'({GITHUB_NONREF_URL}/pull/{previous_pr_number})
') message += pr_message save_env(message, is_ready_for_merge, False) @@ -151,14 +152,16 @@ def get_projects_path(self): """Gets the current project path.""" response = requests.get(f'{BASE_URL}/pulls/{self._pr_number}/files', headers=self._headers) + if not response.ok: + return [] projects_path = set() for file in response.json(): file_path = file['filename'] - dir_path = os.path.dirname(file_path) - if dir_path is not None and dir_path.split(os.sep)[0] == 'projects': - projects_path.add(dir_path) - return list(set(projects_path)) + dir_path = file_path.split(os.sep) + if len(dir_path) > 1 and dir_path[0] == 'projects': + projects_path.add(os.sep.join(dir_path[0:2])) + return list(projects_path) def get_author_email(self): """Retrieves the author's email address for a pull request, @@ -200,15 +203,15 @@ def get_integrated_project_info(self): if 'project.yaml' in file_path: return self.get_yaml_file_content(file['contents_url']) - return None + return {} - def get_pull_request_url(self, commit): - """Gets the pull request url.""" + def get_pull_request_number(self, commit): + """Gets the pull request number.""" pr_response = requests.get(f'{BASE_URL}/commits/{commit}/pulls', headers=self._headers) if not pr_response.ok: return None - return pr_response.json()[0]['html_url'] + return pr_response.json()[0]['number'] def is_author_internal_member(self): """Returns if the author is an internal member."""