mirror of
https://github.com/ingress-it-solutions/gitea-code-review-action.git
synced 2025-04-20 03:06:44 +00:00
Compare commits
86 commits
Author | SHA1 | Date | |
---|---|---|---|
|
5f5f9bdc32 | ||
|
4dd06053c1 | ||
|
e556ff6977 | ||
|
051f393777 | ||
|
6214dcc4b2 | ||
|
364a45cd88 | ||
|
252a3bca62 | ||
|
75cce8d916 | ||
|
be18a2bc3e | ||
|
35136c692a | ||
|
2e341dc40b | ||
|
821c27694a | ||
|
25b8f474bf | ||
|
516838857f | ||
|
c29eccff0d | ||
|
4343cd8199 | ||
|
dd021fad57 | ||
|
d4a62d85e9 | ||
|
7ec1de5dbb | ||
|
675e4b4581 | ||
|
1f559fdb0c | ||
|
22776a9570 | ||
|
b5d09bfea3 | ||
|
054efac0f9 | ||
|
179983f8bc | ||
|
9f57ed91c6 | ||
|
2d91f8d6ba | ||
|
0d2c101877 | ||
|
bac2279d61 | ||
|
015e6a0826 | ||
|
9d0ca9add3 | ||
|
ba5b9a6177 | ||
|
e080dfe7b5 | ||
|
b540e7ba2a | ||
|
9c01da5f63 | ||
|
12c0cbad46 | ||
|
c6fb986f1e | ||
|
376bf7cd52 | ||
|
8543fc0e11 | ||
|
08e8c7bc72 | ||
|
7a961911b3 | ||
|
70ff4bd5f9 | ||
|
d05920d493 | ||
|
e8de4e326c | ||
|
7867b54c0d | ||
|
e6bc0a5e37 | ||
|
24425a1668 | ||
|
144f8250d1 | ||
|
696b91dabc | ||
|
90bab48974 | ||
|
f18c541e29 | ||
|
1fd15b539d | ||
|
d9cb89612a | ||
|
246b510381 | ||
|
a7d158edbd | ||
|
afa79b554e | ||
|
dd1b960277 | ||
|
6cbe295593 | ||
|
4d9329e59e | ||
|
6344cae339 | ||
|
c6912e4ece | ||
|
7d61ccc420 | ||
|
be1c0ee191 | ||
|
45e0c32b09 | ||
|
3f83c62925 | ||
|
990db6e3da | ||
|
878a6fded8 | ||
|
24a1488f89 | ||
|
eb1fb70e05 | ||
|
00ddd9adf0 | ||
|
f05ffb4a9d | ||
|
7af7c49a6e | ||
|
52b842f210 | ||
|
7d5b853474 | ||
|
5dc467894a | ||
|
c9909464d7 | ||
|
b0064e3282 | ||
|
0355093e71 | ||
|
99d8e69a4f | ||
|
1a0136cd29 | ||
|
907649c88c | ||
|
548279af2c | ||
|
3072ce3277 | ||
|
3fc8120d66 | ||
|
8842ff75bf | ||
|
ff1d104dca |
10 changed files with 2059 additions and 2349 deletions
9
.github/workflows/main.yaml
vendored
9
.github/workflows/main.yaml
vendored
|
@ -10,8 +10,8 @@ jobs:
|
||||||
code-review:
|
code-review:
|
||||||
if: |
|
if: |
|
||||||
github.event_name == 'pull_request' ||
|
github.event_name == 'pull_request' ||
|
||||||
(github.event.comment.user.login == 'adshao' &&
|
(github.event.comment.user.login == 'vandanafuletra' &&
|
||||||
startsWith(github.event.comment.body, 'chatgpt'))
|
startsWith(github.event.comment.body, 'openai'))
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
|
@ -21,7 +21,8 @@ jobs:
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
PROGRAMMING_LANGUAGE: 'JavaScript'
|
PROGRAMMING_LANGUAGE: 'JavaScript'
|
||||||
REVIEW_COMMENT_PREFIX: 'chatgpt:'
|
REVIEW_COMMENT_PREFIX: 'openai:'
|
||||||
FULL_REVIEW_COMMENT: 'chatgpt'
|
FULL_REVIEW_COMMENT: 'openai'
|
||||||
OPENAI_TOKEN: ${{ secrets.OPENAI_TOKEN }}
|
OPENAI_TOKEN: ${{ secrets.OPENAI_TOKEN }}
|
||||||
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
|
||||||
|
SOURCE_AT: 'github'
|
4
.github/workflows/publish.yaml
vendored
4
.github/workflows/publish.yaml
vendored
|
@ -9,9 +9,9 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: https://github.com/actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
uses: https://github.com/actions/setup-node@v3
|
uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: '16'
|
node-version: '16'
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
# OpenAI Code Review
|
# OpenAI Code Review
|
||||||
|
|
||||||
A Gitea Action that uses OpenAI to analyze code in pull request comments.
|
A Gitea Action that uses OpenAI to analyze code in pull request comments. Test message from Bhavik.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
|
@ -106,11 +106,8 @@ ${file:dist/index.js}
|
||||||
|
|
||||||
## Screenshots
|
## Screenshots
|
||||||
|
|
||||||
|
|
||||||
## More Examples
|
## More Examples
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
The code in this repository is licensed under the MIT license. See `LICENSE` for more information.
|
The code in this repository is licensed under the MIT license. See `LICENSE` for more information.
|
||||||
|
|
83
action.yaml
83
action.yaml
|
@ -1,17 +1,17 @@
|
||||||
name: Gitea Code Review
|
name: Gitea Code Review
|
||||||
description: A GitHub Action that uses OpenAI ChatGPT to review code in pull request.
|
description: A GitHub Action that uses OpenAI to review code in pull request.
|
||||||
inputs:
|
inputs:
|
||||||
PROGRAMMING_LANGUAGE:
|
PROGRAMMING_LANGUAGE:
|
||||||
description: 'The programming language used in the GitHub repository. If not provided, the detected programming language will be used.'
|
description: 'The programming language used in the GitHub repository. If not provided, the detected programming language will be used.'
|
||||||
default: ''
|
default: ''
|
||||||
FULL_REVIEW_COMMENT:
|
FULL_REVIEW_COMMENT:
|
||||||
description: 'The comment to trigger a code review for the pull request.'
|
description: 'The comment to trigger a code review for the pull request.'
|
||||||
default: 'chatgpt'
|
default: 'openai'
|
||||||
REVIEW_COMMENT_PREFIX:
|
REVIEW_COMMENT_PREFIX:
|
||||||
description: 'The comment prefix to trigger a code review with the comment content.'
|
description: 'The comment prefix to trigger a code review with the comment content.'
|
||||||
default: 'chatgpt:'
|
default: 'openai:'
|
||||||
OPENAI_TOKEN:
|
OPENAI_TOKEN:
|
||||||
description: 'The API token for the OpenAI ChatGPT API.'
|
description: 'The API token for the OpenAI API.'
|
||||||
required: true
|
required: true
|
||||||
GITHUB_TOKEN:
|
GITHUB_TOKEN:
|
||||||
description: 'The API token for the Github API.'
|
description: 'The API token for the Github API.'
|
||||||
|
@ -22,21 +22,86 @@ inputs:
|
||||||
description: 'The maximum code length for the pull request to be sent to OpenAI.'
|
description: 'The maximum code length for the pull request to be sent to OpenAI.'
|
||||||
default: 6000
|
default: 6000
|
||||||
type: int
|
type: int
|
||||||
|
SOURCE_AT:
|
||||||
|
description: 'Where is the source code located'
|
||||||
|
default: 'github'
|
||||||
PROMPT_TEMPLATE:
|
PROMPT_TEMPLATE:
|
||||||
description: 'The template for the FULL_REVIEW_COMMENT prompt.'
|
description: 'The template for the FULL_REVIEW_COMMENT prompt.'
|
||||||
default: 'Please analyze the pull request''s code and inform me whether it requires optimization, and provide an explanation for your decision:
|
default: 'Your task is to act as a code reviewer and review a pull request by summarizing the changes made, identifying potential issues related to logic and runtime, and creating a bullet list of action items needed before the change can be approved. The output should focus on items mentioned in the given code review checklist.
|
||||||
|
Instructions:
|
||||||
|
- Review the output of git diff for the pull request
|
||||||
|
- Identify potential issues related to logic and runtime
|
||||||
|
- You will only mention the checklist item when it violates the check. If there is nothing found you wont need to mention about checklist. Instead you can say "Raktbeej couldnt find any failed check."
|
||||||
|
- Output as a markdown document, with the following sections:
|
||||||
|
### Overall Summary:
|
||||||
|
- Each bullet point should provide the summary on what this Pull request does. Each point shouldnt exceed more than 14 words.
|
||||||
|
### Issues & Action Items:
|
||||||
|
- Title of the check that it violated and a one liner guideline to user on how it can be fixed.
|
||||||
|
- TODO List with the name of the file, violating policy and line no where you think it was violated.
|
||||||
|
### APPROVE / DISAPPROVE this PR:
|
||||||
|
- Tell me if this Pull request can be approved or not. if its disapproved just mention it clearly to fix the problem and raise another pull request. If its approved then appreciate everyone and say it can be approved.
|
||||||
|
- If there are no issues, output "None"
|
||||||
|
- If there are no action items, output "None"
|
||||||
|
- Create a bullet list of action items needed before the change can be approved
|
||||||
|
- The response sentences are no longer than 16 words each
|
||||||
|
- Keep the response sentences as short as possible
|
||||||
|
- Below code is for laravel framework then you need to check for N+1 query detection in the pull request. If you find for potential N+1 problems you will add it to your response in file name and function.
|
||||||
|
- Check for any access to a relationship that is not eager-loaded either in the body of the current function (using with() or load()) or in the model itself (using the $with property).
|
||||||
|
- Check for any call to DB functions in the loop such as DB::table()
|
||||||
|
- Check for any call to static Model functions in the loop such as Product::find()
|
||||||
|
- Check for any call to Model functions in the loop such as $product->save()
|
||||||
|
- Check if a pull request shows push an HTTP resource class you will check if pull request code used the whenLoaded() helper provided by Laravel. It is a great way to avoid N+1 and performance issues.
|
||||||
|
- Check if a pull request code push a migration we check if it has added any kind of index to new columns. The full path has to include migration in order to trigger this check.
|
||||||
|
- Check if a pull request code push a migration we check if it has a down method and it is not empty. The full path has to include migration in order to trigger this check.
|
||||||
|
- Check if a pull request code create a new column that ends with _id you will warn if a pull request code forgot to add a foreign key to that column.
|
||||||
|
- Check if a pull request code push an HTTP request we check if it has an authorize method and it is not return true. The filename must end with Request.php or the full path has to include Requests in order to trigger this check.
|
||||||
|
- Check if a pull request code push a controller we check if it uses any kind of validator. Usually, it is a better idea to move this logic to a Request class. The filename must end with Controller.php or the full path has to include Controllers in order to trigger this check.
|
||||||
|
- Check if a pull request code added a new key to one of the config file we check if a pull request code also included it in the .env.example file
|
||||||
|
- Check if a pull request code contains an env() call anywhere outside of a config file it needs to be warn. It is a best practice to only use env() in config files.
|
||||||
|
- Check if a pull request code contains a Cache::rememberForever() call It needs to be warn.
|
||||||
|
- Check for Validation with reference to Request that has non nullable database table column in migration.
|
||||||
|
- Check for Incorrect dependencies as there are different layers in every Laravel application. Layers such as: HTTP, Business Logic, Database, etc. Each layer has its own dependencies. For example, the database layer should not depend on the HTTP layer. If it does, it should warn.
|
||||||
|
Here are what counts as an incorrect dependency:
|
||||||
|
- This class -> Depends on these
|
||||||
|
- Model -> HTTP, Job, Command, Checker
|
||||||
|
- Job -> HTTP
|
||||||
|
- Command -> HTTP
|
||||||
|
- Mail/Notification -> HTTP, Job, Command
|
||||||
|
- Service -> HTTP
|
||||||
|
- Repository -> HTTP, Job, Command
|
||||||
|
- Check for Complex data object as there are some typical classes that should not contain too much business logic since their main purpose is to hold data. These classes are:
|
||||||
|
- Resources
|
||||||
|
- Livewire
|
||||||
|
- Requests
|
||||||
|
- DataTransferObjects (DTO)
|
||||||
|
- Value Objects
|
||||||
|
- Mail
|
||||||
|
- Notification
|
||||||
|
- Event
|
||||||
|
- Listener
|
||||||
|
- Check for cyclomatic complexity if a class that contains too much business logic, it needs to be warn. "Too much" means that the cyclomatic complexity of the class is larger than 3.
|
||||||
|
- Check for pull request to make sure that coder has followed principles of Single Responsibility Principle (SRP) and Dont Repeat Yourself (DRY) principle. If not explain where the user needs to make changes.
|
||||||
|
- Check for naming conventions, if a pull request code is violating the naming convention it needs to be warn.
|
||||||
|
- Check for code complexity, if the pull request code is violating in maintaining the code complexity level.
|
||||||
|
- Check for Error handling in the pull request, if pull request code has a proper error handling in the below scenarios.
|
||||||
|
- Are all error scenarios covered in the code?
|
||||||
|
- Are the error messages clear and helpful?
|
||||||
|
- Is the code handling errors gracefully?
|
||||||
|
- Check for Security
|
||||||
|
- Are sensitive data and credentials stored securely?
|
||||||
|
- Are all external libraries and packages up-to-date?
|
||||||
|
- Is the code protected against common security vulnerabilities such as SQL injection and cross-site scripting (XSS)?
|
||||||
\`\`\`
|
\`\`\`
|
||||||
${code}
|
${code}
|
||||||
\`\`\`'
|
\`\`\`'
|
||||||
|
|
||||||
ANSWER_TEMPLATE:
|
ANSWER_TEMPLATE:
|
||||||
description: 'The template for the answer sent to the GitHub comment.'
|
description: 'The template for the answer sent to the GitHub comment.'
|
||||||
default: 'AI Code Review:
|
default: 'Raktbeej Code Review:
|
||||||
|
|
||||||
|
## Summary:
|
||||||
|
|
||||||
${answer}'
|
${answer}'
|
||||||
|
|
||||||
runs:
|
runs:
|
||||||
using: 'node16'
|
using: 'node16'
|
||||||
main: 'dist/index.js'
|
main: 'dist/index.js'
|
||||||
|
|
3505
dist/index.js
vendored
3505
dist/index.js
vendored
File diff suppressed because it is too large
Load diff
1
dist/index.js.map
vendored
Normal file
1
dist/index.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
1
dist/sourcemap-register.js
vendored
Normal file
1
dist/sourcemap-register.js
vendored
Normal file
File diff suppressed because one or more lines are too long
289
index.js
289
index.js
|
@ -15,116 +15,179 @@ function configWithProxy(config) {
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
async function run() {
|
async function run() {
|
||||||
try {
|
try {
|
||||||
// Get input values
|
// Get input values
|
||||||
const programmingLanguage = core.getInput('PROGRAMMING_LANGUAGE');
|
const programmingLanguage = core.getInput('PROGRAMMING_LANGUAGE');
|
||||||
const openaiToken = core.getInput('OPENAI_TOKEN');
|
const openaiToken = core.getInput('OPENAI_TOKEN');
|
||||||
const fullReviewComment = core.getInput('FULL_REVIEW_COMMENT');
|
const fullReviewComment = core.getInput('FULL_REVIEW_COMMENT');
|
||||||
const reviewCommentPrefix = core.getInput('REVIEW_COMMENT_PREFIX');
|
const reviewCommentPrefix = core.getInput('REVIEW_COMMENT_PREFIX');
|
||||||
const githubToken = core.getInput('GITHUB_TOKEN');
|
const githubToken = core.getInput('GITHUB_TOKEN');
|
||||||
const githubBaseURL = core.getInput('GITHUB_BASE_URL') || process.env.GITHUB_API_URL;
|
const githubBaseURL = core.getInput('GITHUB_BASE_URL') || process.env.GITHUB_API_URL;
|
||||||
const promptTemplate = core.getInput('PROMPT_TEMPLATE');
|
const promptTemplate = core.getInput('PROMPT_TEMPLATE');
|
||||||
const maxCodeLength = core.getInput('MAX_CODE_LENGTH');
|
const maxCodeLength = core.getInput('MAX_CODE_LENGTH');
|
||||||
const answerTemplate = core.getInput('ANSWER_TEMPLATE');
|
const answerTemplate = core.getInput('ANSWER_TEMPLATE');
|
||||||
|
const giteaToken = core.getInput('GITHUB_TOKEN');
|
||||||
|
const sourceAt = core.getInput('SOURCE_AT');
|
||||||
|
|
||||||
core.debug(`programmingLanguage: ${programmingLanguage}`);
|
core.debug(`programmingLanguage: ${programmingLanguage}`);
|
||||||
core.debug(`openaiToken length: ${openaiToken.length}`);
|
core.debug(`openaiToken length: ${openaiToken.length}`);
|
||||||
core.debug(`fullReviewComment: ${fullReviewComment}`);
|
core.debug(`fullReviewComment: ${fullReviewComment}`);
|
||||||
core.debug(`reviewCommentPrefix: ${reviewCommentPrefix}`);
|
core.debug(`reviewCommentPrefix: ${reviewCommentPrefix}`);
|
||||||
core.debug(`githubToken length: ${githubToken.length}`);
|
core.debug(`githubToken length: ${githubToken.length}`);
|
||||||
core.debug(`githubBaseURL: ${githubBaseURL}`);
|
core.debug(`githubBaseURL: ${githubBaseURL}`);
|
||||||
core.debug(`promptTemplate: ${promptTemplate}`);
|
core.debug(`promptTemplate: ${promptTemplate}`);
|
||||||
core.debug(`maxCodeLength: ${maxCodeLength}`);
|
core.debug(`maxCodeLength: ${maxCodeLength}`);
|
||||||
core.debug(`answerTemplate: ${answerTemplate}`);
|
core.debug(`answerTemplate: ${answerTemplate}`);
|
||||||
|
core.debug(`SourceAt: ${sourceAt}`);
|
||||||
|
|
||||||
// Get information about the pull request review
|
// Get information about the pull request review
|
||||||
const comment = github.context.payload.comment;
|
const comment = github.context.payload.comment;
|
||||||
const repoName = github.context.payload.repository.name;
|
const repoName = github.context.payload.repository.name;
|
||||||
const repoOwner = github.context.payload.repository.owner.login;
|
const repoOwner = github.context.payload.repository.owner.login;
|
||||||
const prNumber = github.context.payload.number || github.context.payload.issue.number; // get number from a pull request event or comment event
|
const prNumber = github.context.payload.number || github.context.payload.issue.number; // get number from a pull request event or comment event
|
||||||
|
|
||||||
// Get the code to analyze from the review comment
|
// Get the code to analyze from the review comment
|
||||||
var content = comment && comment.body || "";
|
var content = comment && comment.body || '';
|
||||||
|
|
||||||
const url = `${githubBaseURL}/${repoOwner}/${repoName}/pulls/${prNumber}`;
|
if(sourceAt === 'github') {
|
||||||
core.debug(`diff url: ${url}`);
|
|
||||||
var response = await axios.get(url, {
|
|
||||||
headers: {
|
|
||||||
Authorization: `Bearer ${githubToken}`,
|
|
||||||
Accept: 'application/vnd.github.diff'
|
|
||||||
}
|
|
||||||
});
|
|
||||||
const code = response.data;
|
|
||||||
core.debug(`diff code: ${code}`);
|
|
||||||
const files = parsePullRequestDiff(code);
|
|
||||||
core.debug(`diff files: ${files}`);
|
|
||||||
|
|
||||||
if (!content || content == fullReviewComment) {
|
const url = `${githubBaseURL}/repos/${repoOwner}/${repoName}/pulls/${prNumber}`;
|
||||||
// Extract the code from the pull request content
|
console.log(`diff url: ${url}`);
|
||||||
content = promptTemplate.replace('${code}', code);
|
var response = await axios.get(url, {
|
||||||
} else {
|
headers: {
|
||||||
content = content.substring(reviewCommentPrefix.length);
|
Authorization: `token ${githubToken}`,
|
||||||
content = content.replace('${code}', code);
|
Accept: 'application/vnd.github.diff'
|
||||||
const fileNames = findFileNames(content);
|
}
|
||||||
core.debug(`found files name in commment: ${fileNames}`);
|
});
|
||||||
for (const fileName of fileNames) {
|
const code = response.data;
|
||||||
for (const key of Object.keys(files)) {
|
core.debug(`diff code: ${code}`);
|
||||||
if (key.includes(fileName)) {
|
const files = parsePullRequestDiff(code);
|
||||||
core.debug(`replace \${file:${fileName}} with ${key}'s diff`);
|
core.debug(`diff files: ${files}`);
|
||||||
content = content.replace(`\${file:${fileName}}`, files[key]);
|
|
||||||
break;
|
if (!content || content == fullReviewComment) {
|
||||||
|
// Extract the code from the pull request content
|
||||||
|
content = promptTemplate.replace('${code}', code);
|
||||||
|
} else {
|
||||||
|
content = content.substring(reviewCommentPrefix.length);
|
||||||
|
content = content.replace('${code}', code);
|
||||||
|
const fileNames = findFileNames(content);
|
||||||
|
core.debug(`found files name in commment: ${fileNames}`);
|
||||||
|
for (const fileName of fileNames) {
|
||||||
|
for (const key of Object.keys(files)) {
|
||||||
|
if (key.includes(fileName)) {
|
||||||
|
core.debug(`replace \${file:${fileName}} with ${key}'s diff`);
|
||||||
|
content = content.replace(`\${file:${fileName}}`, files[key]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
content = content.substring(0, maxCodeLength);
|
||||||
}
|
}
|
||||||
|
else if(sourceAt === 'gitea')
|
||||||
|
{
|
||||||
|
const url = `${githubBaseURL}/api/v1/repos/${repoOwner}/${repoName}/pulls/${prNumber}.diff`;
|
||||||
|
console.log(`diff url: ${url}`);
|
||||||
|
var response = await axios.get(url, {
|
||||||
|
headers: {
|
||||||
|
Authorization: `token ${githubToken}`,
|
||||||
|
Accept: 'application/vnd.github.diff'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const code = response.data;
|
||||||
|
core.debug(`diff code: ${code}`);
|
||||||
|
const files = parsePullRequestDiff(code);
|
||||||
|
core.debug(`diff files: ${files}`);
|
||||||
|
|
||||||
|
if (!content || content == fullReviewComment) {
|
||||||
|
// Extract the code from the pull request content
|
||||||
|
content = promptTemplate.replace('${code}', code);
|
||||||
|
} else {
|
||||||
|
content = content.substring(reviewCommentPrefix.length);
|
||||||
|
content = content.replace('${code}', code);
|
||||||
|
const fileNames = findFileNames(content);
|
||||||
|
core.debug(`found files name in commment: ${fileNames}`);
|
||||||
|
for (const fileName of fileNames) {
|
||||||
|
for (const key of Object.keys(files)) {
|
||||||
|
if (key.includes(fileName)) {
|
||||||
|
core.debug(`replace \${file:${fileName}} with ${key}'s diff`);
|
||||||
|
content = content.replace(`\${file:${fileName}}`, files[key]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
content = content.substring(0, maxCodeLength);
|
||||||
|
}
|
||||||
|
// Determine the programming language if it was not provided
|
||||||
|
if (programmingLanguage == 'auto') {
|
||||||
|
const detectedLanguage = detect(code);
|
||||||
|
core.debug(`Detected programming language: ${detectedLanguage}`);
|
||||||
|
programmingLanguage = detectedLanguage;
|
||||||
|
}
|
||||||
|
|
||||||
|
var messages = [{
|
||||||
|
role: "system",
|
||||||
|
content: `You are a master of programming language ${programmingLanguage}`
|
||||||
|
}, {
|
||||||
|
role: "user",
|
||||||
|
content: content
|
||||||
|
}];
|
||||||
|
|
||||||
|
core.debug(`content: ${content}`);
|
||||||
|
|
||||||
|
// Call the OpenAI ChatGPT API to analyze the code
|
||||||
|
response = await axios.post('https://api.openai.com/v1/chat/completions', {
|
||||||
|
"model": "gpt-3.5-turbo",
|
||||||
|
"messages": messages
|
||||||
|
}, configWithProxy({
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
'Authorization': `Bearer ${openaiToken}`
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
const answer = response.data.choices[0].message.content;
|
||||||
|
core.debug(`openai response: ${answer}`);
|
||||||
|
|
||||||
|
if(sourceAt === 'github') {
|
||||||
|
// Reply to the review comment with the OpenAI response
|
||||||
|
const octokit = new github.getOctokit(githubToken, {
|
||||||
|
baseUrl: githubBaseURL
|
||||||
|
});
|
||||||
|
|
||||||
|
await octokit.rest.issues.createComment({
|
||||||
|
owner: repoOwner,
|
||||||
|
repo: repoName,
|
||||||
|
issue_number: prNumber,
|
||||||
|
body: answerTemplate.replace('${answer}', answer)
|
||||||
|
|
||||||
|
});
|
||||||
|
} else if (sourceAt === 'gitea')
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
// Make a POST request to create a comment on a pull request
|
||||||
|
const comment = answerTemplate.replace('${answer}', answer);
|
||||||
|
const url = `${githubBaseURL}/api/v1/repos/${repoOwner}/${repoName}/issues/${prNumber}/comments`;
|
||||||
|
const headers = { 'Content-Type': 'application/json', 'Authorization': `token ${githubToken}` };
|
||||||
|
const data = { 'body': `${comment}`};
|
||||||
|
core.debug(`url: ${url}`);
|
||||||
|
core.debug(`githubToken: ${githubToken}`);
|
||||||
|
core.debug(`data.body: ${data.body}`);
|
||||||
|
var response = await axios.post(url, data, {
|
||||||
|
headers: {
|
||||||
|
Authorization: `token ${githubToken}`,
|
||||||
|
Accept: 'application/json'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
core.setFailed(error.message);
|
||||||
}
|
}
|
||||||
content = content.substring(0, maxCodeLength);
|
|
||||||
|
|
||||||
// Determine the programming language if it was not provided
|
|
||||||
if (programmingLanguage == 'auto') {
|
|
||||||
const detectedLanguage = detect(code);
|
|
||||||
core.debug(`Detected programming language: ${detectedLanguage}`);
|
|
||||||
programmingLanguage = detectedLanguage;
|
|
||||||
}
|
|
||||||
|
|
||||||
var messages = [{
|
|
||||||
role: "system",
|
|
||||||
content: `You are a master of programming language ${programmingLanguage}`
|
|
||||||
}, {
|
|
||||||
role: "user",
|
|
||||||
content: content
|
|
||||||
}];
|
|
||||||
|
|
||||||
core.debug(`content: ${content}`);
|
|
||||||
|
|
||||||
// Call the OpenAI ChatGPT API to analyze the code
|
|
||||||
response = await axios.post('https://api.openai.com/v1/chat/completions', {
|
|
||||||
"model": "gpt-3.5-turbo",
|
|
||||||
"messages": messages
|
|
||||||
}, configWithProxy({
|
|
||||||
headers: {
|
|
||||||
'Content-Type': 'application/json',
|
|
||||||
'Authorization': `Bearer ${openaiToken}`
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
|
|
||||||
const answer = response.data.choices[0].message.content;
|
|
||||||
core.debug(`openai response: ${answer}`);
|
|
||||||
|
|
||||||
// Reply to the review comment with the OpenAI response
|
|
||||||
const octokit = github.getOctokit(githubToken, {
|
|
||||||
baseUrl: githubBaseURL
|
|
||||||
});
|
|
||||||
await octokit.rest.issues.createComment({
|
|
||||||
owner: repoOwner,
|
|
||||||
repo: repoName,
|
|
||||||
issue_number: prNumber,
|
|
||||||
body: answerTemplate.replace('${answer}', answer)
|
|
||||||
// in_reply_to: comment.id
|
|
||||||
});
|
|
||||||
} catch (error) {
|
|
||||||
core.setFailed(error.message);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function parsePullRequestDiff(diffContent) {
|
function parsePullRequestDiff(diffContent) {
|
||||||
|
@ -135,22 +198,22 @@ function parsePullRequestDiff(diffContent) {
|
||||||
let currentLines = [];
|
let currentLines = [];
|
||||||
|
|
||||||
for (const line of diffLines) {
|
for (const line of diffLines) {
|
||||||
if (line.startsWith('diff --git')) {
|
if (line.startsWith('diff --git')) {
|
||||||
// Start of a new file
|
// Start of a new file
|
||||||
if (currentFile) {
|
if (currentFile) {
|
||||||
files[currentFile] = currentLines.join('\n');
|
files[currentFile] = currentLines.join('\n');
|
||||||
|
}
|
||||||
|
currentFile = line.substring('diff --git'.length + 1);
|
||||||
|
currentLines = [line];
|
||||||
|
} else {
|
||||||
|
// Add the line to the current file's diff
|
||||||
|
currentLines.push(line);
|
||||||
}
|
}
|
||||||
currentFile = line.substring('diff --git'.length + 1);
|
|
||||||
currentLines = [line];
|
|
||||||
} else {
|
|
||||||
// Add the line to the current file's diff
|
|
||||||
currentLines.push(line);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add the last file's diff
|
// Add the last file's diff
|
||||||
if (currentFile) {
|
if (currentFile) {
|
||||||
files[currentFile] = currentLines.join('\n');
|
files[currentFile] = currentLines.join('\n');
|
||||||
}
|
}
|
||||||
|
|
||||||
return files;
|
return files;
|
||||||
|
@ -161,9 +224,9 @@ function findFileNames(str) {
|
||||||
const matches = str.matchAll(pattern);
|
const matches = str.matchAll(pattern);
|
||||||
const names = [];
|
const names = [];
|
||||||
for (const match of matches) {
|
for (const match of matches) {
|
||||||
names.push(match[1]);
|
names.push(match[1]);
|
||||||
}
|
}
|
||||||
return names;
|
return names;
|
||||||
}
|
}
|
||||||
|
|
||||||
run();
|
run();
|
507
package-lock.json
generated
507
package-lock.json
generated
|
@ -1,493 +1,8 @@
|
||||||
{
|
{
|
||||||
"name": "gitea-code-review-action",
|
"name": "gitea-code-review-action",
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
|
||||||
"": {
|
|
||||||
"name": "gitea-code-review-action",
|
|
||||||
"version": "0.0.1",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"@actions/core": "^1.10.0",
|
|
||||||
"@actions/github": "^5.1.1",
|
|
||||||
"axios": "^1.3.4",
|
|
||||||
"https-proxy-agent": "^5.0.1",
|
|
||||||
"language-detect": "1.1.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@actions/core": {
|
|
||||||
"version": "1.10.0",
|
|
||||||
"resolved": "https://registry.npmmirror.com/@actions/core/-/core-1.10.0.tgz",
|
|
||||||
"integrity": "sha512-2aZDDa3zrrZbP5ZYg159sNoLRb61nQ7awl5pSvIq5Qpj81vwDzdMRKzkWJGJuwVvWpvZKx7vspJALyvaaIQyug==",
|
|
||||||
"dependencies": {
|
|
||||||
"@actions/http-client": "^2.0.1",
|
|
||||||
"uuid": "^8.3.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@actions/github": {
|
|
||||||
"version": "5.1.1",
|
|
||||||
"resolved": "https://registry.npmmirror.com/@actions/github/-/github-5.1.1.tgz",
|
|
||||||
"integrity": "sha512-Nk59rMDoJaV+mHCOJPXuvB1zIbomlKS0dmSIqPGxd0enAXBnOfn4VWF+CGtRCwXZG9Epa54tZA7VIRlJDS8A6g==",
|
|
||||||
"dependencies": {
|
|
||||||
"@actions/http-client": "^2.0.1",
|
|
||||||
"@octokit/core": "^3.6.0",
|
|
||||||
"@octokit/plugin-paginate-rest": "^2.17.0",
|
|
||||||
"@octokit/plugin-rest-endpoint-methods": "^5.13.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@actions/http-client": {
|
|
||||||
"version": "2.0.1",
|
|
||||||
"resolved": "https://registry.npmmirror.com/@actions/http-client/-/http-client-2.0.1.tgz",
|
|
||||||
"integrity": "sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw==",
|
|
||||||
"dependencies": {
|
|
||||||
"tunnel": "^0.0.6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@octokit/auth-token": {
|
|
||||||
"version": "2.5.0",
|
|
||||||
"resolved": "https://registry.npmmirror.com/@octokit/auth-token/-/auth-token-2.5.0.tgz",
|
|
||||||
"integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==",
|
|
||||||
"dependencies": {
|
|
||||||
"@octokit/types": "^6.0.3"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@octokit/core": {
|
|
||||||
"version": "3.6.0",
|
|
||||||
"resolved": "https://registry.npmmirror.com/@octokit/core/-/core-3.6.0.tgz",
|
|
||||||
"integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==",
|
|
||||||
"dependencies": {
|
|
||||||
"@octokit/auth-token": "^2.4.4",
|
|
||||||
"@octokit/graphql": "^4.5.8",
|
|
||||||
"@octokit/request": "^5.6.3",
|
|
||||||
"@octokit/request-error": "^2.0.5",
|
|
||||||
"@octokit/types": "^6.0.3",
|
|
||||||
"before-after-hook": "^2.2.0",
|
|
||||||
"universal-user-agent": "^6.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@octokit/endpoint": {
|
|
||||||
"version": "6.0.12",
|
|
||||||
"resolved": "https://registry.npmmirror.com/@octokit/endpoint/-/endpoint-6.0.12.tgz",
|
|
||||||
"integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==",
|
|
||||||
"dependencies": {
|
|
||||||
"@octokit/types": "^6.0.3",
|
|
||||||
"is-plain-object": "^5.0.0",
|
|
||||||
"universal-user-agent": "^6.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@octokit/graphql": {
|
|
||||||
"version": "4.8.0",
|
|
||||||
"resolved": "https://registry.npmmirror.com/@octokit/graphql/-/graphql-4.8.0.tgz",
|
|
||||||
"integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==",
|
|
||||||
"dependencies": {
|
|
||||||
"@octokit/request": "^5.6.0",
|
|
||||||
"@octokit/types": "^6.0.3",
|
|
||||||
"universal-user-agent": "^6.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@octokit/openapi-types": {
|
|
||||||
"version": "12.11.0",
|
|
||||||
"resolved": "https://registry.npmmirror.com/@octokit/openapi-types/-/openapi-types-12.11.0.tgz",
|
|
||||||
"integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ=="
|
|
||||||
},
|
|
||||||
"node_modules/@octokit/plugin-paginate-rest": {
|
|
||||||
"version": "2.21.3",
|
|
||||||
"resolved": "https://registry.npmmirror.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz",
|
|
||||||
"integrity": "sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==",
|
|
||||||
"dependencies": {
|
|
||||||
"@octokit/types": "^6.40.0"
|
|
||||||
},
|
|
||||||
"peerDependencies": {
|
|
||||||
"@octokit/core": ">=2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@octokit/plugin-rest-endpoint-methods": {
|
|
||||||
"version": "5.16.2",
|
|
||||||
"resolved": "https://registry.npmmirror.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz",
|
|
||||||
"integrity": "sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==",
|
|
||||||
"dependencies": {
|
|
||||||
"@octokit/types": "^6.39.0",
|
|
||||||
"deprecation": "^2.3.1"
|
|
||||||
},
|
|
||||||
"peerDependencies": {
|
|
||||||
"@octokit/core": ">=3"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@octokit/request": {
|
|
||||||
"version": "5.6.3",
|
|
||||||
"resolved": "https://registry.npmmirror.com/@octokit/request/-/request-5.6.3.tgz",
|
|
||||||
"integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==",
|
|
||||||
"dependencies": {
|
|
||||||
"@octokit/endpoint": "^6.0.1",
|
|
||||||
"@octokit/request-error": "^2.1.0",
|
|
||||||
"@octokit/types": "^6.16.1",
|
|
||||||
"is-plain-object": "^5.0.0",
|
|
||||||
"node-fetch": "^2.6.7",
|
|
||||||
"universal-user-agent": "^6.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@octokit/request-error": {
|
|
||||||
"version": "2.1.0",
|
|
||||||
"resolved": "https://registry.npmmirror.com/@octokit/request-error/-/request-error-2.1.0.tgz",
|
|
||||||
"integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==",
|
|
||||||
"dependencies": {
|
|
||||||
"@octokit/types": "^6.0.3",
|
|
||||||
"deprecation": "^2.0.0",
|
|
||||||
"once": "^1.4.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@octokit/types": {
|
|
||||||
"version": "6.41.0",
|
|
||||||
"resolved": "https://registry.npmmirror.com/@octokit/types/-/types-6.41.0.tgz",
|
|
||||||
"integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==",
|
|
||||||
"dependencies": {
|
|
||||||
"@octokit/openapi-types": "^12.11.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@redis/bloom": {
|
|
||||||
"version": "1.2.0",
|
|
||||||
"resolved": "https://registry.npmmirror.com/@redis/bloom/-/bloom-1.2.0.tgz",
|
|
||||||
"integrity": "sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg==",
|
|
||||||
"peerDependencies": {
|
|
||||||
"@redis/client": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@redis/client": {
|
|
||||||
"version": "1.5.6",
|
|
||||||
"resolved": "https://registry.npmmirror.com/@redis/client/-/client-1.5.6.tgz",
|
|
||||||
"integrity": "sha512-dFD1S6je+A47Lj22jN/upVU2fj4huR7S9APd7/ziUXsIXDL+11GPYti4Suv5y8FuXaN+0ZG4JF+y1houEJ7ToA==",
|
|
||||||
"dependencies": {
|
|
||||||
"cluster-key-slot": "1.1.2",
|
|
||||||
"generic-pool": "3.9.0",
|
|
||||||
"yallist": "4.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=14"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@redis/graph": {
|
|
||||||
"version": "1.1.0",
|
|
||||||
"resolved": "https://registry.npmmirror.com/@redis/graph/-/graph-1.1.0.tgz",
|
|
||||||
"integrity": "sha512-16yZWngxyXPd+MJxeSr0dqh2AIOi8j9yXKcKCwVaKDbH3HTuETpDVPcLujhFYVPtYrngSco31BUcSa9TH31Gqg==",
|
|
||||||
"peerDependencies": {
|
|
||||||
"@redis/client": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@redis/json": {
|
|
||||||
"version": "1.0.4",
|
|
||||||
"resolved": "https://registry.npmmirror.com/@redis/json/-/json-1.0.4.tgz",
|
|
||||||
"integrity": "sha512-LUZE2Gdrhg0Rx7AN+cZkb1e6HjoSKaeeW8rYnt89Tly13GBI5eP4CwDVr+MY8BAYfCg4/N15OUrtLoona9uSgw==",
|
|
||||||
"peerDependencies": {
|
|
||||||
"@redis/client": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@redis/search": {
|
|
||||||
"version": "1.1.2",
|
|
||||||
"resolved": "https://registry.npmmirror.com/@redis/search/-/search-1.1.2.tgz",
|
|
||||||
"integrity": "sha512-/cMfstG/fOh/SsE+4/BQGeuH/JJloeWuH+qJzM8dbxuWvdWibWAOAHHCZTMPhV3xIlH4/cUEIA8OV5QnYpaVoA==",
|
|
||||||
"peerDependencies": {
|
|
||||||
"@redis/client": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@redis/time-series": {
|
|
||||||
"version": "1.0.4",
|
|
||||||
"resolved": "https://registry.npmmirror.com/@redis/time-series/-/time-series-1.0.4.tgz",
|
|
||||||
"integrity": "sha512-ThUIgo2U/g7cCuZavucQTQzA9g9JbDDY2f64u3AbAoz/8vE2lt2U37LamDUVChhaDA3IRT9R6VvJwqnUfTJzng==",
|
|
||||||
"peerDependencies": {
|
|
||||||
"@redis/client": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/agent-base": {
|
|
||||||
"version": "6.0.2",
|
|
||||||
"resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz",
|
|
||||||
"integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
|
|
||||||
"dependencies": {
|
|
||||||
"debug": "4"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 6.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/asynckit": {
|
|
||||||
"version": "0.4.0",
|
|
||||||
"resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz",
|
|
||||||
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
|
|
||||||
},
|
|
||||||
"node_modules/axios": {
|
|
||||||
"version": "1.3.4",
|
|
||||||
"resolved": "https://registry.npmmirror.com/axios/-/axios-1.3.4.tgz",
|
|
||||||
"integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==",
|
|
||||||
"dependencies": {
|
|
||||||
"follow-redirects": "^1.15.0",
|
|
||||||
"form-data": "^4.0.0",
|
|
||||||
"proxy-from-env": "^1.1.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/before-after-hook": {
|
|
||||||
"version": "2.2.3",
|
|
||||||
"resolved": "https://registry.npmmirror.com/before-after-hook/-/before-after-hook-2.2.3.tgz",
|
|
||||||
"integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ=="
|
|
||||||
},
|
|
||||||
"node_modules/classifier": {
|
|
||||||
"version": "0.1.0",
|
|
||||||
"resolved": "https://registry.npmmirror.com/classifier/-/classifier-0.1.0.tgz",
|
|
||||||
"integrity": "sha512-lHoacZqTxberxbsaT/bDkvUicTl6nVTqnM5X6PhCTCg6Y3uhd/lWqbtMvHwe0W0vGkPWCVw5NTUTi3SOlccaSA==",
|
|
||||||
"deprecated": "Package no longer supported. Contact support@npmjs.com for more info.",
|
|
||||||
"dependencies": {
|
|
||||||
"redis": ">=0.7.0",
|
|
||||||
"underscore": ">=1.1.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "*"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/cluster-key-slot": {
|
|
||||||
"version": "1.1.2",
|
|
||||||
"resolved": "https://registry.npmmirror.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz",
|
|
||||||
"integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/combined-stream": {
|
|
||||||
"version": "1.0.8",
|
|
||||||
"resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz",
|
|
||||||
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
|
|
||||||
"dependencies": {
|
|
||||||
"delayed-stream": "~1.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 0.8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/debug": {
|
|
||||||
"version": "4.3.4",
|
|
||||||
"resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz",
|
|
||||||
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
|
|
||||||
"dependencies": {
|
|
||||||
"ms": "2.1.2"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=6.0"
|
|
||||||
},
|
|
||||||
"peerDependenciesMeta": {
|
|
||||||
"supports-color": {
|
|
||||||
"optional": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/delayed-stream": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
|
||||||
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.4.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/deprecation": {
|
|
||||||
"version": "2.3.1",
|
|
||||||
"resolved": "https://registry.npmmirror.com/deprecation/-/deprecation-2.3.1.tgz",
|
|
||||||
"integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ=="
|
|
||||||
},
|
|
||||||
"node_modules/follow-redirects": {
|
|
||||||
"version": "1.15.2",
|
|
||||||
"resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.2.tgz",
|
|
||||||
"integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=4.0"
|
|
||||||
},
|
|
||||||
"peerDependenciesMeta": {
|
|
||||||
"debug": {
|
|
||||||
"optional": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/form-data": {
|
|
||||||
"version": "4.0.0",
|
|
||||||
"resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz",
|
|
||||||
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
|
|
||||||
"dependencies": {
|
|
||||||
"asynckit": "^0.4.0",
|
|
||||||
"combined-stream": "^1.0.8",
|
|
||||||
"mime-types": "^2.1.12"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/generic-pool": {
|
|
||||||
"version": "3.9.0",
|
|
||||||
"resolved": "https://registry.npmmirror.com/generic-pool/-/generic-pool-3.9.0.tgz",
|
|
||||||
"integrity": "sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==",
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 4"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/https-proxy-agent": {
|
|
||||||
"version": "5.0.1",
|
|
||||||
"resolved": "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
|
|
||||||
"integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
|
|
||||||
"dependencies": {
|
|
||||||
"agent-base": "6",
|
|
||||||
"debug": "4"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/is-plain-object": {
|
|
||||||
"version": "5.0.0",
|
|
||||||
"resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-5.0.0.tgz",
|
|
||||||
"integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/language-classifier": {
|
|
||||||
"version": "0.0.1",
|
|
||||||
"resolved": "https://registry.npmmirror.com/language-classifier/-/language-classifier-0.0.1.tgz",
|
|
||||||
"integrity": "sha512-myU10NLx/dfATa7b0NJiycU4jlU15fMLcnfXYEO6NPMhH1vHYKMp9eoRZaQMDTu3bz25bD31Q9klsf26oOW1BQ==",
|
|
||||||
"dependencies": {
|
|
||||||
"classifier": "~0.1.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/language-detect": {
|
|
||||||
"version": "1.1.0",
|
|
||||||
"resolved": "https://registry.npmmirror.com/language-detect/-/language-detect-1.1.0.tgz",
|
|
||||||
"integrity": "sha512-2kXHOATTovlwlh1LJE21DLyGiuvX6bK8CYw9kEyui2FeNBV3EYD2OE9h1ChuWNGXe/TGcm7PqpK/32S614R1Kg==",
|
|
||||||
"dependencies": {
|
|
||||||
"language-classifier": "0.0.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/mime-db": {
|
|
||||||
"version": "1.52.0",
|
|
||||||
"resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz",
|
|
||||||
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 0.6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/mime-types": {
|
|
||||||
"version": "2.1.35",
|
|
||||||
"resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz",
|
|
||||||
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
|
|
||||||
"dependencies": {
|
|
||||||
"mime-db": "1.52.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 0.6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/ms": {
|
|
||||||
"version": "2.1.2",
|
|
||||||
"resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz",
|
|
||||||
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
|
||||||
},
|
|
||||||
"node_modules/node-fetch": {
|
|
||||||
"version": "2.6.9",
|
|
||||||
"resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.6.9.tgz",
|
|
||||||
"integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==",
|
|
||||||
"dependencies": {
|
|
||||||
"whatwg-url": "^5.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "4.x || >=6.0.0"
|
|
||||||
},
|
|
||||||
"peerDependencies": {
|
|
||||||
"encoding": "^0.1.0"
|
|
||||||
},
|
|
||||||
"peerDependenciesMeta": {
|
|
||||||
"encoding": {
|
|
||||||
"optional": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/once": {
|
|
||||||
"version": "1.4.0",
|
|
||||||
"resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz",
|
|
||||||
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
|
|
||||||
"dependencies": {
|
|
||||||
"wrappy": "1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/proxy-from-env": {
|
|
||||||
"version": "1.1.0",
|
|
||||||
"resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
|
|
||||||
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
|
|
||||||
},
|
|
||||||
"node_modules/redis": {
|
|
||||||
"version": "4.6.5",
|
|
||||||
"resolved": "https://registry.npmmirror.com/redis/-/redis-4.6.5.tgz",
|
|
||||||
"integrity": "sha512-O0OWA36gDQbswOdUuAhRL6mTZpHFN525HlgZgDaVNgCJIAZR3ya06NTESb0R+TUZ+BFaDpz6NnnVvoMx9meUFg==",
|
|
||||||
"workspaces": [
|
|
||||||
"./packages/*"
|
|
||||||
],
|
|
||||||
"dependencies": {
|
|
||||||
"@redis/bloom": "1.2.0",
|
|
||||||
"@redis/client": "1.5.6",
|
|
||||||
"@redis/graph": "1.1.0",
|
|
||||||
"@redis/json": "1.0.4",
|
|
||||||
"@redis/search": "1.1.2",
|
|
||||||
"@redis/time-series": "1.0.4"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/tr46": {
|
|
||||||
"version": "0.0.3",
|
|
||||||
"resolved": "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz",
|
|
||||||
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
|
|
||||||
},
|
|
||||||
"node_modules/tunnel": {
|
|
||||||
"version": "0.0.6",
|
|
||||||
"resolved": "https://registry.npmmirror.com/tunnel/-/tunnel-0.0.6.tgz",
|
|
||||||
"integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.6.11 <=0.7.0 || >=0.7.3"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/underscore": {
|
|
||||||
"version": "1.13.6",
|
|
||||||
"resolved": "https://registry.npmmirror.com/underscore/-/underscore-1.13.6.tgz",
|
|
||||||
"integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A=="
|
|
||||||
},
|
|
||||||
"node_modules/universal-user-agent": {
|
|
||||||
"version": "6.0.0",
|
|
||||||
"resolved": "https://registry.npmmirror.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz",
|
|
||||||
"integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w=="
|
|
||||||
},
|
|
||||||
"node_modules/uuid": {
|
|
||||||
"version": "8.3.2",
|
|
||||||
"resolved": "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz",
|
|
||||||
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
|
|
||||||
"bin": {
|
|
||||||
"uuid": "dist/bin/uuid"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/webidl-conversions": {
|
|
||||||
"version": "3.0.1",
|
|
||||||
"resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
|
|
||||||
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
|
|
||||||
},
|
|
||||||
"node_modules/whatwg-url": {
|
|
||||||
"version": "5.0.0",
|
|
||||||
"resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz",
|
|
||||||
"integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
|
|
||||||
"dependencies": {
|
|
||||||
"tr46": "~0.0.3",
|
|
||||||
"webidl-conversions": "^3.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/wrappy": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz",
|
|
||||||
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
|
|
||||||
},
|
|
||||||
"node_modules/yallist": {
|
|
||||||
"version": "4.0.0",
|
|
||||||
"resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
|
|
||||||
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/core": {
|
"@actions/core": {
|
||||||
"version": "1.10.0",
|
"version": "1.10.0",
|
||||||
|
@ -615,8 +130,7 @@
|
||||||
"@redis/bloom": {
|
"@redis/bloom": {
|
||||||
"version": "1.2.0",
|
"version": "1.2.0",
|
||||||
"resolved": "https://registry.npmmirror.com/@redis/bloom/-/bloom-1.2.0.tgz",
|
"resolved": "https://registry.npmmirror.com/@redis/bloom/-/bloom-1.2.0.tgz",
|
||||||
"integrity": "sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg==",
|
"integrity": "sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg=="
|
||||||
"requires": {}
|
|
||||||
},
|
},
|
||||||
"@redis/client": {
|
"@redis/client": {
|
||||||
"version": "1.5.6",
|
"version": "1.5.6",
|
||||||
|
@ -631,26 +145,27 @@
|
||||||
"@redis/graph": {
|
"@redis/graph": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
"resolved": "https://registry.npmmirror.com/@redis/graph/-/graph-1.1.0.tgz",
|
"resolved": "https://registry.npmmirror.com/@redis/graph/-/graph-1.1.0.tgz",
|
||||||
"integrity": "sha512-16yZWngxyXPd+MJxeSr0dqh2AIOi8j9yXKcKCwVaKDbH3HTuETpDVPcLujhFYVPtYrngSco31BUcSa9TH31Gqg==",
|
"integrity": "sha512-16yZWngxyXPd+MJxeSr0dqh2AIOi8j9yXKcKCwVaKDbH3HTuETpDVPcLujhFYVPtYrngSco31BUcSa9TH31Gqg=="
|
||||||
"requires": {}
|
|
||||||
},
|
},
|
||||||
"@redis/json": {
|
"@redis/json": {
|
||||||
"version": "1.0.4",
|
"version": "1.0.4",
|
||||||
"resolved": "https://registry.npmmirror.com/@redis/json/-/json-1.0.4.tgz",
|
"resolved": "https://registry.npmmirror.com/@redis/json/-/json-1.0.4.tgz",
|
||||||
"integrity": "sha512-LUZE2Gdrhg0Rx7AN+cZkb1e6HjoSKaeeW8rYnt89Tly13GBI5eP4CwDVr+MY8BAYfCg4/N15OUrtLoona9uSgw==",
|
"integrity": "sha512-LUZE2Gdrhg0Rx7AN+cZkb1e6HjoSKaeeW8rYnt89Tly13GBI5eP4CwDVr+MY8BAYfCg4/N15OUrtLoona9uSgw=="
|
||||||
"requires": {}
|
|
||||||
},
|
},
|
||||||
"@redis/search": {
|
"@redis/search": {
|
||||||
"version": "1.1.2",
|
"version": "1.1.2",
|
||||||
"resolved": "https://registry.npmmirror.com/@redis/search/-/search-1.1.2.tgz",
|
"resolved": "https://registry.npmmirror.com/@redis/search/-/search-1.1.2.tgz",
|
||||||
"integrity": "sha512-/cMfstG/fOh/SsE+4/BQGeuH/JJloeWuH+qJzM8dbxuWvdWibWAOAHHCZTMPhV3xIlH4/cUEIA8OV5QnYpaVoA==",
|
"integrity": "sha512-/cMfstG/fOh/SsE+4/BQGeuH/JJloeWuH+qJzM8dbxuWvdWibWAOAHHCZTMPhV3xIlH4/cUEIA8OV5QnYpaVoA=="
|
||||||
"requires": {}
|
|
||||||
},
|
},
|
||||||
"@redis/time-series": {
|
"@redis/time-series": {
|
||||||
"version": "1.0.4",
|
"version": "1.0.4",
|
||||||
"resolved": "https://registry.npmmirror.com/@redis/time-series/-/time-series-1.0.4.tgz",
|
"resolved": "https://registry.npmmirror.com/@redis/time-series/-/time-series-1.0.4.tgz",
|
||||||
"integrity": "sha512-ThUIgo2U/g7cCuZavucQTQzA9g9JbDDY2f64u3AbAoz/8vE2lt2U37LamDUVChhaDA3IRT9R6VvJwqnUfTJzng==",
|
"integrity": "sha512-ThUIgo2U/g7cCuZavucQTQzA9g9JbDDY2f64u3AbAoz/8vE2lt2U37LamDUVChhaDA3IRT9R6VvJwqnUfTJzng=="
|
||||||
"requires": {}
|
},
|
||||||
|
"@vercel/ncc": {
|
||||||
|
"version": "0.36.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.36.1.tgz",
|
||||||
|
"integrity": "sha512-S4cL7Taa9yb5qbv+6wLgiKVZ03Qfkc4jGRuiUQMQ8HGBD5pcNRnHeYM33zBvJE4/zJGjJJ8GScB+WmTsn9mORw=="
|
||||||
},
|
},
|
||||||
"agent-base": {
|
"agent-base": {
|
||||||
"version": "6.0.2",
|
"version": "6.0.2",
|
||||||
|
|
|
@ -3,6 +3,9 @@
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"description": "A Gitea Action that uses OPENAI to review code",
|
"description": "A Gitea Action that uses OPENAI to review code",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"prepare" : "ncc build index.js -o dist --source-map --license licenses.txt"
|
||||||
|
},
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"gitea",
|
"gitea",
|
||||||
"action",
|
"action",
|
||||||
|
@ -13,6 +16,7 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/core": "^1.10.0",
|
"@actions/core": "^1.10.0",
|
||||||
"@actions/github": "^5.1.1",
|
"@actions/github": "^5.1.1",
|
||||||
|
"@vercel/ncc": "^0.36.1",
|
||||||
"axios": "^1.3.4",
|
"axios": "^1.3.4",
|
||||||
"https-proxy-agent": "^5.0.1",
|
"https-proxy-agent": "^5.0.1",
|
||||||
"language-detect": "1.1.0"
|
"language-detect": "1.1.0"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue