-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathindex.js
56 lines (44 loc) · 3.03 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
const core = require("@actions/core");
const GitHubAPI = require("./githubapi.js");
const OpenAIAgent = require("./openai_agent.js");
const main = async () => {
const getFilteredChangedFiles = (changedFiles, includeExtensions, excludeExtensions, includePaths, excludePaths) => {
const stringToArray = (inputString) => inputString.split(',').map(item => item.trim().replace(/\\/g, '/')).filter(Boolean);
const includeExtensionsArray = stringToArray(includeExtensions);
const excludeExtensionsArray = stringToArray(excludeExtensions);
const includePathsArray = stringToArray(includePaths);
const excludePathsArray = stringToArray(excludePaths);
const isFileToReview = (filename) => {
const isIncludedExtension = includeExtensionsArray.length === 0 || includeExtensionsArray.some(ext => filename.endsWith(ext));
const isExcludedExtension = excludeExtensionsArray.length > 0 && excludeExtensionsArray.some(ext => filename.endsWith(ext));
const isIncludedPath = includePathsArray.length === 0 || includePathsArray.some(path => filename.startsWith(path));
const isExcludedPath = excludePathsArray.length > 0 && excludePathsArray.some(path => filename.startsWith(path));
return isIncludedExtension && !isExcludedExtension && isIncludedPath && !isExcludedPath;
};
return changedFiles.filter(file => isFileToReview(file.filename.replace(/\\/g, '/')));
};
try {
const repo = core.getInput("repo", { required: true });
const owner = core.getInput("owner", { required: true });
const pullNumber = core.getInput("pr_number", { required: true });
const githubToken = core.getInput("token", { required: true });
const openaiApiKey = core.getInput("openai_api_key", { required: true });
const includeExtensions = core.getInput("include_extensions", { required: false });
const excludeExtensions = core.getInput("exclude_extensions", { required: false });
const includePaths = core.getInput("include_paths", { required: false });
const excludePaths = core.getInput("exclude_paths", { required: false });
const githubAPI = new GitHubAPI(githubToken);
const changedFiles = await githubAPI.listFiles(owner, repo, pullNumber);
const filteredChangedFiles = getFilteredChangedFiles(changedFiles, includeExtensions, excludeExtensions, includePaths, excludePaths);
const pullRequestData = await githubAPI.getPullRequest(owner, repo, pullNumber);
const fileContentGetter = async (filePath) => await githubAPI.getContent(owner, repo, filePath, pullRequestData.head.sha);
const fileCommentator = (comment, filePath, line) => {
githubAPI.createReviewComment(owner, repo, pullNumber, pullRequestData.head.sha, comment, filePath, line);
}
const openAI = new OpenAIAgent(openaiApiKey, fileContentGetter, fileCommentator);
await openAI.doReview(filteredChangedFiles);
} catch (error) {
core.warning(error);
}
};
main();