diff --git a/pr_review/Dockerfile b/pr_review/Dockerfile index 7f6a45a72afcec1a8cc8be0d44bbd05031faeaa0..4e9de6fef5f65232377f3da08f2971c8ea333201 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 aae6808f928e5f2e9ba448d7b2167c8aca656c5e..c2174015a193513a24c268dd50e669888134bbb9 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 c3f716ebe9f730395fb7c736dba1192424370914..1b552e01700a3894910739fa9237e8cc94eb7cfd 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 b12e47d26bb9ff2e04c8bb76f8ea3cebfcddb42f..43f687a25f45aa074dda62bc7a287d946106e464 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 552f8349a9ba3cd9dc5cc4e9700eee4d71787c92..d1aa6e71fbb1e41213eaf36db076c6af47a120dd 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)