mirror of
https://github.com/freeedcom/ai-codereviewer.git
synced 2025-04-20 09:36:47 +00:00
Added the include
pattern matching feature to the gh action
This commit is contained in:
parent
89a44f2d65
commit
49d90aa697
9 changed files with 73 additions and 22 deletions
|
@ -9,5 +9,10 @@
|
||||||
// "ghcr.io/guiyomh/features/just:0": {},
|
// "ghcr.io/guiyomh/features/just:0": {},
|
||||||
// "ghcr.io/jungaretti/features/ripgrep:1": {},
|
// "ghcr.io/jungaretti/features/ripgrep:1": {},
|
||||||
// "ghcr.io/lukewiwa/features/shellcheck:0": {},
|
// "ghcr.io/lukewiwa/features/shellcheck:0": {},
|
||||||
|
},
|
||||||
|
"customizations": {
|
||||||
|
"vscode": {
|
||||||
|
"extensions": ["yzhang.markdown-all-in-one"]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
5
.github/workflows/code_review.yml
vendored
5
.github/workflows/code_review.yml
vendored
|
@ -12,11 +12,12 @@ jobs:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
- name: Code Review
|
- name: Code Review
|
||||||
uses: cds-snc/cds-ai-codereviewer@main
|
uses: cds-snc/cds-ai-codereviewer@feature/include-pattern
|
||||||
with:
|
with:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
|
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
|
||||||
OPENAI_API_MODEL: ${{ vars.OPENAI_API_MODEL }}
|
OPENAI_API_MODEL: ${{ vars.OPENAI_API_MODEL }}
|
||||||
OPENAI_API_VERSION: ${{ vars.OPENAI_API_VERSION }}
|
OPENAI_API_VERSION: ${{ vars.OPENAI_API_VERSION }}
|
||||||
OPENAI_BASE_URL: ${{ vars.OPENAI_BASE_URL }}
|
OPENAI_BASE_URL: ${{ vars.OPENAI_BASE_URL }}
|
||||||
exclude: "yarn.lock,dist/**"
|
exclude: "*lock*,dist/**,**/*.js,**/*.js.map"
|
||||||
|
include: "**/*.ts,**/*.yml"
|
||||||
|
|
11
README.md
11
README.md
|
@ -16,10 +16,10 @@ review process.
|
||||||
1. To use this GitHub Action, you need an OpenAI API key. If you don't have one, sign up for an API key
|
1. To use this GitHub Action, you need an OpenAI API key. If you don't have one, sign up for an API key
|
||||||
at [OpenAI](https://beta.openai.com/signup).
|
at [OpenAI](https://beta.openai.com/signup).
|
||||||
|
|
||||||
2. Add the OpenAI API key as a GitHub Secret in your repository with the name `OPENAI_API_KEY`. You can find more
|
1. Add the OpenAI API key as a GitHub Secret in your repository with the name `OPENAI_API_KEY`. You can find more
|
||||||
information about GitHub Secrets [here](https://docs.github.com/en/actions/reference/encrypted-secrets).
|
information about GitHub Secrets [here](https://docs.github.com/en/actions/reference/encrypted-secrets).
|
||||||
|
|
||||||
3. Create a `.github/workflows/main.yml` file in your repository and add the following content:
|
1. Create a `.github/workflows/main.yml` file in your repository and add the following content:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
name: CDS AI Code Reviewer
|
name: CDS AI Code Reviewer
|
||||||
|
@ -44,11 +44,14 @@ jobs:
|
||||||
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
|
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
|
||||||
OPENAI_API_MODEL: "gpt-4" # Optional: defaults to "gpt-4"
|
OPENAI_API_MODEL: "gpt-4" # Optional: defaults to "gpt-4"
|
||||||
exclude: "**/*.json, **/*.md" # Optional: exclude patterns separated by commas
|
exclude: "**/*.json, **/*.md" # Optional: exclude patterns separated by commas
|
||||||
|
include: "**/*.ts" # Optional: include patterns separated by commas
|
||||||
```
|
```
|
||||||
|
|
||||||
4. Customize the `exclude` input if you want to ignore certain file patterns from being reviewed.
|
1. Customize the `exclude` input if you want to ignore certain file patterns from being reviewed.
|
||||||
|
|
||||||
5. Commit the changes to your repository, and CDS AI Code Reviewer will start working on your future pull requests.
|
1. Customize the `include` input if you want to add only certain file patterns to be reviewed. Any file matching the include and which also matches the `exclude` will favor the latter: `exclude` > `include`.
|
||||||
|
|
||||||
|
1. Commit the changes to your repository, and CDS AI Code Reviewer will start working on your future pull requests.
|
||||||
|
|
||||||
## How It Works
|
## How It Works
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,11 @@ inputs:
|
||||||
description: "Base URL to the OpenAI API model (OpenAI or Azure)."
|
description: "Base URL to the OpenAI API model (OpenAI or Azure)."
|
||||||
required: true
|
required: true
|
||||||
exclude:
|
exclude:
|
||||||
description: "Glob patterns to exclude files from the diff analysis"
|
description: "Glob patterns to exclude files from the diff analysis. This has precedence over the `include` matches."
|
||||||
|
required: false
|
||||||
|
default: ""
|
||||||
|
include:
|
||||||
|
description: "Glob patterns to only include certain files from the diff analysis."
|
||||||
required: false
|
required: false
|
||||||
default: ""
|
default: ""
|
||||||
runs:
|
runs:
|
||||||
|
|
|
@ -22,4 +22,5 @@ jobs:
|
||||||
OPENAI_API_MODEL: ${{ vars.OPENAI_API_MODEL }}
|
OPENAI_API_MODEL: ${{ vars.OPENAI_API_MODEL }}
|
||||||
OPENAI_API_VERSION: ${{ vars.OPENAI_API_VERSION }}
|
OPENAI_API_VERSION: ${{ vars.OPENAI_API_VERSION }}
|
||||||
OPENAI_BASE_URL: ${{ vars.OPENAI_BASE_URL }}
|
OPENAI_BASE_URL: ${{ vars.OPENAI_BASE_URL }}
|
||||||
exclude: "yarn.lock,dist/**"
|
exclude: "*lock*,dist/**,**/*.js,**/*.js.map"
|
||||||
|
include: "**/*.ts,**/*.yml"
|
||||||
|
|
|
@ -17,7 +17,11 @@ inputs:
|
||||||
description: "Base URL to the OpenAI API model (OpenAI or Azure)."
|
description: "Base URL to the OpenAI API model (OpenAI or Azure)."
|
||||||
required: true
|
required: true
|
||||||
exclude:
|
exclude:
|
||||||
description: "Glob patterns to exclude files from the diff analysis"
|
description: "Glob patterns to exclude files from the diff analysis. This has precedence over the `include` matches."
|
||||||
|
required: false
|
||||||
|
default: ""
|
||||||
|
include:
|
||||||
|
description: "Glob patterns to only include certain files from the diff analysis."
|
||||||
required: false
|
required: false
|
||||||
default: ""
|
default: ""
|
||||||
runs:
|
runs:
|
||||||
|
|
23
dist/index.js
vendored
23
dist/index.js
vendored
|
@ -331,15 +331,34 @@ ${chunk.changes
|
||||||
const excludePatterns = core
|
const excludePatterns = core
|
||||||
.getInput("exclude")
|
.getInput("exclude")
|
||||||
.split(",")
|
.split(",")
|
||||||
.map((s) => s.trim());
|
.map((s) => s.trim())
|
||||||
|
.filter((s) => s.length > 0); // Filter out empty strings;
|
||||||
|
const includePatterns = core
|
||||||
|
.getInput("include")
|
||||||
|
.split(",")
|
||||||
|
.map((s) => s.trim())
|
||||||
|
.filter((s) => s.length > 0); // Filter out empty strings;
|
||||||
const filteredDiff = parsedDiff.filter((file) => {
|
const filteredDiff = parsedDiff.filter((file) => {
|
||||||
return !excludePatterns.some((pattern) => {
|
const excluded =
|
||||||
|
excludePatterns.length > 0 &&
|
||||||
|
excludePatterns.some((pattern) => {
|
||||||
var _a;
|
var _a;
|
||||||
return (0, minimatch_1.default)(
|
return (0, minimatch_1.default)(
|
||||||
(_a = file.to) !== null && _a !== void 0 ? _a : "",
|
(_a = file.to) !== null && _a !== void 0 ? _a : "",
|
||||||
pattern
|
pattern
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
const included =
|
||||||
|
includePatterns.length === 0 ||
|
||||||
|
includePatterns.some((pattern) => {
|
||||||
|
var _a;
|
||||||
|
return (0, minimatch_1.default)(
|
||||||
|
(_a = file.to) !== null && _a !== void 0 ? _a : "",
|
||||||
|
pattern
|
||||||
|
);
|
||||||
|
});
|
||||||
|
// Exluded patterns take precedence over included patterns.
|
||||||
|
return !excluded && included;
|
||||||
});
|
});
|
||||||
const comments = yield analyzeCode(filteredDiff, prDetails);
|
const comments = yield analyzeCode(filteredDiff, prDetails);
|
||||||
if (comments.length > 0) {
|
if (comments.length > 0) {
|
||||||
|
|
2
dist/index.js.map
vendored
2
dist/index.js.map
vendored
File diff suppressed because one or more lines are too long
22
src/main.ts
22
src/main.ts
|
@ -247,12 +247,26 @@ async function main() {
|
||||||
const excludePatterns = core
|
const excludePatterns = core
|
||||||
.getInput("exclude")
|
.getInput("exclude")
|
||||||
.split(",")
|
.split(",")
|
||||||
.map((s) => s.trim());
|
.map((s) => s.trim())
|
||||||
|
.filter((s) => s.length > 0); // Filter out empty strings;
|
||||||
|
|
||||||
|
const includePatterns = core
|
||||||
|
.getInput("include")
|
||||||
|
.split(",")
|
||||||
|
.map((s) => s.trim())
|
||||||
|
.filter((s) => s.length > 0); // Filter out empty strings;
|
||||||
|
|
||||||
const filteredDiff = parsedDiff.filter((file) => {
|
const filteredDiff = parsedDiff.filter((file) => {
|
||||||
return !excludePatterns.some((pattern) =>
|
const excluded: boolean =
|
||||||
minimatch(file.to ?? "", pattern)
|
excludePatterns.length > 0 &&
|
||||||
);
|
excludePatterns.some((pattern) => minimatch(file.to ?? "", pattern));
|
||||||
|
|
||||||
|
const included: boolean =
|
||||||
|
includePatterns.length === 0 ||
|
||||||
|
includePatterns.some((pattern) => minimatch(file.to ?? "", pattern));
|
||||||
|
|
||||||
|
// Exluded patterns take precedence over included patterns.
|
||||||
|
return !excluded && included;
|
||||||
});
|
});
|
||||||
|
|
||||||
const comments = await analyzeCode(filteredDiff, prDetails);
|
const comments = await analyzeCode(filteredDiff, prDetails);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue