From 0f47d9ca5fc164108714e0600c2647b02f3903dc Mon Sep 17 00:00:00 2001 From: kaede10 Date: Tue, 21 Nov 2023 17:05:18 +0800 Subject: [PATCH] update pr_review --- pr_review/Dockerfile | 5 +---- pr_review/src/gitee/gitee_api.py | 4 ++++ pr_review/src/handle/pull_request.py | 2 +- pr_review/src/review_code/review.py | 21 +++++++++++++++------ pr_review/src/router/router.py | 2 +- 5 files changed, 22 insertions(+), 12 deletions(-) diff --git a/pr_review/Dockerfile b/pr_review/Dockerfile index 7f6a45a..4e9de6f 100644 --- a/pr_review/Dockerfile +++ b/pr_review/Dockerfile @@ -6,10 +6,7 @@ RUN yum update -y \ RUN groupadd -g 1001 pr \ && useradd -u 1001 -g pr -s /bin/bash -m pr -RUN cd /home/pr && \ - yum install -y sudo && \ - usermod -aG root pr && \ - echo 'pr ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers +RUN cd /home/pr RUN yum install -y make gcc zlib-devel openssl-devel bzip2-devel ncurses-devel gdbm-devel readline-devel sqlite-devel libffi-devel tk-devel xz-devel \ && yum install -y openssl-devel openssl \ diff --git a/pr_review/src/gitee/gitee_api.py b/pr_review/src/gitee/gitee_api.py index aae6808..c217401 100644 --- a/pr_review/src/gitee/gitee_api.py +++ b/pr_review/src/gitee/gitee_api.py @@ -99,3 +99,7 @@ class GiteeApi(GiteeCaller): def fetch_file_content(self, rawUrl): url = f'{rawUrl}?access_token={self.access_token}' return requests.get(url, cookies = self.cookies).content.decode('utf-8') + + def get_pr_diff(self, diff_url): + url = f'{diff_url}?access_token={self.access_token}' + return requests.get(url, cookies = self.cookies).content.decode('utf-8') diff --git a/pr_review/src/handle/pull_request.py b/pr_review/src/handle/pull_request.py index c3f716e..1b552e0 100644 --- a/pr_review/src/handle/pull_request.py +++ b/pr_review/src/handle/pull_request.py @@ -23,7 +23,7 @@ def note_hooks(data): state = pr.get("state", None) if state != "open": logger.error("pull request is not open") - return + # return comment = data.get("comment", None) if comment is None: diff --git a/pr_review/src/review_code/review.py b/pr_review/src/review_code/review.py index b12e47d..43f687a 100644 --- a/pr_review/src/review_code/review.py +++ b/pr_review/src/review_code/review.py @@ -21,8 +21,17 @@ class CodeReview: self.input = Input(data) self.commenter = Commenter(self.giteeApi) self.commits = [] + self.pr_diff = data.get("pull_request").get("diff_url", None) def code_review(self): + if not self.pr_diff: + logger.warning('pr_diff is null') + return + + diff_files = self.giteeApi.get_pr_diff(self.pr_diff).split('diff --git') + diff_files.pop(0) + pr_files = [dif.split('\n')[0].split(' ')[-1][2::] for dif in diff_files if dif.strip()] + # 如果body中包含IGNORE_KEYWORD,跳过本次reivew if (IGNORE_KEYWORD in self.input.description): logger.info("skipped: body contains ignore_keyword") @@ -38,7 +47,7 @@ class CodeReview: self.input.rawSummary = self.commenter.getRawSummary(existingSummarizeCommentBody) self.input.shortSummary = self.commenter.getShortSummary(existingSummarizeCommentBody) existingCommitIdsBlock = self.commenter.getReviewedCommitIdsBlock(existingSummarizeCommentBody) - + allCommitIds = self.commenter.get_all_commit_ids() highrestReviewedCommitId = '' if existingCommitIdsBlock: @@ -55,7 +64,7 @@ class CodeReview: headSha = prs.get('head', None).get('sha', None) if prs.get('base', None): baseSha = prs.get('base', None).get('sha', None) - + if (not highrestReviewedCommitId) or highrestReviewedCommitId == headSha: logger.info('will review from the base commit: {}'.format(baseSha)) highrestReviewedCommitId = baseSha @@ -68,6 +77,7 @@ class CodeReview: incrementalFiles = incrementalDiff.get('files', None) targetBranchFiles = targetBranchDiff.get('files', None) + if (not incrementalFiles) and (not targetBranchFiles): logger.warning('skipped: files data is missing') return @@ -79,7 +89,7 @@ class CodeReview: files = [] for targetBranchFile in targetBranchFiles: - if targetBranchFile.get('filename', None) in incrementalFilesNames: + if targetBranchFile.get('filename', None) in incrementalFilesNames and targetBranchFile.get('filename', None) in pr_files: files.append(targetBranchFile) if len(files) == 0: logger.warning('skipped: files is null') @@ -96,7 +106,7 @@ class CodeReview: if len(filterSelectedFiles) == 0: logger.warning('skipped: filterSelectedFiles is null') return - + # 获取本次pr的所有commitid commits = [] if incrementalDiff.get('commits', None): @@ -154,7 +164,7 @@ class CodeReview: for filename, fileContent, _, patches in filesAndChangesReview: lgtm_num = self.do_review(filename, self.input, patches) if lgtm_num == len(patches): - self.giteeApi.submit_review(body = "/lgtm", commitId = self.commits[0], filename=filename, line=patches[-1][-1]) + self.giteeApi.submit_review(body = "ok", commitId = self.commits[0], filename=filename, line=patches[-1][-1]) def get_patch_diff_line(self, diff_num, diff_lines, file_diff): line_no = 0 @@ -210,7 +220,6 @@ class CodeReview: return False return True - # 处理 \ No newline at end of file def reduce(self, diff_lines): ans = [] diff --git a/pr_review/src/router/router.py b/pr_review/src/router/router.py index 552f834..d1aa6e7 100644 --- a/pr_review/src/router/router.py +++ b/pr_review/src/router/router.py @@ -23,4 +23,4 @@ def before_request(): def start_router(): - app.run("0.0.0.0", port=8080) + app.run("0.0.0.0", port=8080, debug=True) -- Gitee