From 1d6e0b5b3b3918832129480c20bc4cf57d5f1944 Mon Sep 17 00:00:00 2001
From: petrisorcoderabbit
<155847819+petrisorcoderabbit@users.noreply.github.com>
Date: Thu, 3 Jul 2025 17:21:37 +0300
Subject: [PATCH 01/89] Update Bitbucket docs with latest api token changes
(#426)
---
docs/platforms/bitbucket-cloud.md | 110 +++++++++++++++---------------
1 file changed, 56 insertions(+), 54 deletions(-)
diff --git a/docs/platforms/bitbucket-cloud.md b/docs/platforms/bitbucket-cloud.md
index 286321d5..385d46ed 100644
--- a/docs/platforms/bitbucket-cloud.md
+++ b/docs/platforms/bitbucket-cloud.md
@@ -13,90 +13,90 @@ CodeRabbit integrates with Bitbucket Cloud to enhance code review and collaborat
This guide will assist you in effectively integrating CodeRabbit with Bitbucket Cloud.
-## Configure App Password
+## Configure API Token
-To enable CodeRabbit to interact with your Bitbucket repositories, an app password is required. This token grants the necessary permissions for interacting with the Merge Requests and Discussions APIs.
+To enable CodeRabbit to interact with your Bitbucket repositories, an API token is required. This token grants the
+necessary permissions for interacting with the Bitbucket merge request and discussion APIs.
1. Create a new Bitbucket account specifically for CodeRabbit and treat it as a service account.
2. Name the account "CodeRabbit".
-3. If your Bitbucket workspace requires two-step verification, then you must also enable two-step verification on this new account.
-4. Generate an App Password to enable seamless integration between CodeRabbit and your Bitbucket repositories.
+3. If your Bitbucket workspace requires two-step verification, then you must also enable two-step verification on this
+ new account.
+4. Generate an API Token to enable seamless integration between CodeRabbit and your Bitbucket repositories.
-We recommend creating a new user as a service account, associating this user to the workspace you'd like to install CodeRabbit on, and providing CodeRabbit with the app password to allow access. During the installation process, CodeRabbit will automatically configure the required webhook for seamless integration.
-
-
-

-
+We recommend creating a new user as a service account, associating this user to the workspace you'd like to install
+CodeRabbit on, and providing CodeRabbit with the API token to allow access. During the installation process, CodeRabbit
+will automatically configure the required webhook for seamless integration.
:::note
-If you wish to change the review user, you must provide the app password for the new user who will post reviews and comments. However, this requires manually removing the previous user from the projects and associated webhooks. Once this is done, you will need to reinstall the CodeRabbit app for each project.
+If you wish to change the review user, you must provide the API token for the new user who will post reviews and
+comments. However, this requires manually removing the previous user from the projects and associated webhooks. Once
+this is done, you will need to reinstall the CodeRabbit app for each project.
:::
### Recommendations
-- **Create a dedicated user for CodeRabbit** - This ensures the user is exclusively for CodeRabbit, allowing better access control.
+- **Create a dedicated user for CodeRabbit** - This ensures the user is exclusively for CodeRabbit, allowing better
+ access control.
- **Use "CodeRabbit" as the username** - This makes the user easily recognizable for future reference.
- **Use a dedicated email address** - This helps in easy identification and management.
-- **Use the CodeRabbit logo as the profile picture** - This further ensures easy recognition. You can download our logo from [here](/img/integrations/logo.svg "download").
-- **Developer Access** Ensure the service account user has developer access to the projects that you wish to install CodeRabbit on.
+- **Use the CodeRabbit logo as the profile picture** - This further ensures easy recognition. You can download our logo
+ from [here](/img/integrations/logo.svg "download").
+- **Developer Access** Ensure the service account user has developer access to the projects that you wish to install
+ CodeRabbit on.
#### Key Points to Remember
-- Code reviews will be attributed to the owner of the app password.
+- Code reviews will be attributed to the owner of the API token.
-#### Generating an App password
+#### Generating an API token
-Bitbucket provides an option to generate an app password for a new user. Follow these steps to generate the password:
+Bitbucket provides an option to generate an API token for a new user. Follow these steps to generate the token:
-1. Log in using the user designated for CodeRabbit reviews. This user serves as a service account for managing reviews and related activities.
-2. Go to "Personal Bitbucket Settings".
-3. Choose **App passwords**.
-4. Click **Create app password**.
-5. Enter a label easily recognizable for this app passwords usage.
+1. Log in using the user designated for CodeRabbit reviews. This user serves as a service account for managing reviews
+ and related activities.
+2. Go to [API Tokens](https://id.atlassian.com/manage-profile/security/api-tokens).
+3. Click **Create API token with scopes**.
+4. Enter a name easily recognizable for this API token usage and an expiration date based on your plan of using the
+ product.
+5. On next step select **Bitbucket**
6. Ensure the following scopes are selected:
- 1. Account - Read
- 2. Issues - Write
- 3. Workspace membership - Read
- 4. Projects - Write
- 5. Repositories - Write
- 6. Pull requests - Write
- 7. Webhooks - Read and write
- 8. Pipelines - Read
- 9. Runners - Read
+ - read:account
+ - read:user:bitbucket
+ - write:issue:bitbucket
+ - read:issue:bitbucket
+ - read:workspace:bitbucket
+ - admin:project:bitbucket
+ - write:webhook:bitbucket
+ - read:webhook:bitbucket
+ - read:pipeline:bitbucket
+ - read:runner:bitbucket
+ - read:repository:bitbucket
+ - write:repository:bitbucket
+ - read:pullrequest:bitbucket
+ - write:pullrequest:bitbucket
7. Click **Create**
-8. Note down the app password as it will only be displayed once.
-
-
-

-
-
-

-
+8. Note down the API token as it will only be displayed once.
-### Where to Provide CodeRabbit the App Password
+### Where to Provide CodeRabbit the API Token
-By default, if no app password is provided, CodeRabbit will prompt you to provide one during the installation process. However, if you wish to provide the token beforehand, you can do so by navigating to the **Organization Settings** tab, and selecting the **Bitbucket User** tab on the sidebar. Once entering the app password, the password will be validated and saved for future use.
+By default, if no API token is provided, CodeRabbit will prompt you to provide one during the installation process.
+However, if you wish to provide the token beforehand, you can do so by navigating to the **Organization Settings** tab,
+and selecting the **Bitbucket User** tab on the sidebar. Once entering the API token, the token will be validated and
+saved for future use.
-You can confirm the correct user is being selected by verifying the user ID shown on the UI with the user ID of the service account user you created.
+You can confirm the correct user is being selected by verifying the user ID shown on the UI with the user ID of the
+service account user you created.
---
### Installing CodeRabbit into your Bitbucket Repositories
1. Go to the [Repositories page](https://app.coderabbit.ai/settings/repositories) in the CodeRabbit app.
-2. Select the checkbox next to the repositories where you want to install CodeRabbit. To install it on all repositories at once, select the checkbox at the top.
+2. Select the checkbox next to the repositories where you want to install CodeRabbit. To install it on all repositories
+ at once, select the checkbox at the top.
3. Select **Install Repositories**.
@@ -121,10 +121,12 @@ The webhook `https://coderabbit.ai/bitbucketHandler` will now be installed for t
:::note
-If you are experiencing issues with the webhook, such as CodeRabbit not being able to access the repository, or not reviewing pull requests, you can manually delete the webhook to the repository.
+If you are experiencing issues with the webhook, such as CodeRabbit not being able to access the repository, or not
+reviewing pull requests, you can manually delete the webhook to the repository.
Then refresh the repository page in the CodeRabbit app and you can reinstall the webhook.
-If you cannot install the webhook please check that your Bitbucket user has the necessary permissions to install the webhook and the App Password is properly configured.
+If you cannot install the webhook please check that your Bitbucket user has the necessary permissions to install the
+webhook and the API Token is properly configured.
:::
From b3ffa58256a7d9472d8f82d97cfcba6a360a708d Mon Sep 17 00:00:00 2001
From: alexcoderabbitai
Date: Thu, 3 Jul 2025 12:16:34 -0400
Subject: [PATCH 02/89] Feat/flake8 (#431)
* docs on flake8
* remove html custom config its not supported
---
docs/changelog.md | 10 +++++++++
docs/reference/yaml-template.md | 1 -
docs/tools/flake8.md | 36 +++++++++++++++++++++++++++++++++
docs/tools/list.md | 3 ++-
4 files changed, 48 insertions(+), 2 deletions(-)
create mode 100644 docs/tools/flake8.md
diff --git a/docs/changelog.md b/docs/changelog.md
index 402e75e7..e9d04422 100644
--- a/docs/changelog.md
+++ b/docs/changelog.md
@@ -5,6 +5,16 @@ description: The latest updates and changes to CodeRabbit.
sidebar_position: 13
---
+## July 3, 2025
+
+### Enhanced Python Static Analysis: Flake8 Support
+
+We're excited to announce enhanced Python static analysis capabilities with [Flake8](https://flake8.pycqa.org/) support!
+
+[Flake8](https://flake8.pycqa.org/) is a Python linting utility that wraps PyFlakes, pycodestyle, and Mccabe to check your Python code for style and logical errors.
+
+See our [tools documentation](https://docs.coderabbit.ai/tools/) for more details.
+
## July 1, 2025
### Enhanced Code Guidelines Support
diff --git a/docs/reference/yaml-template.md b/docs/reference/yaml-template.md
index cb9e8473..6a670197 100644
--- a/docs/reference/yaml-template.md
+++ b/docs/reference/yaml-template.md
@@ -145,7 +145,6 @@ reviews:
enabled: true
htmlhint:
enabled: true
- config_file: ""
checkmake:
enabled: true
chat:
diff --git a/docs/tools/flake8.md b/docs/tools/flake8.md
new file mode 100644
index 00000000..b0a29761
--- /dev/null
+++ b/docs/tools/flake8.md
@@ -0,0 +1,36 @@
+---
+title: Flake8
+sidebar_label: Flake8
+description: CodeRabbit's guide to Flake8.
+---
+
+```mdx-code-block
+import ProPlanNotice from '@site/src/components/ProPlanNotice.mdx';
+
+
+```
+
+[Flake8](https://flake8.pycqa.org/) is a Python linting utility that wraps PyFlakes, pycodestyle, and Mccabe to check your Python code for style and logical errors.
+
+## Supported Files
+
+Flake8 will run on files with the following extensions:
+
+- `*.py`
+
+## Features
+
+Flake8 can detect many issues such as:
+
+- Style violations (PEP 8)
+- Logical errors and unused imports
+- Code complexity issues
+- Syntax errors
+- And many more
+
+## Links
+
+- [Flake8 Official Website](https://flake8.pycqa.org/)
+- [Flake8 GitHub Repository](https://github.com/pycqa/flake8)
+- [Flake8 Documentation](https://flake8.pycqa.org/en/latest/)
+- [Flake8 Configuration](https://flake8.pycqa.org/en/latest/user/configuration.html)
diff --git a/docs/tools/list.md b/docs/tools/list.md
index bfe5e5ce..b7a103b0 100644
--- a/docs/tools/list.md
+++ b/docs/tools/list.md
@@ -36,7 +36,7 @@ For an overview of how CodeRabbit uses these tools when generating code reviews,
| Plaintext | [LanguageTool][LanguageTool] | Grammar and Spell Checking |
| Java | [PMD][PMD] | Code Quality |
| Protobuf | [Buf][Buf] | Code Quality |
-| Python | [Ruff][Ruff], [Pylint][Pylint] | Code Quality |
+| Python | [Ruff][Ruff], [Pylint][Pylint], [Flake8][Flake8] | Code Quality |
| Regal | [Regal][Regal] | Code Quality |
| Ruby | [RuboCop][RuboCop], [Brakeman][Brakeman] | Code Quality, Code Security |
| Rust | [Clippy][Clippy] | Code Quality |
@@ -86,3 +86,4 @@ For an overview of how CodeRabbit uses these tools when generating code reviews,
[Checkmake]: /tools/checkmake.md
[PHPMD]: /tools/phpmd.md
[PHPCS]: /tools/phpcs.md
+[Flake8]: /tools/flake8.md
From 573d6dbad42ec76f89b1eaaa43097a152cfcd520 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Fri, 4 Jul 2025 22:54:35 +0000
Subject: [PATCH 03/89] Update schema.v2.json
---
static/schema/schema.v2.json | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/static/schema/schema.v2.json b/static/schema/schema.v2.json
index befdd2a7..ce76bb71 100644
--- a/static/schema/schema.v2.json
+++ b/static/schema/schema.v2.json
@@ -465,8 +465,8 @@
"type": "number",
"maximum": 900000,
"minimum": 0,
- "default": 90000,
- "description": "Time in milliseconds to wait for all GitHub Checks to conclude."
+ "default": 300000,
+ "description": "Time in milliseconds to wait for all GitHub Checks to conclude. Default is 5 minutes."
}
},
"additionalProperties": false,
From 22d5d6d7a7f4b8cfe80a8e228988a93130c7ab9b Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Fri, 4 Jul 2025 23:26:11 +0000
Subject: [PATCH 04/89] Update schema.v2.json
---
static/schema/schema.v2.json | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/static/schema/schema.v2.json b/static/schema/schema.v2.json
index ce76bb71..72ff7a27 100644
--- a/static/schema/schema.v2.json
+++ b/static/schema/schema.v2.json
@@ -465,8 +465,8 @@
"type": "number",
"maximum": 900000,
"minimum": 0,
- "default": 300000,
- "description": "Time in milliseconds to wait for all GitHub Checks to conclude. Default is 5 minutes."
+ "default": 90000,
+ "description": "Time in milliseconds to wait for all GitHub Checks to conclude. Default is 90 seconds."
}
},
"additionalProperties": false,
From 77a0bf7b1b124d7d3b446931d7015e685cf50424 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Fri, 4 Jul 2025 23:34:33 +0000
Subject: [PATCH 05/89] Update schema.v2.json
---
static/schema/schema.v2.json | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/static/schema/schema.v2.json b/static/schema/schema.v2.json
index 72ff7a27..8e5e848c 100644
--- a/static/schema/schema.v2.json
+++ b/static/schema/schema.v2.json
@@ -1065,7 +1065,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enabled | Enable CodeRabbit to enforce your organisation's coding standards during reviews."
+ "description": "Enabled | Enable CodeRabbit to enforce your organization's coding standards during reviews."
},
"filePatterns": {
"type": "array",
@@ -1078,7 +1078,7 @@
},
"additionalProperties": false,
"default": {},
- "description": "CodeRabbit will analyse and learn from your organisation's code guidelines, which you can mention in the file patterns section. These guidelines will then be used to conduct thorough code reviews."
+ "description": "CodeRabbit will analyse and learn from your organization's code guidelines, which you can mention in the file patterns section. These guidelines will then be used to conduct thorough code reviews."
},
"learnings": {
"type": "object",
From 40b99663962dea43bd6131262b3b48e864e1bf5e Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Sun, 6 Jul 2025 03:59:22 +0000
Subject: [PATCH 06/89] Update schema.v2.json
---
static/schema/schema.v2.json | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/static/schema/schema.v2.json b/static/schema/schema.v2.json
index 8e5e848c..befdd2a7 100644
--- a/static/schema/schema.v2.json
+++ b/static/schema/schema.v2.json
@@ -466,7 +466,7 @@
"maximum": 900000,
"minimum": 0,
"default": 90000,
- "description": "Time in milliseconds to wait for all GitHub Checks to conclude. Default is 90 seconds."
+ "description": "Time in milliseconds to wait for all GitHub Checks to conclude."
}
},
"additionalProperties": false,
@@ -1065,7 +1065,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enabled | Enable CodeRabbit to enforce your organization's coding standards during reviews."
+ "description": "Enabled | Enable CodeRabbit to enforce your organisation's coding standards during reviews."
},
"filePatterns": {
"type": "array",
@@ -1078,7 +1078,7 @@
},
"additionalProperties": false,
"default": {},
- "description": "CodeRabbit will analyse and learn from your organization's code guidelines, which you can mention in the file patterns section. These guidelines will then be used to conduct thorough code reviews."
+ "description": "CodeRabbit will analyse and learn from your organisation's code guidelines, which you can mention in the file patterns section. These guidelines will then be used to conduct thorough code reviews."
},
"learnings": {
"type": "object",
From 7b9f8c9355e6381b80a574937c3649cc15e0ade7 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Sun, 6 Jul 2025 17:07:37 +0000
Subject: [PATCH 07/89] Update schema.v2.json
---
static/schema/schema.v2.json | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/static/schema/schema.v2.json b/static/schema/schema.v2.json
index befdd2a7..4dcaeba6 100644
--- a/static/schema/schema.v2.json
+++ b/static/schema/schema.v2.json
@@ -466,7 +466,7 @@
"maximum": 900000,
"minimum": 0,
"default": 90000,
- "description": "Time in milliseconds to wait for all GitHub Checks to conclude."
+ "description": "Time in milliseconds to wait for all GitHub Checks to conclude. Default 90 seconds, max 15 minutes (900000ms)."
}
},
"additionalProperties": false,
@@ -1065,7 +1065,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enabled | Enable CodeRabbit to enforce your organisation's coding standards during reviews."
+ "description": "Enabled | Enable CodeRabbit to enforce your organization's coding standards during reviews."
},
"filePatterns": {
"type": "array",
@@ -1078,7 +1078,7 @@
},
"additionalProperties": false,
"default": {},
- "description": "CodeRabbit will analyse and learn from your organisation's code guidelines, which you can mention in the file patterns section. These guidelines will then be used to conduct thorough code reviews."
+ "description": "CodeRabbit will analyse and learn from your organization's code guidelines, which you can mention in the file patterns section. These guidelines will then be used to conduct thorough code reviews."
},
"learnings": {
"type": "object",
From 8186acea24b80e3e850c945e6a5c7442f5f45aab Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Sun, 6 Jul 2025 20:20:55 +0000
Subject: [PATCH 08/89] Update schema.v2.json
---
static/schema/schema.v2.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/static/schema/schema.v2.json b/static/schema/schema.v2.json
index 4dcaeba6..d222e834 100644
--- a/static/schema/schema.v2.json
+++ b/static/schema/schema.v2.json
@@ -885,7 +885,7 @@
"properties": {
"enabled": {
"type": "boolean",
- "default": true,
+ "default": false,
"description": "Enable Pylint | Pylint is a Python static code analysis tool. | v3.3.7"
}
},
From 45fabd540722612e026203f5cf6a3db38c40ffe9 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Mon, 7 Jul 2025 03:27:47 +0000
Subject: [PATCH 09/89] Update schema.v2.json
---
static/schema/schema.v2.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/static/schema/schema.v2.json b/static/schema/schema.v2.json
index d222e834..4dcaeba6 100644
--- a/static/schema/schema.v2.json
+++ b/static/schema/schema.v2.json
@@ -885,7 +885,7 @@
"properties": {
"enabled": {
"type": "boolean",
- "default": false,
+ "default": true,
"description": "Enable Pylint | Pylint is a Python static code analysis tool. | v3.3.7"
}
},
From 9edd8fc0d50af6164c85b8884a515bcb43810808 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Mon, 7 Jul 2025 08:08:48 +0000
Subject: [PATCH 10/89] Update schema.v2.json
---
static/schema/schema.v2.json | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/static/schema/schema.v2.json b/static/schema/schema.v2.json
index 4dcaeba6..befdd2a7 100644
--- a/static/schema/schema.v2.json
+++ b/static/schema/schema.v2.json
@@ -466,7 +466,7 @@
"maximum": 900000,
"minimum": 0,
"default": 90000,
- "description": "Time in milliseconds to wait for all GitHub Checks to conclude. Default 90 seconds, max 15 minutes (900000ms)."
+ "description": "Time in milliseconds to wait for all GitHub Checks to conclude."
}
},
"additionalProperties": false,
@@ -1065,7 +1065,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enabled | Enable CodeRabbit to enforce your organization's coding standards during reviews."
+ "description": "Enabled | Enable CodeRabbit to enforce your organisation's coding standards during reviews."
},
"filePatterns": {
"type": "array",
@@ -1078,7 +1078,7 @@
},
"additionalProperties": false,
"default": {},
- "description": "CodeRabbit will analyse and learn from your organization's code guidelines, which you can mention in the file patterns section. These guidelines will then be used to conduct thorough code reviews."
+ "description": "CodeRabbit will analyse and learn from your organisation's code guidelines, which you can mention in the file patterns section. These guidelines will then be used to conduct thorough code reviews."
},
"learnings": {
"type": "object",
From 38c8359950698af4d95f4b8c8f3d6c641def7dcf Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Mon, 7 Jul 2025 08:15:47 +0000
Subject: [PATCH 11/89] Update schema.v2.json
---
static/schema/schema.v2.json | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/static/schema/schema.v2.json b/static/schema/schema.v2.json
index befdd2a7..4dcaeba6 100644
--- a/static/schema/schema.v2.json
+++ b/static/schema/schema.v2.json
@@ -466,7 +466,7 @@
"maximum": 900000,
"minimum": 0,
"default": 90000,
- "description": "Time in milliseconds to wait for all GitHub Checks to conclude."
+ "description": "Time in milliseconds to wait for all GitHub Checks to conclude. Default 90 seconds, max 15 minutes (900000ms)."
}
},
"additionalProperties": false,
@@ -1065,7 +1065,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enabled | Enable CodeRabbit to enforce your organisation's coding standards during reviews."
+ "description": "Enabled | Enable CodeRabbit to enforce your organization's coding standards during reviews."
},
"filePatterns": {
"type": "array",
@@ -1078,7 +1078,7 @@
},
"additionalProperties": false,
"default": {},
- "description": "CodeRabbit will analyse and learn from your organisation's code guidelines, which you can mention in the file patterns section. These guidelines will then be used to conduct thorough code reviews."
+ "description": "CodeRabbit will analyse and learn from your organization's code guidelines, which you can mention in the file patterns section. These guidelines will then be used to conduct thorough code reviews."
},
"learnings": {
"type": "object",
From e1bc9192f9eeb3dd458e8f3a5215ce65a72674db Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Mon, 7 Jul 2025 10:24:04 +0000
Subject: [PATCH 12/89] Update schema.v2.json
---
static/schema/schema.v2.json | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/static/schema/schema.v2.json b/static/schema/schema.v2.json
index 4dcaeba6..befdd2a7 100644
--- a/static/schema/schema.v2.json
+++ b/static/schema/schema.v2.json
@@ -466,7 +466,7 @@
"maximum": 900000,
"minimum": 0,
"default": 90000,
- "description": "Time in milliseconds to wait for all GitHub Checks to conclude. Default 90 seconds, max 15 minutes (900000ms)."
+ "description": "Time in milliseconds to wait for all GitHub Checks to conclude."
}
},
"additionalProperties": false,
@@ -1065,7 +1065,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enabled | Enable CodeRabbit to enforce your organization's coding standards during reviews."
+ "description": "Enabled | Enable CodeRabbit to enforce your organisation's coding standards during reviews."
},
"filePatterns": {
"type": "array",
@@ -1078,7 +1078,7 @@
},
"additionalProperties": false,
"default": {},
- "description": "CodeRabbit will analyse and learn from your organization's code guidelines, which you can mention in the file patterns section. These guidelines will then be used to conduct thorough code reviews."
+ "description": "CodeRabbit will analyse and learn from your organisation's code guidelines, which you can mention in the file patterns section. These guidelines will then be used to conduct thorough code reviews."
},
"learnings": {
"type": "object",
From 37d65c5ab13ed709d09092742faa1273cbd5878d Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Mon, 7 Jul 2025 11:13:47 +0000
Subject: [PATCH 13/89] Update schema.v2.json
---
static/schema/schema.v2.json | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/static/schema/schema.v2.json b/static/schema/schema.v2.json
index befdd2a7..4dcaeba6 100644
--- a/static/schema/schema.v2.json
+++ b/static/schema/schema.v2.json
@@ -466,7 +466,7 @@
"maximum": 900000,
"minimum": 0,
"default": 90000,
- "description": "Time in milliseconds to wait for all GitHub Checks to conclude."
+ "description": "Time in milliseconds to wait for all GitHub Checks to conclude. Default 90 seconds, max 15 minutes (900000ms)."
}
},
"additionalProperties": false,
@@ -1065,7 +1065,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enabled | Enable CodeRabbit to enforce your organisation's coding standards during reviews."
+ "description": "Enabled | Enable CodeRabbit to enforce your organization's coding standards during reviews."
},
"filePatterns": {
"type": "array",
@@ -1078,7 +1078,7 @@
},
"additionalProperties": false,
"default": {},
- "description": "CodeRabbit will analyse and learn from your organisation's code guidelines, which you can mention in the file patterns section. These guidelines will then be used to conduct thorough code reviews."
+ "description": "CodeRabbit will analyse and learn from your organization's code guidelines, which you can mention in the file patterns section. These guidelines will then be used to conduct thorough code reviews."
},
"learnings": {
"type": "object",
From 4ea6613067f29539aef253eefa5947d4d6e4edb8 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Mon, 7 Jul 2025 15:29:21 +0000
Subject: [PATCH 14/89] Update schema.v2.json
---
static/schema/schema.v2.json | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/static/schema/schema.v2.json b/static/schema/schema.v2.json
index 4dcaeba6..befdd2a7 100644
--- a/static/schema/schema.v2.json
+++ b/static/schema/schema.v2.json
@@ -466,7 +466,7 @@
"maximum": 900000,
"minimum": 0,
"default": 90000,
- "description": "Time in milliseconds to wait for all GitHub Checks to conclude. Default 90 seconds, max 15 minutes (900000ms)."
+ "description": "Time in milliseconds to wait for all GitHub Checks to conclude."
}
},
"additionalProperties": false,
@@ -1065,7 +1065,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enabled | Enable CodeRabbit to enforce your organization's coding standards during reviews."
+ "description": "Enabled | Enable CodeRabbit to enforce your organisation's coding standards during reviews."
},
"filePatterns": {
"type": "array",
@@ -1078,7 +1078,7 @@
},
"additionalProperties": false,
"default": {},
- "description": "CodeRabbit will analyse and learn from your organization's code guidelines, which you can mention in the file patterns section. These guidelines will then be used to conduct thorough code reviews."
+ "description": "CodeRabbit will analyse and learn from your organisation's code guidelines, which you can mention in the file patterns section. These guidelines will then be used to conduct thorough code reviews."
},
"learnings": {
"type": "object",
From b3594ef76929ca1fde4d78f70c4d60b4d29d4c30 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Mon, 7 Jul 2025 15:59:08 +0000
Subject: [PATCH 15/89] Update schema.v2.json
---
static/schema/schema.v2.json | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/static/schema/schema.v2.json b/static/schema/schema.v2.json
index befdd2a7..4dcaeba6 100644
--- a/static/schema/schema.v2.json
+++ b/static/schema/schema.v2.json
@@ -466,7 +466,7 @@
"maximum": 900000,
"minimum": 0,
"default": 90000,
- "description": "Time in milliseconds to wait for all GitHub Checks to conclude."
+ "description": "Time in milliseconds to wait for all GitHub Checks to conclude. Default 90 seconds, max 15 minutes (900000ms)."
}
},
"additionalProperties": false,
@@ -1065,7 +1065,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enabled | Enable CodeRabbit to enforce your organisation's coding standards during reviews."
+ "description": "Enabled | Enable CodeRabbit to enforce your organization's coding standards during reviews."
},
"filePatterns": {
"type": "array",
@@ -1078,7 +1078,7 @@
},
"additionalProperties": false,
"default": {},
- "description": "CodeRabbit will analyse and learn from your organisation's code guidelines, which you can mention in the file patterns section. These guidelines will then be used to conduct thorough code reviews."
+ "description": "CodeRabbit will analyse and learn from your organization's code guidelines, which you can mention in the file patterns section. These guidelines will then be used to conduct thorough code reviews."
},
"learnings": {
"type": "object",
From 356776c5c3441c878b96fba4122138719daf056b Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Mon, 7 Jul 2025 16:17:05 +0000
Subject: [PATCH 16/89] Update schema.v2.json
---
static/schema/schema.v2.json | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/static/schema/schema.v2.json b/static/schema/schema.v2.json
index 4dcaeba6..befdd2a7 100644
--- a/static/schema/schema.v2.json
+++ b/static/schema/schema.v2.json
@@ -466,7 +466,7 @@
"maximum": 900000,
"minimum": 0,
"default": 90000,
- "description": "Time in milliseconds to wait for all GitHub Checks to conclude. Default 90 seconds, max 15 minutes (900000ms)."
+ "description": "Time in milliseconds to wait for all GitHub Checks to conclude."
}
},
"additionalProperties": false,
@@ -1065,7 +1065,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enabled | Enable CodeRabbit to enforce your organization's coding standards during reviews."
+ "description": "Enabled | Enable CodeRabbit to enforce your organisation's coding standards during reviews."
},
"filePatterns": {
"type": "array",
@@ -1078,7 +1078,7 @@
},
"additionalProperties": false,
"default": {},
- "description": "CodeRabbit will analyse and learn from your organization's code guidelines, which you can mention in the file patterns section. These guidelines will then be used to conduct thorough code reviews."
+ "description": "CodeRabbit will analyse and learn from your organisation's code guidelines, which you can mention in the file patterns section. These guidelines will then be used to conduct thorough code reviews."
},
"learnings": {
"type": "object",
From 5bc031e6b1a4df5eae56c7134e317ee93ddbb7ee Mon Sep 17 00:00:00 2001
From: Jason McIntosh
Date: Mon, 7 Jul 2025 15:57:20 -0400
Subject: [PATCH 17/89] Update issue templates
---
.github/ISSUE_TEMPLATE/bug_report.md | 14 ++++++++++++++
.github/ISSUE_TEMPLATE/feature-request.md | 18 ++++++++++++++++++
.../other-documentation-request.md | 10 ++++++++++
3 files changed, 42 insertions(+)
create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md
create mode 100644 .github/ISSUE_TEMPLATE/feature-request.md
create mode 100644 .github/ISSUE_TEMPLATE/other-documentation-request.md
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 00000000..58f41e06
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,14 @@
+---
+name: Bug report
+about: Report a flaw, inaccuracy, or omission in our documentation.
+title: ''
+labels: bug, needs triage
+assignees: jmacdotorg
+
+---
+
+**URL of the documentation page with this bug**:
+
+**A brief summary of the documentation bug**:
+
+(Optional) **Suggestions on how best we can address the bug**:
diff --git a/.github/ISSUE_TEMPLATE/feature-request.md b/.github/ISSUE_TEMPLATE/feature-request.md
new file mode 100644
index 00000000..788f4900
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature-request.md
@@ -0,0 +1,18 @@
+---
+name: Feature request
+about: Request documentation for a new or existing CodeRabbit feature.
+title: ''
+labels: enhancement, needs triage
+assignees: jmacdotorg
+
+---
+
+**The name of this feature**:
+
+**Expected launch date**:
+
+**Personnel (PM, TL, etc.)**:
+
+**Summary of this feature**, including a high-level description of the public documentation that it requires:
+
+**Links to relevant internal documentation:**
diff --git a/.github/ISSUE_TEMPLATE/other-documentation-request.md b/.github/ISSUE_TEMPLATE/other-documentation-request.md
new file mode 100644
index 00000000..1298a9f2
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/other-documentation-request.md
@@ -0,0 +1,10 @@
+---
+name: Other documentation request
+about: Request a documentation improvement other than new-feature coverage.
+title: ''
+labels: needs triage
+assignees: jmacdotorg
+
+---
+
+
From bf161a3c7d6c7799aeed84525aab7b1fcedf332e Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Tue, 8 Jul 2025 03:19:32 +0000
Subject: [PATCH 18/89] Update schema.v2.json
---
static/schema/schema.v2.json | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/static/schema/schema.v2.json b/static/schema/schema.v2.json
index befdd2a7..4dcaeba6 100644
--- a/static/schema/schema.v2.json
+++ b/static/schema/schema.v2.json
@@ -466,7 +466,7 @@
"maximum": 900000,
"minimum": 0,
"default": 90000,
- "description": "Time in milliseconds to wait for all GitHub Checks to conclude."
+ "description": "Time in milliseconds to wait for all GitHub Checks to conclude. Default 90 seconds, max 15 minutes (900000ms)."
}
},
"additionalProperties": false,
@@ -1065,7 +1065,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enabled | Enable CodeRabbit to enforce your organisation's coding standards during reviews."
+ "description": "Enabled | Enable CodeRabbit to enforce your organization's coding standards during reviews."
},
"filePatterns": {
"type": "array",
@@ -1078,7 +1078,7 @@
},
"additionalProperties": false,
"default": {},
- "description": "CodeRabbit will analyse and learn from your organisation's code guidelines, which you can mention in the file patterns section. These guidelines will then be used to conduct thorough code reviews."
+ "description": "CodeRabbit will analyse and learn from your organization's code guidelines, which you can mention in the file patterns section. These guidelines will then be used to conduct thorough code reviews."
},
"learnings": {
"type": "object",
From 4cab8222c0228cbe2e051197d0d79ae550da3ace Mon Sep 17 00:00:00 2001
From: Jason McIntosh
Date: Tue, 8 Jul 2025 14:42:17 -0400
Subject: [PATCH 19/89] Ran the new template files through `prettier` (#434)
---
.github/ISSUE_TEMPLATE/bug_report.md | 7 +++----
.github/ISSUE_TEMPLATE/feature-request.md | 11 +++++------
.github/ISSUE_TEMPLATE/other-documentation-request.md | 5 +----
3 files changed, 9 insertions(+), 14 deletions(-)
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index 58f41e06..32cf3bf1 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -1,14 +1,13 @@
---
name: Bug report
about: Report a flaw, inaccuracy, or omission in our documentation.
-title: ''
+title: ""
labels: bug, needs triage
assignees: jmacdotorg
-
---
-**URL of the documentation page with this bug**:
+**URL of the documentation page with this bug**:
-**A brief summary of the documentation bug**:
+**A brief summary of the documentation bug**:
(Optional) **Suggestions on how best we can address the bug**:
diff --git a/.github/ISSUE_TEMPLATE/feature-request.md b/.github/ISSUE_TEMPLATE/feature-request.md
index 788f4900..4dccde05 100644
--- a/.github/ISSUE_TEMPLATE/feature-request.md
+++ b/.github/ISSUE_TEMPLATE/feature-request.md
@@ -1,18 +1,17 @@
---
name: Feature request
about: Request documentation for a new or existing CodeRabbit feature.
-title: ''
+title: ""
labels: enhancement, needs triage
assignees: jmacdotorg
-
---
-**The name of this feature**:
+**The name of this feature**:
-**Expected launch date**:
+**Expected launch date**:
-**Personnel (PM, TL, etc.)**:
+**Personnel (PM, TL, etc.)**:
-**Summary of this feature**, including a high-level description of the public documentation that it requires:
+**Summary of this feature**, including a high-level description of the public documentation that it requires:
**Links to relevant internal documentation:**
diff --git a/.github/ISSUE_TEMPLATE/other-documentation-request.md b/.github/ISSUE_TEMPLATE/other-documentation-request.md
index 1298a9f2..b258a89b 100644
--- a/.github/ISSUE_TEMPLATE/other-documentation-request.md
+++ b/.github/ISSUE_TEMPLATE/other-documentation-request.md
@@ -1,10 +1,7 @@
---
name: Other documentation request
about: Request a documentation improvement other than new-feature coverage.
-title: ''
+title: ""
labels: needs triage
assignees: jmacdotorg
-
---
-
-
From c805e583d0742c5ded8a25213012c76a4e30be42 Mon Sep 17 00:00:00 2001
From: Mohammed khan <126798079+mohd-khan09@users.noreply.github.com>
Date: Wed, 9 Jul 2025 00:15:57 +0530
Subject: [PATCH 20/89] feat: add breadcrumb styles and improve markdown
readability #432 (#433)
- Add responsive breadcrumb navigation with theme-aware styling
- Set line-height for markdown content to enhance readability
- Implement horizontal scrolling for breadcrumbs on mobile devices
---
src/css/custom.css | 37 +++++++++++++++++++++++++++++++++++++
1 file changed, 37 insertions(+)
diff --git a/src/css/custom.css b/src/css/custom.css
index 933d51d0..7365089e 100644
--- a/src/css/custom.css
+++ b/src/css/custom.css
@@ -39,6 +39,8 @@
--ifm-navbar-height: 5rem;
--ifm-font-family-base: "Poppins", "Work Sans", sans-serif;
--ifm-background-color-primary: #f6f6f1;
+ --ifm-background-color-secondary: #e8e8e8;
+ --ifm-breadcrumb-item-background-active: #ffe9e2;
}
[data-theme="dark"] {
@@ -51,6 +53,8 @@
--ifm-color-primary-lightest: #171717;
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3);
--ifm-background-color-primary: #171717;
+ --ifm-background-color-secondary: #232323;
+ --ifm-breadcrumb-item-background-active: #3f322e;
}
#__docusaurus {
@@ -102,6 +106,8 @@ a[docid="docs"] > svg {
overflow: hidden;
max-width: 100%;
background: #000;
+ border-radius: 1rem;
+ border: 4px solid var(--ifm-background-color-secondary);
}
.video-container iframe {
@@ -298,3 +304,34 @@ a[docid="docs"] > svg {
.pagination-nav {
display: none;
}
+/* ===== MARKDOWN STYLES ===== */
+.theme-doc-markdown.markdown {
+ line-height: 1.8rem;
+}
+/* ===== BREADCRUMB STYLES ===== */
+
+.breadcrumbs {
+ display: flex;
+ gap: 0.5rem;
+ overflow-x: auto;
+ white-space: nowrap;
+}
+.breadcrumbs::-webkit-scrollbar {
+ display: none;
+}
+.breadcrumbs__item {
+ display: flex;
+ align-items: center;
+ white-space: nowrap;
+ gap: 1rem;
+}
+.breadcrumbs__link {
+ transition: color 0.2s ease;
+ background-color: var(--ifm-background-color-secondary);
+}
+
+.breadcrumbs__item--active .breadcrumbs__link {
+ font-weight: 600;
+ cursor: default;
+ background-color: var(--ifm-breadcrumb-item-background-active);
+}
From 1c1d438442f7c6bb9d1d093f7242d5b1495bd78c Mon Sep 17 00:00:00 2001
From: nimratcoderabbit
Date: Wed, 9 Jul 2025 10:05:19 -0500
Subject: [PATCH 21/89] Updating docs for Py Config (#436)
* Updating docs for Py Config
* tools
* Changelog
---
docs/tools/flake8.md | 8 ++++++++
docs/tools/pylint.md | 11 +++++++++++
2 files changed, 19 insertions(+)
diff --git a/docs/tools/flake8.md b/docs/tools/flake8.md
index b0a29761..953187c7 100644
--- a/docs/tools/flake8.md
+++ b/docs/tools/flake8.md
@@ -18,6 +18,14 @@ Flake8 will run on files with the following extensions:
- `*.py`
+## Configuration
+
+Flake8 supports the following config files:
+
+- `.flake8`
+
+CodeRabbit will not run Flake8 if no config file is found.
+
## Features
Flake8 can detect many issues such as:
diff --git a/docs/tools/pylint.md b/docs/tools/pylint.md
index f6793106..65dcf703 100644
--- a/docs/tools/pylint.md
+++ b/docs/tools/pylint.md
@@ -18,6 +18,17 @@ Pylint will run on files with the following extensions:
- `*.py`
+## Configuration
+
+Pylint supports the following config files:
+
+- `.pylintrc`
+- `pylintrc`
+- `.pylintrc.toml`
+- `pylintrc.toml`
+
+CodeRabbit will not run Pylint if no config file is found.
+
## Features
Pylint can detect many issues such as:
From f4a00ae493d7b5eae3a96ca4d1df1b32aab2ef63 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Wed, 9 Jul 2025 15:22:15 +0000
Subject: [PATCH 22/89] Update schema.v2.json
---
static/schema/schema.v2.json | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/static/schema/schema.v2.json b/static/schema/schema.v2.json
index 4dcaeba6..89085d9b 100644
--- a/static/schema/schema.v2.json
+++ b/static/schema/schema.v2.json
@@ -336,6 +336,14 @@
},
"default": [],
"description": "Base branches (other than the default branch) to review. Accepts regex patterns."
+ },
+ "ignore_usernames": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": [],
+ "description": "Ignore reviewing pull requests by these usernames. These should match the Git platform usernames exactly, not the email addresses."
}
},
"additionalProperties": false,
From fbe161f1a8264d99d426e1340c2145579785d697 Mon Sep 17 00:00:00 2001
From: Hardik Gupta <40640596+hardikkgupta@users.noreply.github.com>
Date: Wed, 9 Jul 2025 12:11:53 -0500
Subject: [PATCH 23/89] docs: clarify PR review eligibility (#378) (#396)
---
docs/guides/code-review-overview.md | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/docs/guides/code-review-overview.md b/docs/guides/code-review-overview.md
index cd511c76..32ffdb88 100644
--- a/docs/guides/code-review-overview.md
+++ b/docs/guides/code-review-overview.md
@@ -4,6 +4,8 @@ description: An overview of CodeRabbit's core code review features.
sidebar_label: Overview
---
+import ProPlanNotice from '@site/src/components/ProPlanNotice.mdx'
+
The central feature of CodeRabbit is its ability to proactively review
new pull requests on your code repository.
@@ -42,6 +44,15 @@ perform a code review:
- If an open pull request that CodeRabbit has already reviewed gets modified with another
commit, then CodeRabbit performs an incremental review that focuses on the new commit.
+### Which pull requests get automatically reviewed {#eligibility}
+
+CodeRabbit automatically reviews a pull request when **either** of the following statements is true:
+
+- The pull request is in a public repository. CodeRabbit reviews pull requests against the main branch of your public repositories by default. This feature is available to every subscription tier, including the free plan.
+- The pull request is in a private repository and your organization is on the Pro plan with a seat assigned to you. Only under this condition does CodeRabbit review private-repository pull requests.
+
+
+
## Interact with CodeRabbit reviews {#interact}
After CodeRabbit attaches its initial code-review comment to a pull request, you can
From 784b90453866977e2033864fda440587be1774aa Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Wed, 9 Jul 2025 18:18:38 +0000
Subject: [PATCH 24/89] Update schema.v2.json
---
static/schema/schema.v2.json | 8 --------
1 file changed, 8 deletions(-)
diff --git a/static/schema/schema.v2.json b/static/schema/schema.v2.json
index 89085d9b..4dcaeba6 100644
--- a/static/schema/schema.v2.json
+++ b/static/schema/schema.v2.json
@@ -336,14 +336,6 @@
},
"default": [],
"description": "Base branches (other than the default branch) to review. Accepts regex patterns."
- },
- "ignore_usernames": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "default": [],
- "description": "Ignore reviewing pull requests by these usernames. These should match the Git platform usernames exactly, not the email addresses."
}
},
"additionalProperties": false,
From 6a197c55736243acf999a16d8d6bfa1a46e52fee Mon Sep 17 00:00:00 2001
From: Hardik Gupta <40640596+hardikkgupta@users.noreply.github.com>
Date: Wed, 9 Jul 2025 15:06:48 -0500
Subject: [PATCH 25/89] docs: add Flake8, PHPMD, PHPCS to template & reference
(#428) (#429)
---
docs/reference/configuration.md | 123 ++++++++++++++++++++++++++++++++
docs/reference/yaml-template.md | 6 ++
sidebars.ts | 3 +
3 files changed, 132 insertions(+)
diff --git a/docs/reference/configuration.md b/docs/reference/configuration.md
index 5109ba5a..bd0b3e8e 100644
--- a/docs/reference/configuration.md
+++ b/docs/reference/configuration.md
@@ -2850,6 +2850,47 @@ ESLint is a static code analysis tool for JavaScript files.
ESLint is a static code analysis tool for JavaScript files.
+### Flake8
+
+Flake8 is a static code analysis tool for Python files.
+
+#### Enable Flake8
+
+
+
+
+
+
+ | Location |
+ Review > Tools > Flake8 > Enable |
+
+
+ | Default |
+ true |
+
+
+
+
+
+
+
+ | Field |
+ `reviews.tools.flake8.enabled` |
+
+
+ | Datatype |
+ boolean |
+
+
+ | Default |
+ true |
+
+
+
+
+
+Flake8 is a static code analysis tool for Python files.
+
### GitHub Checks
GitHub Checks integration configuration.
@@ -3708,6 +3749,88 @@ Enable PMD.
Optional path to the PMD configuration file relative to the repository.
+### PHPMD
+
+PHPMD is a static code analysis tool for PHP files.
+
+#### Enable PHPMD
+
+
+
+
+
+
+ | Location |
+ Review > Tools > Enable PHPMD |
+
+
+ | Default |
+ true |
+
+
+
+
+
+
+
+ | Field |
+ `reviews.tools.phpmd.enabled` |
+
+
+ | Datatype |
+ boolean |
+
+
+ | Default |
+ true |
+
+
+
+
+
+PHPMD is a static code analysis tool for PHP files.
+
+### PHPCS
+
+PHPCS is a static code analysis and coding-standard checker for PHP (plus JS/CSS) files.
+
+#### Enable PHPCS
+
+
+
+
+
+
+ | Location |
+ Review > Tools > Enable PHPCS |
+
+
+ | Default |
+ true |
+
+
+
+
+
+
+
+ | Field |
+ `reviews.tools.phpcs.enabled` |
+
+
+ | Datatype |
+ boolean |
+
+
+ | Default |
+ true |
+
+
+
+
+
+PHPCS is a static code analysis tool for PHP, JavaScript and CSS files.
+
### Prisma Schema Linting
Configuration for Prisma Schema linting to ensure schema file quality
diff --git a/docs/reference/yaml-template.md b/docs/reference/yaml-template.md
index 6a670197..9fac39e2 100644
--- a/docs/reference/yaml-template.md
+++ b/docs/reference/yaml-template.md
@@ -107,6 +107,8 @@ reviews:
config_file: ""
eslint:
enabled: true
+ flake8:
+ enabled: true
rubocop:
enabled: true
buf:
@@ -118,6 +120,10 @@ reviews:
pmd:
enabled: true
config_file: ""
+ phpmd:
+ enabled: true
+ phpcs:
+ enabled: true
cppcheck:
enabled: true
semgrep:
diff --git a/sidebars.ts b/sidebars.ts
index 5b42e112..3cc53ff0 100644
--- a/sidebars.ts
+++ b/sidebars.ts
@@ -182,6 +182,7 @@ const sidebars: SidebarsConfig = {
"tools/cppcheck",
"tools/detekt",
"tools/eslint",
+ "tools/flake8",
"tools/gitleaks",
"tools/golangci-lint",
"tools/hadolint",
@@ -189,6 +190,8 @@ const sidebars: SidebarsConfig = {
"tools/luacheck",
"tools/markdownlint",
"tools/oxlint",
+ "tools/phpcs",
+ "tools/phpmd",
"tools/phpstan",
"tools/pipeline-remediation",
"tools/pmd",
From b12376e4a35123eb7ff6eaf1782bf64185487ece Mon Sep 17 00:00:00 2001
From: alexcoderabbitai
Date: Thu, 10 Jul 2025 14:10:59 -0400
Subject: [PATCH 26/89] adding npqa notes (#439)
---
docs/changelog.md | 10 ++++++++++
docs/guides/code-review-overview.md | 2 +-
docs/tools/flake8.md | 4 +++-
docs/tools/list.md | 1 +
docs/tools/pylint.md | 4 +++-
docs/tools/ruff.md | 4 +++-
6 files changed, 21 insertions(+), 4 deletions(-)
diff --git a/docs/changelog.md b/docs/changelog.md
index e9d04422..d273ffcb 100644
--- a/docs/changelog.md
+++ b/docs/changelog.md
@@ -5,6 +5,16 @@ description: The latest updates and changes to CodeRabbit.
sidebar_position: 13
---
+## July 10, 2025
+
+### Enhanced Python Static Analysis: nbqa Support for Jupyter Notebooks
+
+We're excited to announce enhanced Python static analysis capabilities with nbqa support for Jupyter Notebooks!
+
+Our existing integrated [Ruff](https://docs.astral.sh/ruff/), [Flake8](https://flake8.pycqa.org/) and [Pylint](https://pylint.pycqa.org/) tools now support linting Jupyter Notebooks (`.ipynb` files) using [nbqa](https://github.com/nbQA-dev/nbQA). This allows you to maintain code quality across your Python projects, including Jupyter Notebooks.
+
+See our [Ruff](/tools/ruff), [Flake8](/tools/flake8), and [Pylint](/tools/pylint) documentation for more details.
+
## July 3, 2025
### Enhanced Python Static Analysis: Flake8 Support
diff --git a/docs/guides/code-review-overview.md b/docs/guides/code-review-overview.md
index 32ffdb88..6c571670 100644
--- a/docs/guides/code-review-overview.md
+++ b/docs/guides/code-review-overview.md
@@ -48,7 +48,7 @@ perform a code review:
CodeRabbit automatically reviews a pull request when **either** of the following statements is true:
-- The pull request is in a public repository. CodeRabbit reviews pull requests against the main branch of your public repositories by default. This feature is available to every subscription tier, including the free plan.
+- The pull request is in a public repository. CodeRabbit reviews pull requests against the main branch of your public repositories by default. This feature is available to every subscription tier, including the free plan.
- The pull request is in a private repository and your organization is on the Pro plan with a seat assigned to you. Only under this condition does CodeRabbit review private-repository pull requests.
diff --git a/docs/tools/flake8.md b/docs/tools/flake8.md
index 953187c7..a1a18881 100644
--- a/docs/tools/flake8.md
+++ b/docs/tools/flake8.md
@@ -10,13 +10,14 @@ import ProPlanNotice from '@site/src/components/ProPlanNotice.mdx';
```
-[Flake8](https://flake8.pycqa.org/) is a Python linting utility that wraps PyFlakes, pycodestyle, and Mccabe to check your Python code for style and logical errors.
+[Flake8](https://flake8.pycqa.org/) is a Python linting utility that wraps PyFlakes, pycodestyle, and Mccabe to check your Python or Jupiter Notebook code for style and logical errors.
## Supported Files
Flake8 will run on files with the following extensions:
- `*.py`
+- `*.ipynb` (using nbqa)
## Configuration
@@ -42,3 +43,4 @@ Flake8 can detect many issues such as:
- [Flake8 GitHub Repository](https://github.com/pycqa/flake8)
- [Flake8 Documentation](https://flake8.pycqa.org/en/latest/)
- [Flake8 Configuration](https://flake8.pycqa.org/en/latest/user/configuration.html)
+- [nbqa Documentation](https://github.com/nbQA-dev/nbQA)
diff --git a/docs/tools/list.md b/docs/tools/list.md
index b7a103b0..f81880a3 100644
--- a/docs/tools/list.md
+++ b/docs/tools/list.md
@@ -37,6 +37,7 @@ For an overview of how CodeRabbit uses these tools when generating code reviews,
| Java | [PMD][PMD] | Code Quality |
| Protobuf | [Buf][Buf] | Code Quality |
| Python | [Ruff][Ruff], [Pylint][Pylint], [Flake8][Flake8] | Code Quality |
+| Jupyter Notebooks | [Ruff][Ruff], [Pylint][Pylint], [Flake8][Flake8] | Code Quality |
| Regal | [Regal][Regal] | Code Quality |
| Ruby | [RuboCop][RuboCop], [Brakeman][Brakeman] | Code Quality, Code Security |
| Rust | [Clippy][Clippy] | Code Quality |
diff --git a/docs/tools/pylint.md b/docs/tools/pylint.md
index 65dcf703..6c45484d 100644
--- a/docs/tools/pylint.md
+++ b/docs/tools/pylint.md
@@ -10,13 +10,14 @@ import ProPlanNotice from '@site/src/components/ProPlanNotice.mdx';
```
-[Pylint](https://pylint.pycqa.org/) is a static code analysis tool for Python. It checks your Python code for errors, enforces a coding standard, and looks for code smells.
+[Pylint](https://pylint.pycqa.org/) is a static code analysis tool for Python or Jupiter Notebooks. It checks your Python code for errors, enforces a coding standard, and looks for code smells.
## Supported Files
Pylint will run on files with the following extensions:
- `*.py`
+- `.ipynb` (using nbqa)
## Configuration
@@ -46,3 +47,4 @@ Pylint can detect many issues such as:
- [Pylint GitHub Repository](https://github.com/pylint-dev/pylint)
- [Pylint Documentation](https://pylint.pycqa.org/en/latest/)
- [Message Control](https://pylint.pycqa.org/en/latest/user_guide/message-control.html)
+- [nbqa Documentation](https://github.com/nbQA-dev/nbQA)
diff --git a/docs/tools/ruff.md b/docs/tools/ruff.md
index fe897d7b..97ebacde 100644
--- a/docs/tools/ruff.md
+++ b/docs/tools/ruff.md
@@ -10,13 +10,14 @@ import ProPlanNotice from '@site/src/components/ProPlanNotice.mdx';
```
-[Ruff](https://docs.astral.sh/ruff/) is a linter for Python.
+[Ruff](https://docs.astral.sh/ruff/) is a linter for Python or Jupiter Notebooks.
## Files
Ruff will run on files with the following extensions:
- `.py`
+- `.ipynb` (using nbqa)
## Configuration
@@ -31,3 +32,4 @@ CodeRabbit will use the default settings based on the profile selected if no con
## Links
- [Ruff Configuration](https://docs.astral.sh/ruff/configuration/)
+- [nbqa Documentation](https://github.com/nbQA-dev/nbQA)
From bb3ccc147fa54b300733c0b6b9a735c0e3242e6c Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Thu, 10 Jul 2025 22:06:22 +0000
Subject: [PATCH 27/89] Update schema.v2.json
---
static/schema/schema.v2.json | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/static/schema/schema.v2.json b/static/schema/schema.v2.json
index 4dcaeba6..89085d9b 100644
--- a/static/schema/schema.v2.json
+++ b/static/schema/schema.v2.json
@@ -336,6 +336,14 @@
},
"default": [],
"description": "Base branches (other than the default branch) to review. Accepts regex patterns."
+ },
+ "ignore_usernames": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "default": [],
+ "description": "Ignore reviewing pull requests by these usernames. These should match the Git platform usernames exactly, not the email addresses."
}
},
"additionalProperties": false,
From 80140c61669943f20a815f1fc171f15ede75f504 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Fri, 11 Jul 2025 07:18:16 +0000
Subject: [PATCH 28/89] Update schema.v2.json
---
static/schema/schema.v2.json | 8 --------
1 file changed, 8 deletions(-)
diff --git a/static/schema/schema.v2.json b/static/schema/schema.v2.json
index 89085d9b..4dcaeba6 100644
--- a/static/schema/schema.v2.json
+++ b/static/schema/schema.v2.json
@@ -336,14 +336,6 @@
},
"default": [],
"description": "Base branches (other than the default branch) to review. Accepts regex patterns."
- },
- "ignore_usernames": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "default": [],
- "description": "Ignore reviewing pull requests by these usernames. These should match the Git platform usernames exactly, not the email addresses."
}
},
"additionalProperties": false,
From 4a68c92ebd122bd3feebaa127673c4973b29aa15 Mon Sep 17 00:00:00 2001
From: alexcoderabbitai
Date: Fri, 11 Jul 2025 15:39:06 -0400
Subject: [PATCH 29/89] add note on config priority (#443)
---
docs/guides/configuration-overview.md | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/docs/guides/configuration-overview.md b/docs/guides/configuration-overview.md
index 2a0dce54..b2c401f2 100644
--- a/docs/guides/configuration-overview.md
+++ b/docs/guides/configuration-overview.md
@@ -46,6 +46,28 @@ For more information, see [Set your repository preferences](/guides/repository-s
While the web interface provides and easier way to explore the available configuration options for your repository, we recommend using a `.coderabbit.yaml` file [as a best practice](/guides/setup-best-practices#yaml).
+## Configuration priority {#priority}
+
+CodeRabbit follows a specific hierarchy when determining which configuration settings to use. Understanding this priority system helps you manage your configuration effectively:
+
+### Priority order (highest to lowest)
+
+1. **Local `.coderabbit.yaml` file of head branch**
+2. **Repository settings** (web UI)
+3. **Organization settings** (web UI)
+
+### How priority works
+
+- **If you have a local `.coderabbit.yaml` file in your head branch**: All repository and organization settings are ignored. Only the local YAML file configuration is used. Anything not defined in that file uses default settings.
+- **If you don't have a local YAML file but have enabled repository settings**: Organization settings are ignored. Only repository settings are used.
+- **If you have organization settings and repository settings are disabled**: Only organization settings are used.
+
+### Configuration inheritance
+
+When a configuration source is active, it completely overrides all lower-priority sources. For example, if you set `reviews.tools.github-checks.timeout_ms` to `900000` in organization settings, but you have a local `.coderabbit.yaml` file that doesn't define this setting, CodeRabbit will use the default value of `90000` instead of the organization setting.
+
+This means that configuration is not merged or inherited - the highest priority source takes complete control over all settings.
+
## Initial configuration {#initial}
The [Initial configuration guide](/guides/initial-configuration) tours you through several settings that we
From ef8f9f70014cf83ce168cf72e9c2d4bee8f45062 Mon Sep 17 00:00:00 2001
From: Jason McIntosh
Date: Fri, 11 Jul 2025 18:33:22 -0400
Subject: [PATCH 30/89] Fix a typo
---
docs/guides/initial-configuration.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/guides/initial-configuration.md b/docs/guides/initial-configuration.md
index e702b081..826a7948 100644
--- a/docs/guides/initial-configuration.md
+++ b/docs/guides/initial-configuration.md
@@ -72,7 +72,7 @@ By default, CodeRabbit writes thorough code reviews with several sub-sections. I
- [Related issues](/reference/configuration#related-issues): lists issues found in your issue tracker that might be related to this pull request.
- [Related pull requests](/reference/configuration#realted-prs): lists pull requests that might be related to this pull request.
- [Suggested labels](/reference/configuration#suggested-labels): Suggests labels for this pull request.
-- [Suggested reviewers](/reference/configuration#suggested-reveiwers): automatically suggest reviewers for PR
+- [Suggested reviewers](/reference/configuration#suggested-reviewers): automatically suggest reviewers for PR
- [Poem](/reference/configuration#poem): generates a short poem about this pull request.
## Adjust path-specific CodeRabbit behavior {#path}
From 2395b7db43705b7b0c21d1fa4d17623be92d0063 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Mon, 14 Jul 2025 14:41:01 +0000
Subject: [PATCH 31/89] Update schema.v2.json
---
static/schema/schema.v2.json | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/static/schema/schema.v2.json b/static/schema/schema.v2.json
index 4dcaeba6..1014db62 100644
--- a/static/schema/schema.v2.json
+++ b/static/schema/schema.v2.json
@@ -412,7 +412,7 @@
},
"additionalProperties": false,
"default": {},
- "description": "Enable ast-grep | ast-grep is a code analysis tool that helps you to find patterns in your codebase using abstract syntax trees patterns. | v0.38.1"
+ "description": "Enable ast-grep | ast-grep is a code analysis tool that helps you to find patterns in your codebase using abstract syntax trees patterns. | v0.38.6"
},
"shellcheck": {
"type": "object",
@@ -433,7 +433,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable Ruff | Ruff is a Python linter and code formatter. | Enable Ruff integration. | v0.11.9"
+ "description": "Enable Ruff | Ruff is a Python linter and code formatter. | Enable Ruff integration. | v0.12.2"
}
},
"additionalProperties": false,
@@ -578,7 +578,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable PHPStan | PHPStan requires [config file](https://phpstan.org/config-reference#config-file) in your repository root. Please ensure that this file contains the `paths:` parameter. | v2.1.15"
+ "description": "Enable PHPStan | PHPStan requires [config file](https://phpstan.org/config-reference#config-file) in your repository root. Please ensure that this file contains the `paths:` parameter. | v2.1.17"
},
"level": {
"type": "string",
@@ -666,7 +666,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable Gitleaks | Gitleaks is a secret scanner. | Enable Gitleaks integration. | v8.26.0"
+ "description": "Enable Gitleaks | Gitleaks is a secret scanner. | Enable Gitleaks integration. | v8.27.2"
}
},
"additionalProperties": false,
@@ -735,7 +735,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable RuboCop | RuboCop is a Ruby static code analyzer (a.k.a. linter ) and code formatter. | v1.75.5"
+ "description": "Enable RuboCop | RuboCop is a Ruby static code analyzer (a.k.a. linter ) and code formatter. | v1.76.1"
}
},
"additionalProperties": false,
@@ -748,7 +748,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable Buf | Buf offers linting for Protobuf files. | v1.54.0"
+ "description": "Enable Buf | Buf offers linting for Protobuf files. | v1.55.1"
}
},
"additionalProperties": false,
@@ -761,7 +761,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable Regal | Regal is a linter and language server for Rego. | v0.33.1"
+ "description": "Enable Regal | Regal is a linter and language server for Rego. | v0.35.1"
}
},
"additionalProperties": false,
@@ -787,7 +787,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable PMD | PMD is an extensible multilanguage static code analyzer. It’s mainly concerned with Java. | v7.13.0"
+ "description": "Enable PMD | PMD is an extensible multilanguage static code analyzer. It’s mainly concerned with Java. | v7.15.0"
},
"config_file": {
"type": "string",
@@ -834,7 +834,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable CircleCI | CircleCI tool is a static checker for CircleCI config files. | v0.1.31687"
+ "description": "Enable CircleCI | CircleCI tool is a static checker for CircleCI config files. | v0.1.32638"
}
},
"additionalProperties": false,
@@ -860,7 +860,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable SQLFluff | SQLFluff is an open source, dialect-flexible and configurable SQL linter. | v3.4.0"
+ "description": "Enable SQLFluff | SQLFluff is an open source, dialect-flexible and configurable SQL linter. | v3.4.1"
}
},
"additionalProperties": false,
@@ -873,7 +873,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable Prisma Schema linting | Prisma Schema linting helps maintain consistent and error-free schema files | v0.10.1"
+ "description": "Enable Prisma Schema linting | Prisma Schema linting helps maintain consistent and error-free schema files | v0.10.2"
}
},
"additionalProperties": false,
From 5aa268e0990e486e53ebd458104196dac251d38f Mon Sep 17 00:00:00 2001
From: Hasit Mistry
Date: Mon, 14 Jul 2025 08:55:49 -0700
Subject: [PATCH 32/89] Add YAML_CONFIG option to self-hosted documentation
(#445)
* Add YAML_CONFIG option to self-hosted documentation for Azure DevOps, Bitbucket, GitHub, and GitLab
* Update YAML_CONFIG placeholder to escaped format in self-hosted documentation for Azure DevOps, Bitbucket, GitHub, and GitLab
---
docs/self-hosted/azure-devops.md | 3 +++
docs/self-hosted/bitbucket.md | 3 +++
docs/self-hosted/github.md | 3 +++
docs/self-hosted/gitlab.md | 3 +++
4 files changed, 12 insertions(+)
diff --git a/docs/self-hosted/azure-devops.md b/docs/self-hosted/azure-devops.md
index a843e1a7..c8926b0f 100644
--- a/docs/self-hosted/azure-devops.md
+++ b/docs/self-hosted/azure-devops.md
@@ -127,6 +127,8 @@ LINEAR_PAT=[]
ENABLE_WEB_SEARCH=[true]
PERPLEXITY_API_KEY=[]
+
+YAML_CONFIG=[]
```
:::note
@@ -134,6 +136,7 @@ PERPLEXITY_API_KEY=[]
- If you are using Azure OpenAI, verify that the model deployment names are in the .env file.
- Values marked with [] are not optional to provide.
- You can generate `CODERABBIT_API_KEY` from CodeRabbit UI -> Organizations Settings -> API Keys.
+- `YAML_CONFIG` is an optional configuration file that can be used to customize CodeRabbit's behavior at the deployment level. It takes the same format as the [CodeRabbit YAML configuration](/docs/getting-started/configure-coderabbit.md) file. It requires the entire YAML file to be in an escaped string format, for example, `YAML_CONFIG="key1: value1\nkey2: value2"`. You can use [Escape YAML](https://escapeyaml.dev/) to generate the escaped string.
:::
diff --git a/docs/self-hosted/bitbucket.md b/docs/self-hosted/bitbucket.md
index 7e7faf2b..bccbb251 100644
--- a/docs/self-hosted/bitbucket.md
+++ b/docs/self-hosted/bitbucket.md
@@ -122,6 +122,8 @@ LINEAR_PAT=[]
ENABLE_WEB_SEARCH=[true]
PERPLEXITY_API_KEY=[]
+
+YAML_CONFIG=[]
```
:::note
@@ -129,6 +131,7 @@ PERPLEXITY_API_KEY=[]
- If you are using Azure OpenAI, verify that the model deployment names are in the .env file.
Values marked with [] are optional and can be omitted if the feature is not needed.
- You can generate `CODERABBIT_API_KEY` from CodeRabbit UI -> Organizations Settings -> API Keys.
+- `YAML_CONFIG` is an optional configuration file that can be used to customize CodeRabbit's behavior at the deployment level. It takes the same format as the [CodeRabbit YAML configuration](/docs/getting-started/configure-coderabbit.md) file. It requires the entire YAML file to be in an escaped string format, for example, `YAML_CONFIG="key1: value1\nkey2: value2"`. You can use [Escape YAML](https://escapeyaml.dev/) to generate the escaped string.
:::
diff --git a/docs/self-hosted/github.md b/docs/self-hosted/github.md
index 3031e45c..6e2b27c1 100644
--- a/docs/self-hosted/github.md
+++ b/docs/self-hosted/github.md
@@ -140,6 +140,8 @@ LINEAR_PAT=[]
ENABLE_WEB_SEARCH=[true]
PERPLEXITY_API_KEY=[]
+
+YAML_CONFIG=[]
```
:::note
@@ -150,6 +152,7 @@ PERPLEXITY_API_KEY=[]
- For `GITHUB_HOSTNAME`, use GitHub Enterprise server's hostname, for example, “github.acme-inc.com”
- You can generate `CODERABBIT_API_KEY` from CodeRabbit UI -> Organizations Settings -> API Keys.
- When `ENABLE_LEARNINGS` is set to `true`, CodeRabbit will use `CODERABBIT_API_KEY` to store learnings on our servers.
+- `YAML_CONFIG` is an optional configuration file that can be used to customize CodeRabbit's behavior at the deployment level. It takes the same format as the [CodeRabbit YAML configuration](/docs/getting-started/configure-coderabbit.md) file. It requires the entire YAML file to be in an escaped string format, for example, `YAML_CONFIG="key1: value1\nkey2: value2"`. You can use [Escape YAML](https://escapeyaml.dev/) to generate the escaped string.
:::
diff --git a/docs/self-hosted/gitlab.md b/docs/self-hosted/gitlab.md
index cd35c19f..94175bda 100644
--- a/docs/self-hosted/gitlab.md
+++ b/docs/self-hosted/gitlab.md
@@ -134,6 +134,8 @@ LINEAR_PAT=[]
ENABLE_WEB_SEARCH=[true]
PERPLEXITY_API_KEY=[]
+
+YAML_CONFIG=[]
```
:::note
@@ -141,6 +143,7 @@ PERPLEXITY_API_KEY=[]
- If you are using Azure OpenAI, verify that the model deployment names are in the .env file.
- Values marked with [] are not optional to provide.
- You can generate `CODERABBIT_API_KEY` from CodeRabbit UI -> Organizations Settings -> API Keys.
+- `YAML_CONFIG` is an optional configuration file that can be used to customize CodeRabbit's behavior at the deployment level. It takes the same format as the [CodeRabbit YAML configuration](/docs/getting-started/configure-coderabbit.md) file. It requires the entire YAML file to be in an escaped string format, for example, `YAML_CONFIG="key1: value1\nkey2: value2"`. You can use [Escape YAML](https://escapeyaml.dev/) to generate the escaped string.
:::
From 07ae25187afa8d4c671057517cabf25a76882a72 Mon Sep 17 00:00:00 2001
From: Hasit Mistry
Date: Mon, 14 Jul 2025 16:34:50 -0700
Subject: [PATCH 33/89] Add GitLab webhook script for automated webhook setup
(#446)
* Add GitLab webhook script for automated webhook setup
* Fix link to GitLab webhook script in documentation
---
docs/self-hosted/gitlab.md | 27 +++++
static/code/gitlab-webhook.sh | 188 ++++++++++++++++++++++++++++++++++
2 files changed, 215 insertions(+)
create mode 100644 static/code/gitlab-webhook.sh
diff --git a/docs/self-hosted/gitlab.md b/docs/self-hosted/gitlab.md
index 94175bda..2488cfa0 100644
--- a/docs/self-hosted/gitlab.md
+++ b/docs/self-hosted/gitlab.md
@@ -44,6 +44,33 @@ Consult official CodeRabbitAI documentation for a detailed [guide](https://docs.
- Issues events
- Merge request events
+We have a convenient [script](/code/gitlab-webhook.sh) to help you add webhooks to all projects in a GitLab instance. You can run it with the following command:
+
+```bash
+# Make sure the script is executable:
+chmod +x gitlab-webhook.sh
+
+# PAT example (header auto-detected)
+export GITLAB_TOKEN="glpat-xxxxx"
+./gitlab-add-webhook.sh \
+ -h "gitlab.example.com" -u "http:///gitlab_webhooks" \
+ -s "mySecret" -p 42
+
+# PAT example (explicit header)
+./gitlab-add-webhook.sh \
+ -h "gitlab.example.com" -u "http:///gitlab_webhooks" \
+ -s "mySecret" -g "mygroup/mysubgroup/myproject" \
+ -t "glpat-xxxxx" \
+ -A "PRIVATE-TOKEN"
+
+# OAuth token with explicit header
+./gitlab-add-webhook.sh \
+ -h "gitlab.example.com" -u "http:///gitlab_webhooks" \
+ -s "mySecret" -g "company/backend" \
+ -t "eyJhbGciOi..." \
+ -A "Authorization: Bearer"
+```
+
## Prepare a `.env` file
Create a `.env` file with the following content:
diff --git a/static/code/gitlab-webhook.sh b/static/code/gitlab-webhook.sh
new file mode 100644
index 00000000..b217079e
--- /dev/null
+++ b/static/code/gitlab-webhook.sh
@@ -0,0 +1,188 @@
+#!/usr/bin/env bash
+
+## gitlab-webhook.sh
+# Add a webhook to one project, or every project in a subgroup tree.
+
+## Example usage:
+# Make sure the script is executable:
+# chmod +x gitlab-webhook.sh
+
+# PAT example (header auto-detected)
+# export GITLAB_TOKEN="glpat-xxxxx"
+# ./gitlab-add-webhook.sh \
+# -h "gitlab.example.com" -u "https://ci.example.com/gitlab-hook" \
+# -s "mySecret" -p 42
+
+# PAT example (explicit header)
+# ./gitlab-add-webhook.sh \
+# -h "gitlab.example.com" -u "https://ci.example.com/gitlab-hook" \
+# -s "mySecret" -g "mygroup/mysubgroup/myproject" \
+# -t "glpat-qj5s..." \
+# -A "PRIVATE-TOKEN"
+
+# OAuth token with explicit header
+# ./gitlab-add-webhook.sh \
+# -h "gitlab.example.com" -u "https://ci.example.com/gitlab-hook" \
+# -s "mySecret" -g "company/backend" \
+# -t "eyJhbGciOi..." \
+# -A "Authorization: Bearer"
+
+
+set -euo pipefail
+
+usage() {
+ cat < -u -s \\
+ [-t ] [-A ] [-p | -g ]
+
+Required:
+ -h GitLab host (e.g. gitlab.example.com)
+ -u Webhook endpoint URL to receive POSTs
+ -s Webhook secret token (used for signature verification)
+
+Authentication (one of):
+ -t Access token (PAT, project, group or OAuth). If omitted, \$GITLAB_TOKEN is used
+ -A Auth header to use. Default detects:
+ PAT → "PRIVATE-TOKEN"
+ anything else → "Authorization: Bearer"
+
+Scope (choose one):
+ -p Project ID or full path (e.g. 42 or group/app)
+ -g Group ID or full path, recurse through all subgroups & projects
+EOF
+ exit 1
+}
+
+HOST="" HOOK_URL="" HOOK_SECRET=""
+TOKEN="${GITLAB_TOKEN:-}" AUTH_HEADER=""
+PROJECT="" GROUP=""
+
+while getopts "h:u:s:t:A:p:g:" opt; do
+ case "$opt" in
+ h) HOST=$OPTARG ;;
+ u) HOOK_URL=$OPTARG ;;
+ s) HOOK_SECRET=$OPTARG ;;
+ t) TOKEN=$OPTARG ;;
+ A) AUTH_HEADER=$OPTARG ;;
+ p) PROJECT=$OPTARG ;;
+ g) GROUP=$OPTARG ;;
+ *) usage ;;
+ esac
+done
+
+# Mandatory checks
+[[ -z $HOST || -z $HOOK_URL || -z $HOOK_SECRET ]] && usage
+[[ -n $PROJECT && -n $GROUP ]] && usage
+[[ -z $PROJECT && -z $GROUP ]] && usage
+
+# Token handling
+if [[ -z $TOKEN ]]; then
+ echo "❌ No access token provided. Use -t or set \$GITLAB_TOKEN" >&2
+ exit 1
+fi
+
+# Choose header if not forced
+if [[ -z $AUTH_HEADER ]]; then
+ if [[ $TOKEN == glpat-* || $TOKEN == "PAT-"* ]]; then
+ AUTH_HEADER="PRIVATE-TOKEN"
+ else
+ AUTH_HEADER="Authorization: Bearer"
+ fi
+fi
+
+API="https://${HOST}/api/v4"
+CURL_BASE=(curl -sSf --header "${AUTH_HEADER}: ${TOKEN}")
+
+# Track processed projects to avoid duplicates
+declare -A PROCESSED_PROJECTS
+# Track projects where webhooks were successfully added
+WEBHOOK_PROJECTS=()
+
+##############################################################################
+# Helpers
+##############################################################################
+url_encode() {
+ local string="$1"
+ # URL encode the string using printf and sed
+ printf '%s' "$string" | sed 's/\//%2F/g; s/ /%20/g; s/@/%40/g; s/:/%3A/g; s/#/%23/g; s/?/%3F/g; s/&/%26/g; s/=/%3D/g; s/+/%2B/g'
+}
+
+create_hook() {
+ local pid=$1
+
+ # Skip if already processed
+ if [[ -n "${PROCESSED_PROJECTS[$pid]:-}" ]]; then
+ return 0
+ fi
+
+ # Mark as processed
+ PROCESSED_PROJECTS[$pid]=1
+
+ local encoded_pid
+ # URL encode if pid is not purely numeric
+ if [[ $pid =~ ^[0-9]+$ ]]; then
+ encoded_pid=$pid
+ else
+ encoded_pid=$(url_encode "$pid")
+ fi
+
+ "${CURL_BASE[@]}" --request POST \
+ --data-urlencode "url=${HOOK_URL}" \
+ --data "token=${HOOK_SECRET}" \
+ --data "push_events=true" \
+ --data "note_events=true" \
+ --data "issues_events=true" \
+ --data "merge_requests_events=true" \
+ --data "enable_ssl_verification=true" \
+ "${API}/projects/${encoded_pid}/hooks" \
+ >/dev/null
+
+ # Track successful webhook creation
+ WEBHOOK_PROJECTS+=("$pid")
+}
+
+traverse_group() {
+ local gid=$1
+ local encoded_gid
+ # URL encode if gid is not purely numeric
+ if [[ $gid =~ ^[0-9]+$ ]]; then
+ encoded_gid=$gid
+ else
+ encoded_gid=$(url_encode "$gid")
+ fi
+ # projects (includes nested sub-groups)
+ while IFS= read -r pid; do
+ [[ -n "$pid" ]] && create_hook "$pid"
+ done < <(
+ "${CURL_BASE[@]}" \
+ "${API}/groups/${encoded_gid}/projects?include_subgroups=true&per_page=100" |
+ jq -r '.[].id'
+ )
+ # recurse explicit subgroups (older GitLab)
+ while IFS= read -r sg; do
+ [[ -n "$sg" ]] && traverse_group "$sg"
+ done < <(
+ "${CURL_BASE[@]}" "${API}/groups/${encoded_gid}/subgroups?per_page=100" |
+ jq -r '.[].id'
+ )
+}
+
+##############################################################################
+# Main
+##############################################################################
+if [[ -n $PROJECT ]]; then
+ create_hook "$PROJECT"
+else
+ traverse_group "$GROUP"
+fi
+
+# Print final summary
+if [[ ${#WEBHOOK_PROJECTS[@]} -eq 0 ]]; then
+ echo "❌ No webhooks were installed."
+else
+ echo "✅ Webhooks installed successfully on ${#WEBHOOK_PROJECTS[@]} project(s):"
+ for pid in "${WEBHOOK_PROJECTS[@]}"; do
+ echo " - Project ID: $pid"
+ done
+fi
From 02350b23dbe600536f927c0c9ad598cb005dea57 Mon Sep 17 00:00:00 2001
From: Hasit Mistry
Date: Mon, 14 Jul 2025 17:30:38 -0700
Subject: [PATCH 34/89] Refactor GitLab webhook script section for clarity and
formatting (#447)
* Refactor GitLab webhook script section for clarity and formatting
* Clarify comments in gitlab-webhook.sh regarding PAT usage examples
* Clarify description of the webhook script usage in GitLab documentation
* Fix formatting for selecting triggers in GitLab webhook documentation
---
docs/self-hosted/gitlab.md | 10 ++++++++--
static/code/gitlab-webhook.sh | 4 ++--
2 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/docs/self-hosted/gitlab.md b/docs/self-hosted/gitlab.md
index 2488cfa0..395d93fc 100644
--- a/docs/self-hosted/gitlab.md
+++ b/docs/self-hosted/gitlab.md
@@ -37,19 +37,25 @@ Consult official CodeRabbitAI documentation for a detailed [guide](https://docs.
1. **Navigate to Add Webhook Page**: Go to the webhook configuration page in the desired GitLab project.
2. **Add Webhook URL**: Enter the URL pointing to the CodeRabbit service, followed by `/gitlab_webhooks` (e.g., `http://127.0.0.1:8080/gitlab_webhooks`).
3. **Generate and Save Secret Token**: Generate a secret token, add it to the webhook, and store it securely. This will be needed for the `.env` file as `GITLAB_WEBHOOK_SECRET` (you can use a single secret token for all projects).
-4. Select triggers:
+4. **Select triggers**:
- Push events
- Comments
- Issues events
- Merge request events
-We have a convenient [script](/code/gitlab-webhook.sh) to help you add webhooks to all projects in a GitLab instance. You can run it with the following command:
+## Add Webhook Using a Script
+
+We have a convenient [script](/code/gitlab-webhook.sh) to help you add webhooks to a project or all projects under a group in a GitLab instance.
```bash
# Make sure the script is executable:
chmod +x gitlab-webhook.sh
+```
+Example usage:
+
+```bash
# PAT example (header auto-detected)
export GITLAB_TOKEN="glpat-xxxxx"
./gitlab-add-webhook.sh \
diff --git a/static/code/gitlab-webhook.sh b/static/code/gitlab-webhook.sh
index b217079e..1458ba0d 100644
--- a/static/code/gitlab-webhook.sh
+++ b/static/code/gitlab-webhook.sh
@@ -7,13 +7,13 @@
# Make sure the script is executable:
# chmod +x gitlab-webhook.sh
-# PAT example (header auto-detected)
+# PAT auto-detected header
# export GITLAB_TOKEN="glpat-xxxxx"
# ./gitlab-add-webhook.sh \
# -h "gitlab.example.com" -u "https://ci.example.com/gitlab-hook" \
# -s "mySecret" -p 42
-# PAT example (explicit header)
+# PAT with explicit header
# ./gitlab-add-webhook.sh \
# -h "gitlab.example.com" -u "https://ci.example.com/gitlab-hook" \
# -s "mySecret" -g "mygroup/mysubgroup/myproject" \
From 0265e7b1942466b6e3f520cb394f32a7c463d3db Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Tue, 15 Jul 2025 03:43:18 +0000
Subject: [PATCH 35/89] Update schema.v2.json
---
static/schema/schema.v2.json | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/static/schema/schema.v2.json b/static/schema/schema.v2.json
index 1014db62..4dcaeba6 100644
--- a/static/schema/schema.v2.json
+++ b/static/schema/schema.v2.json
@@ -412,7 +412,7 @@
},
"additionalProperties": false,
"default": {},
- "description": "Enable ast-grep | ast-grep is a code analysis tool that helps you to find patterns in your codebase using abstract syntax trees patterns. | v0.38.6"
+ "description": "Enable ast-grep | ast-grep is a code analysis tool that helps you to find patterns in your codebase using abstract syntax trees patterns. | v0.38.1"
},
"shellcheck": {
"type": "object",
@@ -433,7 +433,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable Ruff | Ruff is a Python linter and code formatter. | Enable Ruff integration. | v0.12.2"
+ "description": "Enable Ruff | Ruff is a Python linter and code formatter. | Enable Ruff integration. | v0.11.9"
}
},
"additionalProperties": false,
@@ -578,7 +578,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable PHPStan | PHPStan requires [config file](https://phpstan.org/config-reference#config-file) in your repository root. Please ensure that this file contains the `paths:` parameter. | v2.1.17"
+ "description": "Enable PHPStan | PHPStan requires [config file](https://phpstan.org/config-reference#config-file) in your repository root. Please ensure that this file contains the `paths:` parameter. | v2.1.15"
},
"level": {
"type": "string",
@@ -666,7 +666,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable Gitleaks | Gitleaks is a secret scanner. | Enable Gitleaks integration. | v8.27.2"
+ "description": "Enable Gitleaks | Gitleaks is a secret scanner. | Enable Gitleaks integration. | v8.26.0"
}
},
"additionalProperties": false,
@@ -735,7 +735,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable RuboCop | RuboCop is a Ruby static code analyzer (a.k.a. linter ) and code formatter. | v1.76.1"
+ "description": "Enable RuboCop | RuboCop is a Ruby static code analyzer (a.k.a. linter ) and code formatter. | v1.75.5"
}
},
"additionalProperties": false,
@@ -748,7 +748,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable Buf | Buf offers linting for Protobuf files. | v1.55.1"
+ "description": "Enable Buf | Buf offers linting for Protobuf files. | v1.54.0"
}
},
"additionalProperties": false,
@@ -761,7 +761,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable Regal | Regal is a linter and language server for Rego. | v0.35.1"
+ "description": "Enable Regal | Regal is a linter and language server for Rego. | v0.33.1"
}
},
"additionalProperties": false,
@@ -787,7 +787,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable PMD | PMD is an extensible multilanguage static code analyzer. It’s mainly concerned with Java. | v7.15.0"
+ "description": "Enable PMD | PMD is an extensible multilanguage static code analyzer. It’s mainly concerned with Java. | v7.13.0"
},
"config_file": {
"type": "string",
@@ -834,7 +834,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable CircleCI | CircleCI tool is a static checker for CircleCI config files. | v0.1.32638"
+ "description": "Enable CircleCI | CircleCI tool is a static checker for CircleCI config files. | v0.1.31687"
}
},
"additionalProperties": false,
@@ -860,7 +860,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable SQLFluff | SQLFluff is an open source, dialect-flexible and configurable SQL linter. | v3.4.1"
+ "description": "Enable SQLFluff | SQLFluff is an open source, dialect-flexible and configurable SQL linter. | v3.4.0"
}
},
"additionalProperties": false,
@@ -873,7 +873,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable Prisma Schema linting | Prisma Schema linting helps maintain consistent and error-free schema files | v0.10.2"
+ "description": "Enable Prisma Schema linting | Prisma Schema linting helps maintain consistent and error-free schema files | v0.10.1"
}
},
"additionalProperties": false,
From b3103bd5e69ac96bde4099c4267fd563932e52d5 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Tue, 15 Jul 2025 04:06:44 +0000
Subject: [PATCH 36/89] Update schema.v2.json
---
static/schema/schema.v2.json | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/static/schema/schema.v2.json b/static/schema/schema.v2.json
index 4dcaeba6..1014db62 100644
--- a/static/schema/schema.v2.json
+++ b/static/schema/schema.v2.json
@@ -412,7 +412,7 @@
},
"additionalProperties": false,
"default": {},
- "description": "Enable ast-grep | ast-grep is a code analysis tool that helps you to find patterns in your codebase using abstract syntax trees patterns. | v0.38.1"
+ "description": "Enable ast-grep | ast-grep is a code analysis tool that helps you to find patterns in your codebase using abstract syntax trees patterns. | v0.38.6"
},
"shellcheck": {
"type": "object",
@@ -433,7 +433,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable Ruff | Ruff is a Python linter and code formatter. | Enable Ruff integration. | v0.11.9"
+ "description": "Enable Ruff | Ruff is a Python linter and code formatter. | Enable Ruff integration. | v0.12.2"
}
},
"additionalProperties": false,
@@ -578,7 +578,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable PHPStan | PHPStan requires [config file](https://phpstan.org/config-reference#config-file) in your repository root. Please ensure that this file contains the `paths:` parameter. | v2.1.15"
+ "description": "Enable PHPStan | PHPStan requires [config file](https://phpstan.org/config-reference#config-file) in your repository root. Please ensure that this file contains the `paths:` parameter. | v2.1.17"
},
"level": {
"type": "string",
@@ -666,7 +666,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable Gitleaks | Gitleaks is a secret scanner. | Enable Gitleaks integration. | v8.26.0"
+ "description": "Enable Gitleaks | Gitleaks is a secret scanner. | Enable Gitleaks integration. | v8.27.2"
}
},
"additionalProperties": false,
@@ -735,7 +735,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable RuboCop | RuboCop is a Ruby static code analyzer (a.k.a. linter ) and code formatter. | v1.75.5"
+ "description": "Enable RuboCop | RuboCop is a Ruby static code analyzer (a.k.a. linter ) and code formatter. | v1.76.1"
}
},
"additionalProperties": false,
@@ -748,7 +748,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable Buf | Buf offers linting for Protobuf files. | v1.54.0"
+ "description": "Enable Buf | Buf offers linting for Protobuf files. | v1.55.1"
}
},
"additionalProperties": false,
@@ -761,7 +761,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable Regal | Regal is a linter and language server for Rego. | v0.33.1"
+ "description": "Enable Regal | Regal is a linter and language server for Rego. | v0.35.1"
}
},
"additionalProperties": false,
@@ -787,7 +787,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable PMD | PMD is an extensible multilanguage static code analyzer. It’s mainly concerned with Java. | v7.13.0"
+ "description": "Enable PMD | PMD is an extensible multilanguage static code analyzer. It’s mainly concerned with Java. | v7.15.0"
},
"config_file": {
"type": "string",
@@ -834,7 +834,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable CircleCI | CircleCI tool is a static checker for CircleCI config files. | v0.1.31687"
+ "description": "Enable CircleCI | CircleCI tool is a static checker for CircleCI config files. | v0.1.32638"
}
},
"additionalProperties": false,
@@ -860,7 +860,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable SQLFluff | SQLFluff is an open source, dialect-flexible and configurable SQL linter. | v3.4.0"
+ "description": "Enable SQLFluff | SQLFluff is an open source, dialect-flexible and configurable SQL linter. | v3.4.1"
}
},
"additionalProperties": false,
@@ -873,7 +873,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable Prisma Schema linting | Prisma Schema linting helps maintain consistent and error-free schema files | v0.10.1"
+ "description": "Enable Prisma Schema linting | Prisma Schema linting helps maintain consistent and error-free schema files | v0.10.2"
}
},
"additionalProperties": false,
From dab322e63e31a44e5bad2fbec739f7569ccd6711 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Tue, 15 Jul 2025 06:40:22 +0000
Subject: [PATCH 37/89] Update schema.v2.json
---
static/schema/schema.v2.json | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/static/schema/schema.v2.json b/static/schema/schema.v2.json
index 1014db62..4dcaeba6 100644
--- a/static/schema/schema.v2.json
+++ b/static/schema/schema.v2.json
@@ -412,7 +412,7 @@
},
"additionalProperties": false,
"default": {},
- "description": "Enable ast-grep | ast-grep is a code analysis tool that helps you to find patterns in your codebase using abstract syntax trees patterns. | v0.38.6"
+ "description": "Enable ast-grep | ast-grep is a code analysis tool that helps you to find patterns in your codebase using abstract syntax trees patterns. | v0.38.1"
},
"shellcheck": {
"type": "object",
@@ -433,7 +433,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable Ruff | Ruff is a Python linter and code formatter. | Enable Ruff integration. | v0.12.2"
+ "description": "Enable Ruff | Ruff is a Python linter and code formatter. | Enable Ruff integration. | v0.11.9"
}
},
"additionalProperties": false,
@@ -578,7 +578,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable PHPStan | PHPStan requires [config file](https://phpstan.org/config-reference#config-file) in your repository root. Please ensure that this file contains the `paths:` parameter. | v2.1.17"
+ "description": "Enable PHPStan | PHPStan requires [config file](https://phpstan.org/config-reference#config-file) in your repository root. Please ensure that this file contains the `paths:` parameter. | v2.1.15"
},
"level": {
"type": "string",
@@ -666,7 +666,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable Gitleaks | Gitleaks is a secret scanner. | Enable Gitleaks integration. | v8.27.2"
+ "description": "Enable Gitleaks | Gitleaks is a secret scanner. | Enable Gitleaks integration. | v8.26.0"
}
},
"additionalProperties": false,
@@ -735,7 +735,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable RuboCop | RuboCop is a Ruby static code analyzer (a.k.a. linter ) and code formatter. | v1.76.1"
+ "description": "Enable RuboCop | RuboCop is a Ruby static code analyzer (a.k.a. linter ) and code formatter. | v1.75.5"
}
},
"additionalProperties": false,
@@ -748,7 +748,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable Buf | Buf offers linting for Protobuf files. | v1.55.1"
+ "description": "Enable Buf | Buf offers linting for Protobuf files. | v1.54.0"
}
},
"additionalProperties": false,
@@ -761,7 +761,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable Regal | Regal is a linter and language server for Rego. | v0.35.1"
+ "description": "Enable Regal | Regal is a linter and language server for Rego. | v0.33.1"
}
},
"additionalProperties": false,
@@ -787,7 +787,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable PMD | PMD is an extensible multilanguage static code analyzer. It’s mainly concerned with Java. | v7.15.0"
+ "description": "Enable PMD | PMD is an extensible multilanguage static code analyzer. It’s mainly concerned with Java. | v7.13.0"
},
"config_file": {
"type": "string",
@@ -834,7 +834,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable CircleCI | CircleCI tool is a static checker for CircleCI config files. | v0.1.32638"
+ "description": "Enable CircleCI | CircleCI tool is a static checker for CircleCI config files. | v0.1.31687"
}
},
"additionalProperties": false,
@@ -860,7 +860,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable SQLFluff | SQLFluff is an open source, dialect-flexible and configurable SQL linter. | v3.4.1"
+ "description": "Enable SQLFluff | SQLFluff is an open source, dialect-flexible and configurable SQL linter. | v3.4.0"
}
},
"additionalProperties": false,
@@ -873,7 +873,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable Prisma Schema linting | Prisma Schema linting helps maintain consistent and error-free schema files | v0.10.2"
+ "description": "Enable Prisma Schema linting | Prisma Schema linting helps maintain consistent and error-free schema files | v0.10.1"
}
},
"additionalProperties": false,
From e92e3434f6fb35883f5224ffcf51b89df7ff7f7e Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Tue, 15 Jul 2025 12:46:23 +0000
Subject: [PATCH 38/89] Update schema.v2.json
---
static/schema/schema.v2.json | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/static/schema/schema.v2.json b/static/schema/schema.v2.json
index 4dcaeba6..1014db62 100644
--- a/static/schema/schema.v2.json
+++ b/static/schema/schema.v2.json
@@ -412,7 +412,7 @@
},
"additionalProperties": false,
"default": {},
- "description": "Enable ast-grep | ast-grep is a code analysis tool that helps you to find patterns in your codebase using abstract syntax trees patterns. | v0.38.1"
+ "description": "Enable ast-grep | ast-grep is a code analysis tool that helps you to find patterns in your codebase using abstract syntax trees patterns. | v0.38.6"
},
"shellcheck": {
"type": "object",
@@ -433,7 +433,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable Ruff | Ruff is a Python linter and code formatter. | Enable Ruff integration. | v0.11.9"
+ "description": "Enable Ruff | Ruff is a Python linter and code formatter. | Enable Ruff integration. | v0.12.2"
}
},
"additionalProperties": false,
@@ -578,7 +578,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable PHPStan | PHPStan requires [config file](https://phpstan.org/config-reference#config-file) in your repository root. Please ensure that this file contains the `paths:` parameter. | v2.1.15"
+ "description": "Enable PHPStan | PHPStan requires [config file](https://phpstan.org/config-reference#config-file) in your repository root. Please ensure that this file contains the `paths:` parameter. | v2.1.17"
},
"level": {
"type": "string",
@@ -666,7 +666,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable Gitleaks | Gitleaks is a secret scanner. | Enable Gitleaks integration. | v8.26.0"
+ "description": "Enable Gitleaks | Gitleaks is a secret scanner. | Enable Gitleaks integration. | v8.27.2"
}
},
"additionalProperties": false,
@@ -735,7 +735,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable RuboCop | RuboCop is a Ruby static code analyzer (a.k.a. linter ) and code formatter. | v1.75.5"
+ "description": "Enable RuboCop | RuboCop is a Ruby static code analyzer (a.k.a. linter ) and code formatter. | v1.76.1"
}
},
"additionalProperties": false,
@@ -748,7 +748,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable Buf | Buf offers linting for Protobuf files. | v1.54.0"
+ "description": "Enable Buf | Buf offers linting for Protobuf files. | v1.55.1"
}
},
"additionalProperties": false,
@@ -761,7 +761,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable Regal | Regal is a linter and language server for Rego. | v0.33.1"
+ "description": "Enable Regal | Regal is a linter and language server for Rego. | v0.35.1"
}
},
"additionalProperties": false,
@@ -787,7 +787,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable PMD | PMD is an extensible multilanguage static code analyzer. It’s mainly concerned with Java. | v7.13.0"
+ "description": "Enable PMD | PMD is an extensible multilanguage static code analyzer. It’s mainly concerned with Java. | v7.15.0"
},
"config_file": {
"type": "string",
@@ -834,7 +834,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable CircleCI | CircleCI tool is a static checker for CircleCI config files. | v0.1.31687"
+ "description": "Enable CircleCI | CircleCI tool is a static checker for CircleCI config files. | v0.1.32638"
}
},
"additionalProperties": false,
@@ -860,7 +860,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable SQLFluff | SQLFluff is an open source, dialect-flexible and configurable SQL linter. | v3.4.0"
+ "description": "Enable SQLFluff | SQLFluff is an open source, dialect-flexible and configurable SQL linter. | v3.4.1"
}
},
"additionalProperties": false,
@@ -873,7 +873,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable Prisma Schema linting | Prisma Schema linting helps maintain consistent and error-free schema files | v0.10.1"
+ "description": "Enable Prisma Schema linting | Prisma Schema linting helps maintain consistent and error-free schema files | v0.10.2"
}
},
"additionalProperties": false,
From 626d15df59155c3c2b38696efd8c378f43c1373d Mon Sep 17 00:00:00 2001
From: alexcoderabbitai
Date: Tue, 15 Jul 2025 10:06:07 -0400
Subject: [PATCH 39/89] fix oxlint (#448)
---
docs/reference/configuration.md | 10 +++++-----
static/schema/schema.v2.json | 4 ++--
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/docs/reference/configuration.md b/docs/reference/configuration.md
index bd0b3e8e..5b59933f 100644
--- a/docs/reference/configuration.md
+++ b/docs/reference/configuration.md
@@ -3552,11 +3552,11 @@ markdownlint-cli2 is a static analysis tool to enforce standards and consistency
markdownlint-cli2 is a static analysis tool to enforce standards and consistency for Markdown files.
-### OXC
+### Oxlint
-OXC is a JavaScript/TypeScript linter written in Rust.
+Oxlint is a JavaScript/TypeScript linter for OXC written in Rust.
-#### Enable OXC
+#### Enable Oxlint
@@ -3564,7 +3564,7 @@ OXC is a JavaScript/TypeScript linter written in Rust.
| Location |
- Review > Tools > Enable OXC |
+ Review > Tools > Enable Oxlint |
| Default |
@@ -3591,7 +3591,7 @@ OXC is a JavaScript/TypeScript linter written in Rust.
-OXC is a JavaScript/TypeScript linter written in Rust.
+Oxlint is a JavaScript/TypeScript linter for OXC written in Rust.
### PHPStan
diff --git a/static/schema/schema.v2.json b/static/schema/schema.v2.json
index 1014db62..824eb84e 100644
--- a/static/schema/schema.v2.json
+++ b/static/schema/schema.v2.json
@@ -899,12 +899,12 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable OXC | OXC is a JavaScript/TypeScript linter written in Rust. | v0.16.10"
+ "description": "Enable Oxlint | Oxlint is a JavaScript/TypeScript linter for OXC written in Rust. | v0.16.10"
}
},
"additionalProperties": false,
"default": {},
- "description": "OXC is a JavaScript/TypeScript linter written in Rust."
+ "description": "Oxlint is a JavaScript/TypeScript linter for OXC written in Rust."
},
"shopifyThemeCheck": {
"type": "object",
From 5b9bd4495065e057d6937d1bf475c47215aaf8fe Mon Sep 17 00:00:00 2001
From: alexcoderabbitai
Date: Tue, 15 Jul 2025 13:56:58 -0400
Subject: [PATCH 40/89] Fix/dotenv (#449)
* add note on dotenv
* add note on dotenv
* fix sidebar
---
docs/tools/dotenv.md | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/docs/tools/dotenv.md b/docs/tools/dotenv.md
index cac2613f..a3a2dfd2 100644
--- a/docs/tools/dotenv.md
+++ b/docs/tools/dotenv.md
@@ -12,6 +12,15 @@ import ProPlanNotice from '@site/src/components/ProPlanNotice.mdx';
[Dotenv Linter](https://github.com/dotenv-linter/dotenv-linter) is a lightning-fast linter for `.env` files. It helps ensure your environment files are consistent, typo-free, and follow best practices.
+## Files
+
+Dotenv Linter will run on files with the following patterns:
+
+- `**/.env`
+- `**/.env.*`
+
+We will not run against files that do not start with `.env` (e.g., `test.env`). However `.env.dev` or `.env.local` is fine.
+
:::note
Dotenv Linter does not require configuration to run and automatically anlysises `.env` files. If no configuration file is found, it will use default settings.
From 66670128d6140d4c7703a560a859d125f1f82486 Mon Sep 17 00:00:00 2001
From: nimratcoderabbit
Date: Tue, 15 Jul 2025 13:06:34 -0500
Subject: [PATCH 41/89] Fix/sidebar tools (#451)
* fix sidebar
* in order
---------
Co-authored-by: alex
---
sidebars.ts | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/sidebars.ts b/sidebars.ts
index 3cc53ff0..0e93a242 100644
--- a/sidebars.ts
+++ b/sidebars.ts
@@ -176,16 +176,21 @@ const sidebars: SidebarsConfig = {
"tools/list",
"tools/actionlint",
"tools/biome",
+ "tools/brakeman",
"tools/buf",
+ "tools/checkmake",
"tools/checkov",
"tools/circleci",
+ "tools/clippy",
"tools/cppcheck",
"tools/detekt",
+ "tools/dotenv",
"tools/eslint",
"tools/flake8",
"tools/gitleaks",
"tools/golangci-lint",
"tools/hadolint",
+ "tools/htmlhint",
"tools/languagetool",
"tools/luacheck",
"tools/markdownlint",
@@ -196,6 +201,7 @@ const sidebars: SidebarsConfig = {
"tools/pipeline-remediation",
"tools/pmd",
"tools/prisma-lint",
+ "tools/pylint",
"tools/regal",
"tools/rubocop",
"tools/ruff",
From 8b27de2d638967df0e0866a4a4911ba6721208ff Mon Sep 17 00:00:00 2001
From: Iun-yapin
Date: Wed, 16 Jul 2025 03:07:40 +0800
Subject: [PATCH 42/89] Update the repository URL in README.md (#444)
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index bd76c6c5..8167aa97 100644
--- a/README.md
+++ b/README.md
@@ -45,7 +45,7 @@ Welcome to the official docs for [**CodeRabbit**](https://coderabbit.ai), the co
2. Clone this repository:
```sh
- git clone https://github.com/coderabbit-ai/coderabbit-docs.git
+ git clone https://github.com/coderabbitai/coderabbit-docs.git
cd coderabbit-docs
```
From 7232fa745c1be2e23af1e277a56ee9e9d4524397 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Tue, 15 Jul 2025 20:09:34 +0000
Subject: [PATCH 43/89] Update schema.v2.json
---
static/schema/schema.v2.json | 77 +++++++++++++++++++++++++++++++++++-
1 file changed, 76 insertions(+), 1 deletion(-)
diff --git a/static/schema/schema.v2.json b/static/schema/schema.v2.json
index 824eb84e..0ce4b7ac 100644
--- a/static/schema/schema.v2.json
+++ b/static/schema/schema.v2.json
@@ -137,7 +137,7 @@
},
"request_changes_workflow": {
"type": "boolean",
- "default": false,
+ "default": true,
"description": "Approve the review once CodeRabbit's comments are resolved. Note: In GitLab, all discussions must be resolved."
},
"high_level_summary": {
@@ -374,6 +374,81 @@
"additionalProperties": false,
"default": {}
},
+ "pre_merge_checks": {
+ "type": "object",
+ "properties": {
+ "docstrings": {
+ "type": "object",
+ "properties": {
+ "mode": {
+ "type": "string",
+ "enum": ["off", "warning", "error"],
+ "default": "warning",
+ "description": "Mode | Level of enforcement for docstring coverage check. Warning only generates a warning and does not require the user to resolve the check. While error requires the user to resolve issues before merging pull request."
+ },
+ "threshold": {
+ "type": "number",
+ "minimum": 0,
+ "maximum": 100,
+ "default": 80,
+ "description": "Percentage threshold for docstring coverage check."
+ }
+ },
+ "additionalProperties": false,
+ "default": {},
+ "description": "Docstring Coverage | Checks if the code has sufficient docstrings."
+ },
+ "title": {
+ "type": "object",
+ "properties": {
+ "mode": {
+ "type": "string",
+ "enum": ["off", "warning", "error"],
+ "default": "warning",
+ "description": "Mode | Level of enforcement for pull request title check. Warning only generates a warning and does not require the user to resolve the check. While error requires the user to resolve issues before merging pull request."
+ },
+ "requirements": {
+ "type": "string",
+ "default": "",
+ "description": "Requirements | Requirements for the pull request title. Example: 'Title should be concise and descriptive, ideally under 50 characters.'"
+ }
+ },
+ "additionalProperties": false,
+ "default": {},
+ "description": "Title Check | Checks if the pull request title is appropriate and follows best practices."
+ },
+ "description": {
+ "type": "object",
+ "properties": {
+ "mode": {
+ "type": "string",
+ "enum": ["off", "warning", "error"],
+ "default": "warning",
+ "description": "Mode | Level of enforcement for pull request description check. Warning only generates a warning and does not require the user to resolve the check. While error requires the user to resolve issues before merging pull request."
+ }
+ },
+ "additionalProperties": false,
+ "default": {},
+ "description": "Description Check | Checks if the pull request description is appropriate and follows best practices."
+ },
+ "issue_assessment": {
+ "type": "object",
+ "properties": {
+ "mode": {
+ "type": "string",
+ "enum": ["off", "warning", "error"],
+ "default": "warning",
+ "description": "Mode | Level of enforcement for linked issue assessment. Warning only generates a warning and does not require the user to resolve the check. While error requires the user to resolve issues before merging pull request."
+ }
+ },
+ "additionalProperties": false,
+ "default": {},
+ "description": "Linked Issue Assessment | Checks if the pull request addresses the linked issues. Generate an assessment of how well the changes address the linked issues."
+ }
+ },
+ "additionalProperties": false,
+ "default": {}
+ },
"tools": {
"type": "object",
"properties": {
From 76cd0339313c04b621f2fc2f92858e8bc026d52f Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Wed, 16 Jul 2025 03:52:38 +0000
Subject: [PATCH 44/89] Update schema.v2.json
---
static/schema/schema.v2.json | 77 +-----------------------------------
1 file changed, 1 insertion(+), 76 deletions(-)
diff --git a/static/schema/schema.v2.json b/static/schema/schema.v2.json
index 0ce4b7ac..824eb84e 100644
--- a/static/schema/schema.v2.json
+++ b/static/schema/schema.v2.json
@@ -137,7 +137,7 @@
},
"request_changes_workflow": {
"type": "boolean",
- "default": true,
+ "default": false,
"description": "Approve the review once CodeRabbit's comments are resolved. Note: In GitLab, all discussions must be resolved."
},
"high_level_summary": {
@@ -374,81 +374,6 @@
"additionalProperties": false,
"default": {}
},
- "pre_merge_checks": {
- "type": "object",
- "properties": {
- "docstrings": {
- "type": "object",
- "properties": {
- "mode": {
- "type": "string",
- "enum": ["off", "warning", "error"],
- "default": "warning",
- "description": "Mode | Level of enforcement for docstring coverage check. Warning only generates a warning and does not require the user to resolve the check. While error requires the user to resolve issues before merging pull request."
- },
- "threshold": {
- "type": "number",
- "minimum": 0,
- "maximum": 100,
- "default": 80,
- "description": "Percentage threshold for docstring coverage check."
- }
- },
- "additionalProperties": false,
- "default": {},
- "description": "Docstring Coverage | Checks if the code has sufficient docstrings."
- },
- "title": {
- "type": "object",
- "properties": {
- "mode": {
- "type": "string",
- "enum": ["off", "warning", "error"],
- "default": "warning",
- "description": "Mode | Level of enforcement for pull request title check. Warning only generates a warning and does not require the user to resolve the check. While error requires the user to resolve issues before merging pull request."
- },
- "requirements": {
- "type": "string",
- "default": "",
- "description": "Requirements | Requirements for the pull request title. Example: 'Title should be concise and descriptive, ideally under 50 characters.'"
- }
- },
- "additionalProperties": false,
- "default": {},
- "description": "Title Check | Checks if the pull request title is appropriate and follows best practices."
- },
- "description": {
- "type": "object",
- "properties": {
- "mode": {
- "type": "string",
- "enum": ["off", "warning", "error"],
- "default": "warning",
- "description": "Mode | Level of enforcement for pull request description check. Warning only generates a warning and does not require the user to resolve the check. While error requires the user to resolve issues before merging pull request."
- }
- },
- "additionalProperties": false,
- "default": {},
- "description": "Description Check | Checks if the pull request description is appropriate and follows best practices."
- },
- "issue_assessment": {
- "type": "object",
- "properties": {
- "mode": {
- "type": "string",
- "enum": ["off", "warning", "error"],
- "default": "warning",
- "description": "Mode | Level of enforcement for linked issue assessment. Warning only generates a warning and does not require the user to resolve the check. While error requires the user to resolve issues before merging pull request."
- }
- },
- "additionalProperties": false,
- "default": {},
- "description": "Linked Issue Assessment | Checks if the pull request addresses the linked issues. Generate an assessment of how well the changes address the linked issues."
- }
- },
- "additionalProperties": false,
- "default": {}
- },
"tools": {
"type": "object",
"properties": {
From f316bd1e7eb836c30cac87b864c27f7534f95c71 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Wed, 16 Jul 2025 04:29:11 +0000
Subject: [PATCH 45/89] Update schema.v2.json
---
static/schema/schema.v2.json | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/static/schema/schema.v2.json b/static/schema/schema.v2.json
index 824eb84e..67d98b12 100644
--- a/static/schema/schema.v2.json
+++ b/static/schema/schema.v2.json
@@ -988,6 +988,11 @@
"additionalProperties": false,
"description": "Tools that provide additional context to code reviews.",
"default": {}
+ },
+ "pre_merge_checks": {
+ "type": "object",
+ "additionalProperties": {},
+ "default": {}
}
},
"additionalProperties": false,
From 9423a79c9821267a6b829bb627fe29b0c585990f Mon Sep 17 00:00:00 2001
From: Ankit Jena
Date: Wed, 16 Jul 2025 12:17:47 +0530
Subject: [PATCH 46/89] update fix with ai agents list (#455)
* update fix with ai agents list
* minor update
---------
Co-authored-by: Ankit
---
docs/guides/config-vscode.md | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/docs/guides/config-vscode.md b/docs/guides/config-vscode.md
index 02f60d8c..41afc157 100644
--- a/docs/guides/config-vscode.md
+++ b/docs/guides/config-vscode.md
@@ -28,17 +28,21 @@ The **Agent Type** setting lets you choose the extension's response to using the
- **Native**: The extension prompts the AI agent associated with your IDE to apply the suggested fix.
- This works only with VSCode, using Copilot. If you have this option selected when using a different IDE, then the extension instead copies the prompt to your clipboard.
+ This works only with VSCode(using Copilot) and Cursor(you have to start the task). If you have this option selected when using a different IDE, then the extension instead copies the prompt to your clipboard.
-- **Claude Code**: The extension opens the Terminal pane of your IDE and tries to use the `claude` command-line program to apply the suggested fix to your code. You need to have Claude Code installed for this option to be effective.
+- **Claude Code**: The extension opens the Terminal pane of your IDE and tries to use the `claude` command-line program to apply the suggested fix to your code. You need to have [Claude Code](https://www.anthropic.com/claude-code) installed for this option to be effective.
-- **Codex CLI**: The extension opens the Terminal pane of your IDE and tries to use the `codex` command-line program to apply the suggested fix to your code. You need to have Codex CLI installed for this option to be effective.
+- **Codex CLI**: The extension opens the Terminal pane of your IDE and tries to use the `codex` command-line program to apply the suggested fix to your code. You need to have [Codex CLI](https://github.com/openai/codex) installed for this option to be effective.
-- **Cline**: The extension opens the `Cline` sidebar and runs a task to apply the suggested fix to your code. You need to have the `Cline` extension installed for this option to be effective.
+- **OpenCode**: The extension opens the Terminal pane of your IDE and tries to use the `opencode` command-line program to apply the suggested fix to your code. You need to have [OpenCode](https://opencode.ai) installed for this option to be effective.
-- **Roo**: The extension opens the `Roo` sidebar and runs a task to apply the suggested fix to your code. You need to have the `Roo` extension installed for this option to be effective.
+- **Cline**: The extension opens the `Cline` sidebar and runs a task to apply the suggested fix to your code. You need to have the [Cline](https://cline.bot/) extension installed for this option to be effective.
-- **Kilo Code**: The extension opens the `Kilo Code` sidebar and runs a task to apply the suggested fix to your code. You need to have the `Kilo Code` extension installed for this option to be effective.
+- **Roo**: The extension opens the `Roo` sidebar and runs a task to apply the suggested fix to your code. You need to have the [Roo](https://github.com/RooCodeInc/Roo-Code) extension installed for this option to be effective.
+
+- **Kilo Code**: The extension opens the `Kilo Code` sidebar and runs a task to apply the suggested fix to your code. You need to have the [Kilo Code](https://kilocode.ai/) extension installed for this option to be effective.
+
+- **Augment Code**: The extension opens the `Augment Code` sidebar with the prompt to apply the suggested fix to your code, and you can start the task. You need to have the [Augment Code](https://www.augmentcode.com/) extension installed for this option to be effective.
- **Clipboard**: The extension copies prompt text describing the suggested fix to your clipboard. From there, you can manually paste the prompt into the coding AI agent that you use with your IDE.
From 8c835f995387e9fc2722d6f9d2eb42329fbe4e85 Mon Sep 17 00:00:00 2001
From: Hasit Mistry
Date: Wed, 16 Jul 2025 01:13:26 -0700
Subject: [PATCH 47/89] Enhance gitlab-webhook.sh: add verbose option and
improve error handling (#456)
* Enhance gitlab-webhook.sh: add verbose option and improve error handling
* Fix log message formatting for no processed projects in gitlab-webhook.sh
---
static/code/gitlab-webhook.sh | 143 ++++++++++++++++++++++++++++++----
1 file changed, 126 insertions(+), 17 deletions(-)
mode change 100644 => 100755 static/code/gitlab-webhook.sh
diff --git a/static/code/gitlab-webhook.sh b/static/code/gitlab-webhook.sh
old mode 100644
new mode 100755
index 1458ba0d..87c3be7d
--- a/static/code/gitlab-webhook.sh
+++ b/static/code/gitlab-webhook.sh
@@ -34,7 +34,7 @@ usage() {
cat < -u -s \\
- [-t ] [-A ] [-p | -g ]
+ [-t ] [-A ] [-p | -g ] [-v]
Required:
-h GitLab host (e.g. gitlab.example.com)
@@ -50,15 +50,18 @@ Authentication (one of):
Scope (choose one):
-p Project ID or full path (e.g. 42 or group/app)
-g Group ID or full path, recurse through all subgroups & projects
+
+Options:
+ -v Verbose output (show individual project IDs in final summary)
EOF
exit 1
}
HOST="" HOOK_URL="" HOOK_SECRET=""
TOKEN="${GITLAB_TOKEN:-}" AUTH_HEADER=""
-PROJECT="" GROUP=""
+PROJECT="" GROUP="" VERBOSE=false
-while getopts "h:u:s:t:A:p:g:" opt; do
+while getopts "h:u:s:t:A:p:g:v" opt; do
case "$opt" in
h) HOST=$OPTARG ;;
u) HOOK_URL=$OPTARG ;;
@@ -67,6 +70,7 @@ while getopts "h:u:s:t:A:p:g:" opt; do
A) AUTH_HEADER=$OPTARG ;;
p) PROJECT=$OPTARG ;;
g) GROUP=$OPTARG ;;
+ v) VERBOSE=true ;;
*) usage ;;
esac
done
@@ -78,7 +82,7 @@ done
# Token handling
if [[ -z $TOKEN ]]; then
- echo "❌ No access token provided. Use -t or set \$GITLAB_TOKEN" >&2
+ echo "[ERROR] No access token provided. Use -t or set \$GITLAB_TOKEN" >&2
exit 1
fi
@@ -98,6 +102,11 @@ CURL_BASE=(curl -sSf --header "${AUTH_HEADER}: ${TOKEN}")
declare -A PROCESSED_PROJECTS
# Track projects where webhooks were successfully added
WEBHOOK_PROJECTS=()
+# Track projects where webhooks already existed
+EXISTING_WEBHOOK_PROJECTS=()
+# Progress counters
+TOTAL_PROJECTS_FOUND=0
+PROJECTS_PROCESSED=0
##############################################################################
# Helpers
@@ -108,6 +117,63 @@ url_encode() {
printf '%s' "$string" | sed 's/\//%2F/g; s/ /%20/g; s/@/%40/g; s/:/%3A/g; s/#/%23/g; s/?/%3F/g; s/&/%26/g; s/=/%3D/g; s/+/%2B/g'
}
+# Function to handle paginated API calls
+fetch_paginated() {
+ local url=$1
+ local page=1
+ local per_page=100
+
+ while true; do
+ local paginated_url="${url}?per_page=${per_page}&page=${page}"
+
+ # Add existing query params if they exist
+ if [[ "$url" == *"?"* ]]; then
+ paginated_url="${url}&per_page=${per_page}&page=${page}"
+ fi
+
+ local response
+ response=$("${CURL_BASE[@]}" "$paginated_url" 2>/dev/null) || {
+ echo "[ERROR] Failed to fetch page $page from $url" >&2
+ return 1
+ }
+
+ # Check if response is empty array or null
+ if [[ "$response" == "[]" || "$response" == "null" ]]; then
+ break
+ fi
+
+ # Extract results from current page
+ local page_results
+ page_results=$(echo "$response" | jq -r '.[].id' 2>/dev/null) || {
+ echo "[ERROR] Failed to parse JSON response from page $page" >&2
+ return 1
+ }
+
+ # If no results on this page, we're done
+ if [[ -z "$page_results" ]]; then
+ break
+ fi
+
+ # Count projects found and show progress
+ local page_count
+ page_count=$(echo "$page_results" | wc -l)
+ TOTAL_PROJECTS_FOUND=$((TOTAL_PROJECTS_FOUND + page_count))
+ echo "[PROGRESS] Found $page_count projects on page $page (total: $TOTAL_PROJECTS_FOUND)" >&2
+
+ # Output page results
+ echo "$page_results"
+
+ # If we got less than per_page results, we're on the last page
+ local item_count
+ item_count=$(echo "$response" | jq '. | length' 2>/dev/null) || 0
+ if [[ "$item_count" -lt "$per_page" ]]; then
+ break
+ fi
+
+ ((page++))
+ done
+}
+
create_hook() {
local pid=$1
@@ -118,6 +184,7 @@ create_hook() {
# Mark as processed
PROCESSED_PROJECTS[$pid]=1
+ PROJECTS_PROCESSED=$((PROJECTS_PROCESSED + 1))
local encoded_pid
# URL encode if pid is not purely numeric
@@ -127,6 +194,22 @@ create_hook() {
encoded_pid=$(url_encode "$pid")
fi
+ # Check if webhook already exists
+ local existing_webhooks
+ existing_webhooks=$("${CURL_BASE[@]}" "${API}/projects/${encoded_pid}/hooks" 2>/dev/null) || {
+ echo "[ERROR] Failed to fetch existing webhooks for project $pid" >&2
+ return 1
+ }
+
+ # Check if our webhook URL already exists
+ if echo "$existing_webhooks" | jq -e --arg url "$HOOK_URL" '.[] | select(.url == $url)' >/dev/null 2>&1; then
+ [[ "$VERBOSE" == "true" ]] && echo "[INFO] Webhook already exists for project: $pid" >&2
+ EXISTING_WEBHOOK_PROJECTS+=("$pid")
+ return 0
+ fi
+
+ [[ "$VERBOSE" == "true" ]] && echo "[INFO] Adding webhook to project: $pid" >&2
+
"${CURL_BASE[@]}" --request POST \
--data-urlencode "url=${HOOK_URL}" \
--data "token=${HOOK_SECRET}" \
@@ -151,38 +234,64 @@ traverse_group() {
else
encoded_gid=$(url_encode "$gid")
fi
- # projects (includes nested sub-groups)
+
+ # projects (includes nested sub-groups) - with pagination
while IFS= read -r pid; do
[[ -n "$pid" ]] && create_hook "$pid"
done < <(
- "${CURL_BASE[@]}" \
- "${API}/groups/${encoded_gid}/projects?include_subgroups=true&per_page=100" |
- jq -r '.[].id'
+ fetch_paginated "${API}/groups/${encoded_gid}/projects?include_subgroups=true"
)
- # recurse explicit subgroups (older GitLab)
+
+ # recurse explicit subgroups (older GitLab) - with pagination
while IFS= read -r sg; do
[[ -n "$sg" ]] && traverse_group "$sg"
done < <(
- "${CURL_BASE[@]}" "${API}/groups/${encoded_gid}/subgroups?per_page=100" |
- jq -r '.[].id'
+ fetch_paginated "${API}/groups/${encoded_gid}/subgroups"
)
}
##############################################################################
# Main
##############################################################################
+echo "[INFO] Starting webhook processing..." >&2
+
if [[ -n $PROJECT ]]; then
+ echo "[INFO] Processing single project: $PROJECT" >&2
create_hook "$PROJECT"
else
+ echo "[INFO] Processing group and subgroups: $GROUP" >&2
traverse_group "$GROUP"
fi
+echo "[INFO] Finished processing all projects" >&2
+
# Print final summary
-if [[ ${#WEBHOOK_PROJECTS[@]} -eq 0 ]]; then
- echo "❌ No webhooks were installed."
+total_projects=$((${#WEBHOOK_PROJECTS[@]} + ${#EXISTING_WEBHOOK_PROJECTS[@]}))
+
+if [[ $total_projects -eq 0 ]]; then
+ echo "[INFO] No projects were processed"
else
- echo "✅ Webhooks installed successfully on ${#WEBHOOK_PROJECTS[@]} project(s):"
- for pid in "${WEBHOOK_PROJECTS[@]}"; do
- echo " - Project ID: $pid"
- done
+ if [[ ${#WEBHOOK_PROJECTS[@]} -gt 0 ]]; then
+ if [[ "$VERBOSE" == "true" ]]; then
+ echo "[INFO] Webhooks installed successfully on ${#WEBHOOK_PROJECTS[@]} project(s):"
+ for pid in "${WEBHOOK_PROJECTS[@]}"; do
+ echo " - Project ID: $pid"
+ done
+ else
+ echo "[INFO] Webhooks installed successfully on ${#WEBHOOK_PROJECTS[@]} project(s)"
+ fi
+ fi
+
+ if [[ ${#EXISTING_WEBHOOK_PROJECTS[@]} -gt 0 ]]; then
+ if [[ "$VERBOSE" == "true" ]]; then
+ echo "[INFO] Webhooks already existed on ${#EXISTING_WEBHOOK_PROJECTS[@]} project(s):"
+ for pid in "${EXISTING_WEBHOOK_PROJECTS[@]}"; do
+ echo " - Project ID: $pid"
+ done
+ else
+ echo "[INFO] Webhooks already existed on ${#EXISTING_WEBHOOK_PROJECTS[@]} project(s)"
+ fi
+ fi
+
+ echo "[INFO] Total projects processed: $total_projects"
fi
From 679a38077001fbc2db917f20df4d35d37275c92f Mon Sep 17 00:00:00 2001
From: alexcoderabbitai
Date: Wed, 16 Jul 2025 15:34:15 -0400
Subject: [PATCH 48/89] update shopify theme requirements (#458)
---
docs/tools/shopify-cli.md | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/docs/tools/shopify-cli.md b/docs/tools/shopify-cli.md
index 934a6345..cc574723 100644
--- a/docs/tools/shopify-cli.md
+++ b/docs/tools/shopify-cli.md
@@ -12,6 +12,31 @@ import ProPlanNotice from '@site/src/components/ProPlanNotice.mdx';
[Shopify CLI](https://github.com/Shopify/cli) is a command-line tool that helps you build Shopify apps, themes, and custom storefronts. It provides functionality for initializing, building, developing, and deploying Shopify projects.
+## Requirements
+
+The tool only runs when the following conditions are met:
+
+### File Types
+
+- Only processes pull requests changing `*.liquid` files
+
+### Configuration Files
+
+- Requires either `.theme-check.yml` or `.theme-check.yaml` configuration file in the project root
+
+### Directory Structure
+
+- Requires the standard Shopify theme directory structure at the project root:
+ - `assets/`
+ - `config/`
+ - `layout/`
+ - `locales/`
+ - `sections/`
+ - `snippets/`
+ - `templates/`
+
+If any of these requirements are not met, the tool will not run.
+
## Validation Rules
The tool checks for:
From 75408fc58bb6b0010d335ea57586ae3ad826b578 Mon Sep 17 00:00:00 2001
From: alexcoderabbitai
Date: Thu, 17 Jul 2025 10:49:37 -0400
Subject: [PATCH 49/89] fix on-demand info (#459)
---
docs/guides/ondemand-reports.md | 2 +-
docs/guides/reports-overview.md | 6 +++---
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/docs/guides/ondemand-reports.md b/docs/guides/ondemand-reports.md
index ee385622..af380164 100644
--- a/docs/guides/ondemand-reports.md
+++ b/docs/guides/ondemand-reports.md
@@ -14,7 +14,7 @@ import ProPlanNotice from '@site/src/components/ProPlanNotice.mdx';
This page is about using the CodeRabbit API to generate on-demand reports about your organization's usage of CodeRabbit. For a conceptual overview of reports in CodeRabbit, see [Generate reports](/guides/reports-overview).
-If you're new to CodeRabbit's reporting features, then we recommend starting with [Scheduled reports](/guides/scheduled-reports) to understand the available options and capabilities.
+If you're new to CodeRabbit's reporting features, then we recommend starting with [Scheduled reports](/guides/scheduled-reports) to understand the available options and capabilities. In almost every scenario we recommend using the **Scheduled Reports** option. The **On-demand Report** does not have any additional benifits from the **Scheduled Reports** and has many limitations.
## API Access
diff --git a/docs/guides/reports-overview.md b/docs/guides/reports-overview.md
index 4d8759ed..b15329f0 100644
--- a/docs/guides/reports-overview.md
+++ b/docs/guides/reports-overview.md
@@ -17,16 +17,16 @@ You can track and analyze pull request activity across your organization's repos
There are two ways to generate reports:
-- **[Scheduled Reports](/guides/scheduled-reports)**: Set up automated, recurring reports that are delivered to your team on a set schedule. Supported delivery channels include the following:
+- **[Scheduled Reports](/guides/scheduled-reports)**: Set up automated, recurring reports that are delivered to your team on a set schedule. **Use this option if you want to adjust your settings and send a report more than once**. Supported delivery channels include the following:
- Email
- Discord
- Slack
- Teams
-- **[On-demand Reports](/guides/ondemand-reports)**: If you require customized integration of reports with your own tools and workflows, then you can generate reports programmatically through our API.
+- **[On-demand Reports](/guides/ondemand-reports)**: If you want to test a report format and produce a single report once, try the "On-demand Reports" Option. You can also generate reports programmatically through our API, but we do not recommend this as the API reporting is in beta. If you want to run an **On-demand Report** more than once then you must use the **Scheduled Reports** option.
-For your first reports, we recommend exploring scheduled reports. Its web-based UI can help you get familiar with the options available to you.
+In almost every scenario we recommend using the **Scheduled Reports** option. The **On-demand Report** does not have any additional benifits from the **Scheduled Reports** and has many limitations.
## Customize reports using natural language {#customize}
From d3f45f69a1ec1b0e660777318912d0ebe87f684e Mon Sep 17 00:00:00 2001
From: alexcoderabbitai
Date: Thu, 17 Jul 2025 14:27:36 -0400
Subject: [PATCH 50/89] add in docs for new reporting filtering and data (#461)
* add in docs for new reporting filtering and data
* update changelog
* fix title
* add score card info in
* minor docs improvements
---
docs/changelog.md | 22 ++++++++++++++++++++++
docs/guides/custom-reports.md | 12 ++++++++++--
docs/guides/scheduled-reports.md | 3 ++-
3 files changed, 34 insertions(+), 3 deletions(-)
diff --git a/docs/changelog.md b/docs/changelog.md
index d273ffcb..9fe435ad 100644
--- a/docs/changelog.md
+++ b/docs/changelog.md
@@ -5,6 +5,28 @@ description: The latest updates and changes to CodeRabbit.
sidebar_position: 13
---
+## July 17, 2025
+
+### Enhanced Reporting Capabilities
+
+We're excited to announce significant improvements to our reporting system that will make your automated reports more powerful and actionable!
+
+#### Exclusion Filters with NOT_IN Option
+
+Reports now support exclusion filters using the `NOT_IN` option, allowing you to filter out pull requests based on their repository, label, user, or team. This gives you more granular control over what appears in your reports, helping you focus on the most relevant information.
+
+#### Next Steps Section in Daily Standup Reports
+
+We've enhanced the default daily standup report template to include a "Next Steps" section. This provides clear guidance on what actions authors and reviewers should take regarding each pull request or change, making your reports more actionable and helping teams stay on track.
+
+#### CI/CD GitHub Action Check Status Awareness
+
+Reports now include CI/CD GitHub Action check status as a data source. Your reports will be aware of which CI/CD checks are failing or passing, giving you better visibility into the health of your pull requests and helping identify potential issues before they become blockers.
+
+#### Score Card Custom Report Option
+
+We've added a new optional score card report feature that allows you to grade and create report cards for your developers. This custom report optional data source provides a structured way to evaluate developer performance and contributions. See our [custom reports documentation](/guides/custom-reports#remove-prs-without-a-score-cardchart-bot-comment) for more details on how to implement score cards in your reports.
+
## July 10, 2025
### Enhanced Python Static Analysis: nbqa Support for Jupyter Notebooks
diff --git a/docs/guides/custom-reports.md b/docs/guides/custom-reports.md
index a22b359e..b2a10504 100644
--- a/docs/guides/custom-reports.md
+++ b/docs/guides/custom-reports.md
@@ -117,6 +117,14 @@ Contained within the `` tag.
- ``: datetime - The date and time the comment was last updated.
- ``: markdown - The content of the comment.
+#### CI/CD Check Status
+
+- ``: array of check objects - Contains all CI/CD checks for the PR. _GitHub Only_.
+- ``: object - Each individual check is wrapped in this tag and is an object with the following properties:
+ - ``: string - The name of the CI/CD check.
+ - ``: string - The status of the check (e.g., "success", "failure", "in_progress", "canceled").
+ - ``: string - The URL to view the detailed results of the check.
+
Here's an example prompt that uses these data points:
```text
@@ -299,7 +307,7 @@ Issues and tickets brings in conversations, descriptions, and comments from Jira
This option gives you the ability to create a report limited only to pull requests containing a "Score Card" or "Score Chart" bot comment from CodeRabbit or other bots. To enable issues and tickets you must include the tag `` in your prompt.
-> **IMPORTANT:** This will automatically remove any pull requests from your reports if they do not contain a "Score Card" or "Score Chart" bot comment. Using this option without setting up a flow to create these comments will result in `No new pull request activity in the last XYZ hours` errors. Do not enable this option unless you have created a "Score Card" or "Score Chart" bot comment flow.
+> **IMPORTANT:** This will automatically remove any pull requests from your reports if they do not contain a "Score Card" or "Score Chart" bot comment. Using this option without setting up a flow to create these comments will result in `No new pull request activity in the last XYZ hours` errors. Do not enable this option unless you have asked coderabbit to create a "Score Card" thourhg a comment or implimented the "Score Chart" bot comment flow below.
For example you can ask coderabbit to check serveral conditions on a pull request and produce a "Score Chart":
@@ -340,7 +348,7 @@ Generate a weekly code review report for the author of this pull request only fo
- `1` → Passed
**Final Score Calculation:**
-Combine the scores from the parameters above to derive the final code quality score (out of 5).
+Combine the scores from the parameters above to derive the final code quality score (out of 9).
**Output Format:**
Provide the final report in a table format with the following columns (use shorthand notations), be sure to include this list at the top above the chart in the "Column Notation" section so users understand what the columns mean:
diff --git a/docs/guides/scheduled-reports.md b/docs/guides/scheduled-reports.md
index 34c59032..cef41d46 100644
--- a/docs/guides/scheduled-reports.md
+++ b/docs/guides/scheduled-reports.md
@@ -52,11 +52,12 @@ Choose a time that works for all team members, especially for distributed teams
### Report Parameters
-Reports can be filtered using multiple parameters:
+Reports can be filtered using multiple parameters, match pull requests using the **IN** option and exclude pull requests using the **NOT_IN** option:
- **Repositories**: Select specific repositories to monitor
- **Labels**: Filter by GitHub labels with operators:
- IN: Match any selected label
+ - NOT_IN: Exclude any pr with select label
- ALL: Match all selected labels
- **Users**: Filter by specific GitHub users
- **Teams**: Filter by organization teams
From 38ceb293acfb16edf43501f6d34fa9aea0cf968b Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Thu, 17 Jul 2025 18:39:05 +0000
Subject: [PATCH 51/89] Update schema.v2.json
---
static/schema/schema.v2.json | 80 +++++++++++++++++++++++++++++++++---
1 file changed, 75 insertions(+), 5 deletions(-)
diff --git a/static/schema/schema.v2.json b/static/schema/schema.v2.json
index 67d98b12..afde59e4 100644
--- a/static/schema/schema.v2.json
+++ b/static/schema/schema.v2.json
@@ -374,6 +374,81 @@
"additionalProperties": false,
"default": {}
},
+ "pre_merge_checks": {
+ "type": "object",
+ "properties": {
+ "docstrings": {
+ "type": "object",
+ "properties": {
+ "mode": {
+ "type": "string",
+ "enum": ["off", "warning", "error"],
+ "default": "warning",
+ "description": "Mode | Level of enforcement for docstring coverage check. Warning only generates a warning and does not require the user to resolve the check. While error requires the user to resolve issues before merging pull request."
+ },
+ "threshold": {
+ "type": "number",
+ "minimum": 0,
+ "maximum": 100,
+ "default": 80,
+ "description": "Percentage threshold for docstring coverage check."
+ }
+ },
+ "additionalProperties": false,
+ "default": {},
+ "description": "Docstring Coverage | Checks if the code has sufficient docstrings."
+ },
+ "title": {
+ "type": "object",
+ "properties": {
+ "mode": {
+ "type": "string",
+ "enum": ["off", "warning", "error"],
+ "default": "warning",
+ "description": "Mode | Level of enforcement for pull request title check. Warning only generates a warning and does not require the user to resolve the check. While error requires the user to resolve issues before merging pull request."
+ },
+ "requirements": {
+ "type": "string",
+ "default": "",
+ "description": "Requirements | Requirements for the pull request title. Example: 'Title should be concise and descriptive, ideally under 50 characters.'"
+ }
+ },
+ "additionalProperties": false,
+ "default": {},
+ "description": "Title Check | Checks if the pull request title is appropriate and follows best practices."
+ },
+ "description": {
+ "type": "object",
+ "properties": {
+ "mode": {
+ "type": "string",
+ "enum": ["off", "warning", "error"],
+ "default": "warning",
+ "description": "Mode | Level of enforcement for pull request description check. Warning only generates a warning and does not require the user to resolve the check. While error requires the user to resolve issues before merging pull request."
+ }
+ },
+ "additionalProperties": false,
+ "default": {},
+ "description": "Description Check | Checks if the pull request description is appropriate and follows best practices."
+ },
+ "issue_assessment": {
+ "type": "object",
+ "properties": {
+ "mode": {
+ "type": "string",
+ "enum": ["off", "warning", "error"],
+ "default": "warning",
+ "description": "Mode | Level of enforcement for linked issue assessment. Warning only generates a warning and does not require the user to resolve the check. While error requires the user to resolve issues before merging pull request."
+ }
+ },
+ "additionalProperties": false,
+ "default": {},
+ "description": "Linked Issue Assessment | Checks if the pull request addresses the linked issues. Generate an assessment of how well the changes address the linked issues."
+ }
+ },
+ "additionalProperties": false,
+ "default": {}
+ },
"tools": {
"type": "object",
"properties": {
@@ -988,11 +1063,6 @@
"additionalProperties": false,
"description": "Tools that provide additional context to code reviews.",
"default": {}
- },
- "pre_merge_checks": {
- "type": "object",
- "additionalProperties": {},
- "default": {}
}
},
"additionalProperties": false,
From dbdf99f7527070a76f2355d55c06878ce8b963b2 Mon Sep 17 00:00:00 2001
From: Jason McIntosh
Date: Fri, 18 Jul 2025 10:49:48 -0400
Subject: [PATCH 52/89] Clarify the permissions that CodeRabbit needs. (#460)
* Clarify the permissions that CodeRabbit needs.
* Clarify the wording of permission-granting steps.
---
docs/platforms/azure-devops.md | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/docs/platforms/azure-devops.md b/docs/platforms/azure-devops.md
index 12b70765..b88ebcd7 100644
--- a/docs/platforms/azure-devops.md
+++ b/docs/platforms/azure-devops.md
@@ -94,9 +94,8 @@ Follow these steps to generate the token:
5. Select the organization you want to use the token with or select "All
accessible organizations."
6. Enter a name and an expiry date for the token.
-7. We need to have read & write access to "Work Items" & "Code" to post reviews
- on pull requests. If you are on the Pro tier also add "Build" access for pipeline
- failure remediation.
-8. Click "Create"
+7. Grant **Read, write, & manage** access to "Work Items" and "Code". CodeRabbit needs these permissions to post code reviews on pull requests.
+8. If you subscribe to CodeRabbit Pro, then you can also grant **Read** access to "Build" for pipeline failure remediation.
+9. Click "Create"

From 26b031a36ea0150f5fe149062874ea19196fa0ed Mon Sep 17 00:00:00 2001
From: Hasit Mistry
Date: Fri, 18 Jul 2025 11:22:34 -0700
Subject: [PATCH 53/89] Add cross-region inference option for AWS in
self-hosted documentation (#464)
* Add cross-region inference option for AWS in self-hosted documentation
* Clarify cross-region inference documentation across Azure DevOps, Bitbucket, GitHub, and GitLab integration guides
---
docs/self-hosted/azure-devops.md | 3 +++
docs/self-hosted/bitbucket.md | 3 +++
docs/self-hosted/github.md | 3 +++
docs/self-hosted/gitlab.md | 3 +++
4 files changed, 12 insertions(+)
diff --git a/docs/self-hosted/azure-devops.md b/docs/self-hosted/azure-devops.md
index c8926b0f..7fc28ad8 100644
--- a/docs/self-hosted/azure-devops.md
+++ b/docs/self-hosted/azure-devops.md
@@ -103,6 +103,9 @@ LLM_TIMEOUT=360000
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_REGION=
+# optionally, use cross-region inference to access models in other regions
+# if this is set to `true`, CodeRabbit will access models from `us`, `eu`, or `ap` regions based on the AWS_REGION value.
+AWS_USE_CROSS_REGION_INFERENCE=[]
TEMP_PATH=/cache
diff --git a/docs/self-hosted/bitbucket.md b/docs/self-hosted/bitbucket.md
index bccbb251..d1ef7492 100644
--- a/docs/self-hosted/bitbucket.md
+++ b/docs/self-hosted/bitbucket.md
@@ -95,6 +95,9 @@ LLM_TIMEOUT=360000
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_REGION=
+# optionally, use cross-region inference to access models in other regions
+# if this is set to `true`, CodeRabbit will access models from `us`, `eu`, or `ap` regions based on the AWS_REGION value.
+AWS_USE_CROSS_REGION_INFERENCE=[]
# System Configuration
TEMP_PATH=/cache
diff --git a/docs/self-hosted/github.md b/docs/self-hosted/github.md
index 6e2b27c1..c91d3cbf 100644
--- a/docs/self-hosted/github.md
+++ b/docs/self-hosted/github.md
@@ -106,6 +106,9 @@ LLM_TIMEOUT=360000
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_REGION=
+# optionally, use cross-region inference to access models in other regions
+# if this is set to `true`, CodeRabbit will access models from `us`, `eu`, or `ap` regions based on the AWS_REGION value.
+AWS_USE_CROSS_REGION_INFERENCE=[]
# if using Anthropic
LLM_PROVIDER=anthropic
diff --git a/docs/self-hosted/gitlab.md b/docs/self-hosted/gitlab.md
index 395d93fc..c0535646 100644
--- a/docs/self-hosted/gitlab.md
+++ b/docs/self-hosted/gitlab.md
@@ -134,6 +134,9 @@ LLM_TIMEOUT=360000
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_REGION=
+# optionally, use cross-region inference to access models in other regions
+# if this is set to `true`, CodeRabbit will access models from `us`, `eu`, or `ap` regions based on the AWS_REGION value.
+AWS_USE_CROSS_REGION_INFERENCE=[]
# if using Anthropic
LLM_PROVIDER=anthropic
From e4deac0d5ade69f1aa7252f4df7483aa17f92704 Mon Sep 17 00:00:00 2001
From: Jason McIntosh
Date: Fri, 18 Jul 2025 14:49:12 -0400
Subject: [PATCH 54/89] Don't require typescript reviewers for ToC changes.
(#453)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* Don't require typescript reviewers for ToC changes.
* Be more specific about the typescript file locations.
* 📄 src/**/*.tsx @coderabbitai/react-reviewers
---------
Co-authored-by: Nato Boram
---
.github/CODEOWNERS | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index dbd44b4a..5c7190be 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -1 +1,3 @@
-*.ts @coderabbitai/typescript-reviewers
+docusaurus.config.ts @coderabbitai/typescript-reviewers
+src/**/*.ts @coderabbitai/typescript-reviewers
+src/**/*.tsx @coderabbitai/react-reviewers
From 2f756f3bf77014f1b60d243d957359d79f12cd65 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Mon, 21 Jul 2025 02:36:11 +0000
Subject: [PATCH 55/89] Update schema.v2.json
---
static/schema/schema.v2.json | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/static/schema/schema.v2.json b/static/schema/schema.v2.json
index afde59e4..15ad2227 100644
--- a/static/schema/schema.v2.json
+++ b/static/schema/schema.v2.json
@@ -195,6 +195,11 @@
"default": true,
"description": "Generate sequence diagrams in the walkthrough."
},
+ "estimate_code_review_effort": {
+ "type": "boolean",
+ "default": true,
+ "description": "Estimate the code review effort in the walkthrough."
+ },
"assess_linked_issues": {
"type": "boolean",
"default": true,
From 8a0881fd7c01ef42e7643bff8ff70a7e90d699d5 Mon Sep 17 00:00:00 2001
From: Ankit Jena
Date: Tue, 22 Jul 2025 10:42:06 +0530
Subject: [PATCH 56/89] add docs for extension with self-hosted (#465)
* add docs for extension with self-hosted
* nit fix
---------
Co-authored-by: Ankit Jena
---
docs/guides/about-vscode.md | 1 +
docs/guides/config-vscode.md | 6 ++----
docs/guides/install-vscode.md | 2 +-
docs/guides/use-vscode-selfhosted.md | 29 ++++++++++++++++++++++++++++
4 files changed, 33 insertions(+), 5 deletions(-)
create mode 100644 docs/guides/use-vscode-selfhosted.md
diff --git a/docs/guides/about-vscode.md b/docs/guides/about-vscode.md
index 3e484ffe..ada6f06f 100644
--- a/docs/guides/about-vscode.md
+++ b/docs/guides/about-vscode.md
@@ -35,3 +35,4 @@ The extension makes only basic CodeRabbit review features available, with defaul
- [Install the VSCode extension](/guides/install-vscode)
- [Use the VSCode extension](/guides/use-vscode)
+- [Use with Self-hosted CodeRabbit](/guides/use-vscode-selfhosted)
diff --git a/docs/guides/config-vscode.md b/docs/guides/config-vscode.md
index 41afc157..8bd0672a 100644
--- a/docs/guides/config-vscode.md
+++ b/docs/guides/config-vscode.md
@@ -60,11 +60,9 @@ The **Auto Review Mode** setting lets you control the behavior of the automatic
For more information about this feature, see [Automatically review local commits](/guides/use-vscode#auto-reviews).
-## Set a review timeout {#timeout}
+## Use with self-hosted CodeRabbit {#self-hosted-coderabbit}
-The **Review Timeout** setting lets you specify how long the extension waits for a response from CodeRabbit remote servers before timing out a code review. The default value is `20`.
-
-To turn off timeouts, set this value to `0`.
+This setting is only used when you're using a self-hosted instance of CodeRabbit. If you're using the CodeRabbit Cloud service, you don't need to configure this setting. You will need to login and logout of the extension after adding this value.
## What's next {#whats-next}
diff --git a/docs/guides/install-vscode.md b/docs/guides/install-vscode.md
index 03dfa98c..99e3b662 100644
--- a/docs/guides/install-vscode.md
+++ b/docs/guides/install-vscode.md
@@ -59,5 +59,5 @@ If you do install the extension this way, then you still need to connect your Co
## What's next
- [Use the VSCode extension](/guides/use-vscode)
-
- [Configure the VSCode extension](/guides/config-vscode)
+- [Use with Self-hosted CodeRabbit](/guides/use-vscode-selfhosted)
diff --git a/docs/guides/use-vscode-selfhosted.md b/docs/guides/use-vscode-selfhosted.md
new file mode 100644
index 00000000..acba2a4c
--- /dev/null
+++ b/docs/guides/use-vscode-selfhosted.md
@@ -0,0 +1,29 @@
+---
+title: Use the VSCode extension with self-hosted CodeRabbit
+description: How to setup the VSCode extension with self-hosted CodeRabbit
+---
+
+This page is about setting up the VSCode extension with self-hosted CodeRabbit. If you are instead using the managed offering, see [Install the VSCode extension](/guides/install-vscode).
+
+## Prerequisites
+
+Your extension version should be greater than `0.12.1`
+
+## Connect your self-hosted instance{#connect-self-hosted-instance}
+
+To connect the VSCode extension to your self-hosted instance, follow these steps:
+
+1. Logout from the VSCode extension, if logged in to our managed offering.
+2. Click on the "Self hosting CodeRabbit?" button, below the "Use CodeRabbit for free" button.
+3. Enter your self-hosted instance URL.
+ 3.1. Make sure the instance URL is reachable within your network and websocket connections are allowed.
+4. Select your git provider which you are using with your self-hosted CodeRabbit. (GitLab, Self-Hostd Gitlab, GitHub, GitHub Enterprise)
+5. If using GitHub, enter your [Github Personal Access Token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens) when asked.
+6. You should be connected to your self-hosted instance and ready to use the VSCode extension.
+
+
+## What's next {#whats-next}
+
+- [Use the VSCode extension](/guides/use-vscode)
+- [Configure the VSCode extension](/guides/config-vscode)
+- [Uninstall the VSCode extension](/guides/uninstall-vscode)
From eae7edbef48daac52b8dfce20ac9a4d1957d3297 Mon Sep 17 00:00:00 2001
From: Ankit Jena
Date: Tue, 22 Jul 2025 12:11:45 +0530
Subject: [PATCH 57/89] docs fix for self-hosted extension (#466)
* docs fix for self-hosted extension
* change title
---------
Co-authored-by: Ankit Jena
---
docs/guides/use-vscode-selfhosted.md | 18 +++++++++---------
sidebars.ts | 1 +
2 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/docs/guides/use-vscode-selfhosted.md b/docs/guides/use-vscode-selfhosted.md
index acba2a4c..4452ad8d 100644
--- a/docs/guides/use-vscode-selfhosted.md
+++ b/docs/guides/use-vscode-selfhosted.md
@@ -1,5 +1,5 @@
---
-title: Use the VSCode extension with self-hosted CodeRabbit
+title: Use with self-hosted CodeRabbit
description: How to setup the VSCode extension with self-hosted CodeRabbit
---
@@ -7,20 +7,20 @@ This page is about setting up the VSCode extension with self-hosted CodeRabbit.
## Prerequisites
-Your extension version should be greater than `0.12.1`
+1. Your extension version should be greater than `0.12.1`.
+2. Logout of the extension if previously logged in.
## Connect your self-hosted instance{#connect-self-hosted-instance}
To connect the VSCode extension to your self-hosted instance, follow these steps:
-1. Logout from the VSCode extension, if logged in to our managed offering.
-2. Click on the "Self hosting CodeRabbit?" button, below the "Use CodeRabbit for free" button.
-3. Enter your self-hosted instance URL.
- 3.1. Make sure the instance URL is reachable within your network and websocket connections are allowed.
-4. Select your git provider which you are using with your self-hosted CodeRabbit. (GitLab, Self-Hostd Gitlab, GitHub, GitHub Enterprise)
-5. If using GitHub, enter your [Github Personal Access Token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens) when asked.
-6. You should be connected to your self-hosted instance and ready to use the VSCode extension.
+1. Click on the "Self hosting CodeRabbit?" button, below the "Use CodeRabbit for free" button.
+2. Enter your self-hosted instance URL when prompted.
+ - Make sure the instance URL is reachable within your network and websocket connections are allowed.
+3. Select your git provider which you are using with your self-hosted CodeRabbit. (GitLab, Self-Hosted Gitlab, GitHub, GitHub Enterprise)
+ - If using GitHub or GitHub Enterprise, enter your [Github Personal Access Token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens) when prompted.
+You should be connected to your self-hosted instance and ready to use the VSCode extension.
## What's next {#whats-next}
diff --git a/sidebars.ts b/sidebars.ts
index 0e93a242..25fded60 100644
--- a/sidebars.ts
+++ b/sidebars.ts
@@ -131,6 +131,7 @@ const sidebars: SidebarsConfig = {
"guides/about-vscode",
"guides/install-vscode",
"guides/use-vscode",
+ "guides/use-vscode-selfhosted",
"guides/config-vscode",
"guides/uninstall-vscode",
],
From 1b47d992e63d8869f809275cc6a1ef8fd3ffb238 Mon Sep 17 00:00:00 2001
From: Tom Elizaga
Date: Tue, 22 Jul 2025 15:13:37 -0700
Subject: [PATCH 58/89] Fix command name for generating unit tests in
documentation (#470)
---
docs/changelog.md | 2 +-
docs/finishing-touches/unit-test-generation.md | 2 +-
docs/reference/review-commands.md | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/docs/changelog.md b/docs/changelog.md
index 9fe435ad..87dc21a9 100644
--- a/docs/changelog.md
+++ b/docs/changelog.md
@@ -97,7 +97,7 @@ Key capabilities:
- **Intelligent Test Generation**: Automatically creates unit tests that cover edge cases, error scenarios, and core functionality
- **Context-Aware**: Generates tests that understand your existing codebase patterns and testing conventions
-- **One-Click Integration**: Simply comment `@coderabbitai auto-generate unit tests` on any pull request or specific file, or click on the checkbox available in the walkthrough comment for Early Access customers.
+- **One-Click Integration**: Simply comment `@coderabbitai generate unit tests` on any pull request or specific file, or click on the checkbox available in the walkthrough comment for Early Access customers.
You can customize the generated tests to fit your specific requirements.
diff --git a/docs/finishing-touches/unit-test-generation.md b/docs/finishing-touches/unit-test-generation.md
index 57c5e211..21bf5a18 100644
--- a/docs/finishing-touches/unit-test-generation.md
+++ b/docs/finishing-touches/unit-test-generation.md
@@ -21,7 +21,7 @@ Unit Test Generation is an Early Access Experimental feature.
## Usage
-Once you are done with your pull request and its reviews, you may want to perform finishing touches to your code, such as adding unit tests. You can request CodeRabbit to generate unit tests by typing `@coderabbitai auto-generate unit tests` in a comment under that pull request or by clicking a checkbox under **Generate Unit Tests** in the CodeRabbit Walkthrough.
+Once you are done with your pull request and its reviews, you may want to perform finishing touches to your code, such as adding unit tests. You can request CodeRabbit to generate unit tests by typing `@coderabbitai generate unit tests` in a comment under that pull request or by clicking a checkbox under **Generate Unit Tests** in the CodeRabbit Walkthrough.
Once sent, CodeRabbit will perform the following actions:
diff --git a/docs/reference/review-commands.md b/docs/reference/review-commands.md
index cb50b59c..76d70c59 100644
--- a/docs/reference/review-commands.md
+++ b/docs/reference/review-commands.md
@@ -32,7 +32,7 @@ CodeRabbit through chat, see [Interact with CodeRabbit reviews](/guides/code-rev
| Command | Description | Use Case |
| ---------------------------------------- | -------------------------------------------- | --------------------------------------------------- |
| `@coderabbitai generate docstrings` | Generates docstrings for functions in the PR | When you need automatic documentation for your code |
-| `@coderabbitai auto-generate unit tests` | Generates unit tests for the PR | When you need automatic unit testing for your code |
+| `@coderabbitai generate unit tests` | Generates unit tests for the PR | When you need automatic unit testing for your code |
| `@coderabbitai configuration` | Shows current CodeRabbit settings | When you need to check or export your configuration |
## Agentic chat commands
From f1625b7f89b2674a6d88eea78d0ae5a25da2353c Mon Sep 17 00:00:00 2001
From: Aravind Putrevu
Date: Wed, 23 Jul 2025 14:54:18 +0200
Subject: [PATCH 59/89] typo fix (#473)
---
docs/faq.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/faq.md b/docs/faq.md
index 6755fffa..795ce900 100644
--- a/docs/faq.md
+++ b/docs/faq.md
@@ -203,7 +203,7 @@ In-trial and open-source plans have lower rate limits than the paid plan. In all
:::
-The following limits enforced _per developer_:
+The following limits are enforced _per developer_:
| Feature | Free Plan | Trial Plan | OSS Plan | Pro/Lite Plan |
| -------------------------------- | ------------------------------------------ | --------------------------------- | ----------------------------- | ----------------------------- |
From 83ffd75964f91040c04d19943da86eae08dbad79 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Wed, 23 Jul 2025 13:00:57 +0000
Subject: [PATCH 60/89] Update schema.v2.json
---
static/schema/schema.v2.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/static/schema/schema.v2.json b/static/schema/schema.v2.json
index 15ad2227..ec3c380e 100644
--- a/static/schema/schema.v2.json
+++ b/static/schema/schema.v2.json
@@ -615,7 +615,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable Biome | Biome is a fast formatter, linter, and analyzer for web projects. | Enable Biome integration. | v1.9.4"
+ "description": "Enable Biome | Biome is a fast formatter, linter, and analyzer for web projects. | Enable Biome integration. | v2.1.2"
}
},
"additionalProperties": false,
From 0f5c94de8aa6f5a64946718bdea9f918de8a4ecf Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Wed, 23 Jul 2025 13:31:50 +0000
Subject: [PATCH 61/89] Update schema.v2.json
---
static/schema/schema.v2.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/static/schema/schema.v2.json b/static/schema/schema.v2.json
index ec3c380e..c69614c8 100644
--- a/static/schema/schema.v2.json
+++ b/static/schema/schema.v2.json
@@ -897,7 +897,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable Semgrep | Semgrep is a static analysis tool designed to scan code for security vulnerabilities and code quality issues. | Enable Semgrep integration. | v1.122.0"
+ "description": "Enable Semgrep | Semgrep is a static analysis tool designed to scan code for security vulnerabilities and code quality issues. | Enable Semgrep integration. | v1.128.1"
},
"config_file": {
"type": "string",
From 62057a17d6ffb8c9f9e54a6bf71cd3fd2fff8349 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Wed, 23 Jul 2025 15:11:35 +0000
Subject: [PATCH 62/89] Update schema.v2.json
---
static/schema/schema.v2.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/static/schema/schema.v2.json b/static/schema/schema.v2.json
index c69614c8..a84d875a 100644
--- a/static/schema/schema.v2.json
+++ b/static/schema/schema.v2.json
@@ -716,7 +716,7 @@
"enabled": {
"type": "boolean",
"default": true,
- "description": "Enable golangci-lint | golangci-lint is a fast linters runner for Go. | Enable golangci-lint integration. | v1.64.8"
+ "description": "Enable golangci-lint | golangci-lint is a fast linters runner for Go. | Enable golangci-lint integration. | v2.2.2"
},
"config_file": {
"type": "string",
From bb84d3f078922b4f659cb3d81b9ee75841b9a1fb Mon Sep 17 00:00:00 2001
From: Howon Lee
Date: Wed, 23 Jul 2025 16:59:30 -0700
Subject: [PATCH 63/89] Actually put in the UTG beta in the docs (#474)
https://linear.app/coderabbit/issue/ENG-1976/docs-utg-release
---------
Co-authored-by: Howon Lee
---
docs/changelog.md | 6 ++++++
.../finishing-touches/unit-test-generation.md | 6 +++---
docs/reference/review-commands.md | 8 ++++----
static/img/finishing-touches/utg.gif | Bin 0 -> 16218087 bytes
4 files changed, 13 insertions(+), 7 deletions(-)
create mode 100644 static/img/finishing-touches/utg.gif
diff --git a/docs/changelog.md b/docs/changelog.md
index 87dc21a9..ec081fb5 100644
--- a/docs/changelog.md
+++ b/docs/changelog.md
@@ -5,6 +5,12 @@ description: The latest updates and changes to CodeRabbit.
sidebar_position: 13
---
+## July 23, 2025
+
+### ⚡️ Unit Test Generation - Beta
+
+CodeRabbit's unit test generation is now available in Beta! Automatically generate comprehensive unit tests for your code changes, ensuring better test coverage and catching edge cases you might miss. Our AI analyzes your code structure and creates tests that follow best practices and your project's testing patterns. Learn more [here](https://docs.coderabbit.ai/finishing-touches/unit-test-generation), or just try it under ✨ Finishing Touches.
+
## July 17, 2025
### Enhanced Reporting Capabilities
diff --git a/docs/finishing-touches/unit-test-generation.md b/docs/finishing-touches/unit-test-generation.md
index 21bf5a18..71fe5431 100644
--- a/docs/finishing-touches/unit-test-generation.md
+++ b/docs/finishing-touches/unit-test-generation.md
@@ -10,17 +10,17 @@ import ProPlanNotice from '@site/src/components/ProPlanNotice.mdx';
```
:::warning
-This feature is [experimental](/early-access#experiments).
+This feature is in beta.
:::
# Unit Test Generation
Unit Test Generation is part of the [finishing touches](/future-development#finishing-touches).
-Unit Test Generation is an Early Access Experimental feature.
-
## Usage
+
+
Once you are done with your pull request and its reviews, you may want to perform finishing touches to your code, such as adding unit tests. You can request CodeRabbit to generate unit tests by typing `@coderabbitai generate unit tests` in a comment under that pull request or by clicking a checkbox under **Generate Unit Tests** in the CodeRabbit Walkthrough.
Once sent, CodeRabbit will perform the following actions:
diff --git a/docs/reference/review-commands.md b/docs/reference/review-commands.md
index 76d70c59..dc3c97b8 100644
--- a/docs/reference/review-commands.md
+++ b/docs/reference/review-commands.md
@@ -29,11 +29,11 @@ CodeRabbit through chat, see [Interact with CodeRabbit reviews](/guides/code-rev
## Documentation commands
-| Command | Description | Use Case |
-| ---------------------------------------- | -------------------------------------------- | --------------------------------------------------- |
-| `@coderabbitai generate docstrings` | Generates docstrings for functions in the PR | When you need automatic documentation for your code |
+| Command | Description | Use Case |
+| ----------------------------------- | -------------------------------------------- | --------------------------------------------------- |
+| `@coderabbitai generate docstrings` | Generates docstrings for functions in the PR | When you need automatic documentation for your code |
| `@coderabbitai generate unit tests` | Generates unit tests for the PR | When you need automatic unit testing for your code |
-| `@coderabbitai configuration` | Shows current CodeRabbit settings | When you need to check or export your configuration |
+| `@coderabbitai configuration` | Shows current CodeRabbit settings | When you need to check or export your configuration |
## Agentic chat commands
diff --git a/static/img/finishing-touches/utg.gif b/static/img/finishing-touches/utg.gif
new file mode 100644
index 0000000000000000000000000000000000000000..4d685239325a8251e57fae77a22bf9b11bf0ec4c
GIT binary patch
literal 16218087
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
Asu|vin`P=
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