From 6774f1c8b6e018a382f0585a92e5cd0c1849fd5d Mon Sep 17 00:00:00 2001 From: JDucellier Date: Thu, 20 Jul 2023 11:50:32 +0200 Subject: [PATCH] feat(B): add blacklist extensions files --- .github/workflows/aireview.yaml | 5 +++-- README.md | 39 ++++++++++++++++++--------------- action.yml | 23 ++++++++++--------- index.js | 17 ++++++++++---- 4 files changed, 50 insertions(+), 34 deletions(-) diff --git a/.github/workflows/aireview.yaml b/.github/workflows/aireview.yaml index 292003c..79e84c8 100644 --- a/.github/workflows/aireview.yaml +++ b/.github/workflows/aireview.yaml @@ -1,6 +1,6 @@ name: PR review -on: +on: pull_request: types: [opened, synchronize, reopened, ready_for_review] @@ -17,5 +17,6 @@ jobs: owner: ${{ github.repository_owner }} repo: ${{ github.event.repository.name }} pr_number: ${{ github.event.number }} - #file_extensions: ".py,.js,.html" # for example + #file_extensions: ".py,.js,.html" # for example whitelist #exclude_paths: "test/,docs/" # for example + #exclude_file_extensions: ".md" # for example blacklist diff --git a/README.md b/README.md index 4ef3d97..795eb63 100644 --- a/README.md +++ b/README.md @@ -12,19 +12,21 @@ Perform code review using OpenAI ChatGPT to analyze and provide feedback on your ## Inputs -***token*** - Required. The GitHub token. This token is used to authenticate and access your GitHub repository. +**_token_** - Required. The GitHub token. This token is used to authenticate and access your GitHub repository. -***openai_api_key*** - Required. The OpenAI API key. This key is needed to access OpenAI's ChatGPT API for code review. +**_openai_api_key_** - Required. The OpenAI API key. This key is needed to access OpenAI's ChatGPT API for code review. -***owner*** - Required. The repository owner's username. +**_owner_** - Required. The repository owner's username. -***repo*** - Required. The name of the repository. +**_repo_** - Required. The name of the repository. -***pr_number*** - Required. The pull request number to review. +**_pr_number_** - Required. The pull request number to review. -***file_extensions*** - Optional. A comma-separated list of file extensions to review (e.g., ".py,.js,.html"). If not provided, the action will review all file types. +**_file_extensions_** - Optional. A comma-separated list of file extensions to review (e.g., ".py,.js,.html"). If not provided, the action will review all file types. Do not use with `exclude-file-extensions` -***exclude_paths*** - Optional. A comma-separated list of paths to exclude from the review (e.g., "test/,docs/"). If not provided, the action will review all paths. +**_exclude_paths_** - Optional. A comma-separated list of paths to exclude from the review (e.g., "test/,docs/"). If not provided, the action will review all paths. + +**_exclude_file_extensions_** - Optional. A comma-separated list of file extensions to not review (e.g., ".py,.js,.html"). If not provided, the action will review all file types. Do not use with `file-extensions` ## Usage @@ -42,18 +44,19 @@ jobs: runs-on: ubuntu-latest steps: - - name: AI Code Review - uses: xonlly/ai-code-review@v0.2.2 - with: - token: ${{ secrets.GITHUB_TOKEN }} # or your token with access to PRs, read for files and write for comments - openai_api_key: ${{ secrets.OPENAI_API_KEY }} # You should have access to gpt-4-0613 - owner: ${{ github.repository_owner }} - repo: ${{ github.event.repository.name }} - pr_number: ${{ github.event.number }} - #file_extensions: ".py,.js,.html" # for example - #exclude_paths: "test/,docs/" # for example + - name: AI Code Review + uses: xonlly/ai-code-review@v0.2.2 + with: + token: ${{ secrets.GITHUB_TOKEN }} # or your token with access to PRs, read for files and write for comments + openai_api_key: ${{ secrets.OPENAI_API_KEY }} # You should have access to gpt-4-0613 + owner: ${{ github.repository_owner }} + repo: ${{ github.event.repository.name }} + pr_number: ${{ github.event.number }} + #file_extensions: ".py,.js,.html" # for example + #exclude_paths: "test/,docs/" # for example + #exclude_file_extensions: ".md" # for example blacklist ``` This action will run on every opened or updated pull request, and it will review only the specified file types and exclude the specified paths. -PS ***Written with GPT 3.5 turbo*** +PS **_Written with GPT 3.5 turbo_** diff --git a/action.yml b/action.yml index 8f0a2bc..5b2d50f 100644 --- a/action.yml +++ b/action.yml @@ -1,21 +1,21 @@ -name: 'AI Code Review' -description: 'Perform code review using OpenAI ChatGPT' +name: "AI Code Review" +description: "Perform code review using OpenAI ChatGPT" inputs: token: - description: 'GitHub token' + description: "GitHub token" required: true openai_api_key: - description: 'OpenAI API key' + description: "OpenAI API key" required: true owner: - description: 'Repository owner' + description: "Repository owner" required: true repo: - description: 'Repository name' + description: "Repository name" required: true pr_number: - description: 'Pull request number' + description: "Pull request number" required: true file_extensions: description: 'File extensions to review (comma-separated, e.g., ".py,.js,.html")' @@ -23,8 +23,11 @@ inputs: exclude_paths: description: 'Paths to exclude from review (comma-separated, e.g., "test/,docs/")' required: false + exclude_file_extensions: + description: 'File extensions to exclude from review (comma-separated, e.g., ".py,.js,.html")' + required: false runs: - using: 'node16' - pre: 'setup.js' - main: 'index.js' + using: "node16" + pre: "setup.js" + main: "index.js" diff --git a/index.js b/index.js index f4e6723..92e0c95 100644 --- a/index.js +++ b/index.js @@ -2,7 +2,7 @@ const core = require("@actions/core"); const GitHubAPI = require("./githubapi"); const OpenAIAPI = require("./openaiapi"); -const isFileToReview = (filename, fileExtensions, excludePaths) => { +const isFileToReview = (filename, fileExtensions, excludePaths, excludeFileExtensions) => { if (fileExtensions) { const extensions = fileExtensions.split(",").map((ext) => ext.trim()); if (!extensions.some((ext) => filename.endsWith(ext))) { @@ -10,6 +10,13 @@ const isFileToReview = (filename, fileExtensions, excludePaths) => { } } + if (excludeFileExtensions) { + const extensions = excludeFileExtensions.split(",").map((ext) => ext.trim()); + if (extensions.some((ext) => filename.endsWith(ext))) { + return false; + } + } + if (excludePaths) { const paths = excludePaths.split(",").map((path) => path.trim()); if (paths.some((path) => filename.startsWith(path))) { @@ -20,9 +27,9 @@ const isFileToReview = (filename, fileExtensions, excludePaths) => { return true; } -const getFilteredChangedFiles = (changedFiles, fileExtensions, excludePaths) => { +const getFilteredChangedFiles = (changedFiles, fileExtensions, excludePaths, excludeFileExtensions) => { let filteredFiles = changedFiles; - return filteredFiles.filter((file) => isFileToReview(file.filename, fileExtensions, excludePaths)); + return filteredFiles.filter((file) => isFileToReview(file.filename, fileExtensions, excludePaths, excludeFileExtensions)); }; const getApproxMaxSymbols = () => { @@ -84,10 +91,12 @@ const main = async () => { const changedFiles = await githubAPI.listFiles(owner, repo, pullNumber); const fileExtensions = core.getInput("file_extensions", { required: false }); const excludePaths = core.getInput("exclude_paths", { required: false }); + const excludeFileExtensions = core.getInput("exclude_file_extensions", { required: false }); const filteredChangedFiles = getFilteredChangedFiles( changedFiles, fileExtensions, - excludePaths + excludePaths, + excludeFileExtensions ); const allInOneSucess = await processAllInOneStrategy(filteredChangedFiles, openaiAPI, githubAPI, owner, repo, pullNumber);