From 1508d4128391e9131b27a02c6a78084e317005e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A1udia?= Date: Mon, 22 Dec 2025 09:09:32 +0000 Subject: [PATCH 01/19] check account/ --- docusaurus/README.md | 17 ++++------------- docusaurus/docs/account/emails.mdx | 4 ++-- .../docs/account/managing-your-profile.mdx | 4 ++-- 3 files changed, 8 insertions(+), 17 deletions(-) diff --git a/docusaurus/README.md b/docusaurus/README.md index b28211a9bb..fe9dbfba06 100644 --- a/docusaurus/README.md +++ b/docusaurus/README.md @@ -6,12 +6,14 @@ This website is built using [Docusaurus](https://docusaurus.io/), a modern stati ```bash yarn +or npm install ``` ## Local Development ```bash yarn start +or npm start ``` This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server. @@ -20,22 +22,11 @@ This command starts a local development server and opens up a browser window. Mo ```bash yarn build +or npm run build ``` This command generates static content into the `build` directory and can be served using any static contents hosting service. ## Deployment -Using SSH: - -```bash -USE_SSH=true yarn deploy -``` - -Not using SSH: - -```bash -GIT_USER= yarn deploy -``` - -If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch. +Handled by GitHub actions into Github Pages. \ No newline at end of file diff --git a/docusaurus/docs/account/emails.mdx b/docusaurus/docs/account/emails.mdx index fb0cd84e65..6776324a66 100644 --- a/docusaurus/docs/account/emails.mdx +++ b/docusaurus/docs/account/emails.mdx @@ -6,7 +6,7 @@ To manage the email addresses associated with your account and your email notifi ![Email settings](images/emails-notifications.png) -## Updating your email addresses ||updating|| +## Updating your email addresses \{#updating\} Codacy automatically links to your Codacy account the email addresses from the Git provider associated with your current session. On the **Emails** page, you can verify which email addresses are linked to your Codacy account. @@ -32,7 +32,7 @@ To update the email addresses associated with your Codacy account, do the follow When developers commit **from GitHub or Bitbucket**, Codacy automatically associates all the commit email addresses from the same Git provider user with a single Codacy committer. For developers that never logged in to the Codacy app, this mechanism requires that they [set their Git email address](#git-config) and add all their email addresses to their [GitHub account](https://github.com/settings/emails) or [Bitbucket account](https://bitbucket.org/account/settings/email/). ::: -### Setting your Git email address ||git-config|| +### Setting your Git email address \{#git-config\} Unless you explicitly [configure your email address](https://git-scm.com/docs/git-config#Documentation/git-config.txt-useremail), Git automatically uses an email address based on the username and hostname of your workstation, and associates this email address with your commits. diff --git a/docusaurus/docs/account/managing-your-profile.mdx b/docusaurus/docs/account/managing-your-profile.mdx index b8c74fca34..7baf8d17c6 100644 --- a/docusaurus/docs/account/managing-your-profile.mdx +++ b/docusaurus/docs/account/managing-your-profile.mdx @@ -20,11 +20,11 @@ To manage your profile information such as your name and avatar, click on your a When you delete your account on Codacy: - Your profile information and all data related to your personal repositories are completely removed from Codacy -- Codacy will [stop analyzing any repositories added to Codacy using your account](../faq/troubleshooting/why-did-codacy-stop-commenting-on-pull-requests.md) {/*!--NOTE See https://github.com/codacy/docs/pull/1354#discussion_r950190842 for more context -->*/} +- Codacy will [stop analyzing any repositories added to Codacy using your account](../faq/troubleshooting/why-did-codacy-stop-commenting-on-pull-requests) {/*!--NOTE See https://github.com/codacy/docs/pull/1354#discussion_r950190842 for more context -->*/} This operation doesn't make any changes on your Git provider. To delete your account, click the button **Delete account** and confirm that you really want to proceed. :::note -If you're the last organization admin of any of your organizations, you must either add someone else as an owner or [delete those organizations](../organizations/what-are-organizations.md#deleting-an-organization) before you can delete your account. +If you're the last organization admin of any of your organizations, you must either add someone else as an owner or [delete those organizations](../organizations/what-are-organizations#deleting-an-organization) before you can delete your account. From 64c071e98ffa25806518b8473aa1e5cc7ee63363 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A1udia?= Date: Mon, 22 Dec 2025 09:14:00 +0000 Subject: [PATCH 02/19] codacy-ai/ --- docusaurus/docs/codacy-ai/codacy-ai.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docusaurus/docs/codacy-ai/codacy-ai.mdx b/docusaurus/docs/codacy-ai/codacy-ai.mdx index b5937e9ce2..dceb6fb449 100644 --- a/docusaurus/docs/codacy-ai/codacy-ai.mdx +++ b/docusaurus/docs/codacy-ai/codacy-ai.mdx @@ -18,7 +18,7 @@ _This feature leverages OpenAI models, and is strictly opt-in: it will only run AI-enhanced comments are optional, machine-generated suggestions that appear directly in pull requests and review threads. They use Codacy's AI to provide concise issue summaries, remediation suggestions, and links to relevant documentation — helping reviewers and authors quickly understand and fix problems. -More details about [AI-enhanced comments here →](../repositories-configure/integrations/github-integration.md#ai-enhanced-comments). +More details about [AI-enhanced comments here →](../repositories-configure/integrations/github-integration#ai-enhanced-comments). **How to turn it on** @@ -47,7 +47,7 @@ _This feature leverages OpenAI models, and is strictly opt-in: you need to get i Codacy False Positive triage analyzes results on a commit basis to give you visibility into issues that may be false positives (based on their context). During triage, each issue is given a confidence score along with an explanation. When the confidence level falls below a defined threshold, the issue is then flagged as an AI false positive and surfaced for manual review. You can evaluate potential false positives during a pull request in app or on any Codacy page where issues appear. These issues can be ignored or marked as Not a false positive. -More details about [False Positives here →](../repositories/commits.mdx#false-positive-issues). +More details about [False Positives here →](../repositories/commits#false-positive-issues). **How to turn it on** @@ -71,7 +71,7 @@ _This feature leverages Google Gemini models, and is strictly opt-in: it will on The AI Reviewer combines the reliability of deterministic, rule-based static code analysis with the power of AI. It draws in the necessary context from source code and PR metadata to ensure the business intent matches the technical outcome, and can catch logic gaps that conventional scanners (and human reviewers) often miss. -More details about [AI Reviewer here →](../repositories-configure/integrations/github-integration.md#ai-reviewer). +More details about [AI Reviewer here →](../repositories-configure/integrations/github-integration#ai-reviewer). **How to turn it on** From c9881b9f9a46cbdc3078df2603b5d3327e9434dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A1udia?= Date: Mon, 22 Dec 2025 10:04:06 +0000 Subject: [PATCH 03/19] codacy-api/ and routing fixes --- docusaurus/docs/codacy-api/api-tokens.mdx | 20 +++++++++---------- ...ding-people-to-codacy-programmatically.mdx | 6 +++--- ...epositories-to-codacy-programmatically.mdx | 19 +++++++++--------- ...repository-api-tokens-programmatically.mdx | 6 +++--- ...ntifying-commits-without-coverage-data.mdx | 2 +- ...taining-code-quality-metrics-for-files.mdx | 6 +++--- ...taining-current-issues-in-repositories.mdx | 6 +++--- .../examples/triggering-dast-scans.mdx | 12 +++++------ .../examples/uploading-dast-results.mdx | 8 ++++---- docusaurus/docs/index.mdx | 18 ----------------- docusaurus/docusaurus.config.ts | 6 +++--- 11 files changed, 46 insertions(+), 63 deletions(-) delete mode 100644 docusaurus/docs/index.mdx diff --git a/docusaurus/docs/codacy-api/api-tokens.mdx b/docusaurus/docs/codacy-api/api-tokens.mdx index 9de9395a7d..e3d0b30584 100644 --- a/docusaurus/docs/codacy-api/api-tokens.mdx +++ b/docusaurus/docs/codacy-api/api-tokens.mdx @@ -8,24 +8,24 @@ import ApiTokenWarning from './../_includes/ApiTokenWarning.mdx' Codacy provides **account** and **repository**-level API tokens that allow you to: - [Upload coverage data](../coverage-reporter/index.md) to Codacy -- Upload to Codacy the results of [running client-side analysis tools](../repositories-configure/local-analysis/client-side-tools.md) -- [Authenticate when using the Codacy API](using-the-codacy-api.md#authenticating-requests) +- Upload to Codacy the results of [running client-side analysis tools](../repositories-configure/local-analysis/client-side-tools) +- [Authenticate when using the Codacy API](using-the-codacy-api#authenticating-requests) The sections below provide details about the two types of API tokens and instructions on how to generate and revoke them. -## Generating and revoking account API tokens ||account-api-tokens|| +## Generating and revoking account API tokens \{#account-api-tokens\} -Account API tokens are defined at the **Codacy user account level**. Each account API token authorizes access to the same organizations, repositories, and operations as the [roles and permissions of the owner of the account](../organizations/roles-and-permissions-for-organizations.md). +Account API tokens are defined at the **Codacy user account level**. Each account API token authorizes access to the same organizations, repositories, and operations as the [roles and permissions of the owner of the account](../organizations/roles-and-permissions-for-organizations). :::caution -**If you're using an account API token to upload coverage** be sure to [check the roles](../organizations/roles-and-permissions-for-organizations.md) that your Git provider account must have to authorize uploading coverage to Codacy. +**If you're using an account API token to upload coverage** be sure to [check the roles](../organizations/roles-and-permissions-for-organizations) that your Git provider account must have to authorize uploading coverage to Codacy. Use a dedicated service account to integrate Codacy with your repositories. This prevents disruption of service if the user who created an account API token loses access to the repositories, which may happen when a user leaves the team or the organization. ::: -You can create new account API tokens programmatically [using the Codacy API](examples/creating-repository-api-tokens-programmatically.md) or using the Codacy UI: +You can create new account API tokens programmatically [using the Codacy API](examples/creating-repository-api-tokens-programmatically) or using the Codacy UI: 1. Open your account, tab **Access management**. @@ -47,11 +47,11 @@ When you have tokens created, you can view them inside the tokens table. By hove To delete an account API token, click the trash icon in the Actions column of the table. After this, all applications or services using that token to access the Codacy API will fail to authenticate and will receive the reply `{"error":"not found"}`. -## Generating and revoking repository API tokens ||repository-api-tokens"|| +## Generating and revoking repository API tokens \{#repository-api-tokens\} Repository API tokens are defined on **individual repositories**. Each repository API token only authorizes access to the corresponding repository. -You can create new repository API tokens programmatically [using the Codacy API](examples/creating-repository-api-tokens-programmatically.md) or using the Codacy UI: +You can create new repository API tokens programmatically [using the Codacy API](examples/creating-repository-api-tokens-programmatically) or using the Codacy UI: 1. Open your repository **Settings**, tab **Integrations**. @@ -67,5 +67,5 @@ To revoke a repository API token, click the **X** next to the token. After this, ## See also - [Adding coverage to your repository](../coverage-reporter/index.md) -- [Client-side tools](../repositories-configure/local-analysis/client-side-tools.md) -- [Creating repository API tokens programmatically](examples/creating-repository-api-tokens-programmatically.md) +- [Client-side tools](../repositories-configure/local-analysis/client-side-tools) +- [Creating repository API tokens programmatically](examples/creating-repository-api-tokens-programmatically) diff --git a/docusaurus/docs/codacy-api/examples/adding-people-to-codacy-programmatically.mdx b/docusaurus/docs/codacy-api/examples/adding-people-to-codacy-programmatically.mdx index 30bef7b578..b7a04f9707 100644 --- a/docusaurus/docs/codacy-api/examples/adding-people-to-codacy-programmatically.mdx +++ b/docusaurus/docs/codacy-api/examples/adding-people-to-codacy-programmatically.mdx @@ -16,7 +16,7 @@ curl -X POST https://app.codacy.com/api/v3/organizations///`. 1. For each repository, calls the endpoint [addRepository](https://app.codacy.com/api/api-docs#addrepository) to add a new repository specifying `gh` as the Git provider and the value of `full_name` as the full path of the repository. 1. Checks the HTTP status code obtained in the response and performs basic error handling. 1. Pauses a few seconds between requests to the Codacy API to avoid rate limiting. + ```bash #!/bin/bash diff --git a/docusaurus/docs/codacy-api/examples/creating-repository-api-tokens-programmatically.mdx b/docusaurus/docs/codacy-api/examples/creating-repository-api-tokens-programmatically.mdx index bbcaf599a3..33608a9acc 100644 --- a/docusaurus/docs/codacy-api/examples/creating-repository-api-tokens-programmatically.mdx +++ b/docusaurus/docs/codacy-api/examples/creating-repository-api-tokens-programmatically.mdx @@ -5,7 +5,7 @@ description: Example of how to create new repository API tokens for all reposito import ApiExamplePaginationImportant from '../../_includes/ApiExamplePaginationImportant.mdx' -To create new [repository API tokens](../api-tokens.md) for your Codacy repositories programmatically, use the Codacy API endpoint [createRepositoryApiToken](https://app.codacy.com/api/api-docs#createrepositoryapitoken). You can also list all repository API tokens for a repository using the endpoint [listRepositoryApiTokens](https://api.codacy.com/api/api-docs#listrepositoryapitokens). +To create new [repository API tokens](../api-tokens) for your Codacy repositories programmatically, use the Codacy API endpoint [createRepositoryApiToken](https://app.codacy.com/api/api-docs#createrepositoryapitoken). You can also list all repository API tokens for a repository using the endpoint [listRepositoryApiTokens](https://api.codacy.com/api/api-docs#listrepositoryapitokens). For example, if you're [setting up coverage](../../coverage-reporter/index.md) for all your repositories and prefer not to use a single account API token that grants the same permissions as an administrator, you need to create an individual repository API token for each repository. @@ -15,7 +15,7 @@ This example creates a new repository API token for a repository and outputs the The example script: -1. Defines the [account API token](../api-tokens.md#account-api-tokens) used to authenticate on the Codacy API, the Git provider, the organization name, and the repository name passed as an argument to the script. +1. Defines the [account API token](../api-tokens#account-api-tokens) used to authenticate on the Codacy API, the Git provider, the organization name, and the repository name passed as an argument to the script. 1. Calls the endpoint [createRepositoryApiToken](https://app.codacy.com/api/api-docs#createrepositoryapitoken) to create a new repository API token and uses [jq](https://github.com/stedolan/jq) to obtain only the created token string. ```bash @@ -95,7 +95,7 @@ This example lists all repository API tokens created for a repository. The example script: -1. Defines the [account API token](../api-tokens.md#account-api-tokens) used to authenticate on the Codacy API, the Git provider, the organization name, and the repository name passed as an argument to the script. +1. Defines the [account API token](../api-tokens#account-api-tokens) used to authenticate on the Codacy API, the Git provider, the organization name, and the repository name passed as an argument to the script. 1. Calls the endpoint [listRepositoryApiTokens](https://api.codacy.com/api/api-docs#listrepositoryapitokens) to list the repository API tokens available on the repository and uses [jq](https://github.com/stedolan/jq) to obtain only the token strings, or exit with a non-zero status if the repository doesn't have any repository API tokens created yet. ```bash diff --git a/docusaurus/docs/codacy-api/examples/identifying-commits-without-coverage-data.mdx b/docusaurus/docs/codacy-api/examples/identifying-commits-without-coverage-data.mdx index 069f41483a..4b250fdf40 100644 --- a/docusaurus/docs/codacy-api/examples/identifying-commits-without-coverage-data.mdx +++ b/docusaurus/docs/codacy-api/examples/identifying-commits-without-coverage-data.mdx @@ -24,7 +24,7 @@ This example checks whether the open pull requests in a repository have received The example script: -1. Defines the [account API token](../api-tokens.md#account-api-tokens) used to authenticate on the Codacy API, the Git provider, the organization name, and the repository name passed as an argument to the script. +1. Defines the [account API token](../api-tokens#account-api-tokens) used to authenticate on the Codacy API, the Git provider, the organization name, and the repository name passed as an argument to the script. 1. Calls the Codacy API endpoint [listRepositoryPullRequests](https://api.codacy.com/api/api-docs#listrepositorypullrequests) to retrieve the list of open pull requests on the repository. 1. Uses [jq](https://github.com/stedolan/jq) to select only the numbers that identify the pull requests on the Git provider. 1. For each pull request, outputs the pull request number and calls the Codacy API endpoint [getPullRequestCoverageReports](https://api.codacy.com/api/api-docs#getpullrequestcoveragereports) to obtain the information about the coverage data received for the head and common ancestor commits of the pull request. diff --git a/docusaurus/docs/codacy-api/examples/obtaining-code-quality-metrics-for-files.mdx b/docusaurus/docs/codacy-api/examples/obtaining-code-quality-metrics-for-files.mdx index 67909e8e85..4a5cf02b56 100644 --- a/docusaurus/docs/codacy-api/examples/obtaining-code-quality-metrics-for-files.mdx +++ b/docusaurus/docs/codacy-api/examples/obtaining-code-quality-metrics-for-files.mdx @@ -16,7 +16,7 @@ This example exports the grade, total issues, complexity, coverage, and duplicat The example script: -1. Defines the [account API token](../api-tokens.md#account-api-tokens) used to authenticate on the Codacy API. +1. Defines the [account API token](../api-tokens#account-api-tokens) used to authenticate on the Codacy API. 1. Calls the endpoint [listFiles](https://app.codacy.com/api/api-docs#listfiles) to retrieve the code quality metrics, filtering the results by files that include `src/router/` in the path. 1. Uses [jq](https://github.com/stedolan/jq) to select only the necessary data fields and convert the results to the CSV format. @@ -45,5 +45,5 @@ Example output: ## See also -- [Which metrics does Codacy calculate?](../../faq/code-analysis/which-metrics-does-codacy-calculate.md) -- [Files page](../../repositories/files.md) +- [Which metrics does Codacy calculate?](../../faq/code-analysis/which-metrics-does-codacy-calculate) +- [Files page](../../repositories/files) diff --git a/docusaurus/docs/codacy-api/examples/obtaining-current-issues-in-repositories.mdx b/docusaurus/docs/codacy-api/examples/obtaining-current-issues-in-repositories.mdx index a77ccf6fd5..d23e0043ea 100644 --- a/docusaurus/docs/codacy-api/examples/obtaining-current-issues-in-repositories.mdx +++ b/docusaurus/docs/codacy-api/examples/obtaining-current-issues-in-repositories.mdx @@ -15,7 +15,7 @@ This example exports the pattern ID, issue level, file path, and timestamp for a The example script: -1. Defines the [account API token](../api-tokens.md#account-api-tokens) used to authenticate on the Codacy API. +1. Defines the [account API token](../api-tokens#account-api-tokens) used to authenticate on the Codacy API. 1. Calls the endpoint [searchRepositoryIssues](https://app.codacy.com/api/api-docs#searchrepositoryissues) to retrieve information about the issues, filtering the results by security issues with the relevant severity levels. 1. Uses [jq](https://github.com/stedolan/jq) to select only the necessary data fields and convert the results to the CSV format. @@ -45,5 +45,5 @@ Example output: ## See also -- [Which metrics does Codacy calculate?](../../faq/code-analysis/which-metrics-does-codacy-calculate.md) -- [Issues page](../../repositories/issues.md) +- [Which metrics does Codacy calculate?](../../faq/code-analysis/which-metrics-does-codacy-calculate) +- [Issues page](../../repositories/issues) diff --git a/docusaurus/docs/codacy-api/examples/triggering-dast-scans.mdx b/docusaurus/docs/codacy-api/examples/triggering-dast-scans.mdx index 87903992e0..26d2c9999e 100644 --- a/docusaurus/docs/codacy-api/examples/triggering-dast-scans.mdx +++ b/docusaurus/docs/codacy-api/examples/triggering-dast-scans.mdx @@ -8,7 +8,7 @@ Thanks to the new app scanning capabilities available on the Security and risk m :::caution **App scanning is a business feature.** If you are a Codacy Pro customer, contact our customer success team to access a short trial. -**Check your [permissions](../../organizations/roles-and-permissions-for-organizations.md).** Only git provider admins and organization managers will be able to create new targets and trigger scans (in app and via the API). +**Check your [permissions](../../organizations/roles-and-permissions-for-organizations).** Only git provider admins and organization managers will be able to create new targets and trigger scans (in app and via the API). ::: @@ -52,12 +52,12 @@ Replace the placeholders with your own values: | Field | Required | Description | |-------|----------|-------------| -| **API_KEY** | true | [Account API token](../api-tokens.md#account-api-tokens) used to authenticate on the Codacy API | +| **API_KEY** | true | [Account API token](../api-tokens#account-api-tokens) used to authenticate on the Codacy API | | **GIT_PROVIDER** | true | Git provider hosting of the organization, using one of the values in the table below.
**Options:** `gh` (GitHub Cloud), `ghe`(GitHub Enterprise), `gl` (Gitlab Cloud), `gle` (Gitlab Enterprise), `bb` (Bitbucket Cloud), `bbe` (Bitbucket Server) | | **ORGANIZATION** | true | Name of the organization on the Git provider. You must have admin permissions over the organization on the Git provider.
For example, `codacy` | | **TARGET_URL** | true | URL of the Web app or API that will be scanned.
Must start with `http://` or `https://`
For example, `https://api.codacy.com/v1`| | **TARGET_TYPE** | false | Type of target to be scanned
**Options:** `webapp` (default), `openapi` or `graphql`| -| **API_DEFINITION_URL** | false * | The URL to a publicly accessible OpenAPI specification.
*** Required for OpenAPI targets**| +| **API_DEFINITION_URL** | false * | The URL to a publicly accessible OpenAPI specification.
* **Required for OpenAPI targets**| | **HEADER_NAME** | false | Name of the authentication header.
For example, `Authentication`| | **HEADER_VALUE** | false | Value of the authentication header.
For example, a token or API key| @@ -79,12 +79,12 @@ curl -X POST https://app.codacy.com/api/v3/organizations/{GIT_PROVIDER}/{ORGANIZ Replace the placeholders with your own values: -- **API_KEY:** [Account API token](../api-tokens.md#account-api-tokens) used to authenticate on the Codacy API. +- **API_KEY:** [Account API token](../api-tokens#account-api-tokens) used to authenticate on the Codacy API. - **GIT_PROVIDER:** Git provider hosting of the organization (check the table on the example above). For example, `gh` for GitHub Cloud. - **ORGANIZATION:** Name of the organization on the Git provider. For example, `codacy`. You must have admin permissions over the organization on the Git provider. -- **DAST_TARGET_ID:** Identifier of a DAST target to analyze (obtained in the [previous section](./triggering-dast-scans.md#creating-targets). For example, `457`. You must have admin permissions over the organization on the Git provider. +- **DAST_TARGET_ID:** Identifier of a DAST target to analyze (obtained in the [previous section](./triggering-dast-scans#creating-targets). For example, `457`. You must have admin permissions over the organization on the Git provider. -Scans occur asynchronously. To monitor an ongoing scan you can use the [target management page in Codacy](../../organizations/managing-security-and-risk.md#app-scanning). Once completed, you can access all scan results by navigating to the **Security dashboard**, selecting the **Findings tab** and filtering by **Scan types > DAST/App scanning**, or by clicking on a configured target to expand all of that target's results. +Scans occur asynchronously. To monitor an ongoing scan you can use the [target management page in Codacy](../../organizations/managing-security-and-risk#app-scanning). Once completed, you can access all scan results by navigating to the **Security dashboard**, selecting the **Findings tab** and filtering by **Scan types > DAST/App scanning**, or by clicking on a configured target to expand all of that target's results. Additionaly, you can use the `SearchSRMItems` endpoint to filter findings by their DAST target URL with the following request: ```bash curl -X POST https://app.codacy.com/api/v3/organizations/gh/codacy/security/items/search \ diff --git a/docusaurus/docs/codacy-api/examples/uploading-dast-results.mdx b/docusaurus/docs/codacy-api/examples/uploading-dast-results.mdx index 2a9d02f983..7fd0a11480 100644 --- a/docusaurus/docs/codacy-api/examples/uploading-dast-results.mdx +++ b/docusaurus/docs/codacy-api/examples/uploading-dast-results.mdx @@ -3,7 +3,7 @@ title: Uploading DAST results to Codacy description: Instructions on how to upload DAST results to Codacy using the API. --- -To ensure the security of your web applications, Codacy allows you to upload DAST (dynamic application security testing) results from [Zed Attack Proxy (ZAP)](https://www.zaproxy.org/) directly to Codacy and monitor them as findings under [Security and risk management](../../organizations/managing-security-and-risk.md). +To ensure the security of your web applications, Codacy allows you to upload DAST (dynamic application security testing) results from [Zed Attack Proxy (ZAP)](https://www.zaproxy.org/) directly to Codacy and monitor them as findings under [Security and risk management](../../organizations/managing-security-and-risk). ## Uploading results to Codacy @@ -28,7 +28,7 @@ To ensure the security of your web applications, Codacy allows you to upload DAS Replace the placeholders with your own values: -- **API_KEY:** [Account API token](../api-tokens.md#account-api-tokens) used to authenticate on the Codacy API. +- **API_KEY:** [Account API token](../api-tokens#account-api-tokens) used to authenticate on the Codacy API. - **GIT_PROVIDER:** Git provider hosting of the organization, using one of the values in the table below. For example, `gh` for GitHub Cloud. | Value | Git provider | @@ -62,7 +62,7 @@ curl -X GET https://api.codacy.com/api/v3/organizations//uploadDASTReport](https://app.codacy.com/api/api-docs#uploaddastreport) to upload the report to Codacy. diff --git a/docusaurus/docs/index.mdx b/docusaurus/docs/index.mdx deleted file mode 100644 index 89746b3d02..0000000000 --- a/docusaurus/docs/index.mdx +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Codacy Docs -description: Documentation homepage for the Codacy automated code review tool. ---- - -## Get started - -- [Adding your first repository](getting-started/codacy-quickstart/) -- [Supported languages and tools](getting-started/supported-languages-and-tools/) -- [Managing an organization](organizations/what-are-organizations/) -- [Setting up integrations](repositories-configure/integrations/github-integration/) - -## Most popular topics - -- [Adding coverage to your repository](coverage-reporter/) -- [Understanding issues](repositories/issues/) -- [Managing people in organizations](organizations/managing-people/) -- [Using the Codacy API](codacy-api/using-the-codacy-api/) diff --git a/docusaurus/docusaurus.config.ts b/docusaurus/docusaurus.config.ts index 09b53b727d..e605c471d1 100644 --- a/docusaurus/docusaurus.config.ts +++ b/docusaurus/docusaurus.config.ts @@ -59,7 +59,7 @@ const config: Config = { 'classic', { docs: { - routeBasePath: '/docs', + routeBasePath: '/', sidebarPath: './sidebars.ts', breadcrumbs: false, }, @@ -131,8 +131,8 @@ const config: Config = { { title: 'Docs', items: [ - {label: 'Documentation', to: '/docs/'}, - {label: 'Release notes', to: '/docs/release-notes/'}, + {label: 'Documentation', to: '/'}, + {label: 'Release notes', to: '/release-notes/'}, ], }, { From db6abd821ae9e1551908401644827445ca6ae10f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A1udia?= Date: Mon, 22 Dec 2025 10:25:27 +0000 Subject: [PATCH 04/19] codacy-guardrails/ --- ...rails-faq.md => codacy-guardrails-faq.mdx} | 38 ++++++++----------- ... => codacy-guardrails-getting-started.mdx} | 12 +++--- ...acy-guardrails-how-to-configure-rules.mdx} | 16 ++++---- ...se.md => codacy-guardrails-how-to-use.mdx} | 0 ...s.md => codacy-guardrails-limitations.mdx} | 0 ... => codacy-guardrails-troubleshooting.mdx} | 0 6 files changed, 30 insertions(+), 36 deletions(-) rename docusaurus/docs/codacy-guardrails/{codacy-guardrails-faq.md => codacy-guardrails-faq.mdx} (80%) rename docusaurus/docs/codacy-guardrails/{codacy-guardrails-getting-started.md => codacy-guardrails-getting-started.mdx} (97%) rename docusaurus/docs/codacy-guardrails/{codacy-guardrails-how-to-configure-rules.md => codacy-guardrails-how-to-configure-rules.mdx} (85%) rename docusaurus/docs/codacy-guardrails/{codacy-guardrails-how-to-use.md => codacy-guardrails-how-to-use.mdx} (100%) rename docusaurus/docs/codacy-guardrails/{codacy-guardrails-limitations.md => codacy-guardrails-limitations.mdx} (100%) rename docusaurus/docs/codacy-guardrails/{codacy-guardrails-troubleshooting.md => codacy-guardrails-troubleshooting.mdx} (100%) diff --git a/docusaurus/docs/codacy-guardrails/codacy-guardrails-faq.md b/docusaurus/docs/codacy-guardrails/codacy-guardrails-faq.mdx similarity index 80% rename from docusaurus/docs/codacy-guardrails/codacy-guardrails-faq.md rename to docusaurus/docs/codacy-guardrails/codacy-guardrails-faq.mdx index 9e04179404..f91fbc038d 100644 --- a/docusaurus/docs/codacy-guardrails/codacy-guardrails-faq.md +++ b/docusaurus/docs/codacy-guardrails/codacy-guardrails-faq.mdx @@ -3,7 +3,7 @@ title: FAQs --- ## How do I install Codacy Guardrails? -Please have a look at our [documentation](codacy-guardrails-getting-started.md). +Please have a look at our [documentation](./codacy-guardrails-getting-started). ## Does Guardrails only work with AI-generated code? No. While Guardrails does scan and autofix AI code as part of the agent flow, it scans any code shown in your IDE in real-time, regardless of how it was written. @@ -49,17 +49,17 @@ Codacy Guardrails is a free IDE Extension for local scanning of AI-generated and Check our [Team and Organization plans](https://www.codacy.com/pricing) to unlock: -- Central configuration and enforcement of AI coding standards across teams and projects -- Query and autofix existing problems across your codebase from the AI chat panel -- Generate custom security and code quality reports using AI prompts -- Full access to the Codacy Cloud platform including: +- Central configuration and enforcement of AI coding standards across teams and projects +- Query and autofix existing problems across your codebase from the AI chat panel +- Generate custom security and code quality reports using AI prompts +- Full access to the Codacy Cloud platform including: -- Pipeline-less AppSec and code quality scans -- PR merge gates -- Team dashboards -- Security reports -- DAST pipelines -- Jira integration + - Pipeline-less AppSec and code quality scans + - PR merge gates + - Team dashboards + - Security reports + - DAST pipelines + - Jira integration ## Does Guardrails work with all OS? Guardrails is supported on MacOS, Linux, and Windows (via [WSL](https://learn.microsoft.com/en-us/windows/wsl/install)) @@ -74,18 +74,12 @@ Without an AI coding agent, you can still use the IDE extension for local analys If you wish to continue using a previous version a little longer, you can do so by: 1. Open the Extensions tab - -2. Select `Codacy` - -3. Click on the down arrow on the right of the Uninstall button - -4. Select `Install specific version...` - +1. Select `Codacy` +1. Click on the down arrow on the right of the Uninstall button +1. Select `Install specific version...` ![install specific version](images/install-specific-version.png) - -5. Select the version you want on the top search bar - -6. Click on `Restart Extensions` when that button appears +1. Select the version you want on the top search bar +1. Click on `Restart Extensions` when that button appears Keep in mind that the IDE extension is under active development, so be sure to check for updates regularly. To revert to the latest version, click on `Update`. diff --git a/docusaurus/docs/codacy-guardrails/codacy-guardrails-getting-started.md b/docusaurus/docs/codacy-guardrails/codacy-guardrails-getting-started.mdx similarity index 97% rename from docusaurus/docs/codacy-guardrails/codacy-guardrails-getting-started.md rename to docusaurus/docs/codacy-guardrails/codacy-guardrails-getting-started.mdx index f7a31365ad..e619bf6f84 100644 --- a/docusaurus/docs/codacy-guardrails/codacy-guardrails-getting-started.md +++ b/docusaurus/docs/codacy-guardrails/codacy-guardrails-getting-started.mdx @@ -52,7 +52,7 @@ For Visual Studio Code, the Insiders version is recommended for its faster perfo - [Lizard](https://docs.codacy.com/release-notes/cloud/cloud-2025-02-adding-ruff-lizard/#lizard) - Revive -## How to install - Quick Guide {#how-to-install-quick-guide} +## How to install - Quick Guide \{#how-to-install-quick-guide\} #### Note for Windows users: To take advantage of Codacy Guardrails on Windows, you might need to setup WSL first, [check the steps here.](#how-to-install-wsl) @@ -109,7 +109,7 @@ You can later generate the instructions manually from the Guardrails section of * Remember that for you to be able to interact with Codacy MCP server, you must be on the `Agent` mode of the chat, not the default `Ask` mode. * If you're still having issues with the MCP server, try to run the command `Preferences: Open User Settings (JSON)`, look for the Codacy MCP server settings and right on top of it you'll should see a `Start` option. Click on it and, if unsuccessful, go to `View > Debug Console` and check for errors. Don't forget to ensure you have `node.js` and `npx` installed and set up. -## How to install - WSL {#how-to-install-wsl} +## How to install - WSL \{#how-to-install-wsl\} ### 1. Install or update [WSL.](https://learn.microsoft.com/en-us/windows/wsl/install) @@ -120,7 +120,7 @@ You can later generate the instructions manually from the Guardrails section of ## How to install - Manually -### 1. Install and activate the Codacy CLI for local analysis {#install-cli} +### 1. Install and activate the Codacy CLI for local analysis \{#install-cli\} #### Download @@ -153,7 +153,7 @@ Before running the analysis, install the specified tools: codacy-cli install ``` -### 2. Install MCP Server {#install-mcp-server} +### 2. Install MCP Server \{#install-mcp-server\} If you want to use MCP Server with a NPM package you should download it from [here](https://www.npmjs.com/package/@codacy/codacy-mcp) @@ -220,7 +220,7 @@ Or open the general settings.json file directly, which according to your OS shou ![Settings.json in VSCode](images/settings-json-vscode.png) -Make sure you update the value of `CODACY_ACCOUNT_TOKEN` with your [API token](../codacy-api/api-tokens.md). +Make sure you update the value of `CODACY_ACCOUNT_TOKEN` with your [API token](../codacy-api/api-tokens). a. Above the MCP Server configuration in **Settings.json** file, you can Click in the command **Start** @@ -269,7 +269,7 @@ For JetBrains IDEs, IntelliJ isn't the only supported editor, but is our primary - [Lizard](https://docs.codacy.com/release-notes/cloud/cloud-2025-02-adding-ruff-lizard/#lizard) - Revive -## How to install - JetBrains Quick Guide {#how-to-install-quick-guide-jetbrains} +## How to install - JetBrains Quick Guide \{#how-to-install-quick-guide-jetbrains\} #### Note for Windows users: To take advantage of Codacy Guardrails on Windows, you need to set up WSL first; [check the steps here](#how-to-install-wsl). **Only local analysis** are supported for Windows, as MCP support for JetBrains IDEs is still not completely done. diff --git a/docusaurus/docs/codacy-guardrails/codacy-guardrails-how-to-configure-rules.md b/docusaurus/docs/codacy-guardrails/codacy-guardrails-how-to-configure-rules.mdx similarity index 85% rename from docusaurus/docs/codacy-guardrails/codacy-guardrails-how-to-configure-rules.md rename to docusaurus/docs/codacy-guardrails/codacy-guardrails-how-to-configure-rules.mdx index 0221d96124..ab87e551f0 100644 --- a/docusaurus/docs/codacy-guardrails/codacy-guardrails-how-to-configure-rules.md +++ b/docusaurus/docs/codacy-guardrails/codacy-guardrails-how-to-configure-rules.mdx @@ -2,7 +2,7 @@ title: How to customize the analysis rules for Codacy Guardrails --- -By default, if no API token is provided in the [MCP Server setup](codacy-guardrails-getting-started.md/#3-install-mcp-server), Codacy uses a predefined configuration that includes all recommended rules (or [code patterns](../repositories-configure/configuring-code-patterns.md) that you can find on many parts of our product) from the supported built-in scanners. +By default, if no API token is provided in the [MCP Server setup](codacy-guardrails-getting-started#3-install-mcp-server), Codacy uses a predefined configuration that includes all recommended rules (or [code patterns](../repositories-configure/configuring-code-patterns) that you can find on many parts of our product) from the supported built-in scanners. However, when an API token is used, Codacy automatically retrieves the current rule configuration directly from your repository. @@ -67,13 +67,13 @@ The table below lists the configuration file names that Codacy detects and suppo To use a configuration file for a static analysis tool: -1. Make sure the configuration file is located in the root of the [default Codacy branch](../repositories-configure/managing-branches.mdx). +1. Make sure the configuration file is located in the root of the [default Codacy branch](../repositories-configure/managing-branches). 2. Open the repository **Code patterns** page, select the tool of interest, and activate the toggle to use a configuration file. :::note -- After activating a configuration file for a tool, Codacy uses that configuration file even if you [exclude it from Codacy analysis](../repositories-configure/ignoring-files.md). -- When [using a tool configuration file alongside a coding standard](../organizations/using-coding-standards.md#using-with-tool-configuration), the configuration file controls the code patterns, while the coding standard controls whether the tool is enabled or disabled. +- After activating a configuration file for a tool, Codacy uses that configuration file even if you [exclude it from Codacy analysis](../repositories-configure/ignoring-files). +- When [using a tool configuration file alongside a coding standard](../organizations/using-coding-standards#using-with-tool-configuration), the configuration file controls the code patterns, while the coding standard controls whether the tool is enabled or disabled. - Codacy uses the version of the configuration file **in the branch being analyzed**. For example, if you open a pull request that includes changes to the configuration file, the analysis results take those changes into account. - If Codacy analyzes a branch that doesn't include the configuration file, Codacy reverts to using the code patterns configured for the tool before you selected the option **Configuration file** on the Code patterns page. - For performance reasons, when you update pattern settings using a configuration file, Codacy may display outdated messages for issues identified previously by those patterns. @@ -88,8 +88,8 @@ To use a configuration file for a static analysis tool: If you want to use Codacy UI, there are two ways you can follow to configure the built-in scanner rules: -- Using the [Code Patterns](../repositories-configure/configuring-code-patterns.md) configuration, if you want to configure the rules per repository or -- Using [Coding Standards](../organizations/using-coding-standards.md), if you want to configure the rules for multiple repositories +- Using the [Code Patterns](../repositories-configure/configuring-code-patterns) configuration, if you want to configure the rules per repository or +- Using [Coding Standards](../organizations/using-coding-standards), if you want to configure the rules for multiple repositories ### Code Patterns @@ -106,7 +106,7 @@ In order to set up your rules, please follow the next steps: ![Toggling tools](images/code-patterns-toggle-tools.png) -3. Select a tool to enable or disable its code patterns. To make it easier to find relevant patterns, use the filters above the pattern list. You can filter by [issue category](../faq/code-analysis/which-metrics-does-codacy-calculate.md#issues), status, severity level, or display only recommended code patterns. +3. Select a tool to enable or disable its code patterns. To make it easier to find relevant patterns, use the filters above the pattern list. You can filter by [issue category](../faq/code-analysis/which-metrics-does-codacy-calculate#issues), status, severity level, or display only recommended code patterns. To see an explanation of the issues that a pattern detects and how to fix them, click the respective dropdown arrow. @@ -122,7 +122,7 @@ In order to set up your rules, please follow the next steps: Coding standards enable the analysis of multiple repositories with the same scanner and rules configurations, ensuring consistent code quality across your organization. Multiple coding standards can be applied to the same repository. For example, you can use coding standards to ensure that a group of repositories follow the same security rules or coding conventions. -To apply or edit a repository's [coding standards](../organizations/using-coding-standards.md), click **Customize** in the **Following ...** section at the top of the **Code patterns** page. +To apply or edit a repository's [coding standards](../organizations/using-coding-standards), click **Customize** in the **Following ...** section at the top of the **Code patterns** page. ![Customize applied coding standards](images/code-patterns-cs-customize.png) diff --git a/docusaurus/docs/codacy-guardrails/codacy-guardrails-how-to-use.md b/docusaurus/docs/codacy-guardrails/codacy-guardrails-how-to-use.mdx similarity index 100% rename from docusaurus/docs/codacy-guardrails/codacy-guardrails-how-to-use.md rename to docusaurus/docs/codacy-guardrails/codacy-guardrails-how-to-use.mdx diff --git a/docusaurus/docs/codacy-guardrails/codacy-guardrails-limitations.md b/docusaurus/docs/codacy-guardrails/codacy-guardrails-limitations.mdx similarity index 100% rename from docusaurus/docs/codacy-guardrails/codacy-guardrails-limitations.md rename to docusaurus/docs/codacy-guardrails/codacy-guardrails-limitations.mdx diff --git a/docusaurus/docs/codacy-guardrails/codacy-guardrails-troubleshooting.md b/docusaurus/docs/codacy-guardrails/codacy-guardrails-troubleshooting.mdx similarity index 100% rename from docusaurus/docs/codacy-guardrails/codacy-guardrails-troubleshooting.md rename to docusaurus/docs/codacy-guardrails/codacy-guardrails-troubleshooting.mdx From 46bae36d1786a1208022acea6baded2e63e15aca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A1udia?= Date: Mon, 22 Dec 2025 11:21:52 +0000 Subject: [PATCH 05/19] coverage-reporter/ --- docusaurus/docs/coverage-reporter/_order.ts | 7 ---- ...ive-ways-of-running-coverage-reporter.mdx} | 2 +- .../coverage-reporter/{index.md => index.mdx} | 34 +++++++++---------- ...> troubleshooting-coverage-cli-issues.mdx} | 10 +++--- ...oading-coverage-in-advanced-scenarios.mdx} | 12 +++---- docusaurus/sidebars.ts | 7 +--- 6 files changed, 30 insertions(+), 42 deletions(-) delete mode 100644 docusaurus/docs/coverage-reporter/_order.ts rename docusaurus/docs/coverage-reporter/{alternative-ways-of-running-coverage-reporter.md => alternative-ways-of-running-coverage-reporter.mdx} (99%) rename docusaurus/docs/coverage-reporter/{index.md => index.mdx} (93%) rename docusaurus/docs/coverage-reporter/{troubleshooting-coverage-cli-issues.md => troubleshooting-coverage-cli-issues.mdx} (97%) rename docusaurus/docs/coverage-reporter/{uploading-coverage-in-advanced-scenarios.md => uploading-coverage-in-advanced-scenarios.mdx} (89%) diff --git a/docusaurus/docs/coverage-reporter/_order.ts b/docusaurus/docs/coverage-reporter/_order.ts deleted file mode 100644 index bff9e03ea5..0000000000 --- a/docusaurus/docs/coverage-reporter/_order.ts +++ /dev/null @@ -1,7 +0,0 @@ -export const coverageReporterOrder = [ - 'coverage-reporter/index', - 'coverage-reporter/alternative-ways-of-running-coverage-reporter', - 'coverage-reporter/uploading-coverage-in-advanced-scenarios', - 'coverage-reporter/troubleshooting-coverage-cli-issues', -]; - diff --git a/docusaurus/docs/coverage-reporter/alternative-ways-of-running-coverage-reporter.md b/docusaurus/docs/coverage-reporter/alternative-ways-of-running-coverage-reporter.mdx similarity index 99% rename from docusaurus/docs/coverage-reporter/alternative-ways-of-running-coverage-reporter.md rename to docusaurus/docs/coverage-reporter/alternative-ways-of-running-coverage-reporter.mdx index 71f5bdb5f9..e107f2600f 100644 --- a/docusaurus/docs/coverage-reporter/alternative-ways-of-running-coverage-reporter.md +++ b/docusaurus/docs/coverage-reporter/alternative-ways-of-running-coverage-reporter.mdx @@ -10,7 +10,7 @@ The following sections list the alternative ways of running or installing Codacy **If you're using Codacy Self-hosted** make sure that you use a Codacy Coverage Reporter version compatible with your Codacy instance. ::: -## Bash script (recommended) {#bash-script} +## Bash script (recommended) \{#bash-script\} The recommended way to run the Codacy Coverage Reporter is by using the [self-contained bash script `get.sh`](https://github.com/codacy/codacy-coverage-reporter/blob/master/get.sh) that automatically downloads and runs the most recent version of the Codacy Coverage Reporter: - On Ubuntu, run: diff --git a/docusaurus/docs/coverage-reporter/index.md b/docusaurus/docs/coverage-reporter/index.mdx similarity index 93% rename from docusaurus/docs/coverage-reporter/index.md rename to docusaurus/docs/coverage-reporter/index.mdx index 21c9116b5e..a879402808 100644 --- a/docusaurus/docs/coverage-reporter/index.md +++ b/docusaurus/docs/coverage-reporter/index.mdx @@ -24,7 +24,7 @@ Complete these main steps to set up coverage for your repository: The next sections include detailed instructions on how to complete each step of the setup process. -## 1. Generating coverage reports +## 1. Generating coverage reports \{#generating-coverage\} Before setting up Codacy to display code coverage metrics for your repository you must have tests and use tools to generate coverage reports for the source code files in your repository. Consider the following when generating coverage reports for your repository: @@ -129,7 +129,7 @@ If you're generating a report format that Codacy doesn't support yet, [contribut - [danielpalme/ReportGenerator](https://github.com/danielpalme/ReportGenerator): convert between different report formats :::caution -Make sure that you [specify the language](uploading-coverage-in-advanced-scenarios.md#unsupported-languages) when uploading coverage for an unsupported language. +Make sure that you [specify the language](./uploading-coverage-in-advanced-scenarios.md#unsupported-languages) when uploading coverage for an unsupported language. ::: As a last resort, you can also send the coverage data directly by calling one of the following Codacy API endpoints: @@ -137,7 +137,7 @@ As a last resort, you can also send the coverage data directly by calling one of - [saveCoverage](https://api.codacy.com/swagger#savecoverage) - [saveCoverageWithAccountToken](https://api.codacy.com/swagger#savecoveragewithaccounttoken) -## 2. Uploading coverage data to Codacy +## 2. Uploading coverage data to Codacy \{#uploading-coverage\} After having coverage reports set up for your repository, you must use the Codacy Coverage Reporter to upload them to Codacy. The recommended way to do this is by using a CI/CD platform that automatically runs tests, generates coverage, and then uses the Codacy Coverage Reporter to upload the coverage report information to Codacy. :::caution @@ -149,20 +149,20 @@ Please note that Codacy needs to receive coverage data for: ::: :::note[Alternative ways of running the Codacy Coverage Reporter] -Codacy makes available [alternative ways to run the Codacy Coverage Reporter](alternative-ways-of-running-coverage-reporter.md), such as by installing the binary manually or by using Docker, a GitHub Action, or a CircleCI Orb. +Codacy makes available [alternative ways to run the Codacy Coverage Reporter](./alternative-ways-of-running-coverage-reporter), such as by installing the binary manually or by using Docker, a GitHub Action, or a CircleCI Orb. -However, the instructions on this page assume that you'll run the recommended [self-contained bash script `get.sh`](alternative-ways-of-running-coverage-reporter.md#bash-script) to automatically download and run the most recent version of the Codacy Coverage Reporter. +However, the instructions on this page assume that you'll run the recommended [self-contained bash script `get.sh`](./alternative-ways-of-running-coverage-reporter#bash-script) to automatically download and run the most recent version of the Codacy Coverage Reporter. ::: 1. Set up an API token to allow Codacy Coverage Reporter to authenticate on Codacy: - - **If you're setting up coverage for one repository**, [obtain a repository API token](../codacy-api/api-tokens.md#repository-api-tokens) and set the following environment variable to specify your repository API token: + - **If you're setting up coverage for one repository**, [obtain a repository API token](../codacy-api/api-tokens#repository-api-tokens) and set the following environment variable to specify your repository API token: ```bash export CODACY_PROJECT_TOKEN= ``` - - **If you're setting up and automating coverage for multiple repositories**, [obtain an account API Token](../codacy-api/api-tokens.md#account-api-tokens) and set the following environment variables: + - **If you're setting up and automating coverage for multiple repositories**, [obtain an account API Token](../codacy-api/api-tokens#account-api-tokens) and set the following environment variables: - **CODACY_API_TOKEN:** Your account API token. @@ -206,7 +206,7 @@ However, the instructions on this page assume that you'll run the recommended [s Be sure to also check the [instructions for more advanced scenarios](uploading-coverage-in-advanced-scenarios.md) while uploading the coverage data to Codacy, such as when running parallel tests, using monorepos, or testing source code in multiple or unsupported languages. ::: -## 3. Validating that the coverage setup is complete +## 3. Validating that the coverage setup is complete \{#validating-coverage\} Codacy displays the code coverage in each branch, as well as the evolution of code coverage between commits and the code coverage variation introduced by pull requests. Because of this, to ensure that all code coverage metrics are available on Codacy, you must have successfully uploaded coverage data and analyzed: @@ -237,7 +237,7 @@ Follow these instructions to validate that your coverage setup is working correc If there are commits with a status different from **Processed**, please follow the troubleshooting instructions for the corresponding error status and click the button **Test integration** to display any new coverage reports uploaded to Codacy. - ### Commit not found + ### Commit not found \{#status-commit-not-found\} Codacy doesn't have information about the commit associated with the coverage data. @@ -272,7 +272,7 @@ Follow these instructions to validate that your coverage setup is working correc
- ### Branch not enabled + ### Branch not enabled \{#status-branch-not-enabled\} The commit associated with the coverage data doesn't belong to any branch that Codacy is analyzing. @@ -307,7 +307,7 @@ Follow these instructions to validate that your coverage setup is working correc
- ### Commit not analyzed + ### Commit not analyzed \{#status-commit-not-analyzed\} Due to technical limitations, Codacy only reports coverage for a commit after successfully completing the static code analysis of that commit. @@ -335,7 +335,7 @@ Follow these instructions to validate that your coverage setup is working correc Codacy didn't analyze the commit on a private repository because the committer doesn't belong to the Codacy organization. @@ -365,7 +365,7 @@ Follow these instructions to validate that your coverage setup is working correc
- Make sure that you add all committers to your Codacy organization. + Make sure that you add all committers to your Codacy organization.
- ### Final report not sent + ### Final report not sent \{#status-final-report-not-sent\} Codacy is waiting to receive more coverage data before reporting the coverage for a commit. @@ -391,7 +391,7 @@ Follow these instructions to validate that your coverage setup is working correc
- ### Pending + ### Pending \{#status-pending\} Codacy is waiting to receive valid coverage data for the files in your repository. @@ -448,7 +448,7 @@ Follow these instructions to validate that your coverage setup is working correc ![Commits that must have received coverage data](images/coverage-pr-commits.png) - Click **View logs** on a pull request detail page to see the SHA-1 hashes of the commits that are missing coverage data. If you have many open pull requests, you can also use a script to [identify if any pull requests are missing coverage data](../codacy-api/examples/identifying-commits-without-coverage-data.md). + Click **View logs** on a pull request detail page to see the SHA-1 hashes of the commits that are missing coverage data. If you have many open pull requests, you can also use a script to [identify if any pull requests are missing coverage data](../codacy-api/examples/identifying-commits-without-coverage-data). ![Logs showing the pull request commits that are missing coverage data](images/coverage-codacy-ui-logs.png) @@ -466,5 +466,5 @@ If you need help setting up coverage on your repository please contact us at [su ## See also -- [Identifying commits without coverage data](../codacy-api/examples/identifying-commits-without-coverage-data.md) -- [Why does Codacy show unexpected coverage changes?](../faq/code-analysis/why-does-codacy-show-unexpected-coverage-changes.md) +- [Identifying commits without coverage data](../codacy-api/examples/identifying-commits-without-coverage-data) +- [Why does Codacy show unexpected coverage changes?](../faq/code-analysis/why-does-codacy-show-unexpected-coverage-changes) diff --git a/docusaurus/docs/coverage-reporter/troubleshooting-coverage-cli-issues.md b/docusaurus/docs/coverage-reporter/troubleshooting-coverage-cli-issues.mdx similarity index 97% rename from docusaurus/docs/coverage-reporter/troubleshooting-coverage-cli-issues.md rename to docusaurus/docs/coverage-reporter/troubleshooting-coverage-cli-issues.mdx index 0e962f5ba7..ac6e3ead39 100644 --- a/docusaurus/docs/coverage-reporter/troubleshooting-coverage-cli-issues.md +++ b/docusaurus/docs/coverage-reporter/troubleshooting-coverage-cli-issues.mdx @@ -19,7 +19,7 @@ The sections below provide instructions or workarounds to overcome common issues ## Can't guess any report due to no matching -Codacy Coverage Reporter automatically searches for coverage reports matching the [file name conventions for supported formats](index.md#generating-coverage). +Codacy Coverage Reporter automatically searches for coverage reports matching the [file name conventions for supported formats](./index.md#generating-coverage). However, if Codacy Coverage Reporter doesn't find your coverage report, you can explicitly define the report file name with the flag `-r`. For example: @@ -27,7 +27,7 @@ However, if Codacy Coverage Reporter doesn't find your coverage report, you can bash <(curl -Ls https://coverage.codacy.com/get.sh) report -r ``` -## Can't validate checksum {#checksum} +## Can't validate checksum \{#checksum\} Starting on version [13.0.0](https://github.com/codacy/codacy-coverage-reporter/releases/tag/13.0.0) the `get.sh` script automatically validates the checksum of the downloaded Codacy Coverage Reporter binary. This requires having either the `sha512sum` or `shasum` command on the operating system where you're running the script. If you're getting this error while uploading your coverage data to Codacy, install the correct version of `sha512sum` or `shasum` for the operating system that you're using. @@ -38,7 +38,7 @@ You can also skip validating the checksum of the binary by defining the followin export CODACY_REPORTER_SKIP_CHECKSUM=true ``` -## Commit SHA-1 hash detection {#commit-detection} +## Commit SHA-1 hash detection \{#commit-detection\} The Codacy Coverage Reporter automatically detects the SHA-1 hash of the current commit to associate with the coverage data when you're using one of the following CI/CD platforms: - Appveyor @@ -99,7 +99,7 @@ If you get a `com.fasterxml.jackson.core.JsonParseException` error while uploadi There are some ways you can solve this: -- Split your coverage reports into smaller files and [upload them to Codacy one at a time](../uploading-coverage-in-advanced-scenarios/#multiple-reports). +- Split your coverage reports into smaller files and [upload them to Codacy one at a time](./uploading-coverage-in-advanced-scenarios#multiple-reports). - **If you're using dotCover to generate coverage reports for your C# projects**, you should [exclude xUnit files](https://www.jetbrains.com/help/dotcover/Running_Coverage_Analysis_from_the_Command_LIne.html#filters_cmd) from the coverage analysis as follows: @@ -128,7 +128,7 @@ Make sure that your coverage report isn't empty and that it includes coverage da If you upload multiple coverage reports and at least one contains valid data, the Codacy Coverage Reporter uploads the valid reports and ignores the invalid ones. ::: -## Report generated an empty result while uploading C# coverage data {#detailedxml} +## Report generated an empty result while uploading C# coverage data \{#detailedxml\} If you're using dotCover to generate coverage reports for your C# projects, you must use the dotCover detailedXML report format as follows: ```bash diff --git a/docusaurus/docs/coverage-reporter/uploading-coverage-in-advanced-scenarios.md b/docusaurus/docs/coverage-reporter/uploading-coverage-in-advanced-scenarios.mdx similarity index 89% rename from docusaurus/docs/coverage-reporter/uploading-coverage-in-advanced-scenarios.md rename to docusaurus/docs/coverage-reporter/uploading-coverage-in-advanced-scenarios.mdx index 0e09d9e8d4..ca702924ad 100644 --- a/docusaurus/docs/coverage-reporter/uploading-coverage-in-advanced-scenarios.md +++ b/docusaurus/docs/coverage-reporter/uploading-coverage-in-advanced-scenarios.mdx @@ -6,7 +6,7 @@ description: Instructions on how to use the Codacy Coverage Reporter to upload c The following sections include instructions on how to use the Codacy Coverage Reporter to upload coverage data in more advanced scenarios. -## Uploading multiple coverage reports for the same language {#multiple-reports} +## Uploading multiple coverage reports for the same language \{#multiple-reports\} If your test suite is split into different modules or runs in parallel, you must upload multiple coverage reports for the same language either at once or in sequence. Alternatively, consider merging multiple coverage reports before uploading them to Codacy. Most coverage tools support merging or aggregating coverage data. For example, use the [merge mojo for JaCoCo](http://www.eclemma.org/jacoco/trunk/doc/merge-mojo.html). @@ -15,7 +15,7 @@ Alternatively, consider merging multiple coverage reports before uploading them If one or more coverage reports mark a line as covered multiple times, Codacy counts it as a single covered line when calculating coverage. ::: -### Uploading all reports at once {#multiple-reports-once} +### Uploading all reports at once \{#multiple-reports-once\} Upload multiple partial coverage reports with a single command by specifying each report with the flag `-r`. For example: ```bash @@ -30,7 +30,7 @@ bash <(curl -Ls https://coverage.codacy.com/get.sh) report \ -l Java $(find . -name 'jacoco*.xml' | sed 's,^, -r ,' | xargs echo) ``` -### Uploading reports in sequence {#multiple-reports-sequence} +### Uploading reports in sequence \{#multiple-reports-sequence\} Upload multiple partial coverage reports in sequence: 1. Upload each report separately with the flag `--partial`. @@ -49,7 +49,7 @@ bash <(curl -Ls https://coverage.codacy.com/get.sh) report \ bash <(curl -Ls https://coverage.codacy.com/get.sh) final ``` -## Uploading the same coverage report for multiple languages {#multiple-languages} +## Uploading the same coverage report for multiple languages \{#multiple-languages\} If your test suite generates a single coverage report for more than one language, you must upload the same coverage report for each language. To do this, upload the same report multiple times, specifying each different language with the flag `-l`. For example: @@ -62,7 +62,7 @@ bash <(curl -Ls https://coverage.codacy.com/get.sh) report \ bash <(curl -Ls https://coverage.codacy.com/get.sh) final ``` -## Uploading coverage for Golang {#golang} +## Uploading coverage for Golang \{#golang\} Codacy can't automatically detect Golang coverage report files because they don't have specific file names. If you're uploading a Golang coverage report, you must also specify the report type: @@ -73,7 +73,7 @@ bash <(curl -Ls https://coverage.codacy.com/get.sh) report \ --force-coverage-parser go -r unit.coverage.out ``` -## Uploading coverage for unsupported languages {#unsupported-languages} +## Uploading coverage for unsupported languages \{#unsupported-languages\} If your language isn't in the [list of supported languages](index.md#generating-coverage), you can still send coverage to Codacy. To do this, provide the correct language with the flag `-l`, together with `--force-language`. For example: diff --git a/docusaurus/sidebars.ts b/docusaurus/sidebars.ts index 41a550ecd0..1d92a21690 100644 --- a/docusaurus/sidebars.ts +++ b/docusaurus/sidebars.ts @@ -72,12 +72,7 @@ const sidebars: SidebarsConfig = { }, { type: 'category', - label: 'Coverage reporter', - items: coverageReporterOrder, - }, - { - type: 'category', - label: 'FAQ', + label: 'Troubleshooting & FAQs', items: faqOrder, }, 'special-thanks', From 010a385875032260ce8ff01ca6f497ea910962df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A1udia?= Date: Tue, 23 Dec 2025 10:52:54 +0000 Subject: [PATCH 06/19] gettings-started/ reviewed + support languages revamp --- ...dacy-guardrails-how-to-configure-rules.mdx | 1 + ...e-cloud.md => github-enterprise-cloud.mdx} | 2 - docusaurus/docs/getting-started/_order.ts | 5 +- ...acy-badge.md => adding-a-codacy-badge.mdx} | 14 +- .../getting-started/codacy-quickstart.mdx | 8 +- .../configure-ide/_category_.json | 3 - .../configuring-your-repository.mdx | 10 +- ...integrating-codacy-with-intellij-ides.mdx} | 22 +- ...rating-codacy-with-visual-studio-code.mdx} | 34 +- ...egrating-codacy-with-your-git-workflow.mdx | 8 +- .../supported-languages-and-tools.md | 952 ------------------ .../supported-languages-and-tools.mdx | 391 +++++++ ...ions-does-codacy-need-from-my-account.mdx} | 11 +- docusaurus/src/css/custom.css | 20 + 14 files changed, 468 insertions(+), 1013 deletions(-) rename docusaurus/docs/enterprise-cloud/{github-enterprise-cloud.md => github-enterprise-cloud.mdx} (99%) rename docusaurus/docs/getting-started/{adding-a-codacy-badge.md => adding-a-codacy-badge.mdx} (77%) delete mode 100644 docusaurus/docs/getting-started/configure-ide/_category_.json rename docusaurus/docs/getting-started/{configure-ide/integrating-codacy-with-intellij-ides.md => integrating-codacy-with-intellij-ides.mdx} (83%) rename docusaurus/docs/getting-started/{configure-ide/integrating-codacy-with-visual-studio-code.md => integrating-codacy-with-visual-studio-code.mdx} (82%) delete mode 100644 docusaurus/docs/getting-started/supported-languages-and-tools.md create mode 100644 docusaurus/docs/getting-started/supported-languages-and-tools.mdx rename docusaurus/docs/getting-started/{which-permissions-does-codacy-need-from-my-account.md => which-permissions-does-codacy-need-from-my-account.mdx} (96%) diff --git a/docusaurus/docs/codacy-guardrails/codacy-guardrails-how-to-configure-rules.mdx b/docusaurus/docs/codacy-guardrails/codacy-guardrails-how-to-configure-rules.mdx index ab87e551f0..f82758176a 100644 --- a/docusaurus/docs/codacy-guardrails/codacy-guardrails-how-to-configure-rules.mdx +++ b/docusaurus/docs/codacy-guardrails/codacy-guardrails-how-to-configure-rules.mdx @@ -1,5 +1,6 @@ --- title: How to customize the analysis rules for Codacy Guardrails +sidebar_label: Customizing analysis rules --- By default, if no API token is provided in the [MCP Server setup](codacy-guardrails-getting-started#3-install-mcp-server), Codacy uses a predefined configuration that includes all recommended rules (or [code patterns](../repositories-configure/configuring-code-patterns) that you can find on many parts of our product) from the supported built-in scanners. diff --git a/docusaurus/docs/enterprise-cloud/github-enterprise-cloud.md b/docusaurus/docs/enterprise-cloud/github-enterprise-cloud.mdx similarity index 99% rename from docusaurus/docs/enterprise-cloud/github-enterprise-cloud.md rename to docusaurus/docs/enterprise-cloud/github-enterprise-cloud.mdx index ae2e4f1e01..34f428f32f 100644 --- a/docusaurus/docs/enterprise-cloud/github-enterprise-cloud.md +++ b/docusaurus/docs/enterprise-cloud/github-enterprise-cloud.mdx @@ -67,5 +67,3 @@ Currently, the integration between Codacy and GitHub Enterprise has the followin - [How does Codacy support GitLab Enterprise?](../faq/general/how-does-codacy-support-gitlab-enterprise.md) - [How does Codacy support Bitbucket Cloud?](../faq/general/how-does-codacy-support-bitbucket-cloud.md) - [How does Codacy support Bitbucket Server?](../faq/general/how-does-codacy-support-bitbucket-server.md) - -

diff --git a/docusaurus/docs/getting-started/_order.ts b/docusaurus/docs/getting-started/_order.ts index 3451473ceb..88c65db09d 100644 --- a/docusaurus/docs/getting-started/_order.ts +++ b/docusaurus/docs/getting-started/_order.ts @@ -6,12 +6,11 @@ export const gettingStartedOrder = [ type: 'category' as const, label: 'Integrating Codacy with your IDE', items: [ - 'getting-started/configure-ide/integrating-codacy-with-intellij-ides', - 'getting-started/configure-ide/integrating-codacy-with-visual-studio-code', + 'getting-started/integrating-codacy-with-intellij-ides', + 'getting-started/integrating-codacy-with-visual-studio-code', ], }, 'getting-started/supported-languages-and-tools', 'getting-started/which-permissions-does-codacy-need-from-my-account', 'getting-started/adding-a-codacy-badge', ]; - diff --git a/docusaurus/docs/getting-started/adding-a-codacy-badge.md b/docusaurus/docs/getting-started/adding-a-codacy-badge.mdx similarity index 77% rename from docusaurus/docs/getting-started/adding-a-codacy-badge.md rename to docusaurus/docs/getting-started/adding-a-codacy-badge.mdx index 7cecf064f0..a792dcedd4 100644 --- a/docusaurus/docs/getting-started/adding-a-codacy-badge.md +++ b/docusaurus/docs/getting-started/adding-a-codacy-badge.mdx @@ -2,18 +2,18 @@ title: Adding a Codacy badge --- - Add a Codacy badge to the README of your repository to display the current [code quality grade](../faq/code-analysis/which-metrics-does-codacy-calculate.md#grade) or [code coverage](../faq/code-analysis/which-metrics-does-codacy-calculate.md#code-coverage) of your repository. - + +{/**/} ![Codacy badge on the codacy/docs README](images/codacy-badge-example.png) - +{/**/} -To obtain your Codacy badge, open your repository **Settings**, tab **General**, select the markup language, and copy the generated code to your README file. You can also add a badge for your coverage if you have [set up code coverage](../coverage-reporter/index.md) for your repository. +To obtain your Codacy badge, open your repository **Settings**, tab **General**, select the markup language, and copy the generated code to your README file. You can also add a badge for your coverage if you have [set up code coverage](../coverage-reporter/index.mdx) for your repository. ![Codacy badge](images/codacy-badge.png) -To display the grade or code coverage information of a [different branch](../repositories-configure/managing-branches.mdx) analyzed by Codacy, append `?branch=` to the URL of the badge. For example: +To display the grade or code coverage information of a [different branch](../repositories-configure/managing-branches) analyzed by Codacy, append `?branch=` to the URL of the badge. For example: ```text https://app.codacy.com/project/badge/Grade/cba8fd0874ac4f569f4f880e473cbac9?branch=dev @@ -27,7 +27,7 @@ The Codacy badges for your repository may become unavailable or grayed out if th To fix each badge: -- [Reanalyze the branch](../faq/repositories/how-do-i-reanalyze-my-repository.md#reanalyzing-a-branch) associated with the **code quality badge** +- [Reanalyze the branch](../faq/repositories/how-do-i-reanalyze-my-repository#reanalyzing-a-branch) associated with the **code quality badge** - Make sure that you're [generating and uploading code coverage reports](../../coverage-reporter/) for all the commits in the branch associated with the **coverage badge** -If these steps don't fix your Codacy badges it can mean that the badges are no longer valid. In this case, [repeat the steps above](#adding-a-codacy-badge) to replace the existing badges with new ones. +If these steps don't fix your Codacy badges it can mean that the badges are no longer valid. In this case, repeat the steps above to replace the existing badges with new ones. diff --git a/docusaurus/docs/getting-started/codacy-quickstart.mdx b/docusaurus/docs/getting-started/codacy-quickstart.mdx index 6585b905f4..04a002c50b 100644 --- a/docusaurus/docs/getting-started/codacy-quickstart.mdx +++ b/docusaurus/docs/getting-started/codacy-quickstart.mdx @@ -37,13 +37,13 @@ To get started, head to [codacy.com](https://www. 1. [Choosing an organization](#choosing-organization) 1. [Adding repositories](#adding-repositories) -## 1. Signing-up ||signing-up|| +## 1. Signing-up \{#signing-up\} Sign up with a Git provider such as GitHub, GitLab, or Bitbucket. This links your Codacy user with your Git provider user, making it easier to add repositories to Codacy and invite your teammates. Codacy will request access to your Git provider during the authorization flow. [Check the permissions that Codacy requires and why](which-permissions-does-codacy-need-from-my-account). -## 2. Choosing an organization ||choosing-organization|| +## 2. Choosing an organization \{#choosing-organization\} Now, you'll need to add or join the organizations that contain your repositories. The organization with the same name as your Git provider username contains your personal repositories. Read more about [organizations on Codacy](../../organizations/what-are-organizations). @@ -55,7 +55,7 @@ If you can't see the organization you're looking for, [follow these troubleshoot ![Choosing an organization](../organizations/images/organization-add.png) -## 3. Adding repositories ||adding-repositories|| +## 3. Adding repositories \{#adding-repositories\} Next, add the repositories that you wish to analyze. Codacy begins an initial analysis as soon as you add a repository and sets everything up to ensure your next commits on that repository are analyzed. @@ -73,4 +73,4 @@ Click the repository name to navigate to the repository dashboard and see the [c ## Next steps -The first analysis is based on default tool and pattern configurations. It's now important that you configure your repository to integrate code analysis seamlessly into your existing pipeline. See how to [configure your repository to match the use cases of your team](configuring-your-repository.md). +The first analysis is based on default tool and pattern configurations. It's now important that you configure your repository to integrate code analysis seamlessly into your existing pipeline. See how to [configure your repository to match the use cases of your team](configuring-your-repository). diff --git a/docusaurus/docs/getting-started/configure-ide/_category_.json b/docusaurus/docs/getting-started/configure-ide/_category_.json deleted file mode 100644 index feda377e57..0000000000 --- a/docusaurus/docs/getting-started/configure-ide/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "label": "Integrating Codacy with your IDE" -} diff --git a/docusaurus/docs/getting-started/configuring-your-repository.mdx b/docusaurus/docs/getting-started/configuring-your-repository.mdx index 92a4f99a01..3f2b6938bd 100644 --- a/docusaurus/docs/getting-started/configuring-your-repository.mdx +++ b/docusaurus/docs/getting-started/configuring-your-repository.mdx @@ -19,15 +19,15 @@ To configure your repository, follow these steps: ## 1. Ignoring files \{#ignoring-files\} -[Ignore any files and directories](../repositories-configure/ignoring-files.md) that aren't relevant for the Codacy analysis, such as generated code or any third-party libraries included in your repositories. +[Ignore any files and directories](../repositories-configure/ignoring-files) that aren't relevant for the Codacy analysis, such as generated code or any third-party libraries included in your repositories. ![Ignoring files](../repositories-configure/images/ignored-files.png) ## 2. Configuring code patterns \{#configuring-code-patterns\} -[Configure the tools and code patterns](../repositories-configure/configuring-code-patterns.md) that Codacy uses to analyze your repository. If security is important for your team, review the [Security and risk management dashboard](../organizations/managing-security-and-risk.md) to ensure that your configuration detects potential security issues. +[Configure the tools and code patterns](../repositories-configure/configuring-code-patterns) that Codacy uses to analyze your repository. If security is important for your team, review the [Security and risk management dashboard](../organizations/managing-security-and-risk) to ensure that your configuration detects potential security issues. :::tip -To ensure that multiple repositories consistently follow the same global tool and code pattern configurations, [use an organization coding standard](../organizations/using-coding-standards.md). +To ensure that multiple repositories consistently follow the same global tool and code pattern configurations, [use an organization coding standard](../organizations/using-coding-standards). ::: ![Configuring the tools and code patterns](../repositories-configure/images/code-patterns.png) @@ -40,8 +40,8 @@ It's important that you set up coverage beforehand because Codacy can only repor ![Adding coverage to your repository](../coverage-reporter/images/coverage-codacy-ui.png) ## Next steps \{#next-steps\} -Once you’re satisfied with your setup, [integrate Codacy with your Git workflow](integrating-codacy-with-your-git-workflow.md) to flag potential issues, block problematic pull requests, and display other useful suggestions directly on your Git provider. +Once you’re satisfied with your setup, [integrate Codacy with your Git workflow](./integrating-codacy-with-your-git-workflow) to flag potential issues, block problematic pull requests, and display other useful suggestions directly on your Git provider. :::tip -To showcase the current code quality grade and coverage, [add a Codacy badge to your repository](adding-a-codacy-badge.md). +To showcase the current code quality grade and coverage, [add a Codacy badge to your repository](./adding-a-codacy-badge). ::: diff --git a/docusaurus/docs/getting-started/configure-ide/integrating-codacy-with-intellij-ides.md b/docusaurus/docs/getting-started/integrating-codacy-with-intellij-ides.mdx similarity index 83% rename from docusaurus/docs/getting-started/configure-ide/integrating-codacy-with-intellij-ides.md rename to docusaurus/docs/getting-started/integrating-codacy-with-intellij-ides.mdx index 606f3bab7c..ea5c47ac58 100644 --- a/docusaurus/docs/getting-started/configure-ide/integrating-codacy-with-intellij-ides.md +++ b/docusaurus/docs/getting-started/integrating-codacy-with-intellij-ides.mdx @@ -12,19 +12,19 @@ The [Codacy IntelliJ plugin](https://github.com/codacy/codacy-intellij-extension The main view of the Codacy IntelliJ plugin provides a summary of the code quality and coverage changes introduced by the pull request of the currently checked-out branch. -![Main view](./../images/codacy-intellij-plugin-main-view.png) +![Main view](./images/codacy-intellij-plugin-main-view.png) In the main view, you can find the following information: -- The **Status** of the pull request, either up to standards or not up to standards, based on the [Gates](../repositories-configure/adjusting-quality-gates.md) set for the repository. +- The **Status** of the pull request, either up to standards or not up to standards, based on the [Gates](../repositories-configure/adjusting-quality-gates) set for the repository. -- Any **issues** introduced or fixed by the pull request. These are the same issues you find in the [Issues tabs](../repositories/pull-requests.mdx#issues-tabs) in the Codacy app and are also visible in IntelliJ's Problems tab. +- Any **issues** introduced or fixed by the pull request. These are the same issues you find in the [Issues tabs](../repositories/pull-requests#issues-tabs) in the Codacy app and are also visible in IntelliJ's Problems tab. When this item is expanded, the number next to each file name is the total number of issues that the pull request adds to that file. - The **diff coverage** introduced by the pull request. The percentage next to each file name is the coverage variation for that file. -- Sequences of **duplicate code** (clones) introduced by the pull request. These are the same ones you find in the [Duplication tabs](../repositories/pull-requests.mdx#duplication-tabs) in the Codacy app. +- Sequences of **duplicate code** (clones) introduced by the pull request. These are the same ones you find in the [Duplication tabs](../repositories/pull-requests#duplication-tabs) in the Codacy app. - Variations in **code complexity** introduced by the pull request. @@ -33,10 +33,10 @@ In the main view, you can find the following information: :::note[The Codacy IntelliJ plugin is compatible with IntelliJ IDEA (Ultimate, Community), Android Studio, and Aqua.] ::: -1. Make sure that the repository you’re working on is analyzed by Codacy and that you have a [repository read](../organizations/roles-and-permissions-for-organizations.md) role or higher. +1. Make sure that the repository you’re working on is analyzed by Codacy and that you have a [repository read](../organizations/roles-and-permissions-for-organizations) role or higher. :::tip - If this is your first time using Codacy, see [how to add and analyze your first repository](./codacy-quickstart.md#adding-your-first-repository). + If this is your first time using Codacy, see [how to add and analyze your first repository](./codacy-quickstart#adding-your-first-repository). ::: 1. Install the plugin from the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/23924-codacy) or through the [plugin settings panel](https://www.jetbrains.com/help/idea/managing-plugins.html) in your IntelliJ IDE. @@ -48,12 +48,12 @@ To see Codacy quality and coverage data for an open pull request, follow these s 1. Open the repository directory in your IntelliJ IDE. :::note - If the repository isn't on Codacy yet, [add it to Codacy](../organizations/managing-repositories.md#adding-a-repository) first. + If the repository isn't on Codacy yet, [add it to Codacy](../organizations/managing-repositories#adding-a-repository) first. ::: 1. Open the main view by clicking the **Codacy logo** in the left tool window bar. - ![Codacy main view](./../images/codacy-intellij-plugin-sign-in.png) + ![Codacy main view](./images/codacy-intellij-plugin-sign-in.png) 1. If you’re not signed in, click the **Sign in** button to authorize IntelliJ on Codacy. @@ -77,20 +77,20 @@ To review issues: 1. Open the **Problems tool window** (use `Ctrl+6` on Windows/Linux or `Cmd+6` on macOS) and select the **File** tab. - ![Navigate to a specific issue from the Problems tab](./../images/codacy-intellij-plugin-problems-tab.png) + ![Navigate to a specific issue from the Problems tab](./images/codacy-intellij-plugin-problems-tab.png) 1. Click the name of the issue you want to review. 1. Hover over a highlighted issue in the code editor to view available actions and suggested quick fixes, if available. - For a list of tools that support suggested fixes, see [Supported languages and tools](./supported-languages-and-tools.md#supported-languages-and-tools). + For a list of tools that support suggested fixes, see [Supported languages and tools](./supported-languages-and-tools). 1. Once you've addressed the problems in your code, push your changes to the Git provider so that Codacy analyzes the updated code. When the analysis is complete, the Codacy plugin automatically refreshes the pull request analysis result. You can also refresh the pull request data manually by clicking the Refresh Pull Request button in the main view. ## Running Codacy Guardrails -As of version [0.0.8](https://plugins.jetbrains.com/plugin/23924-codacy/versions/stable/840439), the IntelliJ plugin now supports Codacy Guardrails. To see how to get it quickly setup refer to our quickstart guide [here](../codacy-guardrails/codacy-guardrails-getting-started.md#how-to-install-quick-guide-jetbrains). +As of version [0.0.8](https://plugins.jetbrains.com/plugin/23924-codacy/versions/stable/840439), the IntelliJ plugin now supports Codacy Guardrails. To see how to get it quickly setup refer to our quickstart guide [here](../codacy-guardrails/codacy-guardrails-getting-started#how-to-install-quick-guide-jetbrains). ## See also diff --git a/docusaurus/docs/getting-started/configure-ide/integrating-codacy-with-visual-studio-code.md b/docusaurus/docs/getting-started/integrating-codacy-with-visual-studio-code.mdx similarity index 82% rename from docusaurus/docs/getting-started/configure-ide/integrating-codacy-with-visual-studio-code.md rename to docusaurus/docs/getting-started/integrating-codacy-with-visual-studio-code.mdx index 2d14eabc40..275d41ccaa 100644 --- a/docusaurus/docs/getting-started/configure-ide/integrating-codacy-with-visual-studio-code.md +++ b/docusaurus/docs/getting-started/integrating-codacy-with-visual-studio-code.mdx @@ -18,25 +18,25 @@ The main view of the extension displays information about the code quality and c - [Open pull requests](#open-pull-requests-tab) - [Analyzed branch](#analyzed-branch-tab) -![Important issues](./../images/codacy-vscode-extension-main-view.png) +![Important issues](./images/codacy-vscode-extension-main-view.png) ### Status tab The **Pull request status** tab displays the following information for the pull request of the currently checked-out branch: -- The **Status** of the pull request, either up to standards or not up to standards, based on the [Gates](../repositories-configure/adjusting-quality-gates.md) set for the repository. +- The **Status** of the pull request, either up to standards or not up to standards, based on the [Gates](../repositories-configure/adjusting-quality-gates) set for the repository. -- Any **issues** introduced or fixed by the pull request. These are the same issues you find in the [Issues tabs](../repositories/pull-requests.mdx#issues-tabs) in the Codacy app and are also visible in VS Code's Problems tab. +- Any **issues** introduced or fixed by the pull request. These are the same issues you find in the [Issues tabs](../repositories/pull-requests#issues-tabs) in the Codacy app and are also visible in VS Code's Problems tab. When this item is expanded, the number next to each file name is the total number of issues that the pull request adds to or removes from that file. The number farther to the right, added by VS Code, is the total number of problems in that file, which may or may not be issues from Codacy. If there are any Medium or Critical issues, the file name is also highlighted in yellow (Medium) or red (Critical). - ![Important issues](./../images/codacy-vscode-extension-important-issues.png) + ![Important issues](./images/codacy-vscode-extension-important-issues.png) - The **diff coverage and coverage variation** introduced by the pull request. When this item is expanded, the percentage next to each file name is the coverage variation for that file. You can toggle on/off the inline coverage to see/hide the line-by-line diff coverage and a comparison of the old and new file content for each modified file - uncovered lines (red), covered lines with its test coverage count (green), and non-coverable lines (no background). - ![Toggle inline coverage](./../images/codacy-vscode-extension-inline-coverage.png) + ![Toggle inline coverage](./images/codacy-vscode-extension-inline-coverage.png) - Sequences of **duplicate code** (clones) introduced by the pull request. These are the same ones you find in the [Duplication tabs](../repositories/pull-requests.mdx#duplication-tabs) in the Codacy app. @@ -44,7 +44,7 @@ The **Pull request status** tab displays the following information for the pull ### Open pull requests tab -![Pull requests tab UI](./../images/codacy-vscode-extension-pull-requests-tab.png) +![Pull requests tab UI](./images/codacy-vscode-extension-pull-requests-tab.png) The **Open Pull Requests** tab lists all open pull requests for the repository, including the following information for each: @@ -52,21 +52,21 @@ The **Open Pull Requests** tab lists all open pull requests for the repository, - Analyzing, if Codacy is analyzing the branch. - - Up to standards or not up to standards, based on the [Gates](../repositories-configure/adjusting-quality-gates.md) set for the repository. + - Up to standards or not up to standards, based on the [Gates](../repositories-configure/adjusting-quality-gates) set for the repository. - The author of the pull request. - The source and target branches of the pull request. -- Any **issues** introduced or fixed by the pull request. These are the same issues you find in the [Issues tabs](../repositories/pull-requests.mdx#issues-tabs) in the Codacy app. +- Any **issues** introduced or fixed by the pull request. These are the same issues you find in the [Issues tabs](../repositories/pull-requests#issues-tabs) in the Codacy app. -- Sequences of **duplicate code** (clones) introduced by the pull request. These are the same ones you find in the [Duplication tabs](../repositories/pull-requests.mdx#duplication-tabs) in the Codacy app. +- Sequences of **duplicate code** (clones) introduced by the pull request. These are the same ones you find in the [Duplication tabs](../repositories/pull-requests#duplication-tabs) in the Codacy app. -- Variations in **code complexity** introduced by the pull request. This is the same value you find on the [Pull request quality overview](../repositories/pull-requests.mdx#quality-overview) in the Codacy app. +- Variations in **code complexity** introduced by the pull request. This is the same value you find on the [Pull request quality overview](../repositories/pull-requests#quality-overview) in the Codacy app. ### Analyzed branch tab -![Analyzed branch tab UI](./../images/codacy-vscode-extension-analyzed-branch-tab.png) +![Analyzed branch tab UI](./images/codacy-vscode-extension-analyzed-branch-tab.png) The **Analyzed Branch** tab appears if you switch to an analyzed branch that doesn't have an open pull request, such as the `main` or `master` branch. This tab shows an overview of the issues found in that branch, grouped by recently added, introduced by the current user, issue category, and issue severity. @@ -74,10 +74,10 @@ See [how to manage the analysis of your repository's branches](../repositories-c ## Installing the Codacy VS Code extension -1. Make sure that the repository you’re working on is analyzed by Codacy and that you have a [repository read](../organizations/roles-and-permissions-for-organizations.md) role or higher. +1. Make sure that the repository you’re working on is analyzed by Codacy and that you have a [repository read](../organizations/roles-and-permissions-for-organizations) role or higher. :::tip - If this is your first time using Codacy, see [how to add and analyze your first repository](./codacy-quickstart.md#adding-your-first-repository). + If this is your first time using Codacy, see [how to add and analyze your first repository](./codacy-quickstart#adding-your-first-repository). ::: 1. Install the extension from the [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=codacy-app.codacy) or through the [Extensions view in VS Code](https://code.visualstudio.com/docs/editor/extension-marketplace#_browse-for-extensions). @@ -91,12 +91,12 @@ To see Codacy quality and coverage data for an open pull request, follow these s 1. Open the repository directory in VS Code. :::note - If the repository isn't on Codacy yet, [add it to Codacy](../organizations/managing-repositories.md#adding-a-repository) first. + If the repository isn't on Codacy yet, [add it to Codacy](../organizations/managing-repositories#adding-a-repository) first. ::: 1. Open the main view by clicking the **Codacy logo** in the activity bar or the **Codacy tab** in the status bar. - ![Codacy main view](./../images/codacy-vscode-extension-sign-in.png) + ![Codacy main view](./images/codacy-vscode-extension-sign-in.png) 1. If you’re not signed in, click the **Sign in** button to authorize VS Code on Codacy. @@ -122,11 +122,11 @@ To review issues: 1. Click the name of the issue you want to review. - ![Navigate to a specific issue from the Problems tab](./../images/codacy-vscode-extension-problems-tab.png) + ![Navigate to a specific issue from the Problems tab](./images/codacy-vscode-extension-problems-tab.png) 1. Hover over a highlighted issue in the code editor to view available actions and suggested quick fixes (if available). - For a list of tools that support quick fixes, see [Supported languages and tools](./supported-languages-and-tools.md#supported-languages-and-tools). + For a list of tools that support quick fixes, see [Supported languages and tools](./supported-languages-and-tools#supported-languages-and-tools). 1. Once you've addressed the problems in your code, push your changes to the Git provider so that Codacy analyzes the updated code. diff --git a/docusaurus/docs/getting-started/integrating-codacy-with-your-git-workflow.mdx b/docusaurus/docs/getting-started/integrating-codacy-with-your-git-workflow.mdx index 908348a6e0..e9f6d186a2 100644 --- a/docusaurus/docs/getting-started/integrating-codacy-with-your-git-workflow.mdx +++ b/docusaurus/docs/getting-started/integrating-codacy-with-your-git-workflow.mdx @@ -19,10 +19,10 @@ To integrate Codacy with your Git workflow, follow these steps: 1. [Blocking merging pull requests](#blocking-pull-requests) (optional) ## 1. Configuring the quality gate rules \{#configuring-gate\} -[Review and adjust the quality gates](../repositories-configure/adjusting-quality-gates.md) of your repository to decide which pull requests should fail the Codacy quality gate. +[Review and adjust the quality gates](../repositories-configure/adjusting-quality-gates) of your repository to decide which pull requests should fail the Codacy quality gate. :::tip -The [default quality gate rules](../organizations/using-gate-policies.md) are designed to help maintain the current code quality of your repository. In particular, the default value for the coverage rule might be demanding. Depending on factors such as the current code quality of your repository and the maturity of your team practices, consider the balance between implementing stricter quality gates and the possibility of delaying or blocking the development progress. +The [default quality gate rules](../organizations/using-gate-policies) are designed to help maintain the current code quality of your repository. In particular, the default value for the coverage rule might be demanding. Depending on factors such as the current code quality of your repository and the maturity of your team practices, consider the balance between implementing stricter quality gates and the possibility of delaying or blocking the development progress. Codacy generally recommends that on a first stage you configure rules that focus on stopping new critical issues from entering your code base, such as: @@ -38,7 +38,7 @@ Codacy generally recommends that on a first stage you configure rules that focus ![Adjusting the quality gates](../repositories-configure/images/quality-settings-gates.png) ## 2. Configuring the Git provider integration \{#git-provider-integration\} -Make sure you enable the option **Status checks** ([GitHub](../repositories-configure/integrations/github-integration.md#status-checks)) or **Pull request status** ([GitLab](../repositories-configure/integrations/gitlab-integration.md#pull-request-status) and [Bitbucket](../repositories-configure/integrations/bitbucket-integration.md#pull-request-status)). +Make sure you enable the option **Status checks** ([GitHub](../repositories-configure/integrations/github-integration#status-checks)) or **Pull request status** ([GitLab](../repositories-configure/integrations/gitlab-integration#pull-request-status) and [Bitbucket](../repositories-configure/integrations/bitbucket-integration#pull-request-status)). @@ -51,7 +51,7 @@ Once you've tested out Codacy for a while and you're happy with the level of fee To eliminate any false positives that could inadvertently block the work of your team, it's important that before activating this feature you: - Validate that Codacy is reporting the intended status on your pull requests -- Double check you repository's [tool and code pattern settings](../repositories-configure/configuring-code-patterns.md) and [quality gate settings](../repositories-configure/adjusting-quality-gates.md) +- Double check you repository's [tool and code pattern settings](../repositories-configure/configuring-code-patterns) and [quality gate settings](../repositories-configure/adjusting-quality-gates) ::: diff --git a/docusaurus/docs/getting-started/supported-languages-and-tools.md b/docusaurus/docs/getting-started/supported-languages-and-tools.md deleted file mode 100644 index 9dd1dec673..0000000000 --- a/docusaurus/docs/getting-started/supported-languages-and-tools.md +++ /dev/null @@ -1,952 +0,0 @@ ---- -title: Supported languages and tools -description: List of tools that Codacy uses to analyze over 40 supported languages. Codacy provides static analysis for all programming languages and cloud infrastructure-as-code platforms as well as code duplication, code complexity, and code coverage metrics for most programming languages. ---- - - -Codacy uses industry-leading tools to perform automatic static code analysis over 40 supported languages: - -- **For programming languages**, Codacy provides static analysis as well as code duplication, code complexity, secret detection, dependency vulnerability scanning, and code coverage metrics for key languages. - -- **For cloud infrastructure-as-code platforms**, Codacy provides static analysis and secret detection to enforce security and compliance best practices. - -The table below lists all languages that Codacy supports and the corresponding tools that Codacy uses to analyze your source code. Besides this, Codacy uses [cloc](https://github.com/kentcdodds/cloc) to calculate the source lines of code for all supported languages and supports multiple [code coverage report formats](../coverage-reporter/index.md#generating-coverage). - - - -:::caution -Codacy runs security and other analysis tools when code changes are pushed to your repositories. These tools don't scan code for issues continuously. -::: - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
LanguageFile extensionsStatic analysisSuggested fixesSecret detectionDependency vulnerability scanningMalicious packages detection 11DuplicationComplexityLicense scanning
Apex.cls, .triggerPMD, - Semgrep 1-Semgrep--PMD CPD 10 --
AsyncAPI-Spectral-------
AWS CloudFormation-Checkov-Checkov, - Semgrep 2, - Trivy 2-----
Azure Resource Manager Templates-Checkov-------
C.c, .hClang-Tidy 3, - Cppcheck, - Flawfinder, - Semgrep 1Semgrep 🔧Semgrep, - TrivyTrivy, scans
conan.lock (Conan)
-PMD CPD 10 Lizard-
C++.cpp, .hpp, .cc, .cxx, .inoClang-Tidy 3, - Cppcheck 4, - Flawfinder, - Semgrep 1-Semgrep, - TrivyTrivy, scans
conan.lock (Conan)
-PMD CPD 10 Lizard-
C#.csSemgrep 1, - SonarC#Semgrep 🔧Semgrep, - TrivyTrivy, scans
.deps.json (.Net), packages.lock.json (NuGet)
Trivy, scans packages.lock.json for malicious packages published in NuGet PMD CPD 10 Lizard-
CoffeeScript.coffeeCoffeeLint----jscpd--
Crystal.crAmeba-------
CSS.cssStylelint-------
Dart.dartdartanalyzer 5-TrivyTrivy, scans
pubspec.lock
-jscpd--
Dockerfile.dockerfileHadolint, - Semgrep 1Semgrep 🔧Semgrep, - Trivy-----
Elixir.ex, .exsCredo, - Semgrep 1-TrivyTrivy, scans
mix.lock (Mix)
-jscpd--
GitHub Actions-Semgrep 1-Semgrep, - Trivy-----
Go.goaligncheck 3, - deadcode 3, - Gosec 3, - Revive, - Semgrep 1, - Staticcheck 3Semgrep 🔧Semgrep, - TrivyTrivy, scans
go.mod
Trivy, scans
go.mod for malicious packages published in github.com
PMD CPD 10 Lizard-
Groovy.groovyCodeNarc----jscpd--
Helm---Semgrep 2, Trivy 2------
Java.javaCheckstyle, - PMD, - Semgrep 1, - SpotBugs 3Semgrep 🔧PMD, - Semgrep, - TrivyTrivy, scans
pom.xml and gradle.lockfile
Trivy, scans
pom.xml and gradle.lockfile for malicious packages published in maven
jscpdLizard-
JavaScript.js, .jsx, .jsm, .vue, .mjsESLint, - PMD, - Semgrep 1ESLint 🔧Semgrep, - TrivyTrivy, scans
package.json and package-lock.json (npm),
yarn.lock (Yarn)
Trivy, scans
package.json and package-lock.json for malicious packages published in npm
PMD CPD 10 LizardTrivy, scans
package-lock.json (npm)
JSON.jsonJackson Linter-Checkov, - Trivy-----
JSP.jspPMD----PMD CPD 10 --
Kotlin.kt, .kts - detekt, - Semgrep 1, - PMD - -SemgrepTrivy, scans
pom.xml and gradle.lockfile
Trivy, scans
pom.xml and gradle.lockfile for malicious packages published in maven
jscpddetekt 10 -
Kubernetes-Checkov, - Semgrep 2Semgrep 🔧Checkov, - Semgrep 2, - Trivy 2---Lizard-
Less.lessStylelint-------
Markdown.md, .markdown, .mdown, .mkdn, .mkd, .mdwn, .mkdown, .ronremark-lint, markdownlintmarkdownlint 🔧------
Objective-C.mClang-Tidy 3----jscpdLizard-
OpenAPI-Spectral-------
PHP.phpPHP_CodeSniffer, - PHP Mess Detector, - Semgrep 1-Semgrep, - TrivyTrivy, scans
composer.lock (Composer)
-PHPCPDLizardTrivy, scans
composer.lock (Composer)
PL/SQL.trg, .prc, .fnc, .pld, .pls, .plh, .plb, .pck, .pks, .pkh, .pkb, .typ, .tyb, .tps, .tpbPMD-------
PostgreSQL-SQLint-------
PowerShell.ps1, .psc1, .psd1, .psm1, .ps1xml, .pssc, .cdxml, .clixmlPSScriptAnalyser-------
Python.py - Bandit, - Prospector, - Pylint, - Ruff, - Semgrep 1 - - Semgrep 🔧 - - Bandit, - Prospector, - Semgrep, - Trivy - - Trivy, scans
requirements.txt (pip),
Pipfile.lock (pipenv),
poetry.lock (Poetry), uv.lock (UV) -
- Trivy, scans
requirements.txt (pip),
Pipfile.lock (pipenv)
for malicious packages published in PyPI -
- PMD CPD - 10 - LizardTrivy, scans
requirements.txt (pip),
Pipfile.lock (pipenv),
poetry.lock (Poetry), uv.lock (UV)
Ruby.rb, .gemspec, .podspec, .jbuilder, .rake, .opalReek, Brakeman 7, RuboCop, Semgrep 1Semgrep 🔧Semgrep, - TrivyTrivy, scans
Gemfile.lock (Bundler)
Trivy, scans
Gemfile.lock for malicious packages published in rubygems.org
FlayLizard-
Rust.rs, .rlibSemgrep 1-Semgrep, - TrivyTrivy, scans
Cargo.lock (Cargo)
Trivy, scans
Cargo.lock for malicious packages published in crates.io
jscpdLizard-
Sass.scssStylelint-------
Scala.scalaCodacy Scalameta Pro, - Scalastyle, - Semgrep 1, - SpotBugs 3-Semgrep, - TrivyTrivy, scans
build.sbt.lock (sbt) 9
Trivy, scans
build.sbt.lock for malicious packages published in maven 9
PMD CPD 10 Lizard-
Serverless Framework-Checkov-------
Shell.sh, .bashShellCheck, - Semgrep 1-Semgrep-----
Swift.swift - Semgrep 1, - SwiftLint, - PMD - -Semgrep, - TrivyTrivy, scans
Package.resolved (SwiftPM)
-PMD CPD 10 Lizard-
SQL.sql - PMD, - SQLint, - TSQLLint, - SQLFluff, - Semgrep 1 - -------
Terraform.tfCheckov, - Semgrep 1-Checkov, - Semgrep, - Trivy-----
Transact-SQL.tsqlTSQLLint-------
TypeScript.ts, .tsxESLint, - Semgrep 1ESLint 🔧Semgrep, - TrivyTrivy, scans
package.json and package-lock.json (npm),
yarn.lock (Yarn)
Trivy, scans
package.json and package-lock.json for malicious packages published in npm
jscpdLizardTrivy, scans
package-lock.json (npm)
Unity-Unity Roslyn Analyzers 3-------
Velocity.vmPMD-------
Visual Basic.vbSonarVB----jscpd--
Visualforce.component, .pagePMD----PMD CPD 10 --
XML.xml, .xsl, .wsdl, .pomPMD-Trivy-----
XSL.xslPMD-------
YAML.yaml, .yml, .env, .env.production, .env.prod, .env.staging, .env.dev, .env.development--Trivy-----
- -## Docker images of supported tools - -Codacy adds support for new languages and tools by using [a Docker image to run each tool](https://github.com/codacy/codacy-example-tool). - -The following table lists the Codacy GitHub repositories corresponding to each supported tool. Use these repositories to check the extra plugins supported by each tool or to submit GitHub issues related to each tool. To learn more about the tool versions used by Codacy, [see the latest release notes](../release-notes/index.md). - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Tool nameCodacy GitHub repository
aligncheck 3codacy/codacy-aligncheck
Amebacodacy/codacy-ameba
Banditcodacy/codacy-bandit
Brakeman 7codacy/codacy-brakeman
Checkovcodacy/codacy-checkov
Checkstylecodacy/codacy-checkstyle
Clang-Tidy 3codacy/codacy-clang-tidy
Codacy Scalameta Procodacy/codacy-scalameta
CodeNarccodacy/codacy-codenarc
CoffeeLintcodacy/codacy-coffeelint
Cppcheck 4codacy/codacy-cppcheck
Credocodacy/codacy-credo
dartanalyzer 5codacy/codacy-dartanalyzer
deadcode 3codacy/codacy-deadcode
detektcodacy/codacy-detekt
ESLint 6codacy/codacy-eslint
Flawfindercodacy/codacy-flawfinder
Gosec 3codacy/codacy-gosec
Hadolintcodacy/codacy-hadolint
Jackson Lintercodacy/codacy-jackson-linter
Lizardcodacy/codacy-lizard
markdownlintcodacy/codacy-markdownlint
PHP_CodeSniffercodacy/codacy-codesniffer
PHP Mess Detectorcodacy/codacy-phpmd
PMD 6codacy/codacy-pmd7
Prospectorcodacy/codacy-prospector
PSScriptAnalysercodacy/codacy-psscriptanalyzer
Pylintcodacy/codacy-pylint-python3
remark-lintcodacy/codacy-remark-lint
Revivecodacy/codacy-gorevive
RuboCop 6codacy/codacy-rubocop
Ruffcodacy/codacy-ruff
Scalastylecodacy/codacy-scalastyle
Semgrep 1codacy/codacy-semgrep
ShellCheckcodacy/codacy-shellcheck
SonarC#codacy/codacy-sonar-csharp
SonarVBcodacy/codacy-sonar-visual-basic
Spectralcodacy/codacy-spectral
SpotBugs 3codacy/codacy-spotbugs
SQLintcodacy/codacy-sqlint
Staticcheck 3codacy/codacy-staticcheck
Stylelintcodacy/codacy-stylelint
SwiftLint 6 8codacy/codacy-swiftlint
Trivycodacy/codacy-trivy
TSQLLintcodacy/codacy-tsqllint
Unity Roslyn Analyzers 3codacy/codacy-roslyn
- -1: Semgrep supports additional security rules when signing up for [Semgrep Pro](https://semgrep.dev/pricing/). This tool doesn't support [custom file extensions](../repositories-configure/languages.md#configuring-file-extensions). -2: Currently, only YAML file scanning is supported on this platform. -3: Supported as a [client-side tool](../repositories-configure/local-analysis/client-side-tools.md). -4: Currently, Cppcheck only supports the MISRA guidelines for C. -5: Currently, Codacy only supports including the packages [lints](https://pub.dev/packages/lints) and [flutter_lints](https://pub.dev/packages/flutter_lints) on dartanalyzer configuration files. -6: Doesn't calculate [the number of methods and the complexity per method](../repositories/files.md#file-details) for each file. -7: Due to licensing limitations, Codacy doesn't support the latest version of Brakeman. To analyze your Ruby code for the latest security vulnerabilities, use [Semgrep](https://semgrep.dev/), which provides comprehensive and up-to-date security scanning. -8: Supports [reporting warnings or errors](https://realm.github.io/SwiftLint/cyclomatic_complexity.html) on functions above specific complexity thresholds. Enable the rule **Cyclomatic Complexity** on the [Code patterns page](../repositories-configure/configuring-code-patterns.md), or use a [configuration file](https://realm.github.io/SwiftLint/index.html#configuration) to customize the thresholds. -9: Requires the [sbt-dependency-lock](https://github.com/stringbean/sbt-dependency-lock) plugin for generating the lockfile. -10: Codacy may use a different version of this tool for measuring complexity and duplication. -11: Malicious packages identified in the [OpenSSF Malicious Packages database](https://github.com/ossf/malicious-packages). -🔧: Supports [suggesting fixes](../repositories-configure/integrations/github-integration.md#suggest-fixes) for identified issues. - -## See also - -- [Codacy quickstart (5 min)](codacy-quickstart.md) -- [Client-side tools](../repositories-configure/local-analysis/client-side-tools.md) -- [Which metrics does Codacy calculate?](../faq/code-analysis/which-metrics-does-codacy-calculate.md) diff --git a/docusaurus/docs/getting-started/supported-languages-and-tools.mdx b/docusaurus/docs/getting-started/supported-languages-and-tools.mdx new file mode 100644 index 0000000000..885083b71a --- /dev/null +++ b/docusaurus/docs/getting-started/supported-languages-and-tools.mdx @@ -0,0 +1,391 @@ +--- +title: Supported languages and tools +description: List of tools that Codacy uses to analyze over 40 supported languages. Codacy provides static analysis for all programming languages and cloud infrastructure-as-code platforms as well as code duplication, code complexity, and code coverage metrics for most programming languages. +--- +
+ +Codacy uses industry-leading tools to perform automatic static code analysis over 40 supported languages: + +- **For programming languages**, Codacy provides static analysis as well as code duplication, code complexity, secret detection, dependency vulnerability scanning, and code coverage metrics for key languages. + +- **For cloud infrastructure-as-code platforms**, Codacy provides static analysis and secret detection to enforce security and compliance best practices. + +The table below lists all languages that Codacy supports and the corresponding tools that Codacy uses to analyze your source code. Besides this, Codacy uses [cloc](https://github.com/kentcdodds/cloc) to calculate the source lines of code for all supported languages and supports multiple [code coverage report formats](../coverage-reporter/index.mdx#generating-coverage). + +{/**/} + +:::caution +Codacy runs security and other analysis tools when code changes are pushed to your repositories. These tools don't scan code for issues continuously. +::: + +## Supported languages and tools + +### Quality scanning + + + +| Language | Static analysis | Duplication[^1] | Complexity[^1] | Suggested fixes | +|---|---|---|---|---| +| Apex
`.cls` `.trigger` | PMD, Semgrep | PMD CPD | - | - | +| AsyncAPI | Spectral | - | - | - | +| AWS CloudFormation | Checkov | - | - | - | +| Azure Resource Manager Templates | Checkov | - | - | - | +| C
`.c` `.h` | Clang-Tidy[^client-side], Cppcheck[^cppcheck-misra], Flawfinder, Semgrep | PMD CPD | Lizard | Semgrep | +| C++
`.cpp` `.hpp` `.cc` `.cxx` `.ino` | Clang-Tidy[^client-side], Cppcheck[^cppcheck-misra], Flawfinder, Semgrep | PMD CPD | Lizard | - | +| C#
`.cs` | Semgrep, SonarC# | PMD CPD | Lizard | Semgrep | +| CoffeeScript
`.coffee` | CoffeeLint | jscpd | - | - | +| Crystal
`.cr` | Ameba | - | - | - | +| CSS
`.css` | Stylelint | - | - | - | +| Dart
`.dart` | dartanalyzer[^dart-limitations] | jscpd | - | - | +| Dockerfile
`.dockerfile` | Hadolint, Semgrep | - | - | Semgrep | +| Elixir
`.ex` `.exs` | Credo, Semgrep | jscpd | - | - | +| GitHub Actions | Semgrep | - | - | - | +| Go
`.go` | aligncheck[^client-side], deadcode[^client-side], Gosec[^client-side], Revive, Semgrep, Staticcheck[^client-side] | PMD CPD | Lizard | Semgrep | +| Groovy
`.groovy` | CodeNarc | jscpd | - | - | +| Java
`.java` | Checkstyle, PMD, Semgrep, SpotBugs[^client-side] | jscpd | Lizard | Semgrep | +| JavaScript
`.js` `.jsx` `.jsm` `.vue` `.mjs` | ESLint, PMD, Semgrep | PMD CPD | Lizard | ESLint | +| JSON
`.json` | Jackson Linter | - | - | - | +| JSP
`.jsp` | PMD | PMD CPD | - | - | +| Kotlin
`.kt` `.kts` | detekt, Semgrep, PMD | jscpd | detekt | - | +| Kubernetes | Checkov, Semgrep | - | Lizard | Semgrep | +| Less
`.less` | Stylelint | - | - | - | +| Markdown
`.md` `.markdown` `.mdown` `.mkdn` `.mkd` `.mdwn` `.mkdown` `.ron` | remark-lint, markdownlint | - | - | markdownlint | +| Objective-C
`.m` | Clang-Tidy[^client-side] | jscpd | Lizard | - | +| OpenAPI | Spectral | - | - | - | +| PHP
`.php` | PHP_CodeSniffer, PHP Mess Detector, Semgrep | PHPCPD | Lizard | - | +| PL/SQL
`.trg` `.prc` `.fnc` `.pld` `.pls` `.plh` `.plb` `.pck` `.pks` `.pkh` `.pkb` `.typ` `.tyb` `.tps` `.tpb` | PMD | - | - | - | +| PostgreSQL | SQLint | - | - | - | +| PowerShell
`.ps1` `.psc1` `.psd1` `.psm1` `.ps1xml` `.pssc` `.cdxml` `.clixml` | PSScriptAnalyser | - | - | - | +| Python
`.py` | Bandit, Prospector, Pylint, Ruff, Semgrep | PMD CPD | Lizard | Semgrep | +| Ruby
`.rb` `.gemspec` `.podspec` `.jbuilder` `.rake` `.opal` | Reek, Brakeman[^semgrep-brakeman], RuboCop, Semgrep | Flay | Lizard | Semgrep | +| Rust
`.rs` `.rlib` | Semgrep | jscpd | Lizard | - | +| Sass
`.scss` | Stylelint | - | - | - | +| Scala
`.scala` | Codacy Scalameta Pro, Scalastyle, Semgrep, SpotBugs[^client-side] | PMD CPD | Lizard | - | +| Serverless Framework | Checkov | - | - | - | +| Shell
`.sh` `.bash` | ShellCheck, Semgrep | - | - | - | +| Swift
`.swift` | Semgrep, SwiftLint, PMD | PMD CPD | Lizard | - | +| SQL
`.sql` | PMD, SQLint, TSQLLint, SQLFluff, Semgrep | - | - | - | +| Terraform
`.tf` | Checkov, Semgrep | - | - | - | +| Transact-SQL
`.tsql` | TSQLLint | - | - | - | +| TypeScript
`.ts` `.tsx` | ESLint, Semgrep | jscpd | Lizard | ESLint | +| Unity | Unity Roslyn Analyzers[^client-side] | - | - | - | +| Velocity
`.vm` | PMD | - | - | - | +| Visual Basic
`.vb` | SonarVB | jscpd | - | - | +| Visualforce
`.component` `.page` | PMD | PMD CPD | - | - | +| XML
`.xml` `.xsl` `.wsdl` `.pom` | PMD | - | - | - | +| XSL
`.xsl` | PMD | - | - | - | +| YAML
`.yaml` `.yml` `.env` `.env.production` `.env.prod` `.env.staging` `.env.dev` `.env.development` | - | - | - | - | + +[^1]: Complexity and duplication are calculated per commit by default and do not require any tools. When Complexity and Duplication appear in the Quality analysis section, they refer to tools that support Complexity or Duplication analysis and are able to trigger issues based on your configuration. + +{/* +### Security static scanning +*/} + +### Secret scanning + +| Language | Tools | +| --- | --- | +| Apex | Semgrep | +| AWS CloudFormation | Checkov, Semgrep, Trivy | +| C | Semgrep, Trivy | +| C++ | Semgrep, Trivy | +| C# | Semgrep, Trivy | +| Dart | Trivy | +| Dockerfile | Semgrep, Trivy | +| Elixir | Trivy | +| GitHub Actions | Semgrep, Trivy | +| Go | Semgrep, Trivy | +| Java | PMD, Semgrep, Trivy | +| JavaScript | Semgrep, Trivy | +| JSON | Checkov, Trivy | +| Kotlin | Semgrep | +| Kubernetes | Checkov, Semgrep, Trivy | +| PHP | Semgrep, Trivy | +| Python | Bandit, Prospector, Semgrep, Trivy | +| Ruby | Semgrep, Trivy | +| Rust | Semgrep, Trivy | +| Scala | Semgrep, Trivy | +| Shell | Semgrep | +| Swift | Semgrep, Trivy | +| Terraform | Checkov, Semgrep, Trivy | +| TypeScript | Semgrep, Trivy | +| XML | Trivy | +| YAML | Trivy | + +### Dependency vulnerability scanning + +| Language | Extensions | Tools | +| --- | --- | --- | +| C | `conan.lock` (Conan) | Trivy | +| C++ | `conan.lock` (Conan) | Trivy, scans | +| C# | `.deps.json` (.Net), `packages.lock.json` (NuGet) | Trivy | +| Dart | `pubspec.lock` | Trivy | +| Elixir | `mix.lock` (Mix) | Trivy, scans | +| Go | `go.mod` | Trivy | +| Java | `pom.xml`, `gradle.lockfile` | Trivy | +| JavaScript | `package.json`, `package-lock.json` (npm), `yarn.lock` (Yarn) | Trivy | +| Kotlin | `pom.xml`, `gradle.lockfile` | Trivy | +| PHP | `composer.lock` (Composer) | Trivy | +| Python | `requirements.txt` (pip), `Pipfile.lock` (pipenv), `poetry.lock` (Poetry), `uv.lock` (UV) | Trivy | +| Ruby | `Gemfile.lock` (Bundler) | Trivy | +| Rust | `Cargo.lock` (Cargo) | Trivy | +| Scala | `build.sbt.lock` (sbt) | Trivy | +| Swift | `Package.resolved` (SwiftPM) | Trivy | +| TypeScript | `package.json`, `package-lock.json` (npm), `yarn.lock` (Yarn) | Trivy | + + + +### Malicious package detection + +| Language | Extension | Publisher | Tools | +| --- | --- | --- | --- | +| C# | `packages.lock.json` | NuGet | Trivy | +| Go | `go.mod` | github.com | Trivy | +| Java | `pom.xml`, `gradle.lockfile` | maven | Trivy | +| JavaScript | `package.json`, `package-lock.json` | npm | Trivy | +| Kotlin | `pom.xml`, `gradle.lockfile` | maven | Trivy | +| Python | `requirements.txt` (pip), `Pipfile.lock` (pipenv) | PyPI | Trivy| +| Ruby | `Gemfile.lock` | rubygems.org | Trivy | +| Rust | `Cargo.lock` | crates.io | Trivy | +| Scala | `build.sbt.lock` | maven | Trivy | +| TypeScript | `package.json`, `package-lock.json` | npm | Trivy | + +### License scanning + +| Language | Extensions | Tool | +| --- | --- | --- | +| JavaScript | `package-lock.json` (npm) | Trivy | +| PHP | `composer.lock` (Composer) | Trivy | +| Python | `requirements.txt` (pip), `Pipfile.lock` (pipenv), `poetry.lock` (Poetry), `uv.lock` (UV) | Trivy | +| TypeScript | `package-lock.json` (npm) | Trivy | + +
+ +## Docker images of supported tools + +Codacy adds support for new languages and tools by using [a Docker image to run each tool](https://github.com/codacy/codacy-example-tool). + +The following table lists the Codacy GitHub repositories corresponding to each supported tool. Use these repositories to check the extra plugins supported by each tool or to submit GitHub issues related to each tool. To learn more about the tool versions used by Codacy, [see the latest release notes](../release-notes/). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Tool nameCodacy GitHub repository
aligncheck [^client-side]codacy/codacy-aligncheck
Amebacodacy/codacy-ameba
Banditcodacy/codacy-bandit
Brakeman [^semgrep-brakeman]codacy/codacy-brakeman
Checkovcodacy/codacy-checkov
Checkstylecodacy/codacy-checkstyle
Clang-Tidy [^client-side]codacy/codacy-clang-tidy
Codacy Scalameta Procodacy/codacy-scalameta
CodeNarccodacy/codacy-codenarc
CoffeeLintcodacy/codacy-coffeelint
Cppcheck [^cppcheck-misra]codacy/codacy-cppcheck
Credocodacy/codacy-credo
dartanalyzer [^dart-limitations]codacy/codacy-dartanalyzer
deadcode [^client-side]codacy/codacy-deadcode
detektcodacy/codacy-detekt
ESLint [^complexity-limitations]codacy/codacy-eslint
Flawfindercodacy/codacy-flawfinder
Gosec [^client-side]codacy/codacy-gosec
Hadolintcodacy/codacy-hadolint
Jackson Lintercodacy/codacy-jackson-linter
Lizardcodacy/codacy-lizard
markdownlintcodacy/codacy-markdownlint
PHP_CodeSniffercodacy/codacy-codesniffer
PHP Mess Detectorcodacy/codacy-phpmd
PMD [^complexity-limitations]codacy/codacy-pmd7
Prospectorcodacy/codacy-prospector
PSScriptAnalysercodacy/codacy-psscriptanalyzer
Pylintcodacy/codacy-pylint-python3
remark-lintcodacy/codacy-remark-lint
Revivecodacy/codacy-gorevive
RuboCop [^complexity-limitations]codacy/codacy-rubocop
Ruffcodacy/codacy-ruff
Scalastylecodacy/codacy-scalastyle
Semgrep [^semgrep]codacy/codacy-semgrep
ShellCheckcodacy/codacy-shellcheck
SonarC#codacy/codacy-sonar-csharp
SonarVBcodacy/codacy-sonar-visual-basic
Spectralcodacy/codacy-spectral
SpotBugs [^client-side]codacy/codacy-spotbugs
SQLintcodacy/codacy-sqlint
Staticcheck [^client-side]codacy/codacy-staticcheck
Stylelintcodacy/codacy-stylelint
SwiftLint [^complexity-limitations] [^swiftlint-complexity]codacy/codacy-swiftlint
Trivycodacy/codacy-trivy
TSQLLintcodacy/codacy-tsqllint
Unity Roslyn Analyzers [^client-side]codacy/codacy-roslyn
+ +[^semgrep]: Semgrep supports additional security rules when signing up for [Semgrep Pro](https://semgrep.dev/pricing/). This tool doesn't support [custom file extensions](../repositories-configure/languages#configuring-file-extensions). +[^yaml-only]: Currently, only YAML file scanning is supported on this platform. +[^client-side]: Supported as a [client-side tool](../repositories-configure/local-analysis/client-side-tools). +[^cppcheck-misra]: Currently, Cppcheck only supports the MISRA guidelines for C. +[^dart-limitations]: Currently, Codacy only supports including the packages [lints](https://pub.dev/packages/lints) and [flutter_lints](https://pub.dev/packages/flutter_lints) on dartanalyzer configuration files. +[^complexity-limitations]: Doesn't calculate [the number of methods and the complexity per method](../repositories/files#file-details) for each file. +[^semgrep-brakeman]: Due to licensing limitations, Codacy doesn't support the latest version of Brakeman. To analyze your Ruby code for the latest security vulnerabilities, use [Semgrep](https://semgrep.dev/), which provides comprehensive and up-to-date security scanning. +[^swiftlint-complexity]: Supports [reporting warnings or errors](https://realm.github.io/SwiftLint/cyclomatic_complexity.html) on functions above specific complexity thresholds. Enable the rule **Cyclomatic Complexity** on the [Code patterns page](../repositories-configure/configuring-code-patterns), or use a [configuration file](https://realm.github.io/SwiftLint/index.html#configuration) to customize the thresholds. +[^scala-dependencies]: Requires the [sbt-dependency-lock](https://github.com/stringbean/sbt-dependency-lock) plugin for generating the lockfile. +[^different-tools]: Codacy may use a different version of this tool for measuring complexity and duplication. +[^malicious-packages-detection]: Malicious packages identified in the [OpenSSF Malicious Packages database](https://github.com/ossf/malicious-packages). +[^suggest-fixes]: Supports [suggesting fixes](../repositories-configure/integrations/github-integration#suggest-fixes) for identified issues. + +## See also + +- [Codacy quickstart (5 min)](./codacy-quickstart) +- [Client-side tools](../repositories-configure/local-analysis/client-side-tools) +- [Which metrics does Codacy calculate?](../faq/code-analysis/which-metrics-does-codacy-calculate) diff --git a/docusaurus/docs/getting-started/which-permissions-does-codacy-need-from-my-account.md b/docusaurus/docs/getting-started/which-permissions-does-codacy-need-from-my-account.mdx similarity index 96% rename from docusaurus/docs/getting-started/which-permissions-does-codacy-need-from-my-account.md rename to docusaurus/docs/getting-started/which-permissions-does-codacy-need-from-my-account.mdx index b0734be909..a7b817ba7e 100644 --- a/docusaurus/docs/getting-started/which-permissions-does-codacy-need-from-my-account.md +++ b/docusaurus/docs/getting-started/which-permissions-does-codacy-need-from-my-account.mdx @@ -3,7 +3,6 @@ title: Which permissions does Codacy need from my account? description: Review the list of permissions that Codacy requires from your Git provider to analyze your code. --- - Codacy Cloud uses the OAuth protocol to handle logins and supports the following providers: - [GitHub Cloud](#github-cloud) @@ -32,6 +31,7 @@ If you log in with GitHub, Codacy requires the following [app permissions](https Repository permissions: + Checks Read & Write @@ -81,9 +81,10 @@ If you log in with GitHub, Codacy requires the following [app permissions](https Codacy retrieves information about organization members and teams to enforce permissions and user management. -

User permissions:

-

These permissions are granted on an individual user basis as part of the user authorization flow. They will be also be displayed during account installation for transparency.

- + + User permissions:
+ These permissions are granted on an individual user basis as part of the user authorization flow. They will be also be displayed during account installation for transparency. + Email addresses @@ -190,7 +191,7 @@ To revoke the access from Codacy to one or more of the OAuth providers: - [GitLab Cloud](https://docs.gitlab.com/ee/integration/oauth_provider.html#view-all-authorized-applications) - [Bitbucket Cloud](https://support.atlassian.com/bitbucket-cloud/docs/bitbucket-cloud-apps-overview/#OAuth-consumer-permissions) -After revoking an integration, Codacy will no longer be able to access or manipulate resources that require API calls, such as detecting new pull requests or adding comments to pull requests. However, Codacy will still be able to perform operations that only require using the Git protocol either via SSH or HTTPS, such as detecting new commits and calculating diffs. To remove your repositories from Codacy and stop the analysis you must [delete them from your Codacy account](../repositories-configure/removing-your-repository.md). +After revoking an integration, Codacy will no longer be able to access or manipulate resources that require API calls, such as detecting new pull requests or adding comments to pull requests. However, Codacy will still be able to perform operations that only require using the Git protocol either via SSH or HTTPS, such as detecting new commits and calculating diffs. To remove your repositories from Codacy and stop the analysis you must [delete them from your Codacy account](../repositories-configure/removing-your-repository). If you need to use an integration that you have previously revoked, log in again to Codacy with that integration so that Codacy can request the required permissions from the provider. diff --git a/docusaurus/src/css/custom.css b/docusaurus/src/css/custom.css index 8c736f92ea..00e467c30c 100644 --- a/docusaurus/src/css/custom.css +++ b/docusaurus/src/css/custom.css @@ -25,4 +25,24 @@ background-repeat: no-repeat; } +.languages-table table { + width: 100%; + table-layout: fixed; + display: table; +} + +.languages-table table th, +.languages-table table td { + overflow-wrap: anywhere; +} + +.languages-table table td { + font-size: 0.85rem +} + +.languages-table table th { + text-align: left; +} + + From 4c2560af6102a245c0114fb936baa13f35029713 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A1udia?= Date: Tue, 23 Dec 2025 12:20:14 +0000 Subject: [PATCH 07/19] faq/code-analysis --- ...d => can-i-bypass-codacy-status-check.mdx} | 7 +- ...=> does-codacy-check-for-dependencies.mdx} | 3 +- ...acy-place-limits-on-the-code-analysis.mdx} | 9 +- ...t-take-for-my-repository-to-be-analyzed.md | 30 ------ ...-take-for-my-repository-to-be-analyzed.mdx | 23 +++++ ...gure-php-codesniffer-coding-standards.mdx} | 13 +-- ...nalysis.md => how-to-skip-an-analysis.mdx} | 1 - ...> which-metrics-does-codacy-calculate.mdx} | 97 +++++++++---------- ...dacy-show-unexpected-coverage-changes.mdx} | 8 +- 9 files changed, 84 insertions(+), 107 deletions(-) rename docusaurus/docs/faq/code-analysis/{can-i-bypass-codacy-status-check.md => can-i-bypass-codacy-status-check.mdx} (75%) rename docusaurus/docs/faq/code-analysis/{does-codacy-check-for-dependencies.md => does-codacy-check-for-dependencies.mdx} (95%) rename docusaurus/docs/faq/code-analysis/{does-codacy-place-limits-on-the-code-analysis.md => does-codacy-place-limits-on-the-code-analysis.mdx} (92%) delete mode 100644 docusaurus/docs/faq/code-analysis/how-long-does-it-take-for-my-repository-to-be-analyzed.md create mode 100644 docusaurus/docs/faq/code-analysis/how-long-does-it-take-for-my-repository-to-be-analyzed.mdx rename docusaurus/docs/faq/code-analysis/{how-to-configure-php-codesniffer-coding-standards.md => how-to-configure-php-codesniffer-coding-standards.mdx} (72%) rename docusaurus/docs/faq/code-analysis/{how-to-skip-an-analysis.md => how-to-skip-an-analysis.mdx} (99%) rename docusaurus/docs/faq/code-analysis/{which-metrics-does-codacy-calculate.md => which-metrics-does-codacy-calculate.mdx} (60%) rename docusaurus/docs/faq/code-analysis/{why-does-codacy-show-unexpected-coverage-changes.md => why-does-codacy-show-unexpected-coverage-changes.mdx} (95%) diff --git a/docusaurus/docs/faq/code-analysis/can-i-bypass-codacy-status-check.md b/docusaurus/docs/faq/code-analysis/can-i-bypass-codacy-status-check.mdx similarity index 75% rename from docusaurus/docs/faq/code-analysis/can-i-bypass-codacy-status-check.md rename to docusaurus/docs/faq/code-analysis/can-i-bypass-codacy-status-check.mdx index 2d8efdd524..04d9e5f6fe 100644 --- a/docusaurus/docs/faq/code-analysis/can-i-bypass-codacy-status-check.md +++ b/docusaurus/docs/faq/code-analysis/can-i-bypass-codacy-status-check.mdx @@ -2,15 +2,14 @@ title: Can I bypass Codacy status check? --- - :::note **This will only apply to gates enforcing quality checks.** If coverage is blocking a pull request analysis, we recommend contacting your git provider admin or temporarily disabling the coverage gate on the repo and reanalyzing the pull request before enabling them again. ::: -To protect your code from unwelcome changes, you can [configure your Git workflow to block merging pull requests](../../getting-started/integrating-codacy-with-your-git-workflow.md#blocking-pull-requests) if they don't pass the Codacy status check. +To protect your code from unwelcome changes, you can [configure your Git workflow to block merging pull requests](../../getting-started/integrating-codacy-with-your-git-workflow#blocking-pull-requests) if they don't pass the Codacy status check. However, on **very specific and exceptional situations** where your pull request merging is blocked due to an unexpected issue not related to the quality of your code, Codacy allows **repository admins** to bypass the Codacy status check for that pull request. -To bypass Codacy status check for a pull request, a repository admin must click **Bypass status checks** on the [pull request status area](../../repositories/pull-requests.mdx#status) of the pull request detail screen. +To bypass Codacy status check for a pull request, a repository admin must click **Bypass status checks** on the [pull request status area](../../repositories/pull-requests#status) of the pull request detail screen. -![Bypass status check for pull request](images/bypass-status-check.png) +![Bypass status check for pull request](./images/bypass-status-check.png) diff --git a/docusaurus/docs/faq/code-analysis/does-codacy-check-for-dependencies.md b/docusaurus/docs/faq/code-analysis/does-codacy-check-for-dependencies.mdx similarity index 95% rename from docusaurus/docs/faq/code-analysis/does-codacy-check-for-dependencies.md rename to docusaurus/docs/faq/code-analysis/does-codacy-check-for-dependencies.mdx index beaab3b9d3..10993cd05e 100644 --- a/docusaurus/docs/faq/code-analysis/does-codacy-check-for-dependencies.md +++ b/docusaurus/docs/faq/code-analysis/does-codacy-check-for-dependencies.mdx @@ -2,7 +2,6 @@ title: Does Codacy check for dependencies? --- - Yes, Codacy scans the manifest files of your repositories and displays any vulnerable dependencies as Codacy issues. -For a list of supported languages and manifest files scanned by the Codacy dependency vulnerability scanning tools, see [Supported languages and tools](../../getting-started/supported-languages-and-tools.md). +For a list of supported languages and manifest files scanned by the Codacy dependency vulnerability scanning tools, see [Supported languages and tools](../../getting-started/supported-languages-and-tools). diff --git a/docusaurus/docs/faq/code-analysis/does-codacy-place-limits-on-the-code-analysis.md b/docusaurus/docs/faq/code-analysis/does-codacy-place-limits-on-the-code-analysis.mdx similarity index 92% rename from docusaurus/docs/faq/code-analysis/does-codacy-place-limits-on-the-code-analysis.md rename to docusaurus/docs/faq/code-analysis/does-codacy-place-limits-on-the-code-analysis.mdx index d76a2b2dfe..14283330cc 100644 --- a/docusaurus/docs/faq/code-analysis/does-codacy-place-limits-on-the-code-analysis.md +++ b/docusaurus/docs/faq/code-analysis/does-codacy-place-limits-on-the-code-analysis.mdx @@ -2,16 +2,15 @@ title: Does Codacy place limits on the code analysis? --- - Codacy uses limits when performing the analysis of your repositories to ensure good performance levels and avoid degradation of service during peak load. The following table describes these limits and includes links to more information and workarounds, if available: - +-->*/} @@ -36,7 +35,7 @@ See Why is m @@ -79,4 +78,4 @@ If you believe that you may have hit any of these limits and need help to overco ## See also -- [Which metrics does Codacy calculate?](which-metrics-does-codacy-calculate.md) +- [Which metrics does Codacy calculate?](./which-metrics-does-codacy-calculate) diff --git a/docusaurus/docs/faq/code-analysis/how-long-does-it-take-for-my-repository-to-be-analyzed.md b/docusaurus/docs/faq/code-analysis/how-long-does-it-take-for-my-repository-to-be-analyzed.md deleted file mode 100644 index 5ccf91b3f8..0000000000 --- a/docusaurus/docs/faq/code-analysis/how-long-does-it-take-for-my-repository-to-be-analyzed.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: How long does it take for my repository to be analyzed? ---- - - -Codacy usually takes under 5 minutes to analyze your repository. It may however take longer, depending on a number of factors: - -- **Whether it's the initial analysis of your repository** - - The initial analysis examines all files in the repository, while each subsequent commit triggers an analysis only on files changed in that commit. - -- **Whether tool configurations have been updated** - - Updates to tool configurations trigger a reanalysis of all files in the repository on the next commit and may impact analysis duration. - -- **The size of your repository** - - To speed up the analysis, [ignore any files and directories](../../repositories-configure/ignoring-files.md) that aren't relevant to your project, such as generated code or any third-party libraries included in your repositories. - -- **The time it takes your Git provider to trigger the analysis** - - Codacy relies on post-commit hooks sent by your Git provider to trigger the analysis after each push to the repository, so if your analysis is taking a lot of time to start [check that the Post-Commit Hook integration for your repository is enabled](../../repositories-configure/integrations/post-commit-hooks.md). - -- **The priority of your analysis request and the current load on Codacy's servers** - - Open-source projects have lower priority in the Codacy analysis queues. - -- **Whether Codacy or your Git provider is currently experiencing issues or outages** - - Check the [Codacy status page](https://status.codacy.com/) and the status page of your Git provider ([GitHub](https://www.githubstatus.com/), [GitLab](https://status.gitlab.com/), [Bitbucket](https://bitbucket.status.atlassian.com/)) to see if there is any ongoing incident that could delay the analysis. diff --git a/docusaurus/docs/faq/code-analysis/how-long-does-it-take-for-my-repository-to-be-analyzed.mdx b/docusaurus/docs/faq/code-analysis/how-long-does-it-take-for-my-repository-to-be-analyzed.mdx new file mode 100644 index 0000000000..b2b36ac93d --- /dev/null +++ b/docusaurus/docs/faq/code-analysis/how-long-does-it-take-for-my-repository-to-be-analyzed.mdx @@ -0,0 +1,23 @@ +--- +title: How long does it take for my repository to be analyzed? +--- + +Codacy usually takes under 5 minutes to analyze your repository. It may however take longer, depending on a number of factors: + +- **Whether it's the initial analysis of your repository** + The initial analysis examines all files in the repository, while each subsequent commit triggers an analysis only on files changed in that commit. + +- **Whether tool configurations have been updated** + Updates to tool configurations trigger a reanalysis of all files in the repository on the next commit and may impact analysis duration. + +- **The size of your repository** + To speed up the analysis, [ignore any files and directories](../../repositories-configure/ignoring-files) that aren't relevant to your project, such as generated code or any third-party libraries included in your repositories. + +- **The time it takes your Git provider to trigger the analysis** + Codacy relies on post-commit hooks sent by your Git provider to trigger the analysis after each push to the repository, so if your analysis is taking a lot of time to start [check that the Post-Commit Hook integration for your repository is enabled](../../repositories-configure/integrations/post-commit-hooks). + +- **The priority of your analysis request and the current load on Codacy's servers** + Open-source projects have lower priority in the Codacy analysis queues. + +- **Whether Codacy or your Git provider is currently experiencing issues or outages** + Check the [Codacy status page](https://status.codacy.com/) and the status page of your Git provider ([GitHub](https://www.githubstatus.com/), [GitLab](https://status.gitlab.com/), [Bitbucket](https://bitbucket.status.atlassian.com/)) to see if there is any ongoing incident that could delay the analysis. diff --git a/docusaurus/docs/faq/code-analysis/how-to-configure-php-codesniffer-coding-standards.md b/docusaurus/docs/faq/code-analysis/how-to-configure-php-codesniffer-coding-standards.mdx similarity index 72% rename from docusaurus/docs/faq/code-analysis/how-to-configure-php-codesniffer-coding-standards.md rename to docusaurus/docs/faq/code-analysis/how-to-configure-php-codesniffer-coding-standards.mdx index e6174f1e48..9d7776c6d2 100644 --- a/docusaurus/docs/faq/code-analysis/how-to-configure-php-codesniffer-coding-standards.md +++ b/docusaurus/docs/faq/code-analysis/how-to-configure-php-codesniffer-coding-standards.mdx @@ -3,18 +3,15 @@ title: How to configure PHP_CodeSniffer coding standards? description: To enforce a specific PHP_CodeSniffer coding standard on Codacy you must create a configuration file on the root of your repository that references one or more coding standards. --- - -By default, Codacy uses the PHP_CodeSniffer configuration on the [Code patterns](../../repositories-configure/configuring-code-patterns.md) page when analyzing your repositories. +By default, Codacy uses the PHP_CodeSniffer configuration on the [Code patterns](../../repositories-configure/configuring-code-patterns) page when analyzing your repositories. To enforce a specific PHP_CodeSniffer coding standard you must [create a configuration file](https://github.com/squizlabs/PHP_CodeSniffer/wiki/Advanced-Usage#using-a-default-configuration-file) on the root of your repository that references one or more of the following coding standards: -- Default coding standards packaged together with PHP_CodeSniffer: - - [PHP_CodeSniffer coding standards](https://github.com/squizlabs/PHP_CodeSniffer/tree/master/src/Standards) - -- Additional coding standards that Codacy packages on the PHP_CodeSniffer tool plugin. Check the repository the additional coding standards to learn how you can reference them in your configuration files: +- Default coding standards packaged together with PHP_CodeSniffer: + [PHP_CodeSniffer coding standards](https://github.com/squizlabs/PHP_CodeSniffer/tree/master/src/Standards) - [codacy-codesniffer composer.json](https://github.com/codacy/codacy-codesniffer/blob/master/composer.json) +- Additional coding standards that Codacy packages on the PHP_CodeSniffer tool plugin. Check the repository the additional coding standards to learn how you can reference them in your configuration files: + [codacy-codesniffer composer.json](https://github.com/codacy/codacy-codesniffer/blob/master/composer.json) For example, create a text file with the name `phpcs.xml` to use the PSR12 coding standard but excluding the sniffs `Generic.WhiteSpace.DisallowTabIndent` and `PSR12.Operators.OperatorSpacing`: diff --git a/docusaurus/docs/faq/code-analysis/how-to-skip-an-analysis.md b/docusaurus/docs/faq/code-analysis/how-to-skip-an-analysis.mdx similarity index 99% rename from docusaurus/docs/faq/code-analysis/how-to-skip-an-analysis.md rename to docusaurus/docs/faq/code-analysis/how-to-skip-an-analysis.mdx index 9f848866eb..f3be26be13 100644 --- a/docusaurus/docs/faq/code-analysis/how-to-skip-an-analysis.md +++ b/docusaurus/docs/faq/code-analysis/how-to-skip-an-analysis.mdx @@ -2,7 +2,6 @@ title: How to skip an analysis? --- - By default, Codacy automatically analyzes a repository whenever you push changes. However, you can override this behavior by adding one of the "skip" tags - `[ci skip]`, `[skip ci]`, `[codacy skip]` or `[skip codacy]` - anywhere in the subject or body of the commit message. For example: ```bash diff --git a/docusaurus/docs/faq/code-analysis/which-metrics-does-codacy-calculate.md b/docusaurus/docs/faq/code-analysis/which-metrics-does-codacy-calculate.mdx similarity index 60% rename from docusaurus/docs/faq/code-analysis/which-metrics-does-codacy-calculate.md rename to docusaurus/docs/faq/code-analysis/which-metrics-does-codacy-calculate.mdx index c676c0d327..8808d8c553 100644 --- a/docusaurus/docs/faq/code-analysis/which-metrics-does-codacy-calculate.md +++ b/docusaurus/docs/faq/code-analysis/which-metrics-does-codacy-calculate.mdx @@ -3,8 +3,7 @@ title: Which metrics does Codacy calculate? description: Codacy scans your code for issues and calculates code complexity, duplication, and coverage metrics. Besides this, Codacy also calculates a grade for your repository and files based on all calculated code quality metrics. --- - -Codacy performs static code analysis and calculates code duplication, code complexity, and code coverage metrics for [most supported programming languages](../../getting-started/supported-languages-and-tools.md). +Codacy performs static code analysis and calculates code duplication, code complexity, and code coverage metrics for [most supported programming languages](../../getting-started/supported-languages-and-tools). The following sections describe how Codacy calculates each supported metric and where you can see each metric on the Codacy UI: @@ -17,41 +16,33 @@ The following sections describe how Codacy calculates each supported metric and - [See also](#see-also) :::note -Depending on certain characteristics of your repository, such as the number of source code files and their size, Codacy may [apply limits to the code analysis](does-codacy-place-limits-on-the-code-analysis.md) that impact the calculation of the supported metrics. +Depending on certain characteristics of your repository, such as the number of source code files and their size, Codacy may [apply limits to the code analysis](does-codacy-place-limits-on-the-code-analysis) that impact the calculation of the supported metrics. ::: ## Grade Codacy assigns an overall grade to your repository branches and to individual files to help you assess the code quality of your repository. Grades represent a weighted average of the available code quality metrics (issues, complexity, duplication, and coverage), and range from **A** to **F**: -
10 MB Codacy doesn't parse code coverage reports that are over the file size limit.

-See JsonParseException while uploading coverage data +See JsonParseException while uploading coverage data
- - - - - - - - - - -
Highest gradeGrade AGrade BGrade CGrade DGrade EGrade FLowest grade
+| | | | | | | | | +| --- | --- | --- | --- | --- | --- | --- | --- | +| Highest grade | ![Grade A](./images/grade_a.png) | ![Grade B](./images/grade_b.png) | ![Grade C](./images/grade_c.png) | ![Grade D](./images/grade_d.png) | ![Grade E](./images/grade_e.png) | ![Grade F](./images/grade_f.png) | Lowest grade | + Codacy displays grades on the following places: |Place|Metric| |-----|------| -|[Files page](../../repositories/files.md)|Grade for each file in your repository| -|[Repository Dashboard](../../repositories/repository-dashboard.md)
[Codacy badge](../../getting-started/adding-a-codacy-badge.md)|Grade of each analyzed branch in your repository| -|[Email notifications](../../account/emails.md#managing-your-email-notifications)|Grade of your repository| -|[Organization overview](../../organizations/organization-overview.md)|Average grade of the repositories in your organization and grade of each repository| -|[Repositories list](../../organizations/managing-repositories.md)|Grade of each repository in your organization| +|[Files page](../../repositories/files)|Grade for each file in your repository| +|[Repository Dashboard](../../repositories/repository-dashboard)
[Codacy badge](../../getting-started/adding-a-codacy-badge)|Grade of each analyzed branch in your repository| +|[Email notifications](../../account/emails#managing-your-email-notifications)|Grade of your repository| +|[Organization overview](../../organizations/organization-overview)|Average grade of the repositories in your organization and grade of each repository| +|[Repositories list](../../organizations/managing-repositories)|Grade of each repository in your organization| ## Issues Codacy calculates the number of issues in the following static code analysis categories: - +{/**/} - **Code style:** Code formatting and syntax problems, such as variable names style and enforcing the use of brackets and quotation marks - **Error prone:** Code that may hide bugs and language keywords that should be used with caution, such as the operator `==` in JavaScript or `Option.get` in Scala - **Code complexity:** High complexity files that should be refactored @@ -62,7 +53,7 @@ Codacy calculates the number of issues in the following static code analysis cat - **Documentation:** Methods and classes that don't have the correct comment annotations - **Best practice:** Code that doesn't follow the recommended coding standards and best practices - **Comprehensibility:** Code that can be difficult to understand and modify - +{/**/} Besides this, Codacy also allows you to compare issues across repositories with different sizes by showing **issues per thousand lines of code (kLoC)**. @@ -70,12 +61,12 @@ Codacy displays issues on the following places: |Place|Metric| |-----|------| -|[Commit detail page](../../repositories/commits.mdx)
[Pull request detail page](../../repositories/pull-requests.mdx)
[Email notifications](../../account/emails.md#managing-your-email-notifications)|Number of new and fixed issues introduced by the commit or pull request| -|[Files page](../../repositories/files.md)|Number of issues in each file| -|[Issues page](../../repositories/issues.md)|List of all issues detected in each branch| -|[Repository Dashboard](../../repositories/repository-dashboard.md)|Issues per 1000 lines of code| -|[Organization overview](../../organizations/organization-overview.md)|Average issues / kLoC of the repositories in your organization and issue / kLoC of each repository| -|[Repositories list page](../../organizations/managing-repositories.md)|Issues / kLoC in each repository in your organization| +|[Commit detail page](../../repositories/commits)
[Pull request detail page](../../repositories/pull-requests)
[Email notifications](../../account/emails#managing-your-email-notifications)|Number of new and fixed issues introduced by the commit or pull request| +|[Files page](../../repositories/files)|Number of issues in each file| +|[Issues page](../../repositories/issues)|List of all issues detected in each branch| +|[Repository Dashboard](../../repositories/repository-dashboard)|Issues per 1000 lines of code| +|[Organization overview](../../organizations/organization-overview)|Average issues / kLoC of the repositories in your organization and issue / kLoC of each repository| +|[Repositories list page](../../organizations/managing-repositories)|Issues / kLoC in each repository in your organization| ## Complexity @@ -84,18 +75,18 @@ Codacy uses [cyclomatic complexity](https://en.wikipedia.org/wiki/Cyclomatic_com Codacy calculates complexity as follows: - The complexity value of a file is the total sum of the cyclomatic complexities of all methods within it. -- A file is considered complex if its cyclomatic complexity value is higher than the threshold [**File is complex when over**](../../repositories-configure/adjusting-quality-goals.md). +- A file is considered complex if its cyclomatic complexity value is higher than the threshold [**File is complex when over**](../../repositories-configure/adjusting-quality-goals). - The complexity value of a commit or pull request is calculated by summing the complexity differences of all changed files where the difference is 4 or more. Codacy displays complexity on the following places: |Place|Metric| |-----|------| -|[Commit detail page](../../repositories/commits.mdx)
[Pull request detail page](../../repositories/pull-requests.mdx)
[Email notifications](../../account/emails.md#managing-your-email-notifications)|The complexity variation introduced by a commit or pull request is calculated by summing the complexity differences of all changed files where the difference is 4 or more. -|[Files page](../../repositories/files.md)|The file complexity value is the sum of the complexity values of all methods defined within the file| -|[Repository Dashboard](../../repositories/repository-dashboard.md)|Percentage of complex files in your repository and how the metric is evolving over time| -|[Organization overview](../../organizations/organization-overview.md)|Average percentage of complex files in the repositories in your organization and percentage of complex files in each repository| -|[Repositories list page](../../organizations/managing-repositories.md)|Percentage of complex files in each repository in your organization| +|[Commit detail page](../../repositories/commits)
[Pull request detail page](../../repositories/pull-requests)
[Email notifications](../../account/emails#managing-your-email-notifications)|The complexity variation introduced by a commit or pull request is calculated by summing the complexity differences of all changed files where the difference is 4 or more. +|[Files page](../../repositories/files)|The file complexity value is the sum of the complexity values of all methods defined within the file| +|[Repository Dashboard](../../repositories/repository-dashboard)|Percentage of complex files in your repository and how the metric is evolving over time| +|[Organization overview](../../organizations/organization-overview)|Average percentage of complex files in the repositories in your organization and percentage of complex files in each repository| +|[Repositories list page](../../organizations/managing-repositories)|Percentage of complex files in each repository in your organization| ## Duplication @@ -108,30 +99,30 @@ Codacy calculates duplication as follows: - The duplication value of a commit or pull request is the number of clones introduced by the commit or pull request. :::note -You can [customize the rules for identifying duplicated blocks of code](../../repositories-configure/codacy-configuration-file.md#pmd-cpd-duplication) when using PMD CPD to analyze the source code of your repository. +You can [customize the rules for identifying duplicated blocks of code](../../repositories-configure/codacy-configuration-file#pmd-cpd-duplication) when using PMD CPD to analyze the source code of your repository. ::: Codacy displays duplication on the following places: |Place|Metric| |-----|------| -|[Commit detail page](../../repositories/commits.mdx)
[Pull request detail page](../../repositories/pull-requests.mdx)
[Email notifications](../../account/emails.md#managing-your-email-notifications)|Number of clones added or fixed by a commit or pull request| -|[Files page](../../repositories/files.md)|Duplication value of each file| -|[Repository Dashboard](../../repositories/repository-dashboard.md)|Percentage of duplicated files in your repository and how the metric is evolving over time| -|[Organization overview](../../organizations/organization-overview.md)|Average percentage of duplicated files in the repositories in your organization and percentage of complex files in each repository| -|[Repositories list page](../../organizations/managing-repositories.md)|Percentage of duplicated files in each repository in your organization| +|[Commit detail page](../../repositories/commits)
[Pull request detail page](../../repositories/pull-requests)
[Email notifications](../../account/emails#managing-your-email-notifications)|Number of clones added or fixed by a commit or pull request| +|[Files page](../../repositories/files)|Duplication value of each file| +|[Repository Dashboard](../../repositories/repository-dashboard)|Percentage of duplicated files in your repository and how the metric is evolving over time| +|[Organization overview](../../organizations/organization-overview)|Average percentage of duplicated files in the repositories in your organization and percentage of complex files in each repository| +|[Repositories list page](../../organizations/managing-repositories)|Percentage of duplicated files in each repository in your organization| ## Code coverage Code coverage describes the degree to which the source code of a program is tested. There are several types of coverage, but Codacy uses line coverage, which measures the percentage of coverable lines of code that are covered by automated tests. [Learn more about code coverage](https://blog.codacy.com/a-guide-to-code-coverage-part-1-code-coverage-explained/) on Codacy's blog. -You must set up your CI/CD pipeline to [upload code coverage data to Codacy](../../coverage-reporter/index.md). Because of this, the tool that you use to generate the coverage reports is responsible for creating the data that Codacy then uses to calculate code coverage. +You must set up your CI/CD pipeline to [upload code coverage data to Codacy](../../coverage-reporter/index.mdx). Because of this, the tool that you use to generate the coverage reports is responsible for creating the data that Codacy then uses to calculate code coverage. Codacy calculates code coverage as follows: - The coverage value for each file is the percentage of coverable lines that are covered by tests in the file. If a line is covered multiple times, Codacy counts it as a single covered line when calculating coverage. - A repository is considered to have acceptable coverage if the percentage of coverable lines that are covered by tests in the repository is higher than the threshold [**Coverage is under**](../../repositories-configure/adjusting-quality-goals.md). - +{/**/} - The **coverage variation** of a commit or pull request is the increase or drop in the percentage of coverable lines that are covered by tests in the repository because of the changes of the commit or pull request. - The **diff coverage** of a pull request is the percentage of **coverable lines** that the pull request **added or modified** that are covered by tests. @@ -139,26 +130,26 @@ Codacy calculates code coverage as follows: - Deleted lines - Added or modified lines that aren't coverable - +{/**/} :::note -If you encounter a situation where Codacy shows an unexpected drop in coverage, learn about [the most common reasons causing those scenarios](why-does-codacy-show-unexpected-coverage-changes.md). +If you encounter a situation where Codacy shows an unexpected drop in coverage, learn about [the most common reasons causing those scenarios](./why-does-codacy-show-unexpected-coverage-changes). ::: Once the coverage setup is complete, Codacy displays coverage data on the following places: |Place|Metric| |-----|------| -|[Commit detail page](../../repositories/commits.mdx)
[Pull request detail page](../../repositories/pull-requests.mdx)
[Email notifications](../../account/emails.md#managing-your-email-notifications)|Variation in percentage points of the coverage value for all files in the commit or pull request| -|[Pull request detail page](../../repositories/pull-requests.mdx)|Diff coverage for the changes included in the pull request| -|[Files page](../../repositories/files.md)|Coverage percentage of each file| -|[Repository Dashboard](../../repositories/repository-dashboard.md)|Coverage of the most recent commit of the selected branch and its evolution over time| -|[Codacy badge](../../getting-started/adding-a-codacy-badge.md)|Coverage of the most recent commit of the configured branch| -|[Organization overview](../../organizations/organization-overview.md)|Average coverage of the repositories in your organization and coverage of each repository| -|[Repositories list page](../../organizations/managing-repositories.md)|Coverage of each repository in your organization| +|[Commit detail page](../../repositories/commits)
[Pull request detail page](../../repositories/pull-requests)
[Email notifications](../../account/emails#managing-your-email-notifications)|Variation in percentage points of the coverage value for all files in the commit or pull request| +|[Pull request detail page](../../repositories/pull-requests)|Diff coverage for the changes included in the pull request| +|[Files page](../../repositories/files)|Coverage percentage of each file| +|[Repository Dashboard](../../repositories/repository-dashboard)|Coverage of the most recent commit of the selected branch and its evolution over time| +|[Codacy badge](../../getting-started/adding-a-codacy-badge)|Coverage of the most recent commit of the configured branch| +|[Organization overview](../../organizations/organization-overview)|Average coverage of the repositories in your organization and coverage of each repository| +|[Repositories list page](../../organizations/managing-repositories)|Coverage of each repository in your organization| ## See also - [Diff coverage: we have a new metric and quality gate rule for PRs](https://blog.codacy.com/diff-coverage/) -- [Why does Codacy show unexpected coverage changes?](why-does-codacy-show-unexpected-coverage-changes.md) -- [Does Codacy place limits on the code analysis?](does-codacy-place-limits-on-the-code-analysis.md) +- [Why does Codacy show unexpected coverage changes?](./why-does-codacy-show-unexpected-coverage-changes) +- [Does Codacy place limits on the code analysis?](./does-codacy-place-limits-on-the-code-analysis) diff --git a/docusaurus/docs/faq/code-analysis/why-does-codacy-show-unexpected-coverage-changes.md b/docusaurus/docs/faq/code-analysis/why-does-codacy-show-unexpected-coverage-changes.mdx similarity index 95% rename from docusaurus/docs/faq/code-analysis/why-does-codacy-show-unexpected-coverage-changes.md rename to docusaurus/docs/faq/code-analysis/why-does-codacy-show-unexpected-coverage-changes.mdx index 79ecf79170..c31146f469 100644 --- a/docusaurus/docs/faq/code-analysis/why-does-codacy-show-unexpected-coverage-changes.md +++ b/docusaurus/docs/faq/code-analysis/why-does-codacy-show-unexpected-coverage-changes.mdx @@ -84,7 +84,7 @@ There are several reasons that could cause Codacy to report unexpected coverage - Ignoring files on Codacy vs ignoring files on the coverage report. - [Updating the list of ignored files](../../repositories-configure/ignoring-files.md) won't have an impact on the amount of coverable and covered lines of the commits that Codacy compares to calculate the coverage variation metric. Codacy calculates Coverage based solely on what is included in the coverage report. Therefore, if there are files you wish to keep from being included in the calculation, you should ensure they are not included in the coverage report. + [Updating the list of ignored files](../../repositories-configure/ignoring-files) won't have an impact on the amount of coverable and covered lines of the commits that Codacy compares to calculate the coverage variation metric. Codacy calculates Coverage based solely on what is included in the coverage report. Therefore, if there are files you wish to keep from being included in the calculation, you should ensure they are not included in the coverage report. - External factors affecting the execution of tests. @@ -245,7 +245,7 @@ Consider an example pull request where Codacy shows the following metrics: However, since the proportion between the total number of covered and coverable lines across all files in the repository is now different, there can be a drop in the coverage variation for the pull request. :::caution -If you're using the [gate **Coverage variation is under**](../../repositories-configure/adjusting-quality-gates.md), configure at least a **-0.10% coverage variation margin** to ensure that developers aren't blocked while performing code refactors such as the one from this example. +If you're using the [gate **Coverage variation is under**](../../repositories-configure/adjusting-quality-gates), configure at least a **-0.10% coverage variation margin** to ensure that developers aren't blocked while performing code refactors such as the one from this example. ::: The table below represents two example coverage reports reflecting a pull request that removes lines 5 and 6 of the file `ClassA.java`: @@ -373,5 +373,5 @@ The table below displays the code coverage metrics as calculated by Codacy: ## See also -- [Which metrics does Codacy calculate?](which-metrics-does-codacy-calculate.md#code-coverage) -- [Adding coverage to your repository](../../coverage-reporter/index.md) +- [Which metrics does Codacy calculate?](which-metrics-does-codacy-calculate#code-coverage) +- [Adding coverage to your repository](../../coverage-reporter/index.mdx) From 8f963cbc3455f2ec8c1f3cc3a04eaa31a09a45f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A1udia?= Date: Fri, 2 Jan 2026 10:08:01 +0000 Subject: [PATCH 08/19] faq/repositories --- .../repositories/how-do-i-reanalyze-my-repository.mdx | 10 +++++----- ...d => i-moved-my-repository-on-the-git-provider.mdx} | 1 - ...=> i-renamed-my-repository-on-the-git-provider.mdx} | 1 - 3 files changed, 5 insertions(+), 7 deletions(-) rename docusaurus/docs/faq/repositories/{i-moved-my-repository-on-the-git-provider.md => i-moved-my-repository-on-the-git-provider.mdx} (99%) rename docusaurus/docs/faq/repositories/{i-renamed-my-repository-on-the-git-provider.md => i-renamed-my-repository-on-the-git-provider.mdx} (99%) diff --git a/docusaurus/docs/faq/repositories/how-do-i-reanalyze-my-repository.mdx b/docusaurus/docs/faq/repositories/how-do-i-reanalyze-my-repository.mdx index 9a7d07edee..dc92e20786 100644 --- a/docusaurus/docs/faq/repositories/how-do-i-reanalyze-my-repository.mdx +++ b/docusaurus/docs/faq/repositories/how-do-i-reanalyze-my-repository.mdx @@ -9,7 +9,7 @@ import AdminAccessControlInfo from '../../_includes/AdminAccessControlInfo.mdx' Reanalyze the last commit in your branch or pull request: - To update the Codacy analysis results taking into account the most recent configurations for your repository without waiting for a new commit to trigger the analysis -- If the grade or [Codacy badge](../../getting-started/adding-a-codacy-badge.md) for your branch is greyed out and displays an exclamation mark, which means that the analysis information isn't available for the last commit of the branch: +- If the grade or [Codacy badge](../../getting-started/adding-a-codacy-badge) for your branch is greyed out and displays an exclamation mark, which means that the analysis information isn't available for the last commit of the branch: ![Greyed-out Codacy badge and repository grade](images/codacy-badge-grade-gray.png) @@ -18,7 +18,7 @@ Reanalyze the last commit in your branch or pull request: Instead, you must manually run the client-side tools or wait for them to report the results for a new commit. -- You can only reanalyze commits to branches or pull requests in your repository if the committer [is part of your organization](../../organizations/managing-people.md). +- You can only reanalyze commits to branches or pull requests in your repository if the committer [is part of your organization](../../organizations/managing-people). ::: @@ -26,7 +26,7 @@ Reanalyze the last commit in your branch or pull request: To reanalyze a branch in your repository: -1. Open the **Commits** page for your repository and select the correct branch at the top of the page if you configured Codacy to [analyze multiple branches](../../repositories-configure/managing-branches.mdx). +1. Open the **Commits** page for your repository and select the correct branch at the top of the page if you configured Codacy to [analyze multiple branches](../../repositories-configure/managing-branches). Then, select the most recent commit for that branch at the top of the list: @@ -50,5 +50,5 @@ To reanalyze a pull request in your repository: ## See also -- [Commit status](../../repositories/commits.mdx#status) -- [Pull request status](../../repositories/pull-requests.mdx#status) +- [Commit status](../../repositories/commits#status) +- [Pull request status](../../repositories/pull-requests#status) diff --git a/docusaurus/docs/faq/repositories/i-moved-my-repository-on-the-git-provider.md b/docusaurus/docs/faq/repositories/i-moved-my-repository-on-the-git-provider.mdx similarity index 99% rename from docusaurus/docs/faq/repositories/i-moved-my-repository-on-the-git-provider.md rename to docusaurus/docs/faq/repositories/i-moved-my-repository-on-the-git-provider.mdx index 938c435667..27ae7725bd 100644 --- a/docusaurus/docs/faq/repositories/i-moved-my-repository-on-the-git-provider.md +++ b/docusaurus/docs/faq/repositories/i-moved-my-repository-on-the-git-provider.mdx @@ -2,7 +2,6 @@ title: I moved my repository on the Git provider --- - Currently, Codacy doesn't automatically detect moves of repositories between two organizations. To ensure that Codacy continues to analyze a repository that was moved to another organization on your Git provider: diff --git a/docusaurus/docs/faq/repositories/i-renamed-my-repository-on-the-git-provider.md b/docusaurus/docs/faq/repositories/i-renamed-my-repository-on-the-git-provider.mdx similarity index 99% rename from docusaurus/docs/faq/repositories/i-renamed-my-repository-on-the-git-provider.md rename to docusaurus/docs/faq/repositories/i-renamed-my-repository-on-the-git-provider.mdx index 0de27e7f23..b5f3cc271b 100644 --- a/docusaurus/docs/faq/repositories/i-renamed-my-repository-on-the-git-provider.md +++ b/docusaurus/docs/faq/repositories/i-renamed-my-repository-on-the-git-provider.mdx @@ -2,7 +2,6 @@ title: I renamed my repository on the Git provider --- - If you changed the name or URL of your repository on your Git provider, you can update the name and URL of the repository on Codacy to point to the new location. This ensures that you won't lose historical data about your repository on Codacy. To rename your repository on Codacy, open the page **Settings** and click the button **Update repository**. From 53249331705f2c43b7826d339cc1dcd241c2b11a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A1udia?= Date: Fri, 2 Jan 2026 10:21:46 +0000 Subject: [PATCH 09/19] faq/troubleshooting --- ...error-line-endings.md => error-line-endings.mdx} | 3 +-- ...tion.md => not-a-member-of-the-organization.mdx} | 9 ++++----- ...we-no-longer-have-access-to-this-repository.mdx} | 5 ++--- ...-arent-duplication-metrics-being-calculated.mdx} | 11 +++++------ ...zation.md => why-cant-i-see-my-organization.mdx} | 5 ++--- ...did-codacy-stop-commenting-on-pull-requests.mdx} | 13 ++++++------- ...ng.md => why-is-my-file-over-150-kb-missing.mdx} | 5 ++--- ...hy-isnt-my-public-repository-being-analyzed.mdx} | 1 - 8 files changed, 22 insertions(+), 30 deletions(-) rename docusaurus/docs/faq/troubleshooting/{error-line-endings.md => error-line-endings.mdx} (97%) rename docusaurus/docs/faq/troubleshooting/{not-a-member-of-the-organization.md => not-a-member-of-the-organization.mdx} (82%) rename docusaurus/docs/faq/troubleshooting/{we-no-longer-have-access-to-this-repository.md => we-no-longer-have-access-to-this-repository.mdx} (92%) rename docusaurus/docs/faq/troubleshooting/{why-arent-duplication-metrics-being-calculated.md => why-arent-duplication-metrics-being-calculated.mdx} (78%) rename docusaurus/docs/faq/troubleshooting/{why-cant-i-see-my-organization.md => why-cant-i-see-my-organization.mdx} (79%) rename docusaurus/docs/faq/troubleshooting/{why-did-codacy-stop-commenting-on-pull-requests.md => why-did-codacy-stop-commenting-on-pull-requests.mdx} (89%) rename docusaurus/docs/faq/troubleshooting/{why-is-my-file-over-150-kb-missing.md => why-is-my-file-over-150-kb-missing.mdx} (92%) rename docusaurus/docs/faq/troubleshooting/{why-isnt-my-public-repository-being-analyzed.md => why-isnt-my-public-repository-being-analyzed.mdx} (99%) diff --git a/docusaurus/docs/faq/troubleshooting/error-line-endings.md b/docusaurus/docs/faq/troubleshooting/error-line-endings.mdx similarity index 97% rename from docusaurus/docs/faq/troubleshooting/error-line-endings.md rename to docusaurus/docs/faq/troubleshooting/error-line-endings.mdx index 26a2853b1e..4e8a71a174 100644 --- a/docusaurus/docs/faq/troubleshooting/error-line-endings.md +++ b/docusaurus/docs/faq/troubleshooting/error-line-endings.mdx @@ -2,12 +2,11 @@ title: Error caused by incompatible line endings --- - Codacy executes the `git diff` command when analyzing new commits and pull requests to identify the lines of code that were changed. Codacy then uses this information to display the issues that were caused by the changes introduced by the commits or pull requests. If you have files in your repository that use the carriage return (CR) as the line end control character, the command `git diff` doesn't correctly identify line endings in the changed files. Because of this, Codacy is unable to use the output of the command and the **Diff** step of your commit or pull request analysis logs will display the message `An error occurred during this step. Please, retry your analysis or contact support`. -![Viewing the analysis logs](images/error-line-endings.png) +![Viewing the analysis logs](./images/error-line-endings.png) The CR line end control character was used by older Classic Mac OS systems, and for the sake of interoperability it's recommended that you: diff --git a/docusaurus/docs/faq/troubleshooting/not-a-member-of-the-organization.md b/docusaurus/docs/faq/troubleshooting/not-a-member-of-the-organization.mdx similarity index 82% rename from docusaurus/docs/faq/troubleshooting/not-a-member-of-the-organization.md rename to docusaurus/docs/faq/troubleshooting/not-a-member-of-the-organization.mdx index 73f283c63a..a0f8e5fae2 100644 --- a/docusaurus/docs/faq/troubleshooting/not-a-member-of-the-organization.md +++ b/docusaurus/docs/faq/troubleshooting/not-a-member-of-the-organization.mdx @@ -2,8 +2,7 @@ title: Not a member of the organization --- - -When you see the message **Not a member of the organization** it means that Codacy Cloud can't analyze a commit because the associated email address doesn't belong to any [member or committer of your Codacy organization](../../organizations/managing-people.md). +When you see the message **Not a member of the organization** it means that Codacy Cloud can't analyze a commit because the associated email address doesn't belong to any [member or committer of your Codacy organization](../../organizations/managing-people). You can check which email address is associated with a commit by hovering the cursor on the name of the committer on the page for the commit: @@ -17,12 +16,12 @@ There may be different reasons for this issue to happen: - **The user making the commit hasn't signed in to Codacy Cloud and joined the organization yet** - The user must [join the organization](../../organizations/managing-people.md#joining) or, if you're the organization admin, you can [add the user](../../organizations/managing-people.md#adding-people) instead. + The user must [join the organization](../../organizations/managing-people#joining) or, if you're the organization admin, you can [add the user](../../organizations/managing-people#adding-people) instead. - **The commit email address isn't associated with the account of a Codacy Cloud user** - Make sure the user [updates the email addresses associated with their Codacy account](../../account/emails.md#updating) to include the missing commit email address. + Make sure the user [updates the email addresses associated with their Codacy account](../../account/emails#updating) to include the missing commit email address. - **Git isn't configured with the correct email address** - Make sure the user [sets the Git email address](../../account/emails.md#git-config) correctly. + Make sure the user [sets the Git email address](../../account/emails#git-config) correctly. diff --git a/docusaurus/docs/faq/troubleshooting/we-no-longer-have-access-to-this-repository.md b/docusaurus/docs/faq/troubleshooting/we-no-longer-have-access-to-this-repository.mdx similarity index 92% rename from docusaurus/docs/faq/troubleshooting/we-no-longer-have-access-to-this-repository.md rename to docusaurus/docs/faq/troubleshooting/we-no-longer-have-access-to-this-repository.mdx index f90e4f3bce..12f853de95 100644 --- a/docusaurus/docs/faq/troubleshooting/we-no-longer-have-access-to-this-repository.md +++ b/docusaurus/docs/faq/troubleshooting/we-no-longer-have-access-to-this-repository.mdx @@ -3,7 +3,6 @@ title: We no longer have access to this repository, check your SSH keys description: Troubleshoot and fix issues that prevent Codacy from cloning your private repository, such as moving the repository or changing the permissions of the user that added the repository to Codacy. --- - Some changes on your Git provider can prevent Codacy from cloning your private repository. When this happens, Codacy displays the error message "We no longer have access to this repository" on the Repository Dashboard page. ## The repository was renamed or moved @@ -31,9 +30,9 @@ If the user that initially configured the repository on Codacy was using a user This is only possible if the user configuring the integration with the remote Git provider has administrator access to the repository. Otherwise, this operation will fail. Alternatively, you can do this process manually by copying the SSH key. :::note - If [your repository is using submodules on Codacy](../../repositories-configure/using-submodules.md), add a new SSH user key to your Git provider account instead. + If [your repository is using submodules on Codacy](../../repositories-configure/using-submodules), add a new SSH user key to your Git provider account instead. ::: - ![Generate new key](images/we-no-longer-have-access-to-this-repository-new-key.png) + ![Generate new key](./images/we-no-longer-have-access-to-this-repository-new-key.png) 1. Open the tab **Integrations**, and refresh your [GitLab](../../repositories-configure/integrations/gitlab-integration.md#refreshing) or [Bitbucket](../../repositories-configure/integrations/bitbucket-integration.md#refreshing) integration. diff --git a/docusaurus/docs/faq/troubleshooting/why-arent-duplication-metrics-being-calculated.md b/docusaurus/docs/faq/troubleshooting/why-arent-duplication-metrics-being-calculated.mdx similarity index 78% rename from docusaurus/docs/faq/troubleshooting/why-arent-duplication-metrics-being-calculated.md rename to docusaurus/docs/faq/troubleshooting/why-arent-duplication-metrics-being-calculated.mdx index 6b39fa5837..50259bede1 100644 --- a/docusaurus/docs/faq/troubleshooting/why-arent-duplication-metrics-being-calculated.md +++ b/docusaurus/docs/faq/troubleshooting/why-arent-duplication-metrics-being-calculated.mdx @@ -2,7 +2,6 @@ title: Why aren't duplication metrics being calculated? --- - For performance reasons, Codacy skips the calculation of code duplication for programming languages that have more than 5000 source code files in a repository. Besides this, if Codacy fails to calculate code duplication for a specific programming language in a repository three times in a row (for example, because the tool calculating the analysis runs out of memory or times out), Codacy stops trying to analyze the metric for that language and repository. @@ -11,17 +10,17 @@ When this happens, Codacy doesn't display code duplication metrics for the affec - The **Files** page on your repository displays a blank duplication value for files of the affected language. - ![Duplication in the Files page](images/duplication-files.png) + ![Duplication in the Files page](./images/duplication-files.png) - The **Commits** and **Pull Request** pages display an empty **Duplication** tab. - ![New duplication for a commit](images/duplication-commits.png) + ![New duplication for a commit](./images/duplication-commits.png) - The analysis logs for commits won't display a duplication analysis task for the tool corresponding to the affected language. As a workaround, if you're exceeding the maximum number of source code files: -1. Use a [Codacy configuration file](../../repositories-configure/codacy-configuration-file.md) to exclude source code files of the affected language from your project to decrease the number of files to be analyzed. +1. Use a [Codacy configuration file](../../repositories-configure/codacy-configuration-file) to exclude source code files of the affected language from your project to decrease the number of files to be analyzed. For example, you may be able to exclude files that are automatically generated from your test suite or files belonging to dependencies that aren't maintained by your team, such as the `node_modules` folder for JavaScript projects. @@ -31,8 +30,8 @@ If the analysis finishes but the code duplication metric wasn't calculated, foll - **If you're using Codacy Self-hosted**, open the **Admin panel**, **Repositories**, select the repository, tab **Settings**, and reset the code duplication analysis in **Duplication settings**. Then, reanalyze the last commit in the repository so that Codacy runs the code duplication analysis. - ![Resetting the failed duplication analysis](images/duplication-metrics-reset.png) + ![Resetting the failed duplication analysis](./images/duplication-metrics-reset.png) -- **If you're [analyzing your repository locally](../../repositories-configure/local-analysis/client-side-tools.md)** with the Codacy Analysis CLI, consider using the flag `--tool-timeout` to specify a larger timeout for the execution of the tool. +- **If you're [analyzing your repository locally](../../repositories-configure/local-analysis/client-side-tools)** with the Codacy Analysis CLI, consider using the flag `--tool-timeout` to specify a larger timeout for the execution of the tool. - **If you're using Codacy Cloud** or if the steps above didn't solve the issue, please contact us at [support@codacy.com](mailto:support@codacy.com). diff --git a/docusaurus/docs/faq/troubleshooting/why-cant-i-see-my-organization.md b/docusaurus/docs/faq/troubleshooting/why-cant-i-see-my-organization.mdx similarity index 79% rename from docusaurus/docs/faq/troubleshooting/why-cant-i-see-my-organization.md rename to docusaurus/docs/faq/troubleshooting/why-cant-i-see-my-organization.mdx index cfa13e22b1..3171d13a77 100644 --- a/docusaurus/docs/faq/troubleshooting/why-cant-i-see-my-organization.md +++ b/docusaurus/docs/faq/troubleshooting/why-cant-i-see-my-organization.mdx @@ -3,10 +3,9 @@ title: Why can't I see my organization? description: Try these steps if you don't see your organization when adding your organization on Codacy. --- +If you can't [add your organization to Codacy](../../organizations/what-are-organizations#adding-an-organization) because it doesn't appear on the Organizations page, please try re-adding your Git provider by clicking **Add provider** on the Organizations page: -If you can't [add your organization to Codacy](../../organizations/what-are-organizations.md#adding-an-organization) because it doesn't appear on the Organizations page, please try re-adding your Git provider by clicking **Add provider** on the Organizations page: - -![Refreshing the list of organizations](images/organization-refresh-list.png) +![Refreshing the list of organizations](./images/organization-refresh-list.png) If you still can't see your organization on Codacy, follow the steps below to check if the issue is solved: diff --git a/docusaurus/docs/faq/troubleshooting/why-did-codacy-stop-commenting-on-pull-requests.md b/docusaurus/docs/faq/troubleshooting/why-did-codacy-stop-commenting-on-pull-requests.mdx similarity index 89% rename from docusaurus/docs/faq/troubleshooting/why-did-codacy-stop-commenting-on-pull-requests.md rename to docusaurus/docs/faq/troubleshooting/why-did-codacy-stop-commenting-on-pull-requests.mdx index e99dc4119e..421f22a014 100644 --- a/docusaurus/docs/faq/troubleshooting/why-did-codacy-stop-commenting-on-pull-requests.md +++ b/docusaurus/docs/faq/troubleshooting/why-did-codacy-stop-commenting-on-pull-requests.mdx @@ -2,7 +2,6 @@ title: Why did Codacy stop commenting on pull requests? --- - ## Outdated app permissions :::note[This section applies to Codacy Coverage on GitHub] @@ -10,9 +9,9 @@ title: Why did Codacy stop commenting on pull requests? Coverage information is currently sent to GitHub by a new version of the Codacy Coverage engine, which depends on updated app permissions. -If you stopped receiving coverage summaries on your pull requests, please [review and accept the updated Codacy app permissions on GitHub](https://docs.github.com/en/enterprise-cloud@latest/apps/using-github-apps/reviewing-and-modifying-installed-github-apps#reviewing-permissions). For more information on the rollout of the new Coverage engine, [see the relevant release note](../../release-notes/cloud/cloud-2023-11-23-new-coverage-engine-status-checks.md). +If you stopped receiving coverage summaries on your pull requests, please [review and accept the updated Codacy app permissions on GitHub](https://docs.github.com/en/enterprise-cloud@latest/apps/using-github-apps/reviewing-and-modifying-installed-github-apps#reviewing-permissions). For more information on the rollout of the new Coverage engine, [see the relevant release note](../../release-notes/cloud/cloud-2023-11-23-new-coverage-engine-status-checks). -## Outdated permissions or invalid SSH key {#outdated-permissions} +## Outdated permissions or invalid SSH key \{#outdated-permissions\} :::note[This section applies to GitLab and Bitbucket] ::: @@ -24,7 +23,7 @@ To fix this issue and avoid future disruptions, refresh the GitLab or Bitbucket :::note The service account must: - - [Have administrator permissions](../../organizations/roles-and-permissions-for-organizations.md) on the repositories to integrate with Codacy + - [Have administrator permissions](../../organizations/roles-and-permissions-for-organizations) on the repositories to integrate with Codacy - Not be shared by other systems to ensure that Codacy doesn't hit the API rate limits of the Git provider when using this account ::: @@ -44,10 +43,10 @@ To fix this issue and avoid future disruptions, refresh the GitLab or Bitbucket 1. Make sure the Git provider integration is configured as needed: - - [Configuring the GitLab integration](../../repositories-configure/integrations/gitlab-integration.md#configuring) + - [Configuring the GitLab integration](../../repositories-configure/integrations/gitlab-integration#configuring) - - [Configuring the Bitbucket integration](../../repositories-configure/integrations/bitbucket-integration.md#configuring) + - [Configuring the Bitbucket integration](../../repositories-configure/integrations/bitbucket-integration#configuring) ## See also -- [We no longer have access to this repository, check your SSH keys](we-no-longer-have-access-to-this-repository.md) +- [We no longer have access to this repository, check your SSH keys](we-no-longer-have-access-to-this-repository) diff --git a/docusaurus/docs/faq/troubleshooting/why-is-my-file-over-150-kb-missing.md b/docusaurus/docs/faq/troubleshooting/why-is-my-file-over-150-kb-missing.mdx similarity index 92% rename from docusaurus/docs/faq/troubleshooting/why-is-my-file-over-150-kb-missing.md rename to docusaurus/docs/faq/troubleshooting/why-is-my-file-over-150-kb-missing.mdx index fb7f2f24e7..456feca7b4 100644 --- a/docusaurus/docs/faq/troubleshooting/why-is-my-file-over-150-kb-missing.md +++ b/docusaurus/docs/faq/troubleshooting/why-is-my-file-over-150-kb-missing.mdx @@ -2,8 +2,7 @@ title: Why is my file over 150 KB missing? --- - -Codacy Cloud currently [doesn't analyze files that are larger than 150 KB](../code-analysis/does-codacy-place-limits-on-the-code-analysis.md). Codacy doesn't display these files on the [Files page](../../repositories/files.md), and doesn't take them into account when grading your repository. +Codacy Cloud currently [doesn't analyze files that are larger than 150 KB](../code-analysis/does-codacy-place-limits-on-the-code-analysis). Codacy doesn't display these files on the [Files page](../../repositories/files), and doesn't take them into account when grading your repository. ## Why is there a limit? @@ -32,7 +31,7 @@ To update the file size limit: maxFileSizeBytes: 150000 ``` -1. Apply the new configuration by performing a Helm upgrade and specifying the Codacy Self-hosted version currently installed. To do so execute the command [used to install Codacy](../../chart/index.md#helm-upgrade): +1. Apply the new configuration by performing a Helm upgrade and specifying the Codacy Self-hosted version currently installed. To do so execute the command [used to install Codacy](../../chart#helm-upgrade): :::caution **If you're using MicroK8s** you must use the file `values-microk8s.yaml` together with the file `values-production.yaml`. diff --git a/docusaurus/docs/faq/troubleshooting/why-isnt-my-public-repository-being-analyzed.md b/docusaurus/docs/faq/troubleshooting/why-isnt-my-public-repository-being-analyzed.mdx similarity index 99% rename from docusaurus/docs/faq/troubleshooting/why-isnt-my-public-repository-being-analyzed.md rename to docusaurus/docs/faq/troubleshooting/why-isnt-my-public-repository-being-analyzed.mdx index cb4db5a777..69a3d36d69 100644 --- a/docusaurus/docs/faq/troubleshooting/why-isnt-my-public-repository-being-analyzed.md +++ b/docusaurus/docs/faq/troubleshooting/why-isnt-my-public-repository-being-analyzed.mdx @@ -2,5 +2,4 @@ title: Why isn't my public repository being analyzed? --- - Codacy only analyzes open source repositories if the admin of the repository is a committer to that repository. From 14c3115da2122859ddc9f68a396760b6da851e00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A1udia?= Date: Fri, 2 Jan 2026 10:25:37 +0000 Subject: [PATCH 10/19] faq/general --- ...-keep-audit-logs.md => does-codacy-keep-audit-logs.mdx} | 3 +-- ...l-my-plan.md => how-can-i-change-or-cancel-my-plan.mdx} | 6 +++--- ...a-secure.md => how-does-codacy-keep-my-data-secure.mdx} | 1 - ...y-privacy.md => how-does-codacy-protect-my-privacy.mdx} | 1 - ...loud.md => how-does-codacy-support-bitbucket-cloud.mdx} | 5 ++--- ...ver.md => how-does-codacy-support-bitbucket-server.mdx} | 7 +++---- ...se.md => how-does-codacy-support-github-enterprise.mdx} | 3 +-- ...b-cloud.md => how-does-codacy-support-gitlab-cloud.mdx} | 6 +++--- ...se.md => how-does-codacy-support-gitlab-enterprise.mdx} | 6 +++--- ...ich-platforms-and-technologies-does-codacy-support.mdx} | 6 +++--- 10 files changed, 19 insertions(+), 25 deletions(-) rename docusaurus/docs/faq/general/{does-codacy-keep-audit-logs.md => does-codacy-keep-audit-logs.mdx} (71%) rename docusaurus/docs/faq/general/{how-can-i-change-or-cancel-my-plan.md => how-can-i-change-or-cancel-my-plan.mdx} (87%) rename docusaurus/docs/faq/general/{how-does-codacy-keep-my-data-secure.md => how-does-codacy-keep-my-data-secure.mdx} (99%) rename docusaurus/docs/faq/general/{how-does-codacy-protect-my-privacy.md => how-does-codacy-protect-my-privacy.mdx} (99%) rename docusaurus/docs/faq/general/{how-does-codacy-support-bitbucket-cloud.md => how-does-codacy-support-bitbucket-cloud.mdx} (96%) rename docusaurus/docs/faq/general/{how-does-codacy-support-bitbucket-server.md => how-does-codacy-support-bitbucket-server.mdx} (93%) rename docusaurus/docs/faq/general/{how-does-codacy-support-github-enterprise.md => how-does-codacy-support-github-enterprise.mdx} (96%) rename docusaurus/docs/faq/general/{how-does-codacy-support-gitlab-cloud.md => how-does-codacy-support-gitlab-cloud.mdx} (94%) rename docusaurus/docs/faq/general/{how-does-codacy-support-gitlab-enterprise.md => how-does-codacy-support-gitlab-enterprise.mdx} (92%) rename docusaurus/docs/faq/general/{which-platforms-and-technologies-does-codacy-support.md => which-platforms-and-technologies-does-codacy-support.mdx} (96%) diff --git a/docusaurus/docs/faq/general/does-codacy-keep-audit-logs.md b/docusaurus/docs/faq/general/does-codacy-keep-audit-logs.mdx similarity index 71% rename from docusaurus/docs/faq/general/does-codacy-keep-audit-logs.md rename to docusaurus/docs/faq/general/does-codacy-keep-audit-logs.mdx index 4db5da8ffb..52c76fedf0 100644 --- a/docusaurus/docs/faq/general/does-codacy-keep-audit-logs.md +++ b/docusaurus/docs/faq/general/does-codacy-keep-audit-logs.mdx @@ -2,7 +2,6 @@ title: Does Codacy keep audit logs for my organization? --- - On [Business plan](https://www.codacy.com/pricing), Codacy logs significant organization events that can be retrieved for audit reporting. -See [Audit logs for organizations](../../organizations/audit-logs-for-organizations.md) for the complete list of events that Codacy logs, and how to obtain audit log data. +See [Audit logs for organizations](../../organizations/audit-logs-for-organizations) for the complete list of events that Codacy logs, and how to obtain audit log data. diff --git a/docusaurus/docs/faq/general/how-can-i-change-or-cancel-my-plan.md b/docusaurus/docs/faq/general/how-can-i-change-or-cancel-my-plan.mdx similarity index 87% rename from docusaurus/docs/faq/general/how-can-i-change-or-cancel-my-plan.md rename to docusaurus/docs/faq/general/how-can-i-change-or-cancel-my-plan.mdx index 33cfd02202..7e9d7b6f9c 100644 --- a/docusaurus/docs/faq/general/how-can-i-change-or-cancel-my-plan.md +++ b/docusaurus/docs/faq/general/how-can-i-change-or-cancel-my-plan.mdx @@ -9,9 +9,9 @@ Codacy values feedback and we thank you in advance for letting us know the prima ## If you're using Codacy Cloud -If you're using Codacy Cloud see [how to change the plan and billing of your Codacy organization](../../organizations/changing-your-plan-and-billing.md). +If you're using Codacy Cloud see [how to change the plan and billing of your Codacy organization](../../organizations/changing-your-plan-and-billing). -Alternatively, [delete your organization](../../organizations/what-are-organizations.md#deleting-an-organization) to remove all its repositories from Codacy and cancel your existing plan. +Alternatively, [delete your organization](../../organizations/what-are-organizations#deleting-an-organization) to remove all its repositories from Codacy and cancel your existing plan. ## If you're using Codacy Self-hosted @@ -21,4 +21,4 @@ If you decide to cancel your plan, please contact [support@codacy.com](mailto:su ## See also -- [Changing your plan and billing](../../organizations/changing-your-plan-and-billing.md) +- [Changing your plan and billing](../../organizations/changing-your-plan-and-billing) diff --git a/docusaurus/docs/faq/general/how-does-codacy-keep-my-data-secure.md b/docusaurus/docs/faq/general/how-does-codacy-keep-my-data-secure.mdx similarity index 99% rename from docusaurus/docs/faq/general/how-does-codacy-keep-my-data-secure.md rename to docusaurus/docs/faq/general/how-does-codacy-keep-my-data-secure.mdx index 36ff79a028..3056bdd5fe 100644 --- a/docusaurus/docs/faq/general/how-does-codacy-keep-my-data-secure.md +++ b/docusaurus/docs/faq/general/how-does-codacy-keep-my-data-secure.mdx @@ -2,7 +2,6 @@ title: How does Codacy keep my data secure? --- - Keeping our customers' data protected at all times is our highest priority. This [security overview](https://security.codacy.com/) provides a high-level overview of the security practices put in place to achieve that objective. Have questions or feedback? Feel free to reach out to us at [security@codacy.com](mailto:security@codacy.com). diff --git a/docusaurus/docs/faq/general/how-does-codacy-protect-my-privacy.md b/docusaurus/docs/faq/general/how-does-codacy-protect-my-privacy.mdx similarity index 99% rename from docusaurus/docs/faq/general/how-does-codacy-protect-my-privacy.md rename to docusaurus/docs/faq/general/how-does-codacy-protect-my-privacy.mdx index 6d86e4fcc6..08b03003bc 100644 --- a/docusaurus/docs/faq/general/how-does-codacy-protect-my-privacy.md +++ b/docusaurus/docs/faq/general/how-does-codacy-protect-my-privacy.mdx @@ -3,7 +3,6 @@ title: How does Codacy protect my privacy? description: At Codacy, keeping your personal data safe has always been a top priority and we look at GDPR as another opportunity for us to strengthen this commitment to you. --- - In May 2018 the new "General Data Protection Regulation" ([GDPR](https://en.wikipedia.org/wiki/General_Data_Protection_Regulation)) came into effect. This regulation contains the most significant changes to European data privacy legislation in the last 20 years and gives you more control over your personal data and greater transparency on how it's used. At Codacy, keeping your personal data safe has always been a top priority and we took GDPR as another opportunity for us to strengthen this commitment to you. We've changed our data processing policies, operations, activities, and documentation as a response to GDPR and have updated our [Privacy Policy](https://www.codacy.com/privacy) to incorporate said changes and specifically reflect the new regulation. diff --git a/docusaurus/docs/faq/general/how-does-codacy-support-bitbucket-cloud.md b/docusaurus/docs/faq/general/how-does-codacy-support-bitbucket-cloud.mdx similarity index 96% rename from docusaurus/docs/faq/general/how-does-codacy-support-bitbucket-cloud.md rename to docusaurus/docs/faq/general/how-does-codacy-support-bitbucket-cloud.mdx index 98a1dc83e2..66bfad06a5 100644 --- a/docusaurus/docs/faq/general/how-does-codacy-support-bitbucket-cloud.md +++ b/docusaurus/docs/faq/general/how-does-codacy-support-bitbucket-cloud.mdx @@ -2,13 +2,12 @@ title: How does Codacy support Bitbucket Cloud? --- - When you use Bitbucket Cloud to sign up or log into Codacy, the Bitbucket teams that you belong to will be available to be added as Organizations on Codacy. After adding a team: - Codacy displays the list of all repositories in that team so that you can add them to Codacy as repositories to be analyzed -- The members of the team will be able to [join or request to join Codacy](../../organizations/managing-people.md#joining) +- The members of the team will be able to [join or request to join Codacy](../../organizations/managing-people#joining) If you have repositories that don't belong to any team, you can still add those on Codacy directly under **My Repositories**. @@ -25,4 +24,4 @@ Currently, the integration between Codacy and Bitbucket Cloud has the following ## See also -- [What are organizations](../../organizations/what-are-organizations.md) +- [What are organizations](../../organizations/what-are-organizations) diff --git a/docusaurus/docs/faq/general/how-does-codacy-support-bitbucket-server.md b/docusaurus/docs/faq/general/how-does-codacy-support-bitbucket-server.mdx similarity index 93% rename from docusaurus/docs/faq/general/how-does-codacy-support-bitbucket-server.md rename to docusaurus/docs/faq/general/how-does-codacy-support-bitbucket-server.mdx index 58b92c6ff2..2a7864b8f3 100644 --- a/docusaurus/docs/faq/general/how-does-codacy-support-bitbucket-server.md +++ b/docusaurus/docs/faq/general/how-does-codacy-support-bitbucket-server.mdx @@ -2,13 +2,12 @@ title: How does Codacy support Bitbucket Server? --- - When you use Bitbucket Server to sign up or log into Codacy, the Bitbucket projects that you belong to will be available to be added as Organizations on Codacy. After adding a project: - Codacy displays the list of all repositories that you own in that project so that you can add them to Codacy as repositories to be analyzed -- The members of the project will be able to [join or request to join Codacy](../../organizations/managing-people.md#joining) +- The members of the project will be able to [join or request to join Codacy](../../organizations/managing-people#joining) ## Limitations @@ -20,10 +19,10 @@ Currently, the integration between Codacy and Bitbucket Server has the following - **Repositories that are moved between teams are not automatically transferred between Organizations on Codacy.** You must manually delete these repositories from their source Organization and add them to their new Organization. - **Personal repositories are not supported.** You can only add repositories to Codacy if they belong to a project. - **Codacy only sends commit and pull request notification emails to the authors of the commits and pull requests.** -- **[Pull request summaries](../../repositories-configure/integrations/bitbucket-integration.md#pull-request-summary) aren't available** +- **[Pull request summaries](../../repositories-configure/integrations/bitbucket-integration#pull-request-summary) aren't available** - **The Repositories screen doesn't include the "Last updated" date for each repository.** As such, the repositories are sorted alphabetically. - **Codacy doesn't analyze pull requests submitted from forked repositories.** ## See also -- [What are organizations](../../organizations/what-are-organizations.md) +- [What are organizations](../../organizations/what-are-organizations) diff --git a/docusaurus/docs/faq/general/how-does-codacy-support-github-enterprise.md b/docusaurus/docs/faq/general/how-does-codacy-support-github-enterprise.mdx similarity index 96% rename from docusaurus/docs/faq/general/how-does-codacy-support-github-enterprise.md rename to docusaurus/docs/faq/general/how-does-codacy-support-github-enterprise.mdx index 9516112544..bb20922463 100644 --- a/docusaurus/docs/faq/general/how-does-codacy-support-github-enterprise.md +++ b/docusaurus/docs/faq/general/how-does-codacy-support-github-enterprise.mdx @@ -2,7 +2,6 @@ title: How does Codacy support GitHub Enterprise Cloud? --- - When you use GitHub Enterprise to sign up or log into Codacy, the GitHub Enterprise organizations, that you belong to, will be available to be added as Organizations on Codacy. After connecting with your Enterprise account Codacy displays the list of all organizations that you have access to in that Enterprise, and you can add to start analysing its repositories or join it. @@ -18,4 +17,4 @@ Currently, the integration between Codacy and GitHub Enterprise has the followin ## See also -- [How to manage your GitHub Enterprise organization](../../enterprise-cloud/github-enterprise-cloud.md) \ No newline at end of file +- [How to manage your GitHub Enterprise organization](../../enterprise-cloud/github-enterprise-cloud) \ No newline at end of file diff --git a/docusaurus/docs/faq/general/how-does-codacy-support-gitlab-cloud.md b/docusaurus/docs/faq/general/how-does-codacy-support-gitlab-cloud.mdx similarity index 94% rename from docusaurus/docs/faq/general/how-does-codacy-support-gitlab-cloud.md rename to docusaurus/docs/faq/general/how-does-codacy-support-gitlab-cloud.mdx index 21257e3d53..3d1f55f103 100644 --- a/docusaurus/docs/faq/general/how-does-codacy-support-gitlab-cloud.md +++ b/docusaurus/docs/faq/general/how-does-codacy-support-gitlab-cloud.mdx @@ -8,9 +8,9 @@ When you use GitLab Cloud to sign up or log into Codacy, the GitLab Groups that After adding a Group: - Codacy displays the list of all repositories that you own in that Group and Subgroups so that you can add them to Codacy as repositories to be analyzed -- The members of the Group will be able to [join or request to join Codacy](../../organizations/managing-people.md#joining) +- The members of the Group will be able to [join or request to join Codacy](../../organizations/managing-people#joining) -If you have repositories that don't belong to any Group, you can still [add those on Codacy by choosing your "personal" organization](../../getting-started/codacy-quickstart.md#choosing-organization). +If you have repositories that don't belong to any Group, you can still [add those on Codacy by choosing your "personal" organization](../../getting-started/codacy-quickstart#choosing-organization). ## Limitations @@ -26,4 +26,4 @@ Currently, the integration between Codacy and GitLab Cloud has the following lim ## See also -- [What are organizations](../../organizations/what-are-organizations.md) +- [What are organizations](../../organizations/what-are-organizations) diff --git a/docusaurus/docs/faq/general/how-does-codacy-support-gitlab-enterprise.md b/docusaurus/docs/faq/general/how-does-codacy-support-gitlab-enterprise.mdx similarity index 92% rename from docusaurus/docs/faq/general/how-does-codacy-support-gitlab-enterprise.md rename to docusaurus/docs/faq/general/how-does-codacy-support-gitlab-enterprise.mdx index 41284a80d1..07e498e8c2 100644 --- a/docusaurus/docs/faq/general/how-does-codacy-support-gitlab-enterprise.md +++ b/docusaurus/docs/faq/general/how-does-codacy-support-gitlab-enterprise.mdx @@ -8,9 +8,9 @@ When you use GitLab Enterprise to sign up or log into Codacy, the GitLab Groups After adding a Group: - Codacy displays the list of all repositories that you own in that Group and Subgroups so that you can add them to Codacy as repositories to be analyzed -- The members of the Group will be able to [join or request to join Codacy](../../organizations/managing-people.md#joining) +- The members of the Group will be able to [join or request to join Codacy](../../organizations/managing-people#joining) -If you have repositories that don't belong to any Group, you can still [add those on Codacy by choosing your "personal" organization](../../getting-started/codacy-quickstart.md#choosing-organization). +If you have repositories that don't belong to any Group, you can still [add those on Codacy by choosing your "personal" organization](../../getting-started/codacy-quickstart#choosing-organization). ## Limitations @@ -23,4 +23,4 @@ Currently, the integration between Codacy and GitLab Enterprise has the followin ## See also -- [What are organizations](../../organizations/what-are-organizations.md) +- [What are organizations](../../organizations/what-are-organizations) diff --git a/docusaurus/docs/faq/general/which-platforms-and-technologies-does-codacy-support.md b/docusaurus/docs/faq/general/which-platforms-and-technologies-does-codacy-support.mdx similarity index 96% rename from docusaurus/docs/faq/general/which-platforms-and-technologies-does-codacy-support.md rename to docusaurus/docs/faq/general/which-platforms-and-technologies-does-codacy-support.mdx index 7f9e4f3651..025bc110e2 100644 --- a/docusaurus/docs/faq/general/which-platforms-and-technologies-does-codacy-support.md +++ b/docusaurus/docs/faq/general/which-platforms-and-technologies-does-codacy-support.mdx @@ -19,7 +19,7 @@ Codacy supports repositories from the following Git providers: - + {/**/}
GitHub @@ -34,7 +34,7 @@ Codacy supports repositories from the following Git providers:

Codacy Self-hosted

- + {/**/} GitLab @@ -49,7 +49,7 @@ Codacy supports repositories from the following Git providers:

Codacy Self-hosted

- + {/**/} Bitbucket From 16087499ef6f29c636e3edc70224ffde4154c988 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A1udia?= Date: Fri, 2 Jan 2026 10:41:02 +0000 Subject: [PATCH 11/19] repositories --- docusaurus/docs/repositories/commits.mdx | 87 +++++++++---------- .../{coverage.md => coverage.mdx} | 25 +++--- .../docs/repositories/{files.md => files.mdx} | 36 ++++---- docusaurus/docs/repositories/issues.mdx | 26 +++--- .../docs/repositories/pull-requests.mdx | 56 ++++++------ .../repositories/repository-dashboard.mdx | 26 +++--- 6 files changed, 127 insertions(+), 129 deletions(-) rename docusaurus/docs/repositories/{coverage.md => coverage.mdx} (78%) rename docusaurus/docs/repositories/{files.md => files.mdx} (70%) diff --git a/docusaurus/docs/repositories/commits.mdx b/docusaurus/docs/repositories/commits.mdx index 2ece82b864..3f2f113440 100644 --- a/docusaurus/docs/repositories/commits.mdx +++ b/docusaurus/docs/repositories/commits.mdx @@ -4,59 +4,59 @@ page_name: "commit" file_name: "commits" --- -import IssueDetails from '../_includes/IssueDetails.mdx'; +import IssueDetails from './../_includes/IssueDetails.mdx'; The **Commits page** displays an overview of the commits in your repository, such as the analysis status and the code quality metrics for each commit. This allows you to monitor the evolution of the code quality per commit in your repository. -By default, the page lists the commits on the main branch of your repository, but if you have [more than one branch enabled](../repositories-configure/managing-branches.mdx) you can use the drop-down list at the top of the page to display commits on other branches. +By default, the page lists the commits on the main branch of your repository, but if you have [more than one branch enabled](../repositories-configure/managing-branches) you can use the drop-down list at the top of the page to display commits on other branches. -![Commits page](images/commits.png) +![Commits page](./images/commits.png) Click a specific commit to see detailed information about the code quality changes introduced by that commit. -![Commit detail](images/commits-detail.png) +![Commit detail](./images/commits-detail.png) The next sections describe each area of the commit detail page. -## Commit status {#status} -![Commit status](images/commits-detail-status.png) +## Commit status \{#status\} +![Commit status](./images/commits-detail-status.png) This area displays the information that identifies the commit (commit message, committer, SHA hash, and last updated date), as well as: - A link to the commit on your Git provider -- A [link to reanalyze the commit](../faq/repositories/how-do-i-reanalyze-my-repository.md), present when the committer [is part of your organization](../organizations/managing-people.md) +- A [link to reanalyze the commit](../faq/repositories/how-do-i-reanalyze-my-repository), present when the committer [is part of your organization](../organizations/managing-people) - A link to [view analysis logs](#viewing-analysis-logs) - -## Commit quality overview {#quality-overview} - -![Commit quality overview](images/commits-detail-quality-overview.png) - +{/**/} +## Commit quality overview \{#quality-overview\} +{/**/} +![Commit quality overview](./images/commits-detail-quality-overview.png) +{/**/} -This area displays the quality gate status for the commit and the code quality metrics [with a gate set up](../repositories-configure/adjusting-quality-gates.md): +This area displays the quality gate status for the commit and the code quality metrics [with a gate set up](../repositories-configure/adjusting-quality-gates): -- The quality gate status is either **Up to quality standards** or **Not up to quality standards** depending on the [quality gate rules](../repositories-configure/adjusting-quality-gates.md) for your repository. +- The quality gate status is either **Up to quality standards** or **Not up to quality standards** depending on the [quality gate rules](../repositories-configure/adjusting-quality-gates) for your repository. If there are no gate rules enabled for commits, the status is always **Up to quality standards**. -- The variation introduced by the commit is displayed either as a **positive or negative variation**, or **no variation** (represented by `=`) for code quality metrics [with a gate set up](../repositories-configure/adjusting-quality-gates.md): +- The variation introduced by the commit is displayed either as a **positive or negative variation**, or **no variation** (represented by `=`) for code quality metrics [with a gate set up](../repositories-configure/adjusting-quality-gates): - **Issues:** Number of new issues - **Duplication:** Changes in the number of duplicated code blocks - **Complexity:** Changes in code complexity - **Coverage variation:** Changes in code coverage percentage compared with the parent commit - Depending on the languages being analyzed or if you haven't [set up coverage for your repository](../coverage-reporter/index.md), some metrics **may not be calculated** (represented by `-`). + Depending on the languages being analyzed or if you haven't [set up coverage for your repository](../coverage-reporter), some metrics **may not be calculated** (represented by `-`). :::note Learn how Codacy calculates the code quality metrics in more detail: - - [Which code quality metrics does Codacy calculate?](../faq/code-analysis/which-metrics-does-codacy-calculate.md) - - [Why does Codacy show unexpected coverage changes?](../faq/code-analysis/why-does-codacy-show-unexpected-coverage-changes.md) + - [Which code quality metrics does Codacy calculate?](../faq/code-analysis/which-metrics-does-codacy-calculate) + - [Why does Codacy show unexpected coverage changes?](../faq/code-analysis/why-does-codacy-show-unexpected-coverage-changes) ::: -- The **colors** depend on the [quality gate rules](../repositories-configure/adjusting-quality-gates.md) for your repository: +- The **colors** depend on the [quality gate rules](../repositories-configure/adjusting-quality-gates) for your repository: - **Green:** The metric passes the quality gate - **Red:** The metric fails the quality gate @@ -65,32 +65,31 @@ This area displays the quality gate status for the commit and the code quality m :::note If you change the quality gate rules you must reanalyze the commit to update the metrics and optionally re-upload the Coverage report if you also changed the coverage gate rules. ::: - +{/**/} - -## Issues tab {#issues-tabs} +{/**/} +## Issues tab \{#issues-tabs\} The **Issues** tab displays the lists of issues that the commit creates or fixes. Use the sidebar filters to filter the list by new issues (including issues of specific severity or category), issues within a specific file, fixed issues, [potential new issues, or potential fixed issues](#possible-issues). -To [ignore or manage an issue](issues.md#ignoring-and-managing-issues), click the associated options in the menu. +To [ignore or manage an issue](./issues#ignoring-and-managing-issues), click the associated options in the menu. -![Issues tab](images/commits-tab-issues.png) +![Issues tab](./images/commits-tab-issues.png) -### Potential issues {#possible-issues} +### Potential issues \{#possible-issues\} Codacy may label some issues as **potential**, which means that the code analysis detected these issues in lines of code that weren't changed by the analyzed commit. This highlights potential consequences in other parts of your codebase. The following are example situations that can lead to potential issues: - The issue was either created or fixed in the current commit, but the static code analysis tools reported the issue on a line that didn't change in the commit. For example, if you remove the line containing the declaration of a variable you may get an "undeclared variable" issue in other lines that use that variable. -- If a file had [more than 50 issues reported by the same tool](../faq/code-analysis/does-codacy-place-limits-on-the-code-analysis.md) and you push a new commit that fixes some of these issues, Codacy will report more issues until the limit of 50 issues. These issues will be potential issues if they're outside the lines of code changed in the new commit. +- If a file had [more than 50 issues reported by the same tool](../faq/code-analysis/does-codacy-place-limits-on-the-code-analysis) and you push a new commit that fixes some of these issues, Codacy will report more issues until the limit of 50 issues. These issues will be potential issues if they're outside the lines of code changed in the new commit. :::note -**If you're using GitHub** you may see [annotations](../repositories-configure/integrations/github-integration.md#issue-annotations) for potential issues reported under **Unchanged files with check annotations** on the **Files changed** tab of your pull requests. +**If you're using GitHub** you may see [annotations](../repositories-configure/integrations/github-integration#issue-annotations) for potential issues reported under **Unchanged files with check annotations** on the **Files changed** tab of your pull requests. This happens when Codacy reports potential issues in files that weren't changed in your pull request. [Read more about this GitHub feature](https://developer.github.com/changes/2019-09-06-more-check-annotations-shown-in-files-changed-tab/). - ::: ### False positive issues @@ -101,20 +100,20 @@ The False Positive detection is a business tier feature. If you are a Codacy Pro If your commit includes issues detected as false positives, an **Ignore all false positives** option will appear above the first issue in the list. This allows you to bulk ignore all detected false positives at once. -For more details on managing false positives, see [Managing system-detected false positives](issues.md#managing-system-detected-false-positives). +For more details on managing false positives, see [Managing system-detected false positives](./issues#managing-system-detected-false-positives). -![Detected false positives](images/pull-requests-false-positives.png) +![Detected false positives](./images/pull-requests-false-positives.png) During a pull request analysis, if Codacy identifies issues that appear to be false positives, it will automatically add a comment listing all the detected false positives. -![Detected false positives comment](images/pull-requests-false-positives-comment.png) +![Detected false positives comment](./images/pull-requests-false-positives-comment.png) :::note Pull Request comments for False Positives are currently supported on GitHub only. ::: -## Duplication tab {#duplication-tabs} +## Duplication tab \{#duplication-tabs\} The **Duplication** tab displays the lists of clones (duplicated code blocks) that the commit adds or fixes. You can click a clone to expand it and inspect the code. ![Duplication tabs](./images/commits-tab-duplication.png) @@ -124,7 +123,7 @@ The **Duplication** tab displays the lists of clones (duplicated code blocks) th The **Complexity** tab displays the complexity changes introduced by the commit. Use the sidebar filters to filter the list by high increase (4 or more), low increase (1 to 3), or improvement (less than 0). :::note -For more information, see [how Codacy calculates cyclomatic complexity](../faq/code-analysis/which-metrics-does-codacy-calculate.md#complexity). +For more information, see [how Codacy calculates cyclomatic complexity](../faq/code-analysis/which-metrics-does-codacy-calculate#complexity). ::: ![Complexity tab](./images/commits-tab-complexity.png) @@ -142,25 +141,25 @@ The **Diff** tab displays the code changes and issues introduced by the commit. Lines with issues are highlighted according to issue severity and include a pill label with the issue type and count. Hover over the pill label to view more details or navigate to the issues. - -![Diff tab](images/commits-tab-diff.png) - +{/**/} +![Diff tab](./images/commits-tab-diff.png) +{/**/} ## Files tab -The **Files** tab displays the variation of the following [code quality metrics](../faq/code-analysis/which-metrics-does-codacy-calculate.md) that the commit introduces to the files in your repository, displayed either as a **positive or negative variation**, or **no variation** (represented by `=`): +The **Files** tab displays the variation of the following [code quality metrics](../faq/code-analysis/which-metrics-does-codacy-calculate) that the commit introduces to the files in your repository, displayed either as a **positive or negative variation**, or **no variation** (represented by `=`): - **New issues:** Number of new issues - **Duplication:** Changes in the number of duplicated code blocks - **Complexity:** Changes in code complexity - **Coverage variation:** Changes in code coverage percentage compared with the parent commit -Depending on the languages being analyzed or if you haven't [set up coverage for your repository](../coverage-reporter/index.md), some metrics **may not be calculated** (represented by `-`). +Depending on the languages being analyzed or if you haven't [set up coverage for your repository](../coverage-reporter), some metrics **may not be calculated** (represented by `-`). - -![Files tab](images/commits-tab-files.png) - - +{/**/} +![Files tab](./images/commits-tab-files.png) +{/**/} +{/**/} ## Viewing analysis logs @@ -168,8 +167,8 @@ Analysis logs can help you identify the duration of each analysis phase and any To access the analysis logs, click the **View logs** link in the [commit status](#status) area. This opens a modal displaying execution times and outcomes for the tools used to analyze the commit. -![View logs modal](images/commits-view-logs-modal.png) +![View logs modal](./images/commits-view-logs-modal.png) ## See also -- [Which metrics does Codacy calculate?](../faq/code-analysis/which-metrics-does-codacy-calculate.md) +- [Which metrics does Codacy calculate?](../faq/code-analysis/which-metrics-does-codacy-calculate) diff --git a/docusaurus/docs/repositories/coverage.md b/docusaurus/docs/repositories/coverage.mdx similarity index 78% rename from docusaurus/docs/repositories/coverage.md rename to docusaurus/docs/repositories/coverage.mdx index 7bc6e543cc..907d3ca653 100644 --- a/docusaurus/docs/repositories/coverage.md +++ b/docusaurus/docs/repositories/coverage.mdx @@ -2,16 +2,15 @@ title: Coverage page --- +The **Coverage page** displays the current code coverage information in your [enabled repository branches](../repositories-configure/managing-branches). -The **Coverage page** displays the current code coverage information in your [enabled repository branches](../repositories-configure/managing-branches.mdx). +If your repository doesn't have coverage set up, you can learn more on how to [add coverage to your repository](../coverage-reporter/index.mdx). -If your repository doesn't have coverage set up, you can learn more on how to [add coverage to your repository](../coverage-reporter/index.md). - -By default, the page displays the coverage information on the main branch of your repository. However, if you have [more than one branch enabled](../repositories-configure/managing-branches.mdx), you can select other branches using the drop-down list at the top of the page. +By default, the page displays the coverage information on the main branch of your repository. However, if you have [more than one branch enabled](../repositories-configure/managing-branches), you can select other branches using the drop-down list at the top of the page. ## Code coverage metrics -Codacy displays the following [code coverage metrics](../faq/code-analysis/which-metrics-does-codacy-calculate.md#code-coverage), if available: +Codacy displays the following [code coverage metrics](../faq/code-analysis/which-metrics-does-codacy-calculate#code-coverage), if available: - **Coverage percentage:** Percentage of code covered - **Covered / Coverable lines:** Number of covered and coverable lines @@ -21,32 +20,32 @@ Codacy displays the following [code coverage metrics](../faq/code-analysis/which If the repository doesn't have a coverage goal set, the code coverage metrics won't show values for Files above and below coverage goals. :::note -You can set a Coverage goal for the repository [inside repository settings, on the Goals tab](../repositories-configure/adjusting-quality-goals.md). +You can set a Coverage goal for the repository [inside repository settings, on the Goals tab](../repositories-configure/adjusting-quality-goals). ::: -![Code coverage metrics](images/coverage-metrics.png) +![Code coverage metrics](./images/coverage-metrics.png) ## Open pull requests The **Open pull requests** area displays the last updated pull requests and the split between the status of all open pull requests in your repository: - **Up to standards:** Pull requests that meet the minimum quality levels -- **Not up to standards:** Pull requests that failed to meet at least one of the [quality gate rules defined for the repository](../repositories-configure/adjusting-quality-gates.md) +- **Not up to standards:** Pull requests that failed to meet at least one of the [quality gate rules defined for the repository](../repositories-configure/adjusting-quality-gates) - **Analyzing:** Pull requests currently being analyzed by Codacy Click a bar segment to display only pull requests with the corresponding status. -To see the details of pull requests, click a pull request from the list or click **See all pull requests** to open the [list of pull requests](pull-requests.mdx) in the repository. +To see the details of pull requests, click a pull request from the list or click **See all pull requests** to open the [list of pull requests](./pull-requests) in the repository. -![Open pull requests](images/open-pull-requests-widget.png) +![Open pull requests](./images/open-pull-requests-widget.png) ## Files with low coverage, issues and/or high complexity For a better understanding of how repository files are performing in terms of issues, high complexity and coverage simultaneously, Codacy displays two files tables where it's possible to check which files contain a low coverage percentage, along with a high number of issues and/or a high complexity rate. -![Low covered files with issues and high complexity](images/low-covered-files-tables.png) +![Low covered files with issues and high complexity](./images/low-covered-files-tables.png) ## See also -- [Which metrics does Codacy calculate?](../faq/code-analysis/which-metrics-does-codacy-calculate.md) -- [Using the Codacy API to obtain code quality metrics for files](../codacy-api/examples/obtaining-code-quality-metrics-for-files.md) +- [Which metrics does Codacy calculate?](../faq/code-analysis/which-metrics-does-codacy-calculate) +- [Using the Codacy API to obtain code quality metrics for files](../codacy-api/examples/obtaining-code-quality-metrics-for-files) diff --git a/docusaurus/docs/repositories/files.md b/docusaurus/docs/repositories/files.mdx similarity index 70% rename from docusaurus/docs/repositories/files.md rename to docusaurus/docs/repositories/files.mdx index 1bf2a2ef6e..943f520eee 100644 --- a/docusaurus/docs/repositories/files.md +++ b/docusaurus/docs/repositories/files.mdx @@ -3,11 +3,11 @@ title: Files page --- -The **Files page** displays the current code quality information for each analyzed file in your [enabled repository branches](../repositories-configure/managing-branches.mdx). +The **Files page** displays the current code quality information for each analyzed file in your [enabled repository branches](../repositories-configure/managing-branches). -By default, the page lists the files on the main branch of your repository. However, if you have [more than one branch enabled](../repositories-configure/managing-branches.mdx), you can select other branches using the drop-down list at the top of the page. +By default, the page lists the files on the main branch of your repository. However, if you have [more than one branch enabled](../repositories-configure/managing-branches), you can select other branches using the drop-down list at the top of the page. -Codacy displays the following [code quality metrics](../faq/code-analysis/which-metrics-does-codacy-calculate.md) for each file, if available: +Codacy displays the following [code quality metrics](../faq/code-analysis/which-metrics-does-codacy-calculate) for each file, if available: - **Grade:** Overall grade of the file - **Issues:** Number of issues in the file @@ -18,14 +18,14 @@ Codacy displays the following [code quality metrics](../faq/code-analysis/which- Codacy displays the files in alphabetical order by default, but you can sort the list by each column to help you identify which files you should improve or refactor next. :::note -You can [use the Codacy API to generate reports or obtain code quality metrics](../codacy-api/examples/obtaining-code-quality-metrics-for-files.md) for the files in your repositories in a more flexible way. +You can [use the Codacy API to generate reports or obtain code quality metrics](../codacy-api/examples/obtaining-code-quality-metrics-for-files) for the files in your repositories in a more flexible way. ::: -![Files list](images/files.png) +![Files list](./images/files.png) Use the search box to filter the list and find specific files: -![Finding specific files](images/files-search.png) +![Finding specific files](./images/files-search.png) ## File details @@ -33,26 +33,26 @@ Click a specific file to see more detailed analysis information for that file. The header of the file detail page displays the same code quality metrics as the Files page, as well as: -- An **Ignore file** link to [ignore the selected file](../repositories-configure/ignoring-files.md) on future Codacy analysis +- An **Ignore file** link to [ignore the selected file](../repositories-configure/ignoring-files) on future Codacy analysis - A link to view the file on your Git provider -![File detail](images/files-details.png) +![File detail](./images/files-details.png) Depending on the available analysis information for the file, Codacy displays one or more of the following tabs: -- **Issues:** Shows the annotated source code on the left-hand side and the matching list of issues and issue distribution by severity on the right-hand side. Each listed issue includes the same information and options available on the [Issues page](issues.md). +- **Issues:** Shows the annotated source code on the left-hand side and the matching list of issues and issue distribution by severity on the right-hand side. Each listed issue includes the same information and options available on the [Issues page](./issues). - ![Issues for a file](images/files-issues.png) + ![Issues for a file](./images/files-issues.png) - **Duplication:** Shows the annotated source code on the left-hand side and the matching list of duplicated code blocks and counts on the right-hand side. Each listed duplicate includes the number of clones and their locations. - ![Duplicated blocks for a file](images/files-duplication.png) + ![Duplicated blocks for a file](./images/files-duplication.png) - **Coverage:** Shows which lines of code are covered by tests (green background labeled with test hit count) or not covered (red background), along with the counts of coverable and covered lines and the file status with respect to the [coverage goal](../repositories-configure/adjusting-quality-goals.md). - ![Coverage information for a file](images/files-coverage.png) + ![Coverage information for a file](./images/files-coverage.png) -## Why are some files missing? {#missing-files} +## Why are some files missing? \{#missing-files\} The Files page only displays files in your repository that were analyzed by Codacy. This means that some of your files may be missing from the list, for example: - **You're viewing the incorrect branch** @@ -61,17 +61,17 @@ The Files page only displays files in your repository that were analyzed by Coda - **The file might be ignored** - The Files page doesn't display [ignored files](../repositories-configure/ignoring-files.md) that aren't meant to be analyzed, including the [files that Codacy ignores by default](../repositories-configure/ignoring-files.md#default-ignored-files). + The Files page doesn't display [ignored files](../repositories-configure/ignoring-files) that aren't meant to be analyzed, including the [files that Codacy ignores by default](../repositories-configure/ignoring-files#default-ignored-files). - **The file has an extension that is not on the list of supported extensions** - Codacy supports a [list of file extensions](../repositories-configure/languages.md#configuring-file-extensions) associated with each language. Codacy doesn't analyze or display files with extensions that aren't associated with a language. + Codacy supports a [list of file extensions](../repositories-configure/languages#configuring-file-extensions) associated with each language. Codacy doesn't analyze or display files with extensions that aren't associated with a language. - **The file might be too big** - Codacy doesn't analyze or display files that are over a certain size. [Read more details](../faq/troubleshooting/why-is-my-file-over-150-kb-missing.md) for information on how to overcome this limit. + Codacy doesn't analyze or display files that are over a certain size. [Read more details](../faq/troubleshooting/why-is-my-file-over-150-kb-missing) for information on how to overcome this limit. ## See also -- [Which metrics does Codacy calculate?](../faq/code-analysis/which-metrics-does-codacy-calculate.md) -- [Using the Codacy API to obtain code quality metrics for files](../codacy-api/examples/obtaining-code-quality-metrics-for-files.md) +- [Which metrics does Codacy calculate?](../faq/code-analysis/which-metrics-does-codacy-calculate) +- [Using the Codacy API to obtain code quality metrics for files](../codacy-api/examples/obtaining-code-quality-metrics-for-files) diff --git a/docusaurus/docs/repositories/issues.mdx b/docusaurus/docs/repositories/issues.mdx index bccd9354f6..db3299ccfa 100644 --- a/docusaurus/docs/repositories/issues.mdx +++ b/docusaurus/docs/repositories/issues.mdx @@ -7,25 +7,25 @@ import IssueDetails from './../_includes/IssueDetails.mdx' The **Issues page** lists all the issues that Codacy detected in your repository, including the severity level and category of each issue. -By default, the page lists the issues on the main branch of your repository but if you have [more than one branch enabled](../repositories-configure/managing-branches.mdx) you can use the drop-down list at the top of the page to display issues on other branches. +By default, the page lists the issues on the main branch of your repository but if you have [more than one branch enabled](../repositories-configure/managing-branches) you can use the drop-down list at the top of the page to display issues on other branches. :::note -[You can use the Codacy API](../codacy-api/examples/obtaining-current-issues-in-repositories.md) to generate reports or obtain information about the current issues in your repositories in a more flexible way. +[You can use the Codacy API](../codacy-api/examples/obtaining-current-issues-in-repositories) to generate reports or obtain information about the current issues in your repositories in a more flexible way. ::: -![Issues page](images/issues.png) +![Issues page](./images/issues.png) -![Issue details](images/issues-detail.png) +![Issue details](./images/issues-detail.png) ## Filtering issues Filter the list of issues to find specific issues, such as the issues with the highest severity or security issues. -The list of code patterns with issues is always visible on the left side of the page. Click a [code pattern](../repositories-configure/configuring-code-patterns.md) to filter the list of issues by that pattern. +The list of code patterns with issues is always visible on the left side of the page. Click a [code pattern](../repositories-configure/configuring-code-patterns.mdx) to filter the list of issues by that pattern. -![Filtering issues](images/issues-filter.png) +![Filtering issues](./images/issues-filter.png) You can moreover define one or more of the following filters: @@ -74,23 +74,23 @@ Use the options in the menu of each issue to: See [how to restore ignored issues](#restoring-ignored-issues). :::tip - Organization admins can [configure who is allowed to ignore issues](../organizations/roles-and-permissions-for-organizations.md#change-analysis-configuration). + Organization admins can [configure who is allowed to ignore issues](../organizations/roles-and-permissions-for-organizations#change-analysis-configuration). ::: - **Disable the code pattern** that detected the issue. - Codacy will stop using that pattern after the next analysis of your repository, so be sure that you're no longer interested in identifying similar issues. To re-enable patterns use the [Code patterns page](../repositories-configure/configuring-code-patterns.md). + Codacy will stop using that pattern after the next analysis of your repository, so be sure that you're no longer interested in identifying similar issues. To re-enable patterns use the [Code patterns page](../repositories-configure/configuring-code-patterns). :::note - - If you're using a [custom configuration file](../repositories-configure/configuring-code-patterns.md#using-your-own-tool-configuration-files), you must manage patterns manually on your configuration file. - - If your repository is following an [organization coding standard](../organizations/using-coding-standards.md), disabling the code pattern causes the repository to stop following the coding standard. In this case, Codacy asks for your confirmation before accepting the changes and then copies the coding standard configurations to your repository, so you can customize them. + - If you're using a [custom configuration file](../repositories-configure/configuring-code-patterns#using-your-own-tool-configuration-files), you must manage patterns manually on your configuration file. + - If your repository is following an [organization coding standard](../organizations/using-coding-standards), disabling the code pattern causes the repository to stop following the coding standard. In this case, Codacy asks for your confirmation before accepting the changes and then copies the coding standard configurations to your repository, so you can customize them. ::: - **View the file** where the issue was detected. - **Ignore the file** where the issue was detected. - Codacy will no longer analyze that file on your repository, so be sure that you're no longer interested in identifying any type of issues on that file. To remove an ignored file use the [Ignored Files tab](../repositories-configure/ignoring-files.md) in your repository settings. + Codacy will no longer analyze that file on your repository, so be sure that you're no longer interested in identifying any type of issues on that file. To remove an ignored file use the [Ignored Files tab](../repositories-configure/ignoring-files) in your repository settings. @@ -154,5 +154,5 @@ In this case, Codacy generates a patch that enables you to solve all resolvable ## See also -- [Which metrics does Codacy calculate?](../faq/code-analysis/which-metrics-does-codacy-calculate.md) -- [Using the Codacy API to obtain current issues in repositories](../codacy-api/examples/obtaining-current-issues-in-repositories.md) +- [Which metrics does Codacy calculate?](../faq/code-analysis/which-metrics-does-codacy-calculate) +- [Using the Codacy API to obtain current issues in repositories](../codacy-api/examples/obtaining-current-issues-in-repositories) diff --git a/docusaurus/docs/repositories/pull-requests.mdx b/docusaurus/docs/repositories/pull-requests.mdx index 57e8870b07..7a26698ea0 100644 --- a/docusaurus/docs/repositories/pull-requests.mdx +++ b/docusaurus/docs/repositories/pull-requests.mdx @@ -11,35 +11,35 @@ The **Pull Requests page** displays an overview of the pull requests in your rep By default, the page lists open pull requests, but you can click the **Closed** tab at the top of the list to display the closed pull requests. -![Pull Requests page](images/pull-requests.png) +![Pull Requests page](./images/pull-requests.png) Click a specific pull request to see detailed information about the code quality changes introduced by that pull request. -![Pull request detail](images/pull-requests-detail.png) +![Pull request detail](./images/pull-requests-detail.png) The next sections describe each area of the pull request detail page. -## Pull request status {#status} +## Pull request status \{#status\} This area displays the information that identifies the pull request (name, author, head and base branches, and last updated date), as well as: - A link to the pull request on your Git provider -- A [link to reanalyze the latest pull request commit](../faq/repositories/how-do-i-reanalyze-my-repository.md), present when the committer [is part of your organization](../organizations/managing-people.md) +- A [link to reanalyze the latest pull request commit](../faq/repositories/how-do-i-reanalyze-my-repository.mdx), present when the committer [is part of your organization](../organizations/managing-people.mdx) - A link to [view analysis logs](#viewing-analysis-logs) ![Pull request status](images/pull-requests-detail-status.png) -## Pull request quality overview {#quality-overview} - +## Pull request quality overview \{#quality-overview\} +{/**/} ![Pull request quality overview](images/pull-requests-detail-quality-overview.png) - +{/**/} -This area displays the quality gate status for the pull request and the code quality metrics [with a gate set up](../repositories-configure/adjusting-quality-gates.md): +This area displays the quality gate status for the pull request and the code quality metrics [with a gate set up](../repositories-configure/adjusting-quality-gates.mdx): -- The quality gate status is either **Up to quality standards** or **Not up to quality standards** depending on the [quality gate rules](../repositories-configure/adjusting-quality-gates.md) for your repository. +- The quality gate status is either **Up to quality standards** or **Not up to quality standards** depending on the [quality gate rules](../repositories-configure/adjusting-quality-gates.mdx) for your repository. If there are no gate rules enabled for pull requests, the status is always **Up to quality standards**. -- The variation introduced by the pull request is displayed either as a **positive or negative variation**, **no variation** (represented by `=`), **not applicable** (represented by `∅`), for code quality metrics [with a gate set up](../repositories-configure/adjusting-quality-gates.md): +- The variation introduced by the pull request is displayed either as a **positive or negative variation**, **no variation** (represented by `=`), **not applicable** (represented by `∅`), for code quality metrics [with a gate set up](../repositories-configure/adjusting-quality-gates.mdx): - **Issues:** Number of new issues - **Duplication:** Changes in the number of duplicated code blocks @@ -47,16 +47,16 @@ This area displays the quality gate status for the pull request and the code qua - **Diff coverage:** Code coverage of the coverable lines affected by the pull request, or `∅` (not applicable) if there are no coverable lines - **Coverage variation:** Changes in code coverage percentage compared with the target branch - Depending on the languages being analyzed or if you haven't [set up coverage for your repository](../coverage-reporter/index.md), some metrics **may not be calculated** (represented by `-`). + Depending on the languages being analyzed or if you haven't [set up coverage for your repository](../coverage-reporter/index.mdx), some metrics **may not be calculated** (represented by `-`). :::note Learn how Codacy calculates the code quality metrics in more detail: - - [Which code quality metrics does Codacy calculate?](../faq/code-analysis/which-metrics-does-codacy-calculate.md) - - [Why does Codacy show unexpected coverage changes?](../faq/code-analysis/why-does-codacy-show-unexpected-coverage-changes.md) + - [Which code quality metrics does Codacy calculate?](../faq/code-analysis/which-metrics-does-codacy-calculate.mdx) + - [Why does Codacy show unexpected coverage changes?](../faq/code-analysis/why-does-codacy-show-unexpected-coverage-changes.mdx) ::: -- The **colors** depend on the [quality gate rules](../repositories-configure/adjusting-quality-gates.md) for your repository: +- The **colors** depend on the [quality gate rules](../repositories-configure/adjusting-quality-gates.mdx) for your repository: - **Green:** The metric passes the quality gate - **Red:** The metric fails the quality gate @@ -66,23 +66,23 @@ This area displays the quality gate status for the pull request and the code qua If you change the quality gate rules you must reanalyze the pull request to update the metrics and optionally re-upload the Coverage report if you also changed the coverage gate rules. ::: -## Issues tab {#issues-tabs} +## Issues tab \{#issues-tabs\} The **Issues** tab displays the lists of issues that the pull request creates or fixes. Use the sidebar filters to filter the list by new issues (including issues of specific severity or category), issues within a specific file, fixed issues, [potential new issues, or potential fixed issues](#possible-issues). -To [ignore or manage an issue](issues.md#ignoring-and-managing-issues), click the associated options in the menu. +To [ignore or manage an issue](issues.mdx#ignoring-and-managing-issues), click the associated options in the menu. -![Issues tab](images/pull-requests-tab-issues.png) +![Issues tab](./images/pull-requests-tab-issues.png) -### Potential issues {#possible-issues} +### Potential issues \{#possible-issues\} Codacy may label some issues as **potential**, which means that the code analysis detected these issues in lines of code that weren't changed by the analyzed pull request. This highlights potential consequences in other parts of your codebase. The following are example situations that can lead to potential issues: - The issue was either created or fixed in the current pull request, but the static code analysis tools reported the issue on a line that didn't change in the pull request. For example, if you remove the line containing the declaration of a variable you may get an "undeclared variable" issue in other lines that use that variable. -- If a file had [more than 50 issues reported by the same tool](../faq/code-analysis/does-codacy-place-limits-on-the-code-analysis.md) and you push a new commit that fixes some of these issues, Codacy will report more issues until the limit of 50 issues. These issues will be potential issues if they're outside the lines of code changed in the new commit. +- If a file had [more than 50 issues reported by the same tool](../faq/code-analysis/does-codacy-place-limits-on-the-code-analysis.mdx) and you push a new commit that fixes some of these issues, Codacy will report more issues until the limit of 50 issues. These issues will be potential issues if they're outside the lines of code changed in the new commit. :::note **If you're using GitHub** you may see [annotations](../repositories-configure/integrations/github-integration.mdx#issue-annotations) for potential issues reported under **Unchanged files with check annotations** on the **Files changed** tab of your pull requests. @@ -91,7 +91,7 @@ This happens when Codacy reports potential issues in files that weren't changed ::: -## Duplication tab {#duplication-tabs} +## Duplication tab \{#duplication-tabs\} The **Duplication** tab displays the lists of clones (duplicated code blocks) that the pull request adds or fixes. You can click a clone to expand it and inspect the code. ![Duplication tabs](./images/pull-requests-tab-duplication.png) @@ -101,7 +101,7 @@ The **Duplication** tab displays the lists of clones (duplicated code blocks) th The **Complexity** tab displays the complexity changes introduced by the pull request. Use the sidebar filters to filter the list by high increase (4 or more), low increase (1 to 3), or improvement (less than 0). :::note -For more information, see [how Codacy calculates cyclomatic complexity](../faq/code-analysis/which-metrics-does-codacy-calculate.md#complexity). +For more information, see [how Codacy calculates cyclomatic complexity](../faq/code-analysis/which-metrics-does-codacy-calculate.mdx#complexity). ::: ![Complexity tab](./images/pull-requests-tab-complexity.png) @@ -119,24 +119,24 @@ The **Diff** tab displays the code changes and issues introduced by the pull req Lines with issues are highlighted according to issue severity and include a pill label with the issue type and count. Hover over the pill label to view more details or navigate to the issues. - +{/**/} ![Diff tab](images/pull-requests-tab-diff.png) - +{/**/} ## Files tab -The **Files** tab displays the variation of the following [code quality metrics](../faq/code-analysis/which-metrics-does-codacy-calculate.md) that the pull request introduces to the files in your repository, displayed either as a **positive or negative variation**, or **no variation** (represented by `=`): +The **Files** tab displays the variation of the following [code quality metrics](../faq/code-analysis/which-metrics-does-codacy-calculate.mdx) that the pull request introduces to the files in your repository, displayed either as a **positive or negative variation**, or **no variation** (represented by `=`): - **New issues:** Number of new issues - **Duplication:** Changes in the number of duplicated code blocks - **Complexity:** Changes in code complexity - **Coverage variation:** Changes in code coverage percentage compared with the target branch -Depending on the languages being analyzed or if you haven't [set up coverage for your repository](../coverage-reporter/index.md), some metrics **may not be calculated** (represented by `-`). +Depending on the languages being analyzed or if you haven't [set up coverage for your repository](../coverage-reporter/index.mdx), some metrics **may not be calculated** (represented by `-`). - +{/**/} ![Files tab](images/pull-requests-tab-files.png) - +{/**/} ## Commits tab @@ -184,4 +184,4 @@ In this case, Codacy generates a patch that enables you to solve all resolvable ## See also -- [Which metrics does Codacy calculate?](../faq/code-analysis/which-metrics-does-codacy-calculate.md) +- [Which metrics does Codacy calculate?](../faq/code-analysis/which-metrics-does-codacy-calculate.mdx) diff --git a/docusaurus/docs/repositories/repository-dashboard.mdx b/docusaurus/docs/repositories/repository-dashboard.mdx index a755e503af..8d96b9a3f4 100644 --- a/docusaurus/docs/repositories/repository-dashboard.mdx +++ b/docusaurus/docs/repositories/repository-dashboard.mdx @@ -6,7 +6,7 @@ import DashboardApiReportNote from './../_includes/DashboardApiReportNote.mdx' The **Repository Dashboard** provides an overview of the repository code quality and items that require your attention. -To access your Repository Dashboard, select a repository from the [Repositories list](../organizations/managing-repositories.md) and select **Dashboard** on the left navigation sidebar. +To access your Repository Dashboard, select a repository from the [Repositories list](../organizations/managing-repositories.mdx) and select **Dashboard** on the left navigation sidebar. :::tip You can share the URL of the Repository Dashboard for your **public repositories** to allow other people to see your repository code quality metrics, even if they aren't registered on Codacy. @@ -16,7 +16,7 @@ You can share the URL of the Repository Dashboard for your **public repositories The top of the Repository Dashboard displays: -- The name and [code quality grade](../faq/code-analysis/which-metrics-does-codacy-calculate.md#grade) of the repository +- The name and [code quality grade](../faq/code-analysis/which-metrics-does-codacy-calculate.mdx#grade) of the repository - A drop-down list that selects which branch of your repository to display on the dashboard On the Repository Dashboard you have the following areas to help you monitor your repository: @@ -32,7 +32,7 @@ The following sections provide a detailed overview of each dashboard area. ## Evolution chart -The **Evolution** chart displays the evolution of the repository code quality regarding [issues](../faq/code-analysis/which-metrics-does-codacy-calculate.md#issues), [complex files](../faq/code-analysis/which-metrics-does-codacy-calculate.md#complexity), [duplication](../faq/code-analysis/which-metrics-does-codacy-calculate.md#duplication), and [code coverage](../faq/code-analysis/which-metrics-does-codacy-calculate.md#code-coverage). Click on **Last 3 months**, **Last 31 days**, or **Last 7 days** to select the time interval of the historical data to display on the chart. +The **Evolution** chart displays the evolution of the repository code quality regarding [issues](../faq/code-analysis/which-metrics-does-codacy-calculate.mdx#issues), [complex files](../faq/code-analysis/which-metrics-does-codacy-calculate.mdx#complexity), [duplication](../faq/code-analysis/which-metrics-does-codacy-calculate.mdx#duplication), and [code coverage](../faq/code-analysis/which-metrics-does-codacy-calculate.mdx#code-coverage). Click on **Last 3 months**, **Last 31 days**, or **Last 7 days** to select the time interval of the historical data to display on the chart. Each tab displays the following information for the corresponding metric: @@ -44,7 +44,7 @@ Each tab displays the following information for the corresponding metric: The coverage tab only displays a value if Codacy received coverage data for the most recent commit. This is because one commit can easily change the size or number of files on the repository, or even remove some files that had coverage information. ::: -The chart also displays the **trendline** based on the past behavior and the [quality goals](../repositories-configure/adjusting-quality-goals.md) defined for the repository. +The chart also displays the **trendline** based on the past behavior and the [quality goals](../repositories-configure/adjusting-quality-goals.mdx) defined for the repository. ![Evolution chart](images/repository-dashboard-quality-evolution.png) @@ -54,22 +54,22 @@ The **Issues breakdown** area displays the total number of issues found on the s Click **See all issues** to see the full [list of issues](issues.md) found, or click a category to see the issues in that category. -If Codacy detects code patterns that have suggested fixes, a **Fix issues** button appears below the total issue count. Click this button to open a modal with a patch that addresses all resolvable issues, and follow the [same procedure outlined on the Issues page](./issues.md#fixing-issues-automatically). +If Codacy detects code patterns that have suggested fixes, a **Fix issues** button appears below the total issue count. Click this button to open a modal with a patch that addresses all resolvable issues, and follow the [same procedure outlined on the Issues page](./issues.mdx#fixing-issues-automatically). ![Issues breakdown](images/repository-dashboard-issues-breakdown.png) ## Coverage -The **Coverage** area displays the percentage of lines of code on the selected branch that are covered by tests versus the [coverage goal](../repositories-configure/adjusting-quality-goals.md) defined in the quality settings of the repository, as well as the number of files: +The **Coverage** area displays the percentage of lines of code on the selected branch that are covered by tests versus the [coverage goal](../repositories-configure/adjusting-quality-goals.mdx) defined in the quality settings of the repository, as well as the number of files: - Without coverage - With coverage not up to standards (based on the coverage goal) - With coverage up to standards (based on the coverage goal) -Click **See all files** to open the [list of files](files.md) in the repository. +Click **See all files** to open the [list of files](./files.mdx) in the repository. :::tip -If you don't have coverage set up for your repository yet, the Coverage area provides you with instructions on [how to add coverage for your repository](../coverage-reporter/index.md). +If you don't have coverage set up for your repository yet, the Coverage area provides you with instructions on [how to add coverage for your repository](../coverage-reporter/index.mdx). ::: ![Coverage](images/repository-dashboard-coverage.png) @@ -79,17 +79,17 @@ If you don't have coverage set up for your repository yet, the Coverage area pro The **Open pull requests** area displays the last updated pull requests and the split between the status of all open pull requests in your repository: - **Up to standards:** Pull requests that meet the minimum quality levels -- **Not up to standards:** Pull requests that failed to meet at least one of the [quality gate rules defined for the repository](../repositories-configure/adjusting-quality-gates.md) +- **Not up to standards:** Pull requests that failed to meet at least one of the [quality gate rules defined for the repository](../repositories-configure/adjusting-quality-gates.mdx) - **Analyzing:** Pull requests currently being analyzed by Codacy Click a bar segment to display only pull requests with the corresponding status. -To see the details of pull requests, click a pull request from the list or click **See all pull requests** to open the [list of pull requests](pull-requests.mdx) in the repository. +To see the details of pull requests, click a pull request from the list or click **See all pull requests** to open the [list of pull requests](./pull-requests.mdx) in the repository. ![Open pull requests](images/repository-dashboard-open-pull-requests.png) ## See also -- [Which metrics does Codacy calculate?](../faq/code-analysis/which-metrics-does-codacy-calculate.md) -- [Using the Codacy API to obtain current issues in repositories](../codacy-api/examples/obtaining-current-issues-in-repositories.md) -- [Using the Codacy API to obtain code quality metrics for files](../codacy-api/examples/obtaining-code-quality-metrics-for-files.md) +- [Which metrics does Codacy calculate?](../faq/code-analysis/which-metrics-does-codacy-calculate.mdx) +- [Using the Codacy API to obtain current issues in repositories](../codacy-api/examples/obtaining-current-issues-in-repositories.mdx) +- [Using the Codacy API to obtain code quality metrics for files](../codacy-api/examples/obtaining-code-quality-metrics-for-files.mdx) From c5f8418e9a814bb1330cfd80019465eb645b528c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A1udia?= Date: Fri, 2 Jan 2026 11:08:05 +0000 Subject: [PATCH 12/19] repositories-configure/ --- ...y-gates.md => adjusting-quality-gates.mdx} | 14 +++++----- ...y-goals.md => adjusting-quality-goals.mdx} | 4 +-- .../codacy-configuration-file.mdx | 28 +++++++++---------- .../configuring-code-patterns.mdx | 26 ++++++++--------- .../repositories-configure/ignoring-files.mdx | 12 ++++---- .../integrations/bitbucket-integration.mdx | 6 ++-- .../integrations/github-integration.mdx | 8 +++--- .../integrations/gitlab-integration.mdx | 10 +++---- ...-commit-hooks.md => post-commit-hooks.mdx} | 0 .../docs/repositories-configure/languages.mdx | 4 +-- ...nt-side-tools.md => client-side-tools.mdx} | 8 +++--- .../local-analysis/running-aligncheck.mdx | 2 +- .../local-analysis/running-dartanalyzer.mdx | 2 +- .../local-analysis/running-deadcode.mdx | 2 +- .../local-analysis/running-eslint.mdx | 2 +- .../local-analysis/running-spotbugs.mdx | 2 +- .../managing-branches.mdx | 8 +++--- ...sitory.md => removing-your-repository.mdx} | 4 +-- ...ing-submodules.md => using-submodules.mdx} | 8 +++--- .../{special-thanks.md => special-thanks.mdx} | 0 20 files changed, 75 insertions(+), 75 deletions(-) rename docusaurus/docs/repositories-configure/{adjusting-quality-gates.md => adjusting-quality-gates.mdx} (77%) rename docusaurus/docs/repositories-configure/{adjusting-quality-goals.md => adjusting-quality-goals.mdx} (86%) rename docusaurus/docs/repositories-configure/integrations/{post-commit-hooks.md => post-commit-hooks.mdx} (100%) rename docusaurus/docs/repositories-configure/local-analysis/{client-side-tools.md => client-side-tools.mdx} (96%) rename docusaurus/docs/repositories-configure/{removing-your-repository.md => removing-your-repository.mdx} (88%) rename docusaurus/docs/repositories-configure/{using-submodules.md => using-submodules.mdx} (93%) rename docusaurus/docs/{special-thanks.md => special-thanks.mdx} (100%) diff --git a/docusaurus/docs/repositories-configure/adjusting-quality-gates.md b/docusaurus/docs/repositories-configure/adjusting-quality-gates.mdx similarity index 77% rename from docusaurus/docs/repositories-configure/adjusting-quality-gates.md rename to docusaurus/docs/repositories-configure/adjusting-quality-gates.mdx index 8296679dd5..2cb83b071e 100644 --- a/docusaurus/docs/repositories-configure/adjusting-quality-gates.md +++ b/docusaurus/docs/repositories-configure/adjusting-quality-gates.mdx @@ -5,7 +5,7 @@ title: Adjusting quality gates The **quality gates** of your repository configure when Codacy reports your pull requests and commits as not up to standards. -When you add your repository to Codacy, it automatically follows the [default gate policy for your organization](../organizations/using-gate-policies.md). If you want to set different quality gates for the repository, [create a new organization gate policy](../organizations/using-gate-policies.md#creating) to apply to the repository. +When you add your repository to Codacy, it automatically follows the [default gate policy for your organization](../organizations/using-gate-policies). If you want to set different quality gates for the repository, [create a new organization gate policy](../organizations/using-gate-policies#creating) to apply to the repository. :::note Although you can define custom quality gate settings for specific repositories, we recommend that you always [use a gate policy](../organizations/using-gate-policies.md) defined by your organization to enforce consistent rules across multiple repositories. @@ -14,7 +14,7 @@ Although you can define custom quality gate settings for specific repositories, Depending on the result of applying the quality gate rules, Codacy updates the color of the metrics on the [pull request or commit quality overview](../repositories/pull-requests.mdx#quality-overview) and reports the corresponding pull request status on your Git provider, if enabled. :::tip -[Integrate Codacy with your Git workflow](../getting-started/integrating-codacy-with-your-git-workflow.md) to report the pull request status to your Git provider and optionally block merging pull requests that aren't up to standards. +[Integrate Codacy with your Git workflow](../getting-started/integrating-codacy-with-your-git-workflow) to report the pull request status to your Git provider and optionally block merging pull requests that aren't up to standards. ::: To access the quality gates, open your repository **Settings**, tab **Gates**. @@ -28,15 +28,15 @@ To access the quality gates, open your repository **Settings**, tab **Gates**. - **Coverage variation is under:** Pull requests or commits are marked not up to standards if they introduce a variation to coverage lower than the set value. :::tip - **Set this gate to -0.10% or lower.** This will ensure that developers have a coverage drop margin so they aren't blocked [while performing some types of code refactors](../faq/code-analysis/why-does-codacy-show-unexpected-coverage-changes.md#example-pull-request-coverage-variation-is-negative-but-no-files-have-coverage-variation) + **Set this gate to -0.10% or lower.** This will ensure that developers have a coverage drop margin so they aren't blocked [while performing some types of code refactors](../faq/code-analysis/why-does-codacy-show-unexpected-coverage-changes#example-pull-request-coverage-variation-is-negative-but-no-files-have-coverage-variation) To ensure that the changes in each pull request have a minimum level of coverage, use the gate **Diff coverage is under** instead. ::: -- **Diff coverage is under:** Pull requests are marked not up to standards if the diff coverage of the pull request is lower than the set value or `∅` ([not applicable](../faq/code-analysis/which-metrics-does-codacy-calculate.md#code-coverage)). This rule is only available for pull requests. +- **Diff coverage is under:** Pull requests are marked not up to standards if the diff coverage of the pull request is lower than the set value or `∅` ([not applicable](../faq/code-analysis/which-metrics-does-codacy-calculate#code-coverage)). This rule is only available for pull requests. ## See also -- [Which metrics does Codacy calculate?](../faq/code-analysis/which-metrics-does-codacy-calculate.md) -- [Why does Codacy show unexpected coverage changes?](../faq/code-analysis/why-does-codacy-show-unexpected-coverage-changes.md) -- [Integrating Codacy with your Git workflow](../getting-started/integrating-codacy-with-your-git-workflow.md) +- [Which metrics does Codacy calculate?](../faq/code-analysis/which-metrics-does-codacy-calculate) +- [Why does Codacy show unexpected coverage changes?](../faq/code-analysis/why-does-codacy-show-unexpected-coverage-changes) +- [Integrating Codacy with your Git workflow](../getting-started/integrating-codacy-with-your-git-workflow) diff --git a/docusaurus/docs/repositories-configure/adjusting-quality-goals.md b/docusaurus/docs/repositories-configure/adjusting-quality-goals.mdx similarity index 86% rename from docusaurus/docs/repositories-configure/adjusting-quality-goals.md rename to docusaurus/docs/repositories-configure/adjusting-quality-goals.mdx index 1f7eae4894..ea35446f57 100644 --- a/docusaurus/docs/repositories-configure/adjusting-quality-goals.md +++ b/docusaurus/docs/repositories-configure/adjusting-quality-goals.mdx @@ -5,7 +5,7 @@ title: Adjusting quality goals Adjust the **quality goals** to help you monitor the progress of the code quality in your repository dashboard, and configure which files Codacy considers complex or duplicated. -Codacy displays the quality goals as dashed lines on the [quality evolution chart](../repositories/repository-dashboard.md#evolution-chart) to help you monitor the progress and overall quality status of your repository. +Codacy displays the quality goals as dashed lines on the [quality evolution chart](../repositories/repository-dashboard#evolution-chart) to help you monitor the progress and overall quality status of your repository. To access the quality goals, open your repository **Settings**, tab **Goals**. The following screenshot displays the default configuration values: @@ -20,4 +20,4 @@ To access the quality goals, open your repository **Settings**, tab **Goals**. T ## See also -- [Which metrics does Codacy calculate?](../faq/code-analysis/which-metrics-does-codacy-calculate.md) +- [Which metrics does Codacy calculate?](../faq/code-analysis/which-metrics-does-codacy-calculate) diff --git a/docusaurus/docs/repositories-configure/codacy-configuration-file.mdx b/docusaurus/docs/repositories-configure/codacy-configuration-file.mdx index 252cf813ee..eeb81c7a1f 100644 --- a/docusaurus/docs/repositories-configure/codacy-configuration-file.mdx +++ b/docusaurus/docs/repositories-configure/codacy-configuration-file.mdx @@ -23,7 +23,7 @@ Codacy supports configuring certain advanced features through a configuration fi ## Using a Codacy configuration file :::caution -- If your repository has a Codacy configuration file, the [Ignored files settings](ignoring-files.md) defined on the Codacy UI don't apply and you must [ignore files using the configuration file](#syntax-for-ignoring-files) instead. +- If your repository has a Codacy configuration file, the [Ignored files settings](./ignoring-files) defined on the Codacy UI don't apply and you must [ignore files using the configuration file](#syntax-for-ignoring-files) instead. - Codacy always uses the configuration file **in the default branch**. New settings added to the Codacy configuration file by a pull request are also considered for the pull request analysis, but the existing configuration in the default branch takes precedence. For example, if a pull request removes an ignored path from the Codacy configuration file, any matching files will stay ignored until that pull request is merged into the default branch. @@ -38,7 +38,7 @@ To use a Codacy configuration file: 1. Add your settings to the configuration file based on the example template below. - If you defined any [Ignored files settings](ignoring-files.md) for the repository, make sure you [add those settings](#syntax-for-ignoring-files) to the Codacy configuration file. + If you defined any [Ignored files settings](./ignoring-files) for the repository, make sure you [add those settings](#syntax-for-ignoring-files) to the Codacy configuration file. ```yaml --- @@ -82,7 +82,7 @@ To use a Codacy configuration file: ``` ## Ignoring files using a Codacy configuration file \{#ignore-files\} -The Codacy configuration file gives you more flexibility in [ignoring or excluding files](ignoring-files.md) from the Codacy analysis. +The Codacy configuration file gives you more flexibility in [ignoring or excluding files](./ignoring-files) from the Codacy analysis. :::note @@ -155,7 +155,7 @@ In this example, while all directories matching `lib*` are excluded, `lib-a` is ## Adjusting tool configurations \{#tool-conf\} :::note -The Codacy configuration file lets you [configure tools](#tool-specific-configurations), but you can't enable or disable them. A tool can only be enabled or disabled on the [Code patterns page](configuring-code-patterns.md) by users with the [necessary permissions](../organizations/roles-and-permissions-for-organizations.md). +The Codacy configuration file lets you [configure tools](#tool-specific-configurations), but you can't enable or disable them. A tool can only be enabled or disabled on the [Code patterns page](./configuring-code-patterns) by users with the [necessary permissions](../organizations/roles-and-permissions-for-organizations). ::: ### Which tools can be configured and which name should I use? @@ -170,7 +170,7 @@ The Codacy configuration file lets you [configure tools](#tool-specific-configur docs/repositories-configure/codacy-configuration-file.md (list of tool short names to use on the Codacy configuration file) -->*/} -You can use the Codacy configuration file to configure all tools supported by Codacy except the [client-side tools](local-analysis/client-side-tools.md). +You can use the Codacy configuration file to configure all tools supported by Codacy except the [client-side tools](./local-analysis/client-side-tools). The following are the tool names that must be used in the Codacy configuration file: @@ -221,12 +221,12 @@ tsqllint The following names are **deprecated** and shouldn't be used, although they're still accepted in the Codacy configuration file: -- `bundleraudit` - The tool **bundler-audit** [is deprecated](../release-notes/cloud/cloud-2023-10-13-bundler-audit-deprecation.md). If you are using **Semprep** or **Trivy** instead, use the names `trivy` or `semgrep`. -- `csslint` - The tool **CSSLint** [is deprecated](../release-notes/cloud/cloud-2023-10-25-csslint-jshint-fauxpas-tailor-tslint-deprecation.md). If you are using **Stylelint** instead, use the name `stylelint`. +- `bundleraudit` - The tool **bundler-audit** [is deprecated](../release-notes/cloud/cloud-2023-10-13-bundler-audit-deprecation). If you are using **Semprep** or **Trivy** instead, use the names `trivy` or `semgrep`. +- `csslint` - The tool **CSSLint** [is deprecated](../release-notes/cloud/cloud-2023-10-25-csslint-jshint-fauxpas-tailor-tslint-deprecation). If you are using **Stylelint** instead, use the name `stylelint`. - `eslint` - Use the name `eslint-8` for **ESLint**. -- `jshint`, `tslint` - The tools **JSHint** and **TSLint** [are deprecated](../release-notes/cloud/cloud-2023-10-25-csslint-jshint-fauxpas-tailor-tslint-deprecation.md). If you are using **ESLint** instead, use the name `eslint-8`. +- `jshint`, `tslint` - The tools **JSHint** and **TSLint** [are deprecated](../release-notes/cloud/cloud-2023-10-25-csslint-jshint-fauxpas-tailor-tslint-deprecation). If you are using **ESLint** instead, use the name `eslint-8`. - `pylint` - Use the name `pylintpython3` for **Pylint**. -- `tailor` - The tool **Tailor** [is deprecated](../release-notes/cloud/cloud-2023-10-25-csslint-jshint-fauxpas-tailor-tslint-deprecation.md). If you are using **SwiftLint** instead, use the name `swiftlint`. +- `tailor` - The tool **Tailor** [is deprecated](../release-notes/cloud/cloud-2023-10-25-csslint-jshint-fauxpas-tailor-tslint-deprecation). If you are using **SwiftLint** instead, use the name `swiftlint`. ### Tool-specific configurations @@ -268,7 +268,7 @@ engines: ``` :::tip -If you're using Python 3.4.\* or later as your programming language, disable the tool **Pylint (legacy)** and enable the tool **Pylint** on your repository [Code patterns page](configuring-code-patterns.md) instead. For more information, see [What's New in Pylint 2.0](https://pylint.pycqa.org/en/latest/whatsnew/2/2.0/index.html). +If you're using Python 3.4.\* or later as your programming language, disable the tool **Pylint (legacy)** and enable the tool **Pylint** on your repository [Code patterns page](./configuring-code-patterns) instead. For more information, see [What's New in Pylint 2.0](https://pylint.pycqa.org/en/latest/whatsnew/2/2.0/index.html). ::: #### PMD CPD (Duplication) @@ -279,7 +279,7 @@ If you're using Python 3.4.\* or later as your programming language, disable the https://github.com/codacy/codacy-duplication-pmdcpd/blob/c799cb3a80d1f3b3a8eb9868f63abee13e3e81c4/src/main/scala/com/codacy/duplication/pmd/Cpd.scala#L128 -->*/} -Codacy uses [PMD's Copy/Paste Detector (CPD)](https://docs.pmd-code.org/latest/) to identify duplicated blocks of code [on the supported languages](../getting-started/supported-languages-and-tools.md). +Codacy uses [PMD's Copy/Paste Detector (CPD)](https://docs.pmd-code.org/latest/) to identify duplicated blocks of code [on the supported languages](../getting-started/supported-languages-and-tools). By default, Codacy only reports duplicate code blocks that have the following minimum token length, depending on the language: @@ -325,11 +325,11 @@ engines: You can use a Codacy configuration file to manage the languages that Codacy analyzes in your repository. :::note -Codacy applies the language settings from the Codacy configuration file as well as any settings defined [in the Codacy UI](languages.md). +Codacy applies the language settings from the Codacy configuration file as well as any settings defined [in the Codacy UI](./languages). ::: ### Adding custom file extensions \{#file-extensions\} -To [add custom file extensions to languages](languages.md#configuring-file-extensions) using a Codacy configuration file, you must define one or more extensions under `languages..extensions`. Keep in mind that some tools might not work out of the box with those extensions. +To [add custom file extensions to languages](./languages#configuring-file-extensions) using a Codacy configuration file, you must define one or more extensions under `languages..extensions`. Keep in mind that some tools might not work out of the box with those extensions. For example: @@ -342,7 +342,7 @@ languages: ``` ### Disabling analysis of a language \{#disable-language\} -To [disable the analysis of a specific language](languages.md#disable-language) using a Codacy configuration file, set `languages..enabled` to `false`. The analysis is enabled by default for all languages. +To [disable the analysis of a specific language](./languages#disable-language) using a Codacy configuration file, set `languages..enabled` to `false`. The analysis is enabled by default for all languages. For example: diff --git a/docusaurus/docs/repositories-configure/configuring-code-patterns.mdx b/docusaurus/docs/repositories-configure/configuring-code-patterns.mdx index e15cbfa3a4..51de161b29 100644 --- a/docusaurus/docs/repositories-configure/configuring-code-patterns.mdx +++ b/docusaurus/docs/repositories-configure/configuring-code-patterns.mdx @@ -21,13 +21,13 @@ To configure the tools and code patterns for a repository using the Codacy UI: 1. Open your repository **Code patterns** page. - ![Code patterns page](images/code-patterns.png) + ![Code patterns page](./images/code-patterns.png) 1. Enable or disable the tools that Codacy will use to analyze the repository. - ![Toggling tools](images/code-patterns-toggle-tools.png) + ![Toggling tools](./images/code-patterns-toggle-tools.png) -1. Select a tool to enable or disable its code patterns. To make it easier to find relevant patterns, use the filters above the pattern list. You can filter by [issue category](../faq/code-analysis/which-metrics-does-codacy-calculate.md#issues), status, severity level, or display only recommended code patterns. +1. Select a tool to enable or disable its code patterns. To make it easier to find relevant patterns, use the filters above the pattern list. You can filter by [issue category](../faq/code-analysis/which-metrics-does-codacy-calculate#issues), status, severity level, or display only recommended code patterns. To see an explanation of the issues that a pattern detects and how to fix them, click the respective dropdown arrow. @@ -37,9 +37,9 @@ To configure the tools and code patterns for a repository using the Codacy UI: - Codacy displays the tag **New** for one month next to the name of newly added code patterns. ::: - ![Configuring code patterns](images/code-patterns-configure.png) + ![Configuring code patterns](./images/code-patterns-configure.png) -1. Optionally, to take the changes into account immediately, [reanalyze the repository manually](../faq/repositories/how-do-i-reanalyze-my-repository.md). Otherwise, Codacy will use the updated configuration when analyzing new commits and pull requests. +1. Optionally, to take the changes into account immediately, [reanalyze the repository manually](../faq/repositories/how-do-i-reanalyze-my-repository). Otherwise, Codacy will use the updated configuration when analyzing new commits and pull requests. ## Discover code patterns across all tools \{#discover-code-patterns-across-all-tools\} To discover code patterns across all tools, click **Discover patterns** at the top of the **Tools** list. @@ -49,13 +49,13 @@ Use the input field to search for patterns by name or description. You can also You can also expand your search to include patterns from all tools, even if the tool is not enabled for the repository. ## Customizing applied coding standards \{#customizing-applied-coding-standards\} -To apply or edit a repository's [coding standards](../organizations/using-coding-standards.md), click **Customize** in the **Following ...** section at the top of the **Code patterns** page. +To apply or edit a repository's [coding standards](../organizations/using-coding-standards), click **Customize** in the **Following ...** section at the top of the **Code patterns** page. -![Customize applied coding standards](images/code-patterns-cs-customize.png) +![Customize applied coding standards](./images/code-patterns-cs-customize.png) Select the coding standards that you want to follow or stop following and click **Apply**. -![Customize applied coding standards](images/code-patterns-cs-customize-modal.png) +![Customize applied coding standards](./images/code-patterns-cs-customize-modal.png) ## Customizing patterns when following coding standards \{#customizing-patterns-following-standards\} @@ -74,9 +74,9 @@ You can add extra tools and patterns, if these are not enabled by any applied co -->*/} :::note -- After activating a configuration file for a tool, Codacy uses that configuration file even if you [exclude it from Codacy analysis](ignoring-files.md). +- After activating a configuration file for a tool, Codacy uses that configuration file even if you [exclude it from Codacy analysis](./ignoring-files). -- When [using a tool configuration file alongside a coding standard](../organizations/using-coding-standards.md#using-with-tool-configuration), the configuration file controls the code patterns, while the coding standard controls whether the tool is enabled or disabled. +- When [using a tool configuration file alongside a coding standard](../organizations/using-coding-standards#using-with-tool-configuration), the configuration file controls the code patterns, while the coding standard controls whether the tool is enabled or disabled. ::: @@ -84,7 +84,7 @@ Codacy supports configuration files for several static analysis tools to help yo To use a configuration file for a static analysis tool: -1. Push the configuration file to the root of the [default Codacy branch](managing-branches.mdx). +1. Push the configuration file to the root of the [default Codacy branch](./managing-branches.mdx). 1. Open the repository **Code patterns** page, select the tool of interest, and activate the toggle to use a configuration file. @@ -96,7 +96,7 @@ To use a configuration file for a static analysis tool: - For performance reasons, when you update pattern settings using a configuration file, Codacy may display outdated messages for issues identified previously by those patterns. ::: - ![Using a configuration file](images/code-patterns-config-file.png) + ![Using a configuration file](./images/code-patterns-config-file.png) The table below lists the configuration file names that Codacy detects and supports for each tool: @@ -324,5 +324,5 @@ Codacy doesn't support configuration files for the following tools: ## See also -- [Applying a coding standard across multiple repositories](../organizations/using-coding-standards.md) +- [Applying a coding standard across multiple repositories](../organizations/using-coding-standards) - [How to implement Google JavaScript style guide with Codacy](https://blog.codacy.com/implement-google-javascript-style-guide-with-codacy/) diff --git a/docusaurus/docs/repositories-configure/ignoring-files.mdx b/docusaurus/docs/repositories-configure/ignoring-files.mdx index de30f0af33..e907f2239e 100644 --- a/docusaurus/docs/repositories-configure/ignoring-files.mdx +++ b/docusaurus/docs/repositories-configure/ignoring-files.mdx @@ -12,29 +12,29 @@ In some situations, you may want to ignore or exclude files from the Codacy anal To exclude files from your repository analysis open your repository **Settings**, tab **Ignored Files**, and select the files you want to ignore. This view only shows the files on your main branch. -![Ignored files](images/ignored-files.png) +![Ignored files](./images/ignored-files.png) :::note - See below the files that Codacy [ignores by default](#default-ignored-files). -- You can also ignore files using your own [tool configuration files](configuring-code-patterns.md#using-your-own-tool-configuration-files), although this depends on the option being supported by each tool. +- You can also ignore files using your own [tool configuration files](./configuring-code-patterns#using-your-own-tool-configuration-files), although this depends on the option being supported by each tool. - - When excluding files from **Duplication** analysis, you must state the **entire path** to the files. Unlike quality analysis, wildcards will not work, resulting in files not being excluded. ::: -If you need more flexibility in ignoring files, use a Codacy configuration file to [define a custom list of file paths to exclude](codacy-configuration-file.md#syntax-for-ignoring-files). +If you need more flexibility in ignoring files, use a Codacy configuration file to [define a custom list of file paths to exclude](codacy-configuration-file#syntax-for-ignoring-files). :::caution -If your repository has a [Codacy configuration file](codacy-configuration-file.md), the **Ignored files** settings defined on the Codacy UI don't apply and you must [ignore files using the configuration file](codacy-configuration-file.md#ignore-files) instead. +If your repository has a [Codacy configuration file](./codacy-configuration-file), the **Ignored files** settings defined on the Codacy UI don't apply and you must [ignore files using the configuration file](./codacy-configuration-file#ignore-files) instead. ::: -![Ignored files](images/ignored-files-configuration-file.png) +![Ignored files](./images/ignored-files-configuration-file.png) ## Default ignored files -By default, Codacy ignores all the files that match the regular expressions below. If you need to analyze files that match these regular expressions, use a Codacy configuration file to [define a custom list of file paths to include](./codacy-configuration-file.md#include-files). +By default, Codacy ignores all the files that match the regular expressions below. If you need to analyze files that match these regular expressions, use a Codacy configuration file to [define a custom list of file paths to include](./codacy-configuration-file#include-files). ```text .*[\.-]min\.css diff --git a/docusaurus/docs/repositories-configure/integrations/bitbucket-integration.mdx b/docusaurus/docs/repositories-configure/integrations/bitbucket-integration.mdx index d812d8ebf2..eecaa3334b 100644 --- a/docusaurus/docs/repositories-configure/integrations/bitbucket-integration.mdx +++ b/docusaurus/docs/repositories-configure/integrations/bitbucket-integration.mdx @@ -26,7 +26,7 @@ Depending on the options that you enable, Codacy will automatically update pull ### Status checks \{#pull-request-status\} -Adds a report to your pull requests showing whether your pull requests and coverage are up to standards or not as configured on the [quality gate rules](../../repositories-configure/adjusting-quality-gates.md) for your repository. You can then optionally [block merging pull requests that aren't up to standards](../../getting-started/integrating-codacy-with-your-git-workflow.md#blocking-pull-requests). +Adds a report to your pull requests showing whether your pull requests and coverage are up to standards or not as configured on the [quality gate rules](../../repositories-configure/adjusting-quality-gates) for your repository. You can then optionally [block merging pull requests that aren't up to standards](../../getting-started/integrating-codacy-with-your-git-workflow#blocking-pull-requests). @@ -56,7 +56,7 @@ Adds AI-enhanced comments with insights to help you fix identified issues. ## Refreshing the Bitbucket integration \{#refreshing\} If the user who added the repository to Codacy loses access to the repository, which may happen when the user leaves the team or the organization, Codacy won't be able to create comments on pull requests. -In this situation, another user with [administrator access to the repository](../../organizations/roles-and-permissions-for-organizations.md#permissions-for-bitbucket) needs to refresh the Bitbucket integration: +In this situation, another user with [administrator access to the repository](../../organizations/roles-and-permissions-for-organizations#permissions-for-bitbucket) needs to refresh the Bitbucket integration: @@ -70,4 +70,4 @@ After refreshing the integration, Codacy will use the logged in Bitbucket user t ## See also -- [Integrating Codacy with your Git workflow](../../getting-started/integrating-codacy-with-your-git-workflow.md) +- [Integrating Codacy with your Git workflow](../../getting-started/integrating-codacy-with-your-git-workflow) diff --git a/docusaurus/docs/repositories-configure/integrations/github-integration.mdx b/docusaurus/docs/repositories-configure/integrations/github-integration.mdx index 477b6e71a2..b890b8fba0 100644 --- a/docusaurus/docs/repositories-configure/integrations/github-integration.mdx +++ b/docusaurus/docs/repositories-configure/integrations/github-integration.mdx @@ -10,7 +10,7 @@ import Paid from '../../_includes/Paid.mdx' The GitHub integration incorporates Codacy on your existing Git provider workflows by reporting issues and the analysis status directly on your pull requests. -When you add a new repository, Codacy sets the GitHub integration using the [default settings for your organization](../../organizations/integrations/default-git-provider-integration-settings.md). You can then [customize the settings](#configuring) for the repository. +When you add a new repository, Codacy sets the GitHub integration using the [default settings for your organization](../../organizations/integrations/default-git-provider-integration-settings). You can then [customize the settings](#configuring) for the repository. ![GitHub integration](images/github-integration.png) @@ -23,7 +23,7 @@ Depending on the options that you enable, Codacy will automatically update pull ### Status checks -Adds a report to your pull requests showing whether your pull requests and coverage are up to standards or not as configured on the [quality gate rules](../../repositories-configure/adjusting-quality-gates.md) for your repository. You can then optionally [block merging pull requests that aren't up to standards](../../getting-started/integrating-codacy-with-your-git-workflow.md#blocking-pull-requests). +Adds a report to your pull requests showing whether your pull requests and coverage are up to standards or not as configured on the [quality gate rules](../../repositories-configure/adjusting-quality-gates) for your repository. You can then optionally [block merging pull requests that aren't up to standards](../../getting-started/integrating-codacy-with-your-git-workflow#blocking-pull-requests). @@ -67,7 +67,7 @@ Adds a pull request comment showing an overall view of the coverage metrics for When there are new coverage results, Codacy updates the last coverage summary comment if it's included in the last 5 comments of the pull request. Otherwise, Codacy creates a new comment. :::caution -**To get coverage summaries** you must also [add coverage to your repository](../../coverage-reporter/index.md). +**To get coverage summaries** you must also [add coverage to your repository](../../coverage-reporter/index). ::: ![Coverage summary on GitHub](images/github-integration-coverage-summary.png) @@ -97,4 +97,4 @@ Adds AI-enhanced comments, providing insights and ready-to-commit AI-generated f ## See also -- [Integrating Codacy with your Git workflow](../../getting-started/integrating-codacy-with-your-git-workflow.md) +- [Integrating Codacy with your Git workflow](../../getting-started/integrating-codacy-with-your-git-workflow) diff --git a/docusaurus/docs/repositories-configure/integrations/gitlab-integration.mdx b/docusaurus/docs/repositories-configure/integrations/gitlab-integration.mdx index acec4c5c7e..489c79b76c 100644 --- a/docusaurus/docs/repositories-configure/integrations/gitlab-integration.mdx +++ b/docusaurus/docs/repositories-configure/integrations/gitlab-integration.mdx @@ -10,7 +10,7 @@ import ServiceAccountIntegration from '../../_includes/ServiceAccountIntegration The GitLab integration incorporates Codacy on your existing Git provider workflows by reporting issues and the analysis status directly on your merge requests. -When you add a new repository, Codacy sets the GitLab integration using the [default settings for your organization](../../organizations/integrations/default-git-provider-integration-settings.md). You can then [customize the settings](#configuring) for the repository. +When you add a new repository, Codacy sets the GitLab integration using the [default settings for your organization](../../organizations/integrations/default-git-provider-integration-settings). You can then [customize the settings](#configuring) for the repository. ![GitLab integration](images/gitlab-integration.png) @@ -26,7 +26,7 @@ Depending on the options that you enable, Codacy will automatically update merge ### Status checks \{#pull-request-status\} -Adds a report to your merge requests showing whether your merge requests and coverage are up to standards or not as configured on the [quality gate rules](../../repositories-configure/adjusting-quality-gates.md) for your project. You can then optionally [block merging merge requests that aren't up to standards](../../getting-started/integrating-codacy-with-your-git-workflow.md#blocking-pull-requests). +Adds a report to your merge requests showing whether your merge requests and coverage are up to standards or not as configured on the [quality gate rules](../../repositories-configure/adjusting-quality-gates) for your project. You can then optionally [block merging merge requests that aren't up to standards](../../getting-started/integrating-codacy-with-your-git-workflow#blocking-pull-requests). @@ -47,7 +47,7 @@ Adds a pull request comment showing an overall view of the coverage metrics for When there are new coverage results, Codacy updates the last coverage summary comment if it's included in the last 5 comments of the pull request. Otherwise, Codacy creates a new comment. :::caution -**To get coverage summaries** you must also [add coverage to your repository](../../coverage-reporter/index.md). +**To get coverage summaries** you must also [add coverage to your repository](../../coverage-reporter/index.mdx). ::: ![Coverage summary on GitLab](images/gitlab-integration-coverage-summary.png) @@ -69,7 +69,7 @@ Adds AI-enhanced comments with insights to help you fix identified issues. ## Refreshing the GitLab integration \{#refreshing\} If the user who added the repository to Codacy loses access to the repository, which may happen when the user leaves the team or the organization, Codacy won't be able to create comments on merge requests. -In this situation, another user with [administrator access to the repository](../../organizations/roles-and-permissions-for-organizations.md#permissions-for-gitlab) needs to refresh the GitLab integration: +In this situation, another user with [administrator access to the repository](../../organizations/roles-and-permissions-for-organizations#permissions-for-gitlab) needs to refresh the GitLab integration: @@ -83,4 +83,4 @@ After refreshing the integration, Codacy will use the logged in GitLab user to c ## See also -- [Integrating Codacy with your Git workflow](../../getting-started/integrating-codacy-with-your-git-workflow.md) +- [Integrating Codacy with your Git workflow](../../getting-started/integrating-codacy-with-your-git-workflow) diff --git a/docusaurus/docs/repositories-configure/integrations/post-commit-hooks.md b/docusaurus/docs/repositories-configure/integrations/post-commit-hooks.mdx similarity index 100% rename from docusaurus/docs/repositories-configure/integrations/post-commit-hooks.md rename to docusaurus/docs/repositories-configure/integrations/post-commit-hooks.mdx diff --git a/docusaurus/docs/repositories-configure/languages.mdx b/docusaurus/docs/repositories-configure/languages.mdx index 554c78e04e..29adf469b3 100644 --- a/docusaurus/docs/repositories-configure/languages.mdx +++ b/docusaurus/docs/repositories-configure/languages.mdx @@ -28,7 +28,7 @@ If your repository contains source files with extensions not supported by Codacy 1. Click **Save changes** to update your file extension settings. - ![Configuring file extensions](images/file-extensions.png) + ![Configuring file extensions](./images/file-extensions.png) @@ -45,6 +45,6 @@ By default, Codacy analyzes all languages detected in your repository. To disabl 1. Click **Save changes** to update your settings. - ![Disabling language](images/disable-language.png) + ![Disabling language](./images/disable-language.png) diff --git a/docusaurus/docs/repositories-configure/local-analysis/client-side-tools.md b/docusaurus/docs/repositories-configure/local-analysis/client-side-tools.mdx similarity index 96% rename from docusaurus/docs/repositories-configure/local-analysis/client-side-tools.md rename to docusaurus/docs/repositories-configure/local-analysis/client-side-tools.mdx index 0335834a37..e081f72f0b 100644 --- a/docusaurus/docs/repositories-configure/local-analysis/client-side-tools.md +++ b/docusaurus/docs/repositories-configure/local-analysis/client-side-tools.mdx @@ -15,7 +15,7 @@ Codacy supports client-side tools in two ways: The Codacy Analysis CLI automatically fetches the code pattern settings that you define on the Codacy UI and applies them when running the tools. -- **Standalone tools:** Codacy provides auxiliary converters that parse the output of third-party tools and convert to a format that you then upload to Codacy. You must download, configure, and run the third-party tools yourself. +- **Standalone tools:** Codacy provides auxiliary converters that parse the output of third-party tools and convert to a format that you then upload to Codacy. You must download, configure, and run the third-party tools yourself.{/* */} You can't configure these tools on the Codacy UI, since you manage their configuration locally. @@ -32,7 +32,7 @@ The table below describes the supported client-side tools and includes links to **If you're using GitHub** we recommend that you use the [Codacy Analysis CLI GitHub Action](https://github.com/codacy/codacy-analysis-cli-action#integration-with-codacy-for-client-side-tools) to run the **containerized** client-side tools and upload the results to Codacy. ::: - +-->*/}
@@ -108,4 +108,4 @@ The table below describes the supported client-side tools and includes links to ## See also -- [Supported languages and tools](../../getting-started/supported-languages-and-tools.md) +- [Supported languages and tools](../../getting-started/supported-languages-and-tools) diff --git a/docusaurus/docs/repositories-configure/local-analysis/running-aligncheck.mdx b/docusaurus/docs/repositories-configure/local-analysis/running-aligncheck.mdx index f949929ee2..fc6dbdd4bc 100644 --- a/docusaurus/docs/repositories-configure/local-analysis/running-aligncheck.mdx +++ b/docusaurus/docs/repositories-configure/local-analysis/running-aligncheck.mdx @@ -7,7 +7,7 @@ tool_name: aligncheck import ClientSideToolAdvanced from '../../_includes/ClientSideToolAdvanced.mdx'; import ClientSideToolInstructionsItems from '../../_includes/ClientSideToolInstructionsItems.mdx'; -To run aligncheck as a [client-side tool](client-side-tools.md): +To run aligncheck as a [client-side tool](./client-side-tools.mdx):
    diff --git a/docusaurus/docs/repositories-configure/local-analysis/running-dartanalyzer.mdx b/docusaurus/docs/repositories-configure/local-analysis/running-dartanalyzer.mdx index 46405f35e7..eef7d0ba05 100644 --- a/docusaurus/docs/repositories-configure/local-analysis/running-dartanalyzer.mdx +++ b/docusaurus/docs/repositories-configure/local-analysis/running-dartanalyzer.mdx @@ -6,7 +6,7 @@ tool_name: Dart Analyzer import ClientSideToolInstructionsItems from '../../_includes/ClientSideToolInstructionsItems.mdx'; -To run Dart Analyzer as a [client-side tool](client-side-tools.md): +To run Dart Analyzer as a [client-side tool](./client-side-tools.mdx):
      diff --git a/docusaurus/docs/repositories-configure/local-analysis/running-deadcode.mdx b/docusaurus/docs/repositories-configure/local-analysis/running-deadcode.mdx index 75f9b3d32f..78c1e1bf3c 100644 --- a/docusaurus/docs/repositories-configure/local-analysis/running-deadcode.mdx +++ b/docusaurus/docs/repositories-configure/local-analysis/running-deadcode.mdx @@ -7,7 +7,7 @@ tool_name: deadcode import ClientSideToolAdvanced from '../../_includes/ClientSideToolAdvanced.mdx'; import ClientSideToolInstructionsItems from '../../_includes/ClientSideToolInstructionsItems.mdx'; -To run deadcode as a [client-side tool](client-side-tools.md): +To run deadcode as a [client-side tool](./client-side-tools.mdx):
        diff --git a/docusaurus/docs/repositories-configure/local-analysis/running-eslint.mdx b/docusaurus/docs/repositories-configure/local-analysis/running-eslint.mdx index 806697b395..e292f0dae7 100644 --- a/docusaurus/docs/repositories-configure/local-analysis/running-eslint.mdx +++ b/docusaurus/docs/repositories-configure/local-analysis/running-eslint.mdx @@ -6,7 +6,7 @@ tool_name: ESLint import ClientSideToolInstructionsItems from '../../_includes/ClientSideToolInstructionsItems.mdx'; -To run ESLint as a [client-side tool](client-side-tools.md): +To run ESLint as a [client-side tool](./client-side-tools.mdx):
          diff --git a/docusaurus/docs/repositories-configure/local-analysis/running-spotbugs.mdx b/docusaurus/docs/repositories-configure/local-analysis/running-spotbugs.mdx index 103fe4f06b..e52612ec6f 100644 --- a/docusaurus/docs/repositories-configure/local-analysis/running-spotbugs.mdx +++ b/docusaurus/docs/repositories-configure/local-analysis/running-spotbugs.mdx @@ -7,7 +7,7 @@ tool_name: SpotBugs import ClientSideToolAdvanced from '../../_includes/ClientSideToolAdvanced.mdx'; import ClientSideToolInstructionsItems from '../../_includes/ClientSideToolInstructionsItems.mdx'; -To run SpotBugs as a [client-side tool](client-side-tools.md): +To run SpotBugs as a [client-side tool](./client-side-tools.mdx):
            diff --git a/docusaurus/docs/repositories-configure/managing-branches.mdx b/docusaurus/docs/repositories-configure/managing-branches.mdx index 7bbff146a7..93a12691eb 100644 --- a/docusaurus/docs/repositories-configure/managing-branches.mdx +++ b/docusaurus/docs/repositories-configure/managing-branches.mdx @@ -18,7 +18,7 @@ To change the default branch of your repository or start analyzing other branche 1. Open your repository **Settings**, tab **Branches**. - ![Managing branches](images/managing-branches.png) + ![Managing branches](./images/managing-branches.png) 1. To enable analysis for a new branch, toggle the corresponding switch in the column **Analyze**. @@ -37,14 +37,14 @@ Codacy automatically triggers analysis on the main branch of your repository (ty To change the main branch of your repository or enable analysis on other branches, open your repository **Settings**, tab **Branches**. Enabling a new branch triggers an initial analysis of that branch and the analysis results and information for that branch will become available after the analysis is complete. -This page also displays the [code quality grade](../faq/code-analysis/which-metrics-does-codacy-calculate.md) for each enabled branch. +This page also displays the [code quality grade](../faq/code-analysis/which-metrics-does-codacy-calculate) for each enabled branch. -![Managing branches](images/managing-branches-sh.png) +![Managing branches](./images/managing-branches-sh.png) :::note **If you're using Codacy Self-hosted** you can also configure Codacy to automatically enable all new branches that are pushed to the repository. -![Auto-enable new branches](images/managing-branches-auto-enable.png) +![Auto-enable new branches](./images/managing-branches-auto-enable.png) ::: Codacy manages pull request branches and inactive branches as follows: diff --git a/docusaurus/docs/repositories-configure/removing-your-repository.md b/docusaurus/docs/repositories-configure/removing-your-repository.mdx similarity index 88% rename from docusaurus/docs/repositories-configure/removing-your-repository.md rename to docusaurus/docs/repositories-configure/removing-your-repository.mdx index 80f511c398..19eaf8830e 100644 --- a/docusaurus/docs/repositories-configure/removing-your-repository.md +++ b/docusaurus/docs/repositories-configure/removing-your-repository.mdx @@ -8,7 +8,7 @@ To stop Codacy from analyzing your repository, you must remove the repository fr Removing a repository from Codacy completely removes the configurations and all data related to your repository from Codacy. This operation doesn't make any changes on your Git provider. :::caution -To remove a repository from Codacy you must have [administrator permissions](../organizations/roles-and-permissions-for-organizations.md) for that repository on your Git provider. +To remove a repository from Codacy you must have [administrator permissions](../organizations/roles-and-permissions-for-organizations) for that repository on your Git provider. ::: To delete your repository from Codacy: @@ -17,7 +17,7 @@ To delete your repository from Codacy: 1. Click the button **Remove repository** and confirm that you want to remove the repository. - ![Removing your repository](images/repository-remove.png) + ![Removing your repository](./images/repository-remove.png) :::note For added security, after you remove the repository from Codacy you can delete from your Git provider the Codacy resources related to that repository to prevent their reuse: diff --git a/docusaurus/docs/repositories-configure/using-submodules.md b/docusaurus/docs/repositories-configure/using-submodules.mdx similarity index 93% rename from docusaurus/docs/repositories-configure/using-submodules.md rename to docusaurus/docs/repositories-configure/using-submodules.mdx index 082bfb014a..36ab3f4e2e 100644 --- a/docusaurus/docs/repositories-configure/using-submodules.md +++ b/docusaurus/docs/repositories-configure/using-submodules.mdx @@ -15,7 +15,7 @@ By default, Codacy does normal Git clones that **don't include submodules** to e 1. Contact us at [support@codacy.com](mailto:support@codacy.com) asking to enable submodules on Codacy. -1. **If you're using Codacy Self-hosted**, [update your license](../chart/maintenance/license.md). +1. **If you're using Codacy Self-hosted**, [update your license](../chart/maintenance/license). 1. Make sure that your **Git URL** uses the correct protocol: - **GitHub:** HTTPS protocol @@ -33,7 +33,7 @@ When using submodules, you must do the following for all your existing and new r If your tool doesn't detect the configuration files in the submodule directories, you must include a configuration file directly in the root of your repositories referencing the configuration files in the submodule directories. -## Updating the public SSH key to access the repository {#update-key} +## Updating the public SSH key to access the repository \{#update-key\} :::note[This section applies only to GitLab and Bitbucket] ::: @@ -52,7 +52,7 @@ To update your GitLab or Bitbucket public SSH key that Codacy uses to access you 1. Click the link **Add new user key**. This takes you to the Git provider page where you can manage your user account SSH keys. 1. Add a new SSH key to your Git provider account. - ![Generate new user key](images/using-submodules-generate-new-user-key.png) + ![Generate new user key](./images/using-submodules-generate-new-user-key.png) ## Automating user keys for new repositories @@ -65,7 +65,7 @@ You can set Codacy to automatically add the new SSH key to your Git provider acc **If you're using Bitbucket Cloud** this setting must be turned off since automatically adding the user keys isn't supported. ::: -![Add project key to the user by default](images/using-submodules-default-add-user-key.png) +![Add project key to the user by default](./images/using-submodules-default-add-user-key.png) ## See also diff --git a/docusaurus/docs/special-thanks.md b/docusaurus/docs/special-thanks.mdx similarity index 100% rename from docusaurus/docs/special-thanks.md rename to docusaurus/docs/special-thanks.mdx From 23d8b30432905c9f69b75703d2502b2c5c0755a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A1udia?= Date: Fri, 2 Jan 2026 12:18:15 +0000 Subject: [PATCH 13/19] organizations/ --- .../{ai-risk-hub.md => ai-risk-hub.mdx} | 23 ++-- .../audit-logs-for-organizations.mdx | 31 ++--- ....md => changing-your-plan-and-billing.mdx} | 9 +- ...ult-git-provider-integration-settings.mdx} | 11 +- ...ra-integration.md => jira-integration.mdx} | 18 +-- ...k-integration.md => slack-integration.mdx} | 4 +- .../{issues-metrics.md => issues-metrics.mdx} | 18 +-- ...managing-people.md => managing-people.mdx} | 28 ++-- .../organizations/managing-repositories.mdx | 34 ++--- ...risk.md => managing-security-and-risk.mdx} | 124 +++++++++--------- .../organizations/organization-overview.mdx | 10 +- ...oles-and-permissions-for-organizations.mdx | 26 ++-- .../{segments.md => segments.mdx} | 13 +- ...tandards.md => using-coding-standards.mdx} | 42 +++--- ...te-policies.md => using-gate-policies.mdx} | 24 ++-- ...izations.md => what-are-organizations.mdx} | 20 +-- 16 files changed, 216 insertions(+), 219 deletions(-) rename docusaurus/docs/organizations/{ai-risk-hub.md => ai-risk-hub.mdx} (82%) rename docusaurus/docs/organizations/{changing-your-plan-and-billing.md => changing-your-plan-and-billing.mdx} (90%) rename docusaurus/docs/organizations/integrations/{default-git-provider-integration-settings.md => default-git-provider-integration-settings.mdx} (64%) rename docusaurus/docs/organizations/integrations/{jira-integration.md => jira-integration.mdx} (79%) rename docusaurus/docs/organizations/integrations/{slack-integration.md => slack-integration.mdx} (90%) rename docusaurus/docs/organizations/{issues-metrics.md => issues-metrics.mdx} (84%) rename docusaurus/docs/organizations/{managing-people.md => managing-people.mdx} (81%) rename docusaurus/docs/organizations/{managing-security-and-risk.md => managing-security-and-risk.mdx} (90%) rename docusaurus/docs/organizations/{segments.md => segments.mdx} (89%) rename docusaurus/docs/organizations/{using-coding-standards.md => using-coding-standards.mdx} (88%) rename docusaurus/docs/organizations/{using-gate-policies.md => using-gate-policies.mdx} (77%) rename docusaurus/docs/organizations/{what-are-organizations.md => what-are-organizations.mdx} (84%) diff --git a/docusaurus/docs/organizations/ai-risk-hub.md b/docusaurus/docs/organizations/ai-risk-hub.mdx similarity index 82% rename from docusaurus/docs/organizations/ai-risk-hub.md rename to docusaurus/docs/organizations/ai-risk-hub.mdx index 9d80211e28..8f8e1fa43a 100644 --- a/docusaurus/docs/organizations/ai-risk-hub.md +++ b/docusaurus/docs/organizations/ai-risk-hub.mdx @@ -4,13 +4,13 @@ description: The organization's AI Risk Hub dashboard provides an overview of al --- -The **AI Risk Hub** dashboard provides an overview of all the AI issues detected in the repositories applied to the organization's AI Policy standard and your organization's risk level based on your AI practices. Here, you can navigate through the issues detected in your repositories and filter them by severity and category. You can also filter the issues by selecting specific repositories or using [the segments that you have set up](segments.md). +The **AI Risk Hub** dashboard provides an overview of all the AI issues detected in the repositories applied to the organization's AI Policy standard and your organization's risk level based on your AI practices. Here, you can navigate through the issues detected in your repositories and filter them by severity and category. You can also filter the issues by selecting specific repositories or using [the segments that you have set up](./segments.mdx). :::caution Currently this tab is a preview of a Business tier feature. ::: -![AI Risk Hub dashboard](images/ai-risk-hub-dashboard.png) +![AI Risk Hub dashboard](./images/ai-risk-hub-dashboard.png) To access the AI Risk Hub dashboard, select an organization from the top navigation bar and click on the **AI Risk Hub** tab at the top of the page. @@ -20,6 +20,7 @@ The AI Risk Hub dashboard includes the following sections to help you monitor AI - [Repositories with most AI issues](#repositories-with-most-ai-issues) - [Risk Level](#risk-level) - [AI Risk Checklist](#ai-risk-checklist) + ## AI Policy Compliance Our AI Policy is a pre-defined, curated ruleset designed to prevent risks and vulnerabilities that are inherent to AI code from entering the codebase – which can be enforced immediately across all repositories and pull request checks. @@ -27,7 +28,7 @@ You can enable Codacy's AI Policy by clicking on the button on the right side of When the policy is enabled, you are able to view a real distribution of the AI issues found distributed by severity and AI category. When you already have the AI Policy enabled, you can see an edit button which allows you to edit the repositories that have this policy applied. -![AI Policy Compliance](images/ai-policy-compliance.png) +![AI Policy Compliance](./images/ai-policy-compliance.png) The AI Policy covers four groups of AI-specific risks: @@ -53,7 +54,7 @@ Ensures protection on all fronts, by integrating vulnerability detection through This list displays repositories in descending order based on the number of AI issues. Depending on the filters applied, the list will show repositories with the most AI open issues, grouped by severity or AI category. -![Repositories with most AI issues](images/repositories-with-most-ai-issues.png) +![Repositories with most AI issues](./images/repositories-with-most-ai-issues.png) ## Risk Level @@ -61,17 +62,17 @@ This panel shows the organizational AI Risk Level based on the implementation (o The possible risk levels are: High, Medium, and Low, considering special control factors you can enable in Codacy. These control factors are specified in the **AI Risk Checklist**. -![Risk Level](images/risk-level.png) +![Risk Level](./images/risk-level.png) ## AI Risk Checklist With most repositories today being subject to GenAI code contributions, the checklist covers essential source code controls that we recommend to enable across all projects within your organization: - AI Policy enabled: Enable the AI Policy inside the AI Risk Hub tab. -- Coverage enabled: Set up code coverage for your repositories. See how to [upload coverage data](../coverage-reporter/index.md) to Codacy. -- Enforced gates: Add [gates to your repositories](../repositories-configure/adjusting-quality-gates.md), and preferentially [apply repositories to gate policies](./using-gate-policies.md). -- Protected pull requests: Protect your pull requests by [enforcing quality gates](../getting-started/integrating-codacy-with-your-git-workflow.md#blocking-pull-requests). -- Daily vulnerability scans: [Enable Proactive SCA](./managing-security-and-risk.md#dependencies-list) to protect your repositories from dependencies vulnerabilities. -- Applications scanned: [Enable App scanning](./managing-security-and-risk.md#app-scanning) to scan Web Applications and APIs for security vulnerabilities. +- Coverage enabled: Set up code coverage for your repositories. See how to [upload coverage data](../coverage-reporter/index.mdx) to Codacy. +- Enforced gates: Add [gates to your repositories](../repositories-configure/adjusting-quality-gates.mdx), and preferentially [apply repositories to gate policies](./using-gate-policies.mdx). +- Protected pull requests: Protect your pull requests by [enforcing quality gates](../getting-started/integrating-codacy-with-your-git-workflow.mdx#blocking-pull-requests). +- Daily vulnerability scans: [Enable Proactive SCA](./managing-security-and-risk.mdx#dependencies-list) to protect your repositories from dependencies vulnerabilities. +- Applications scanned: [Enable App scanning](./managing-security-and-risk.mdx#app-scanning) to scan Web Applications and APIs for security vulnerabilities. -![AI Risk Checklist](images/ai-risk-checklist.png) +![AI Risk Checklist](./images/ai-risk-checklist.png) diff --git a/docusaurus/docs/organizations/audit-logs-for-organizations.mdx b/docusaurus/docs/organizations/audit-logs-for-organizations.mdx index 8d6e4cf5bf..1a8c2b137b 100644 --- a/docusaurus/docs/organizations/audit-logs-for-organizations.mdx +++ b/docusaurus/docs/organizations/audit-logs-for-organizations.mdx @@ -9,7 +9,7 @@ import Paid from '../_includes/Paid.mdx'; Codacy logs important events in your organization, reflecting when your team members execute specific operations. This enables the generation of comprehensive reports to assist you with the audit process. For example, you can track who added a repository to Codacy, or changed the settings of a coding standard. -[Organization admins and organization managers](./roles-and-permissions-for-organizations.md) can obtain the audit log data of the organization events using the Codacy API endpoint [listAuditLogsForOrganization](https://api.codacy.com/api/api-docs#listauditlogsfororganization). +[Organization admins and organization managers](./roles-and-permissions-for-organizations.mdx) can obtain the audit log data of the organization events using the Codacy API endpoint [listAuditLogsForOrganization](https://api.codacy.com/api/api-docs#listauditlogsfororganization). The retention period of audit logs for organization events is one year. @@ -24,7 +24,7 @@ The sections below list the events that Codacy logs for your organization at use |Event|Description|Action| |-----|-----------|------| |Log in|User logged in to Codacy|`user.login`| -|Create [account API token](../codacy-api/api-tokens.md#account-api-tokens)|New account API token created|`user.tokens.create`| +|Create [account API token](../codacy-api/api-tokens.mdx#account-api-tokens)|New account API token created|`user.tokens.create`| |Read account API token|List of account API tokens retrieved|`user.tokens.read`| |Delete account API token|Account API token deleted|`user.tokens.delete`| @@ -32,45 +32,46 @@ The sections below list the events that Codacy logs for your organization at use | Event | Description | Action | |-------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------|---------------------------------------------------------------| -| [Add organization](./what-are-organizations.md#adding-an-organization) | Organization added to Codacy | `organizations.create` | -| [Add people](./managing-people.md#adding-people) to organization | New people added to the organization | `organizations.people.create` | -| [Join organization](./managing-people.md#joining) | User joined the organization | `organizations.join` | -| Update [repository management permissions](./roles-and-permissions-for-organizations.md#change-analysis-configuration) | Repository management permissions updated | `organizations.analysisconfigurationminimumpermission.update` | -| Assign [organization manager role](./roles-and-permissions-for-organizations.md#managing-the-organization-manager-role) | Organization manager role assigned to a team member | `organizations.security.managers.create` | +| [Add organization](./what-are-organizations.mdx#adding-an-organization) | Organization added to Codacy | `organizations.create` | +| [Add people](./managing-people.mdx#adding-people) to organization | New people added to the organization | `organizations.people.create` | +| [Join organization](./managing-people.mdx#joining) | User joined the organization | `organizations.join` | +| Update [repository management permissions](./roles-and-permissions-for-organizations.mdx#change-analysis-configuration) | Repository management permissions updated | `organizations.analysisconfigurationminimumpermission.update` | +| Assign [organization manager role](./roles-and-permissions-for-organizations.mdx#managing-the-organization-manager-role) | Organization manager role assigned to a team member | `organizations.security.managers.create` | | Revoke organization manager role | Organization manager role revoked from a team member | `organizations.security.managers.delete` | -| Update [default Git provider configuration](./integrations/default-git-provider-integration-settings.md) | Default Git provider configuration for the organization updated | `organizations.integrations.providersettings.update` | +| Update [default Git provider configuration](./integrations/default-git-provider-integration-settings.mdx) | Default Git provider configuration for the organization updated | `organizations.integrations.providersettings.update` | | Apply default Git provider configuration to all repositories | Default Git provider configuration applied to all repositories of the organization | `organizations.integrations.providersettings.apply` | | Create new organization hook | New organization webhook created | `organizations.settings.hooks.create` | -| Create new [gate policy](./using-gate-policies.md) | New gate policy created | `organizations.gatepolicies.create` | +| Create new [gate policy](./using-gate-policies.mdx) | New gate policy created | `organizations.gatepolicies.create` | | Update gate policy | Quality gate definition updated | `organizations.gatepolicies.update` | | Apply gate policy to repositories | Gate policy applied to a list of repositories | `organizations.gatepolicies.repositories.apply` | | Make gate policy default | Gate policy was made the default for the organization | `organizations.gatepolicies.setdefault` | | Make Codacy gate policy default | Built-in Codacy gate policy was made the default for the organization | `organizations.gatepolicies.setcodacydefault` | | Delete gate policy | Gate policy deleted | `organizations.gatepolicies.delete` | -| Create new [coding standard](./using-coding-standards.md) using preset sensitivity levels | New coding standard created | `organizations.presetsstandards.create` | +| Create new [coding standard](./using-coding-standards.mdx) using preset sensitivity levels | New coding standard created | `organizations.presetsstandards.create` | | Create new coding standard draft using individual language and code pattern settings | New coding standard draft created | `organizations.codingstandards.create` | | Create new coding standard from draft | New coding standard created | `organizations.codingstandards.promote` | | Update coding standard from draft | Coding standard updated | `organizations.codingstandards.promote` | | Apply coding standard to repositories | Coding standard applied to a list of repositories | `organizations.codingstandards.repositories.apply` | | Make coding standard default | Coding standard was made the default | `organizations.codingstandards.setdefault` | | Delete coding standard | Coding standard deleted | `organizations.codingstandards.delete` | -| Export [security items](./managing-security-and-risk.md) | Export security items | `organizations.security.items.export` | +| Export [security items](./managing-security-and-risk.mdx) | Export security items | `organizations.security.items.export` | | Ignore security item | Security item was ignored | `organizations.security.items.ignore` | | Unignore security item | Security item was unignored | `organizations.security.items.unignore` | | Create DAST target | A target for DAST scanning was created | `organizations.dast.target.create` | | Delete DAST target | A target for DAST scanning was deleted | `organizations.dast.target.delete` | | Analyze DAST target | Request a DAST scan of an existing target | `organizations.dast.target.analyze` | | Update security SLA configurations | The security SLA Configuration was updated | `organizations.security.sla.configuration.update` | + ### Repository |Event| Description |Action| |-----|--------------------------------------------------------------|------| -|Create new [post-commit hook](../repositories-configure/integrations/post-commit-hooks.md)| New repository hook created |`repositories.integrations.postcommithook`| -|Create [repository API token](../codacy-api/api-tokens.md#repository-api-tokens)| New repository API token created |`repositories.tokens.create`| +|Create new [post-commit hook](../repositories-configure/integrations/post-commit-hooks.mdx)| New repository hook created |`repositories.integrations.postcommithook`| +|Create [repository API token](../codacy-api/api-tokens.mdx#repository-api-tokens)| New repository API token created |`repositories.tokens.create`| |Read repository API token| List of repository API tokens retrieved |`repositories.tokens.read`| |Delete repository API token| Repository API token deleted |`repositories.tokens.delete`| -|Update Git provider integration settings
            ([GitHub](../repositories-configure/integrations/github-integration.md#configuring), [Bitbucket](../repositories-configure/integrations/bitbucket-integration.md#configuring), or [GitLab](../repositories-configure/integrations/gitlab-integration.md#configuring))| Git provider integration settings for the repository updated |`repositories.integrations.providersettings.update`| -|Refresh Git provider integration
            (applies only to [Bitbucket](../repositories-configure/integrations/bitbucket-integration.md#refreshing) and [GitLab](../repositories-configure/integrations/gitlab-integration.md#refreshing))| Git provider integration for the repository refreshed |`repositories.integrations.refreshprovider`| +|Update Git provider integration settings
            ([GitHub](../repositories-configure/integrations/github-integration.mdx#configuring), [Bitbucket](../repositories-configure/integrations/bitbucket-integration.mdx#configuring), or [GitLab](../repositories-configure/integrations/gitlab-integration.mdx#configuring))| Git provider integration settings for the repository updated |`repositories.integrations.providersettings.update`| +|Refresh Git provider integration
            (applies only to [Bitbucket](../repositories-configure/integrations/bitbucket-integration.mdx#refreshing) and [GitLab](../repositories-configure/integrations/gitlab-integration.mdx#refreshing))| Git provider integration for the repository refreshed |`repositories.integrations.refreshprovider`| | Update issue | For example ignore issue |`repositories.issues.update`| | Update tool | Can be change parameters or disable/enable tool |`repositories.tools.update`| | Bypass pull request | Bypass pull request by authorized person |`repositories.pullrequests.bypass`| diff --git a/docusaurus/docs/organizations/changing-your-plan-and-billing.md b/docusaurus/docs/organizations/changing-your-plan-and-billing.mdx similarity index 90% rename from docusaurus/docs/organizations/changing-your-plan-and-billing.md rename to docusaurus/docs/organizations/changing-your-plan-and-billing.mdx index b095988697..0bc0751cab 100644 --- a/docusaurus/docs/organizations/changing-your-plan-and-billing.md +++ b/docusaurus/docs/organizations/changing-your-plan-and-billing.mdx @@ -5,16 +5,16 @@ title: Changing your plan and billing Each organization on Codacy has a dedicated plan and associated billing. To make changes to the plan and billing of an organization, open your organization **Settings**, page **Plan and billing**. - +{/**/} :::note - If you're using GitHub Marketplace, update your billing details or cancel your plan directly on your [GitHub Billing page](https://github.com/settings/billing/summary). - If you cancel your plan or switch to a different Enterprise plan, some repositories may show outdated information in the Codacy UI. To update this information, reanalyze the repositories or push new commits. ::: - +{/**/} -![Plan and billing for a Codacy organization](images/organization-plan-billing.png) +![Plan and billing for a Codacy organization](./images/organization-plan-billing.png) - **To upgrade** to the Pro plan click **Choose plan**, choose between monthly or yearly billing, and provide your payment and invoice details @@ -30,7 +30,6 @@ If you have any questions or need help with your account, please contact [suppor - **If you're using GitHub Marketplace,** this configuration isn't available and team members must always wait for an organization owner to manually approve their requests to join the organization. - In some **Enterprise plans**, Codacy automatically adds to the organization new people that commit to your private repositories. However, they still need to join the organization on the Codacy app if they want to use the UI. - ::: Choose one of the following options in your organization **Settings**, page **Plan and billing**: @@ -41,4 +40,4 @@ Choose one of the following options in your organization **Settings**, page **Pl Your teammates that have already been invited to join or were added to the organization are automatically approved, and you can also skip the approval process for organization admins. -![Accepting new people to the organization](images/organization-plan-billing-people-accept.png) +![Accepting new people to the organization](./images/organization-plan-billing-people-accept.png) diff --git a/docusaurus/docs/organizations/integrations/default-git-provider-integration-settings.md b/docusaurus/docs/organizations/integrations/default-git-provider-integration-settings.mdx similarity index 64% rename from docusaurus/docs/organizations/integrations/default-git-provider-integration-settings.md rename to docusaurus/docs/organizations/integrations/default-git-provider-integration-settings.mdx index 32459700d0..773c00c2c2 100644 --- a/docusaurus/docs/organizations/integrations/default-git-provider-integration-settings.md +++ b/docusaurus/docs/organizations/integrations/default-git-provider-integration-settings.mdx @@ -2,20 +2,19 @@ title: Default Git provider integration settings --- - You can configure the default settings that Codacy uses to integrate with your Git provider when you add a new repository to Codacy. This enables you to apply the same settings across your organization repositories. To configure these default settings, open your organization **Integrations** page and select your Git provider. -![Default Git provider integration settings](images/default-git-provider-settings.png) +![Default Git provider integration settings](./images/default-git-provider-settings.png) -The organization-level Git provider integration settings define the defaults that Codacy applies to new repositories. You can then customize the settings for each individual repository, which depend on your Git provider, [GitHub](../../repositories-configure/integrations/github-integration.md), [GitLab](../../repositories-configure/integrations/gitlab-integration.md) or [Bitbucket](../../repositories-configure/integrations/bitbucket-integration.md). +The organization-level Git provider integration settings define the defaults that Codacy applies to new repositories. You can then customize the settings for each individual repository, which depend on your Git provider, [GitHub](../../repositories-configure/integrations/github-integration.mdx), [GitLab](../../repositories-configure/integrations/gitlab-integration.mdx) or [Bitbucket](../../repositories-configure/integrations/bitbucket-integration.mdx). -## Applying default settings to all repositories {#apply-all} +## Applying default settings to all repositories \{#apply-all\} To ensure that all your repositories are configured with the default Git provider integration settings defined for your organization, click the button **Apply default to all repositories**. -![Apply default settings to all repositories](images/default-git-provider-settings-apply-all.png) +![Apply default settings to all repositories](./images/default-git-provider-settings-apply-all.png) ## See also -- [Integrating Codacy with your Git workflow](../../getting-started/integrating-codacy-with-your-git-workflow.md) +- [Integrating Codacy with your Git workflow](../../getting-started/integrating-codacy-with-your-git-workflow.mdx) diff --git a/docusaurus/docs/organizations/integrations/jira-integration.md b/docusaurus/docs/organizations/integrations/jira-integration.mdx similarity index 79% rename from docusaurus/docs/organizations/integrations/jira-integration.md rename to docusaurus/docs/organizations/integrations/jira-integration.mdx index 00cf0d53b6..88f8188780 100644 --- a/docusaurus/docs/organizations/integrations/jira-integration.md +++ b/docusaurus/docs/organizations/integrations/jira-integration.mdx @@ -6,13 +6,13 @@ title: Organization Jira integration :::note[This integration is only available for Jira Cloud] ::: -Integrate Jira with Codacy to be able to create Jira tickets directly from Codacy findings, and import your Jira issues for [Security and risk management](../managing-security-and-risk.md) to manage them all in one place as security items. +Integrate Jira with Codacy to be able to create Jira tickets directly from Codacy findings, and import your Jira issues for [Security and risk management](../managing-security-and-risk.mdx) to manage them all in one place as security items. ## Installing the Jira integration To install the Jira integration: -1. On Jira, add the label **security** (case-insensitive) to the issues you wish to import and confirm that they use [the right Jira priorities to correctly map to item severities](../managing-security-and-risk.md#item-severities-and-deadlines). +1. On Jira, add the label **security** (case-insensitive) to the issues you wish to import and confirm that they use [the right Jira priorities to correctly map to item severities](../managing-security-and-risk.mdx#item-severities-and-deadlines). :::tip Add the **security** label as a default to all new Jira issues that track security-related work in your organization. @@ -24,13 +24,13 @@ To install the Jira integration: Use a Jira account with admin permissions when installing this integration. This lets Codacy access all issues, since the integration inherits the permissions of the account that installs it. ::: - ![Security and risk management Jira integration installation](images/jira-integration-srm-install.png) + ![Security and risk management Jira integration installation](./images/jira-integration-srm-install.png) 1. On Atlassian's website, authorize Codacy. Once successful, you're redirected back to Codacy. After installing, Codacy imports all open Jira issues labeled **security** and created up to 90 days before the integration and then retrieves updates from Jira once a day. -For more information on how this integration works, see [how Codacy manages security items](../managing-security-and-risk.md#opening-and-closing-items) and [how Codacy assigns security item severities](../managing-security-and-risk.md#item-severities-and-deadlines). +For more information on how this integration works, see [how Codacy manages security items](../managing-security-and-risk.mdx#opening-and-closing-items) and [how Codacy assigns security item severities](../managing-security-and-risk.mdx#item-severities-and-deadlines). ## Uninstalling the Jira integration @@ -50,11 +50,11 @@ Installing the Jira integration enables the feature of creating Jira tickets fro 1. Click on the options button of the issue you want to create a ticket for, and then click on **Create Jira ticket** button. - ![Create Jira Ticket from one issue](images/create-jira-ticket-for-issue.png) + ![Create Jira Ticket from one issue](./images/create-jira-ticket-for-issue.png) 1. A modal will open where you can select the Jira project, ticket type, summary and description. - ![Jira modal](images/jira-modal.png) + ![Jira modal](./images/jira-modal.png) :::important The Jira ticket creation doesn't support projects with mandatory custom fields @@ -64,7 +64,7 @@ Installing the Jira integration enables the feature of creating Jira tickets fro To create a Jira ticket for multiple issues, you can do so by navigating to a list of issues and clicking on the **Create a Jira ticket for these issues** button at the top of the list -![Create Jira Ticket for multiple issues](images/create-jira-ticket-for-multiple-issues.png) +![Create Jira Ticket for multiple issues](./images/create-jira-ticket-for-multiple-issues.png) :::note You can create a Jira ticket for up to 50 issues / ticket @@ -74,10 +74,10 @@ You can create a Jira ticket for up to 50 issues / ticket To create a Jira ticket for a dependency, navigate to the page of the dependency and click on **Create a Jira ticket for this dependency** -![Create Jira Ticket for a dependency](images/jira-ticket-dependency.png) +![Create Jira Ticket for a dependency](./images/jira-ticket-dependency.png) ### Jira tickets for files To create a Jira ticket for a file, navigate to the page of the file and click on **Create a Jira ticket for this file** -![Create Jira Ticket for a file](images/jira-ticket-file.png) +![Create Jira Ticket for a file](./images/jira-ticket-file.png) diff --git a/docusaurus/docs/organizations/integrations/slack-integration.md b/docusaurus/docs/organizations/integrations/slack-integration.mdx similarity index 90% rename from docusaurus/docs/organizations/integrations/slack-integration.md rename to docusaurus/docs/organizations/integrations/slack-integration.mdx index c4191b1724..ae4fd74b0d 100644 --- a/docusaurus/docs/organizations/integrations/slack-integration.md +++ b/docusaurus/docs/organizations/integrations/slack-integration.mdx @@ -22,11 +22,11 @@ To install the Slack integration: 1. Paste the Incoming WebHook URL in the field and click **Install Slack**. - ![Slack integration installation](images/slack-integration-install.png) + ![Slack integration installation](./images/slack-integration-install.png) Once the Slack integration is installed, Codacy sends a confirmation message to the Slack channel you configured when creating the Incoming WebHook. From there on, Codacy notifies you on the same channel whenever a new critical Security issue is detected in the default branch of any repository in your organization. -![Slack integration message](images/slack-integration-message.png) +![Slack integration message](./images/slack-integration-message.png) ## Uninstalling the Slack integration diff --git a/docusaurus/docs/organizations/issues-metrics.md b/docusaurus/docs/organizations/issues-metrics.mdx similarity index 84% rename from docusaurus/docs/organizations/issues-metrics.md rename to docusaurus/docs/organizations/issues-metrics.mdx index 03cc3b7ab5..857e399708 100644 --- a/docusaurus/docs/organizations/issues-metrics.md +++ b/docusaurus/docs/organizations/issues-metrics.mdx @@ -4,15 +4,15 @@ description: The organization's Issues dashboard provides an overview of all the --- -The **Issues metrics** dashboard provides an overview of all the issues detected in the repositories belonging to your Git provider organization. Here, you can navigate through the issues detected in your repositories and filter them by severity and category. You can also filter the issues by selecting specific repositories or using [the segments that you have set up](segments.md). +The **Issues metrics** dashboard provides an overview of all the issues detected in the repositories belonging to your Git provider organization. Here, you can navigate through the issues detected in your repositories and filter them by severity and category. You can also filter the issues by selecting specific repositories or using [the segments that you have set up](./segments.mdx). -![Open issues dashboard](images/open-issues-dashboard.png) +![Open issues dashboard](./images/open-issues-dashboard.png) To access the Issues Metrics dashboard, select an organization from the top navigation bar and click on the **Open Issues** tab at the top of the page. By default, the Issues Metrics dashboard displays metrics as the absolute number of issues. You can change the display to **Issues per 1,000 lines of code** by clicking on the ellipsis icon at the top right of the Open Issues tab. From here, you can also customize the period against which you want to compare the issues detected in your repositories. When available, comparisons against the previously selected period will be shown next to each value, and you can hover over the comparison to see the variation. -![Open issues tab options](images/open-issues-tab-options.png) +![Open issues tab options](./images/open-issues-tab-options.png) The Issues Metrics dashboard includes the following sections to help you monitor the issues detected in your repositories: @@ -30,13 +30,13 @@ In each section, you can click on the ellipsis icon in the top right corner to e This chart displays the current number of open issues detected in your repositories, grouped by severity. You can click on each severity level to filter the results in the rest of the dashboard. -![Open issues by severity](images/open-issues-by-severity.png) +![Open issues by severity](./images/open-issues-by-severity.png) ## Open Issues by Category This chart displays the current number of open issues detected in your repositories, grouped by category. You can click on each category to filter the results in the rest of the dashboard. -![Open issues by category](images/open-issues-by-category.png) +![Open issues by category](./images/open-issues-by-category.png) ## Open Issues Evolution @@ -46,18 +46,18 @@ This chart shows the trend of open issues in your repositories over time, either Data for each period represents an average of the values during that period. ::: -![Open issues evolution by severity](images/open-issues-evolution-by-severity.png) +![Open issues evolution by severity](./images/open-issues-evolution-by-severity.png) -![Open issues evolution by category](images/open-issues-evolution-by-category.png) +![Open issues evolution by category](./images/open-issues-evolution-by-category.png) ## Issues Activity This chart displays the number of issues fixed and introduced in your repositories over time. You can hover over the chart to see the number of issues fixed and introduced on a specific date. You can also click on the chart to filter results in the **Repositories with the Most Issues** list. -![Issues activity](images/issues-activity.png) +![Issues activity](./images/issues-activity.png) ## Repositories with the Most Issues This list displays repositories in descending order based on the number of issues. Depending on the filters applied, the list will show repositories with the most open issues, grouped by severity or category, or within a specific period. -![Open issues ranking](images/open-issues-ranking.png) +![Open issues ranking](./images/open-issues-ranking.png) diff --git a/docusaurus/docs/organizations/managing-people.md b/docusaurus/docs/organizations/managing-people.mdx similarity index 81% rename from docusaurus/docs/organizations/managing-people.md rename to docusaurus/docs/organizations/managing-people.mdx index 2e817fcf0e..b4f12a56b9 100644 --- a/docusaurus/docs/organizations/managing-people.md +++ b/docusaurus/docs/organizations/managing-people.mdx @@ -23,22 +23,22 @@ To list and manage the people in your organization, open your organization **Set ![People in an organization](images/organization-people.png) -## Joining an organization {#joining} -To become a member of an organization on Codacy app you must [sign up to Codacy](../getting-started/codacy-quickstart.md) using your Git provider and follow the instructions to either join an existing organization or add a new one. +## Joining an organization \{#joining\} +To become a member of an organization on Codacy app you must [sign up to Codacy](../getting-started/codacy-quickstart.mdx) using your Git provider and follow the instructions to either join an existing organization or add a new one. To join or add an organization after completing the sign-up process, click **Organizations** on the top right-hand menu under your avatar: -![Joining an organization](images/organization-join.png) +![Joining an organization](./images/organization-join.png) :::note -**On Codacy Cloud**, organization admins [control if team members need an approval](changing-your-plan-and-billing.md#allowing-new-people-to-join-your-organization) before joining their organizations. +**On Codacy Cloud**, organization admins [control if team members need an approval](./changing-your-plan-and-billing.mdx#allowing-new-people-to-join-your-organization) before joining their organizations. ::: -## Adding people to your organization {#adding-people} +## Adding people to your organization \{#adding-people\} **On Codacy Cloud**, organization admins can also add teammates to their organization on Codacy. This is useful to allow Codacy to analyze commits to private repositories by committers who haven't signed up to Codacy or joined the organization yet. :::tip -You can also use the Codacy API to [add people to your Codacy organization](../codacy-api/examples/adding-people-to-codacy-programmatically.md). This is useful while adding a large amount of people or to automatically add new members of your Git provider organization to Codacy. +You can also use the Codacy API to [add people to your Codacy organization](../codacy-api/examples/adding-people-to-codacy-programmatically.mdx). This is useful while adding a large amount of people or to automatically add new members of your Git provider organization to Codacy. ::: To add people to your organization: @@ -56,24 +56,24 @@ To add people to your organization: Alternatively, click **Add people using email addresses** to manually enter the list of email addresses of the people you wish to add. :::caution - - To prevent the same person from occupying more than one seat in your organization, make sure your teammates [update the email addresses associated with their Codacy account](../account/emails.md#updating). - - **On GitHub and Bitbucket organizations**, Codacy automatically reduces seat duplication when commits are pushed by associating all the commit email addresses from the same Git provider user with a single Codacy committer. This mechanism requires that all developers committing to your private repositories [set their Git email address](../account/emails.md#git-config) and add all their email addresses to their [GitHub account](https://github.com/settings/emails) or [Bitbucket account](https://bitbucket.org/account/settings/email/). + - To prevent the same person from occupying more than one seat in your organization, make sure your teammates [update the email addresses associated with their Codacy account](../account/emails.mdx#updating). + - **On GitHub and Bitbucket organizations**, Codacy automatically reduces seat duplication when commits are pushed by associating all the commit email addresses from the same Git provider user with a single Codacy committer. This mechanism requires that all developers committing to your private repositories [set their Git email address](../account/emails.mdx#git-config) and add all their email addresses to their [GitHub account](https://github.com/settings/emails) or [Bitbucket account](https://bitbucket.org/account/settings/email/). - Codacy doesn't allow you to have one email associated with more than one GitHub account. You can manage your [associated emails in the provider GitHub](https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/adding-an-email-address-to-your-github-account). ::: - ![Adding people to your organization](images/organization-people-add-modal.png) + ![Adding people to your organization](./images/organization-people-add-modal.png) 1. Confirm the updated billing details displayed at the bottom of the window and click the button **Add people**. Codacy emails the newly added people inviting them to log in. -## Removing people from your organization {#removing-people} +## Removing people from your organization \{#removing-people\} Members of an organization on Codacy can remove themselves from the organization, and organization admins can also remove other members and committers. When a member or committer leaves an organization: - Codacy stops analyzing their commits to private repositories in the organization - **On GitLab and Bitbucket organizations** Codacy stops analyzing repositories that were added by the member -- Organizations must have at least one admin, so when the last organization admin leaves the organization they must either add someone else as admin or [delete the organization](../organizations/what-are-organizations.md#deleting-an-organization) +- Organizations must have at least one admin, so when the last organization admin leaves the organization they must either add someone else as admin or [delete the organization](../organizations/what-are-organizations.mdx#deleting-an-organization) To remove people from your organization open your organization **Settings**, page **People**, click the icon next to the member or committer you wish to remove, and select **Remove from organization**. @@ -81,9 +81,9 @@ To remove people from your organization open your organization **Settings**, pag For Enterprise plans where Codacy automatically manages seat usage for your organization, you can't remove people who had their commits analyzed within the last 90 days because their are still active within the billing period. However, if you remove them from the organization on your Git provider, they no longer have permissions to your repositories on Codacy. ::: -![Removing people from your organization](images/organization-people-remove.png) +![Removing people from your organization](./images/organization-people-remove.png) ## See also -- [Adding people to Codacy programmatically](../codacy-api/examples/adding-people-to-codacy-programmatically.md) -- [Roles and permissions for organizations](roles-and-permissions-for-organizations.md) +- [Adding people to Codacy programmatically](../codacy-api/examples/adding-people-to-codacy-programmatically.mdx) +- [Roles and permissions for organizations](roles-and-permissions-for-organizations.mdx) diff --git a/docusaurus/docs/organizations/managing-repositories.mdx b/docusaurus/docs/organizations/managing-repositories.mdx index d4e9eba8df..fdf426f1f1 100644 --- a/docusaurus/docs/organizations/managing-repositories.mdx +++ b/docusaurus/docs/organizations/managing-repositories.mdx @@ -4,7 +4,7 @@ title: Managing repositories import Paid from '../_includes/Paid.mdx'; -Users with the [necessary permissions on your Git provider](roles-and-permissions-for-organizations.md) can **add** repositories to Codacy to start analyzing them. The remaining organization members with access to the added repositories can then **follow** on Codacy the repositories of their interest. +Users with the [necessary permissions on your Git provider](roles-and-permissions-for-organizations.mdx) can **add** repositories to Codacy to start analyzing them. The remaining organization members with access to the added repositories can then **follow** on Codacy the repositories of their interest. :::caution To see your repositories on Codacy, make sure that you have the necessary permissions over the repositories on the Git provider and that Codacy has the necessary permissions to access the repositories. @@ -14,24 +14,24 @@ To see all the repositories that you follow on Codacy, open the page **Repositor Across the application, Codacy calculates and displays data for the repositories on this list. -![Repositories list](images/repositories.png) +![Repositories list](./images/repositories.png) -This page lists the repositories that you follow on Codacy sorted by [last updated date](organization-overview.md#last-updated-repositories), and allows you to compare the repositories on the list according to the following metrics: +This page lists the repositories that you follow on Codacy sorted by [last updated date](organization-overview.mdx#last-updated-repositories), and allows you to compare the repositories on the list according to the following metrics: -- [Grade](../faq/code-analysis/which-metrics-does-codacy-calculate.md#grade) -- [Issues](../faq/code-analysis/which-metrics-does-codacy-calculate.md#issues) -- [Complexity](../faq/code-analysis/which-metrics-does-codacy-calculate.md#complexity) -- [Duplication](../faq/code-analysis/which-metrics-does-codacy-calculate.md#duplication) -- [Coverage](../faq/code-analysis/which-metrics-does-codacy-calculate.md#code-coverage) +- [Grade](../faq/code-analysis/which-metrics-does-codacy-calculate.mdx#grade) +- [Issues](../faq/code-analysis/which-metrics-does-codacy-calculate.mdx#issues) +- [Complexity](../faq/code-analysis/which-metrics-does-codacy-calculate.mdx#complexity) +- [Duplication](../faq/code-analysis/which-metrics-does-codacy-calculate.mdx#duplication) +- [Coverage](../faq/code-analysis/which-metrics-does-codacy-calculate.mdx#code-coverage) The list also displays error and warning messages for repositories that have issues, such as when there are no committers added to the organization or when Codacy stopped having access to the repository. Hover the mouse cursor over the warning icons or open the repository to see more details. If you follow many repositories, you can use the search field above the list to quickly find a specific repository. -## Adding a repository {#adding-a-repository} +## Adding a repository \{#adding-a-repository\} -Users with the [necessary permissions](roles-and-permissions-for-organizations.md) can add a repository to Codacy to start analyzing it. +Users with the [necessary permissions](roles-and-permissions-for-organizations.mdx) can add a repository to Codacy to start analyzing it. :::note When a user adds a new repository to Codacy, all organization admins start following it automatically. @@ -43,7 +43,7 @@ To add new repositories to Codacy: 1. Click **Add** next to the repositories you want to add. If you have many repositories, you can use the search field above the list to quickly find a specific repository. - ![Adding a repository](images/repositories-add.png) + ![Adding a repository](./images/repositories-add.png) 1. When you're done, close the window to return to your repositories list. @@ -51,8 +51,8 @@ Although Codacy immediately starts analyzing newly added repositories, they disp ![Waiting for first analysis results](images/repositories-analyzing.png) -## Following or unfollowing a repository {#follow-unfollow} -Users with [no permission to add a repository](roles-and-permissions-for-organizations.md) to Codacy, can follow that repository after it has been added to Codacy, and stop following it at any time. +## Following or unfollowing a repository \{#follow-unfollow\} +Users with [no permission to add a repository](roles-and-permissions-for-organizations.mdx) to Codacy, can follow that repository after it has been added to Codacy, and stop following it at any time. To follow or unfollow repositories on Codacy: @@ -60,7 +60,7 @@ To follow or unfollow repositories on Codacy: 1. Click **Follow** or **Unfollow** next to the repositories you want to follow or unfollow. If you have many repositories, you can use the search field above the list to quickly find a specific repository. - ![Adding a repository](images/repositories-follow.png) + ![Adding a repository](./images/repositories-follow.png) 1. When you're done, close the window to return to your repositories list. @@ -71,9 +71,9 @@ Conversely, you automatically **stop following** a repository as soon as you try ::: -## Finding your repositories with Segments {#provider-segments} -Codacy allows you to utilise [**Segments**](../segments) to categorize and filter repositories more effectively within the Codacy platform. -:::note[Check out how to [enable and configure **Segments**](../segments/#enabling-segments)] +## Finding your repositories with Segments \{#provider-segments\} +Codacy allows you to utilise [**Segments**](../segments.mdx) to categorize and filter repositories more effectively within the Codacy platform. +:::note[Check out how to [enable and configure **Segments**](../segments.mdx#enabling-segments)] ::: ![Repositories list filter](images/organization-manage-repos-custom-properties.png) diff --git a/docusaurus/docs/organizations/managing-security-and-risk.md b/docusaurus/docs/organizations/managing-security-and-risk.mdx similarity index 90% rename from docusaurus/docs/organizations/managing-security-and-risk.md rename to docusaurus/docs/organizations/managing-security-and-risk.mdx index 691c84a253..01a13027d4 100644 --- a/docusaurus/docs/organizations/managing-security-and-risk.md +++ b/docusaurus/docs/organizations/managing-security-and-risk.mdx @@ -3,7 +3,7 @@ title: Managing security and risk --- -The Security and risk management feature helps you quickly identify, track, and address security across your organization by automatically opening time-bound, prioritized findings whenever security problems are detected in your organization repositories, in your [connected Jira instance](./integrations/jira-integration.md), or as a result of [penetration testing](https://www.codacy.com/security). +The Security and risk management feature helps you quickly identify, track, and address security across your organization by automatically opening time-bound, prioritized findings whenever security problems are detected in your organization repositories, in your [connected Jira instance](./integrations/jira-integration.mdx), or as a result of [penetration testing](https://www.codacy.com/security). Under Security and risk management, you can find the following pages to help you monitor the security of your repositories: @@ -13,14 +13,14 @@ Under Security and risk management, you can find the following pages to help you In addition, on these pages, you can [share filtered views of findings](#sharing-filtered-view), [export findings as a CSV file](#exporting-the-security-item-list), and [review severity rules and integration settings](#reviewing-settings) -## Overview {#dashboard} +## Overview \{#dashboard\} The **Security and risk management overview** page provides a high-level view of the security posture of your organization, including the number of open findings, the distribution of open findings by severity, the history of finding resolution, and a breakdown of the most high-risk repositories and most detected security categories. Use this page to assess your organization's security posture and its progress over time, identify areas for improvement, and share findings with stakeholders. To access the overview page, select an organization from the top navigation bar and select **Security and risk** on the left navigation sidebar. -![Security and risk management overview page](images/security-risk-management-overview.png) +![Security and risk management overview page](./images/security-risk-management-overview.png) The overview page includes six panels: @@ -31,8 +31,8 @@ The overview page includes six panels: - [Top 10 high-risk repositories](#top-10-high-risk-repositories) - [Top 10 common security categories](#top-10-common-security-categories) -To limit the information displayed in each panel, use the filter drop-down above the main area, and choose the relevant repositories, or utilise [**Segments**](../segments). -:::note[Check out how to [enable and configure **Segments**](../segments/#enabling-segments)] +To limit the information displayed in each panel, use the filter drop-down above the main area, and choose the relevant repositories, or utilise [**Segments**](../segments.mdx). +:::note[Check out how to [enable and configure **Segments**](../segments.mdx#enabling-segments)] ::: @@ -42,7 +42,7 @@ The **Open findings overview** panel displays the total number of open security To access the findings page with the corresponding filter applied, click on a number. -![Security and risk management open findings overview panel](images/security-risk-management-overview-open.png) +![Security and risk management open findings overview panel](./images/security-risk-management-overview-open.png) ### Open findings distribution @@ -52,7 +52,7 @@ To select the desired distribution, use the drop-down in the top right-hand corn To access the findings page with the corresponding filter applied, click on a number. -![Security and risk management open findings distribution panel](images/security-risk-management-overview-distribution.png) +![Security and risk management open findings distribution panel](./images/security-risk-management-overview-distribution.png) ### Open findings history @@ -60,7 +60,7 @@ The **Open findings history** graph shows the open findings trends over the past For a detailed view of the distribution on a specific week, hover over the graph. -![Security and risk management open findings history panel](images/security-risk-management-overview-history-open.png) +![Security and risk management open findings history panel](./images/security-risk-management-overview-history-open.png) ### Activity history @@ -70,7 +70,7 @@ To filter the graph by finding severity, use the drop-down in the top right-hand For a detailed view of the counts on a specific week, hover over the graph. -![Security and risk management activity history panel](images/security-risk-management-overview-history-activity.png) +![Security and risk management activity history panel](./images/security-risk-management-overview-history-activity.png) ### Top 10 high-risk repositories @@ -80,7 +80,7 @@ The **Top 10 high-risk repositories** list shows the repositories with the highe This panel may list fewer than ten repositories if there are fewer than ten repositories with open findings in the organization or if fewer than ten repositories are selected in the dropdown **Repository** filter. ::: -![Security and risk management high risk repositories panel](images/security-risk-management-overview-top-risk.png) +![Security and risk management high risk repositories panel](./images/security-risk-management-overview-top-risk.png) ### Top 10 common security categories @@ -88,44 +88,44 @@ The **Top 10 common security categories** list shows the most common security ca To access the findings page with the corresponding filter applied, click on a category. -![Security and risk management top categories panel](images/security-risk-management-overview-top-categories.png) +![Security and risk management top categories panel](./images/security-risk-management-overview-top-categories.png) -## Findings {#item-list} +## Findings \{#item-list\} The **Security and risk management findings** page displays a filtered list of findings. By default, you are shown the findings that are currently opened and this list is sorted by **Latest findings** found. You can click on the sort dropdown to sort the findings by detection date - latest or oldest. Use this page to review and prioritize findings and track the progress of your security efforts. To access the findings page, access the [overview page](#dashboard) and click the **Findings** tab. -![Security and risk management findings page](images/security-risk-management-findings.png) +![Security and risk management findings page](./images/security-risk-management-findings.png) On the left section of the page, besides sorting, you can update the filtering criteria by clicking the [**Segments**](../segments) , **Repositories**, **Severities**, **Statuses**, **Security categories**, or **Scan types** dropdowns above the list. -:::note[Check out how to [enable and configure **Segments**](../segments/#enabling-segments)] +:::note[Check out how to [enable and configure **Segments**](../segments.mdx#enabling-segments)] ::: On the right section, you can view the filtered list of findings. Each finding card offers a quick overview of the vulnerability found, including its title, [source platform](#opening-and-closing-items), [scan type](#scan-types), [security category](#supported-security-categories), and related information such as the repository name, Jira issue key, or affected URL targets. To find out more, click this overview to navigate to the finding details on the source platform. -![Security and risk management finding page](images/security-risk-management-finding-details.png) +![Security and risk management finding page](./images/security-risk-management-finding-details.png) The same Common Vulnerability and Exposure can be classified with different severities in different sources, like cve.org or NVD, and Trivy uses these and other sources to update their database. As such, there may be situations where the severity attributed to a Finding by Trivy is not in line with a specific source. Subsequent analysis can then close a Finding and re-open it with a different severity, if a Trivy database update occurs. -## Sharing a filtered view of findings {#sharing-filtered-view} +## Sharing a filtered view of findings \{#sharing-filtered-view\} To share the current view of the overview or findings page, click the **Copy URL** button in the top right-hand corner of the page. This action copies the URL with the current filters applied to the clipboard. -:::caution[ [**Segments**](../segments) filter won't be considered when sharing the filtered view] +:::caution[ [**Segments**](../segments.mdx) filter won't be considered when sharing the filtered view] ::: -## Ignoring findings {#ignoring-findings} -:::note[This feature is available only to organization admins and organization managers except for findings detected on [Git repositories](#opening-and-closing-items). For those findings, [repository permissions are respected](../repositories/issues.md#ignoring-and-managing-issues)] +## Ignoring findings \{#ignoring-findings\} +:::note[This feature is available only to organization admins and organization managers except for findings detected on [Git repositories](#opening-and-closing-items). For those findings, [repository permissions are respected](../repositories/issues.mdx.md#ignoring-and-managing-issues)] ::: You can ignore a finding using the context menu both in the findings list page and the findings details page. When ignoring a finding you can optionally specify a reason for doing so. -![Security and risk management finding ignore](images/security-risk-management-finding-ignore.png) +![Security and risk management finding ignore](./images/security-risk-management-finding-ignore.png) From an organization standpoint, ignoring a finding means that you accept the risk it poses and you're not planning on addressing the issue. From Codacy's standpoint, ignoring a finding means it will be removed from the metrics featured in the [overview page](#dashboard) page. Note that the [Open Findings history](#open-findings-history) chart will only be changed at the start of next week. -:::note[[Jira](./integrations/jira-integration.md) findings can't be ignored in Codacy. You should closed the issue directly in Jira.] +:::note[[Jira](./integrations/jira-integration.mdx) findings can't be ignored in Codacy. You should closed the issue directly in Jira.] ::: :::caution[Ignoring findings detected on [Git repositories](#opening-and-closing-items) will also [ignore the issue at the repository level](../repositories/issues.md#ignoring-and-managing-issues).] @@ -133,30 +133,30 @@ From Codacy's standpoint, ignoring a finding means it will be removed from the m You can still see **Ignored** findings in the [findings list](#item-list), by filtering for the **Ignored** status in the **Statuses** dropdown. You can assess which status a finding has at his overview, on the right top corner. -![Security and risk management finding unignore list](images/security-risk-management-finding-unignore-list.png) +![Security and risk management finding unignore list](./images/security-risk-management-finding-unignore-list.png) An Ignored finding can be **unignored** directly from the [findings list](#item-list) or by going to the same menu in the finding details page. Note that in this page you can also find out more about who ignored the finding and why, if such a reason was provided. Unignoring a finding reverts the effects of ignoring it. -![Security and risk management finding unignore](images/security-risk-management-finding-unignore.png) +![Security and risk management finding unignore](./images/security-risk-management-finding-unignore.png) -:::caution[Unignoring findings detected on [Git repositories](#opening-and-closing-items) will also [unignore the issue at the repository level](../repositories/issues.md#ignoring-and-managing-issues).] +:::caution[Unignoring findings detected on [Git repositories](#opening-and-closing-items) will also [unignore the issue at the repository level](../repositories/issues.mdx#ignoring-and-managing-issues).] ::: -:::note[Ignoring and unignoring findings are [auditable actions](../organizations/audit-logs-for-organizations.md#organization).] +:::note[Ignoring and unignoring findings are [auditable actions](../organizations/audit-logs-for-organizations.mdx#organization).] ::: -## Exporting findings {#exporting-the-security-item-list} +## Exporting findings \{#exporting-the-security-item-list\} :::note[This feature is available only to organization admins and organization managers] ::: To export a list of findings as a CSV file, click the options menu in the top right-hand corner of the page and select **Export findings (.csv)**. The exported list always includes all findings, ignoring any applied filters. -## Reviewing severity rules and integration settings {#reviewing-settings} -To [review the severity assignment rules](#item-severities-and-deadlines) or manage the integration with [Jira](./integrations/jira-integration.md) or [Slack](./integrations/slack-integration.md), click the options menu in the top right-hand corner of the page and select respectively **See severity rules** or **View integrations**. +## Reviewing severity rules and integration settings \{#reviewing-settings\} +To [review the severity assignment rules](#item-severities-and-deadlines) or manage the integration with [Jira](./integrations/jira-integration.mdx) or [Slack](./integrations/slack-integration.mdx), click the options menu in the top right-hand corner of the page and select respectively **See severity rules** or **View integrations**. -## How Codacy manages findings {#opening-and-closing-items} +## How Codacy manages findings \{#opening-and-closing-items\} :::caution To open and close findings, Codacy must detect when the associated issues are introduced and fixed. The detection logic is platform-dependent and is described below. ::: @@ -170,12 +170,12 @@ Codacy closes a finding when the source platform stops detecting the associated The following section details when Codacy opens and closes findings for each supported platform. -### How Codacy manages findings detected on Git repositories {#opening-and-closing-codacy-items} +### How Codacy manages findings detected on Git repositories \{#opening-and-closing-codacy-items\} :::note To make sure that Codacy detects security issues correctly: -- [Enable code patterns](../repositories-configure/configuring-code-patterns.md) belonging to the Security category. These patterns are enabled by default, but may not be on custom configurations. -- Alternatively, [apply a coding standard](using-coding-standards.md) that includes patterns belonging to the Security category. +- [Enable code patterns](../repositories-configure/configuring-code-patterns.mdx) belonging to the Security category. These patterns are enabled by default, but may not be on custom configurations. +- Alternatively, [apply a coding standard](using-coding-standards.mdx) that includes patterns belonging to the Security category. - Confirm that the latest [commits](../repositories/commits.mdx) to the default branches of your repositories are analyzed. ::: @@ -185,16 +185,16 @@ Codacy opens a new finding when it detects a new security issue on the default b Codacy closes a finding in either of the following cases: - Codacy detects that the associated issue isn't present in the most recent analyzed commit and therefore is fixed -- You [ignore the associated issue](../repositories/issues.md#ignoring-and-managing-issues) -- You [disable the tool](../repositories-configure/configuring-code-patterns.md) that found the associated issue +- You [ignore the associated issue](../repositories/issues.mdx#ignoring-and-managing-issues) +- You [disable the tool](../repositories-configure/configuring-code-patterns.mdx) that found the associated issue :::caution Deleting a repository deletes all open findings belonging to that repository. ::: -### How Codacy manages findings detected during software composition analysis (SCA) {#opening-and-closing-sca-items} +### How Codacy manages findings detected during software composition analysis (SCA) \{#opening-and-closing-sca-items\} :::note -To make sure that Codacy detects dependency issues correctly, [enable code patterns](../repositories-configure/configuring-code-patterns.md) belonging to the Trivy tool. +To make sure that Codacy detects dependency issues correctly, [enable code patterns](../repositories-configure/configuring-code-patterns.mdx) belonging to the Trivy tool. ::: Vulnerable dependencies are a specific GIT repository finding. Similarly to other repository findings, Codacy opens an issue whenever a commit is analyzed. @@ -206,9 +206,9 @@ The proactive SCA scanning is a business tier feature. If you are a Codacy Pro c ::: -### How Codacy manages findings detected on Jira {#opening-and-closing-jira-items} +### How Codacy manages findings detected on Jira \{#opening-and-closing-jira-items\} :::note -- For Codacy to detect Jira issues, you must [integrate Jira with Security and risk management](./integrations/jira-integration.md). +- For Codacy to detect Jira issues, you must [integrate Jira with Security and risk management](./integrations/jira-integration.mdx). - Codacy retrieves updates from Jira once a day. If an issue is opened and closed on the same day, Codacy may not detect it. - To make sure that Codacy detects Jira issues correctly, assign the **security** label when creating the issue or immediately after. ::: @@ -217,7 +217,7 @@ Codacy opens a new finding when it detects a new Jira issue with a **security** Codacy closes a finding when it detects that the associated Jira issue is marked as Closed. -### How Codacy manages findings detected during penetration testing {#opening-and-closing-pen-testing-items} +### How Codacy manages findings detected during penetration testing \{#opening-and-closing-pen-testing-items\} :::note Penetration testing is available upon request and is provided by a third-party partner. See [how to request penetration testing for your organization](https://www.codacy.com/security). ::: @@ -226,16 +226,16 @@ Codacy opens a finding for each security issue detected during a penetration tes Codacy closes a finding when a subsequent penetration test doesn't detect the underlying security issue. -### How Codacy manages findings detected during application scanning (DAST) {#opening-and-closing-app-scanning-items} +### How Codacy manages findings detected during application scanning (DAST) \{#opening-and-closing-app-scanning-items\} :::note -To view application scanning findings, also known as DAST (Dynamic Application Security Testing) findings, you must first [generate a DAST report and upload it to Codacy](../codacy-api/examples/uploading-dast-results.md). +To view application scanning findings, also known as DAST (Dynamic Application Security Testing) findings, you must first [generate a DAST report and upload it to Codacy](../codacy-api/examples/uploading-dast-results.mdx). ::: Codacy opens a finding for each security issue detected in the DAST report. If subsequent reports identify the same issue, Codacy updates the existing finding. Codacy closes a finding when it's not detected in a subsequent DAST report. If a previously closed issue reappears in a later report, Codacy reopens the finding. -## Finding severities and deadlines {#item-severities-and-deadlines} +## Finding severities and deadlines \{#item-severities-and-deadlines\} The following table defines finding severities and the default number of days to the deadline to fix the associated security issue, based on the importance of the underlying issue: | Finding
            severity |
            Days to deadline | Underlying Codacy
            issue severity | Underlying Jira
            issue priority 1 | @@ -247,8 +247,8 @@ The following table defines finding severities and the default number of days to 1 Those listed are the default Jira priority names. If you rename a default Jira priority, it keeps the correct mapping. -### Customize deadlines {#item-configurable-deadlines} -:::note[This feature is available only to [organization admins and organization managers](../organizations/roles-and-permissions-for-organizations.md).] +### Customize deadlines \{#item-configurable-deadlines\} +:::note[This feature is available only to [organization admins and organization managers](../organizations/roles-and-permissions-for-organizations.mdx).] ::: You can configure your findings deadline by clicking on the "Configure SLAs" button, on the right corner of the page. @@ -262,7 +262,7 @@ In the open configuration modal you'll be able to input your deadline preference As soon as changes are saved, your open findings statuses will be updated accordingly. You are also able to reset to Codacy default deadline values (see table above) at any time. -## Finding statuses {#item-statuses} +## Finding statuses \{#item-statuses\} The following table describes how finding statuses map to deadlines:
@@ -308,12 +308,12 @@ Note that some issues just don't have a security category. These issues will rem Each Codacy issue reported by Security and risk management belongs to one of the following security categories: - +-->*/} | Security category | Description | |------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| @@ -359,7 +359,7 @@ The following table lists the available scan types and their descriptions: Security and risk management supports checking the languages and infrastructure-as-code platforms below for any Codacy security issues reported by the corresponding tools: - +-->*/}
@@ -539,7 +539,7 @@ Security and risk management supports checking the languages and infrastructure-
-## Dependencies {#dependencies-list} +## Dependencies \{#dependencies-list\} :::caution The dependency tab is a business-tier feature. If you are a Codacy Pro customer interested in upgrading to gain access to this feature, contact our customer success team. ::: @@ -549,7 +549,7 @@ The **Security and risk management Dependencies** page displays a unified view o To access the dependencies page, access the [overview page](#dashboard) and click the **Dependencies** tab. -![Security and risk management dependencies page](images/security-risk-management-dependencies-list.png) +![Security and risk management dependencies page](./images/security-risk-management-dependencies-list.png) When viewing dependencies, you'll be presented with a list of the dependencies used by all repositories in your organization. For each dependency, you'll be able to see how many repositories are making use of it, how many different versions you are using across all repositories, and how many security findings were found due to the presence of that dependency. @@ -560,11 +560,11 @@ You can sort the dependencies list using the sort dropdown to prioritize depende You're also able to click any dependency to find out more information about it. -![Security and risk management dependency page](images/security-risk-management-dependencies-single.png) +![Security and risk management dependency page](./images/security-risk-management-dependencies-single.png) The dependency overview page offers a quick bird's-eye view of that particular dependency. You'll be able to see all different versions that are being used, including which repository is using them, the oldest and most recent versions you're leveraging, as well as the highest criticality of security issues, the license 6 applied to any particular version of that dependency, and the [OSSF Scorecard](#ossf-scorecard) security assessment. -### OSSF Scorecard {#ossf-scorecard} +### OSSF Scorecard \{#ossf-scorecard\} The **OSSF Scorecard** feature provides additional security insights for your dependencies by displaying security assessment data from the Open Source Security Foundation (OSSF) Scorecard project. The OSSF Scorecard is an automated tool that evaluates open source repositories against a comprehensive set of security best practices. It performs various checks on a dependency's repository to assess whether the project follows security best practices and helps determine if the dependency is safe for consumption. @@ -584,18 +584,18 @@ When available, OSSF Scorecard information appears on the dependency overview pa This information helps you make informed decisions about the security risks associated with your dependencies and identify which dependencies may require additional scrutiny or alternative options. -![Security and risk management OSSF scorecard report](images/security-risk-management-ossf-scorecard.png) +![Security and risk management OSSF scorecard report](./images/security-risk-management-ossf-scorecard.png) 1: Semgrep supports additional security rules when signing up for [Semgrep Pro](https://semgrep.dev/pricing/). 2: Currently, Trivy only supports scanning YAML files on this platform. -3: Supported as a [client-side tool](../repositories-configure/local-analysis/client-side-tools.md). +3: Supported as a [client-side tool](../repositories-configure/local-analysis/client-side-tools.mdx). 4: Includes the plugin [Find Security Bugs](https://find-sec-bugs.github.io/). 5: Includes the plugins [no-unsanitized](https://www.npmjs.com/package/eslint-plugin-no-unsanitized), [security](https://www.npmjs.com/package/eslint-plugin-security), [security-node](https://www.npmjs.com/package/eslint-plugin-security-node), and [xss](https://www.npmjs.com/package/eslint-plugin-xss). -6: Visit the [supported languages and tools](../getting-started/supported-languages-and-tools.md#supported-languages-and-tools) page for a list of supported languages. +6: Visit the [supported languages and tools](../getting-started/supported-languages-and-tools.mdx#supported-languages-and-tools) page for a list of supported languages. -## App scanning {#app-scanning} +## App scanning \{#app-scanning\} :::caution App scanning is a business feature. If you are a Codacy Pro customer, contact our customer success team to access a short trial. ::: @@ -604,7 +604,7 @@ The **Security and risk management > App scanning** page allows organizations to To access the App scanning page, go to the [Overview page](#dashboard) and click the **App scanning** tab. -![Security and risk management app scanning page](images/security-risk-management-app-scanning.png) +![Security and risk management app scanning page](./images/security-risk-management-app-scanning.png) App scanning analyzes applications in production or production-like environments to help identify vulnerabilities such as misconfigurations, insecure authentication, or other security issues that occur in real-world usage. Because it doesn't rely on access to source code, it’s language-agnostic and useful for validating security across your entire stack. @@ -623,7 +623,7 @@ Codacy supports two types of scanning: - Insecure CORS or HTTP method configurations :::note -Already using ZAP? [Upload your results via the API.](../codacy-api/examples/uploading-dast-results.md) +Already using ZAP? [Upload your results via the API.](../codacy-api/examples/uploading-dast-results.mdx) ::: ### Creating an App Scanning target @@ -659,10 +659,10 @@ If exposing your API specification isn't feasible for your team, let us know via You can initiate scans in two ways: - From the **App scanning** tab in the Security and risk management dashboard -- By automating scans using [Codacy's API](../codacy-api/examples/triggering-dast-scans.md) +- By automating scans using [Codacy's API](../codacy-api/examples/triggering-dast-scans.mdx) :::caution -Only [admins and organization managers](../organizations/roles-and-permissions-for-organizations.md) can create targets and start scans, both in-app and via the API. +Only [admins and organization managers](../organizations/roles-and-permissions-for-organizations.mdx) can create targets and start scans, both in-app and via the API. :::
@@ -694,6 +694,6 @@ Currently, DAST findings are only visible to admin and organization admin roles. As previously mentioned, once a scan completes, results will be available under the **Findings** tab. Use the **Scan types > DAST/App scanning** filter to view relevant findings. Additionaly, you can click on a configured target to expand all of that target's results. -![DAST target results](images/security-risk-management-app-scanning-see-results.png) +![DAST target results](./images/security-risk-management-app-scanning-see-results.png) Follow our [roadmap](https://roadmap.codacy.com) for updates on this feature. diff --git a/docusaurus/docs/organizations/organization-overview.mdx b/docusaurus/docs/organizations/organization-overview.mdx index 9eb1a5617e..55a2da368a 100644 --- a/docusaurus/docs/organizations/organization-overview.mdx +++ b/docusaurus/docs/organizations/organization-overview.mdx @@ -5,7 +5,7 @@ description: The Organization overview provides an overview of the repositories import DashboardApiReportNote from './../_includes/DashboardApiReportNote.mdx' -The **Organization overview** provides an overview of the repositories belonging to your Git provider organization that you [follow on Codacy](managing-repositories.md). Here you can compare their statuses and check for items that require your attention. +The **Organization overview** provides an overview of the repositories belonging to your Git provider organization that you [follow on Codacy](managing-repositories.mdx). Here you can compare their statuses and check for items that require your attention. To access your Organization overview, select an organization from the top navigation bar and select **Overview** on the left navigation sidebar. @@ -43,7 +43,7 @@ If you have over 8 repositories, the chart displays your repositories grouped by ![Overall quality chart with grouped repositories](images/organization-overview-overall-quality-grouped.png) :::tip -If you don't have coverage set up for any of your repositories yet, the coverage tab provides you with instructions on [how to add coverage for your repositories](../coverage-reporter/index.md). +If you don't have coverage set up for any of your repositories yet, the coverage tab provides you with instructions on [how to add coverage for your repositories](../coverage-reporter/index.mdx). ::: @@ -64,6 +64,6 @@ The exact value of the last updated date of the repositories depends on your Git ## See also -- [Which metrics does Codacy calculate?](../faq/code-analysis/which-metrics-does-codacy-calculate.md) -- [Using the Codacy API to obtain current issues in repositories](../codacy-api/examples/obtaining-current-issues-in-repositories.md) -- [Using the Codacy API to obtain code quality metrics for files](../codacy-api/examples/obtaining-code-quality-metrics-for-files.md) +- [Which metrics does Codacy calculate?](../faq/code-analysis/which-metrics-does-codacy-calculate.mdx) +- [Using the Codacy API to obtain current issues in repositories](../codacy-api/examples/obtaining-current-issues-in-repositories.mdx) +- [Using the Codacy API to obtain code quality metrics for files](../codacy-api/examples/obtaining-code-quality-metrics-for-files.mdx) diff --git a/docusaurus/docs/organizations/roles-and-permissions-for-organizations.mdx b/docusaurus/docs/organizations/roles-and-permissions-for-organizations.mdx index 0ecc622837..4988c9d6be 100644 --- a/docusaurus/docs/organizations/roles-and-permissions-for-organizations.mdx +++ b/docusaurus/docs/organizations/roles-and-permissions-for-organizations.mdx @@ -20,7 +20,7 @@ To review the permissions granted by each role, see the tables for each Git prov - [Permissions for GitLab](#permissions-for-gitlab) - [Permissions for Bitbucket](#permissions-for-bitbucket) -To list and manage the members of your Codacy organization, see the [Managing people](managing-people.md) page. +To list and manage the members of your Codacy organization, see the [Managing people](managing-people.mdx) page. ## Configuring repository management permissions \{#change-analysis-configuration\} @@ -60,10 +60,10 @@ To assign the organization manager role: 1. In the **Organization managers** area, use the search field to find the relevant organization member and click the member's name. :::note - You can only assign the organization manager role to [members of your organization](./managing-people.md#joining). + You can only assign the organization manager role to [members of your organization](./managing-people.mdx#joining). ::: - ![Security and risk management access management](images/roles-permissions-organization-manager-assign.png) + ![Security and risk management access management](./images/roles-permissions-organization-manager-assign.png) ### Revoking the organization manager role @@ -232,11 +232,11 @@ The table below maps the GitHub Cloud and GitHub Enterprise roles to the corresp -1: Outside collaborators aren't supported as members of organizations on Codacy. You can still [add outside collaborators to Codacy](managing-people.md#adding-people) so that Codacy analyzes their commits to private repositories, but they won't be able to join your Codacy organization. -2: Joining an organization may need an approval depending on your setting for [accepting new people](changing-your-plan-and-billing.md#allowing-new-people-to-join-your-organization). +1: Outside collaborators aren't supported as members of organizations on Codacy. You can still [add outside collaborators to Codacy](managing-people.mdx#adding-people) so that Codacy analyzes their commits to private repositories, but they won't be able to join your Codacy organization. +2: Joining an organization may need an approval depending on your setting for [accepting new people](changing-your-plan-and-billing.mdx#allowing-new-people-to-join-your-organization). 3: These users can only see security items originating from Codacy repositories that they follow. 4: Requires that an organization owner has given the Codacy GitHub App access to the repositories to add or remove. -5: [Audit logs](./audit-logs-for-organizations.md) are available only on [Business plan](https://www.codacy.com/pricing). +5: [Audit logs](./audit-logs-for-organizations.mdx) are available only on [Business plan](https://www.codacy.com/pricing). ## Permissions for GitLab @@ -396,10 +396,10 @@ The table below maps the GitLab Cloud and GitLab Enterprise roles to the corresp -1: External users aren't supported as members of organizations on Codacy. You can still [add external users to Codacy](managing-people.md#adding-people) so that Codacy analyzes their commits to private repositories, but they won't be able to join your Codacy organization. -2: Joining an organization may need an approval depending on your setting for [accepting new people](changing-your-plan-and-billing.md#allowing-new-people-to-join-your-organization). +1: External users aren't supported as members of organizations on Codacy. You can still [add external users to Codacy](managing-people.mdx#adding-people) so that Codacy analyzes their commits to private repositories, but they won't be able to join your Codacy organization. +2: Joining an organization may need an approval depending on your setting for [accepting new people](changing-your-plan-and-billing.mdx#allowing-new-people-to-join-your-organization). 3: These users can only see security items originating from Codacy repositories that they follow. -4: [Audit logs](./audit-logs-for-organizations.md) are available only on [Business plan](https://www.codacy.com/pricing). +4: [Audit logs](./audit-logs-for-organizations.mdx) are available only on [Business plan](https://www.codacy.com/pricing). ## Permissions for Bitbucket @@ -510,11 +510,11 @@ The table below maps the Bitbucket Cloud and Bitbucket Server roles to the corre 1: Codacy can't distinguish the Bitbucket roles Read and Write because of a limitation on the Bitbucket API. -2: Joining an organization may need an approval depending on your setting for [accepting new people](changing-your-plan-and-billing.md#allowing-new-people-to-join-your-organization). +2: Joining an organization may need an approval depending on your setting for [accepting new people](changing-your-plan-and-billing.mdx#allowing-new-people-to-join-your-organization). 3: These users can only see security items originating from Codacy repositories that they follow. -4: [Audit logs](./audit-logs-for-organizations.md) are available only on [Business plan](https://www.codacy.com/pricing). +4: [Audit logs](./audit-logs-for-organizations.mdx) are available only on [Business plan](https://www.codacy.com/pricing). ## See also -- [Managing people](managing-people.md) -- [Accepting new people to your organization](changing-your-plan-and-billing.md#allowing-new-people-to-join-your-organization) +- [Managing people](managing-people.mdx) +- [Accepting new people to your organization](changing-your-plan-and-billing.mdx#allowing-new-people-to-join-your-organization) diff --git a/docusaurus/docs/organizations/segments.md b/docusaurus/docs/organizations/segments.mdx similarity index 89% rename from docusaurus/docs/organizations/segments.md rename to docusaurus/docs/organizations/segments.mdx index 2da0b94b16..7ae749893c 100644 --- a/docusaurus/docs/organizations/segments.md +++ b/docusaurus/docs/organizations/segments.mdx @@ -11,17 +11,17 @@ Segments are dimensions that Codacy reads from your provider that organizes repo ## Where can Segments be utilised? -- [Repository list](../managing-repositories/#provider-segments) -- [Security & Management Risk](../managing-security-and-risk/) +- [Repository list](../managing-repositories.mdx#provider-segments) +- [Security & Management Risk](../managing-security-and-risk.mdx) -## Enabling Segments {#enabling-segments} +## Enabling Segments \{#enabling-segments\} To enable Segments, an initial sync between your provider and Codacy needs to happen. Once completed, you can use Segments to better locate and organize repositories within Codacy. ![Segments sync](../organizations/images/Segments-no-sync.png) ![Segments after sync](../organizations/images/segments-after-sync.png)

-### GitHub Custom Properties {#github-custom-properties} +### GitHub Custom Properties \{#github-custom-properties\} Custom properties allow you to assign tags or metadata to repositories, making it easier to categorize and filter them. Create, use, and manage custom properties for your repositories directly in GitHub. > Refer to [GitHub's official documentation](https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization#adding-custom-properties) for detailed steps on how to add, edit, and manage repository **Custom Properties**. @@ -32,13 +32,10 @@ For changes to repository **Custom Properties** in GitHub to be **automatically* If the permission is **not accepted**, users will still be able to use Repository Custom Properties as filters in Codacy, but will need to manually trigger a sync. This can be done using the **manual sync** button available in the filter dropdown, which allows users to synchronize changes from GitHub, though the process may take longer. ::: -### Bitbucket Projects {#bitbucket-projects} +### Bitbucket Projects \{#bitbucket-projects\} Bitbucket Projects allow you to organize your repositories into relevant contexts for you, making it easier to categorize and filter them. Create, use, and manage Projects for your repositories directly in Bitbucket. > Refer to [Bitbucket's official documentation](https://support.atlassian.com/bitbucket-cloud/docs/create-a-project/) for detailed steps on how to add, edit, and manage **Projects**. #### Keep Segments in sync After the first sync is done, Bitbucket Projects will continue to be insync with Codacy automatically. - - -

diff --git a/docusaurus/docs/organizations/using-coding-standards.md b/docusaurus/docs/organizations/using-coding-standards.mdx similarity index 88% rename from docusaurus/docs/organizations/using-coding-standards.md rename to docusaurus/docs/organizations/using-coding-standards.mdx index c56c607a0b..dc178abf65 100644 --- a/docusaurus/docs/organizations/using-coding-standards.md +++ b/docusaurus/docs/organizations/using-coding-standards.mdx @@ -17,7 +17,7 @@ This page covers the following topics: - [Using a coding standard alongside repository-level customizations](#using-with-repository-configuration) - [Using multiple coding standards](#using-multiple) -## Creating a coding standard {#creating} +## Creating a coding standard \{#creating\} :::note Codacy currently supports up to 10 coding standards per organization. ::: @@ -40,11 +40,11 @@ To create a coding standard for your organization: With the advanced setup, you can optionally **select a repository as the baseline** for the new coding standard. This is useful if you already have a well-configured repository that you wish to use as a template. - ![Creating a new coding standard](images/coding-standard-create.png) + ![Creating a new coding standard](./images/coding-standard-create.png) 1. Click **Create coding standard** to proceed to the [guided setup](#guided-setup) or [advanced setup](#advanced-settings), depending on your choice. -## Configuring a coding standard (guided setup) {#guided-setup} +## Configuring a coding standard (guided setup) \{#guided-setup\} If you selected **Guided setup** when [creating a new coding standard](#creating), follow these steps: 1. Adjust the sensitivity of the coding standard from **Essential** to **Comprehensive** for each issue category group: @@ -56,7 +56,7 @@ If you selected **Guided setup** when [creating a new coding standard](#creating Initially, set the sensitivity to **Essential** for most category groups to focus on critical code patterns. It helps streamline the integration process with Codacy without overwhelming developers with too many reported issues. You can gradually include more patterns as needed. ::: - ![Coding standard presets](images/coding-standard-presets.png) + ![Coding standard presets](./images/coding-standard-presets.png) 1. Click **Next: Select and apply to repositories**. @@ -64,9 +64,9 @@ If you selected **Guided setup** when [creating a new coding standard](#creating Codacy will start using the new coding standard on the next analysis of each selected repository. - ![Applying the coding standard to repositories](images/coding-standard-apply.png) + ![Applying the coding standard to repositories](./images/coding-standard-apply.png) -## Configuring a coding standard (advanced setup) {#advanced-settings} +## Configuring a coding standard (advanced setup) \{#advanced-settings\} If you selected **Advanced setup** when [creating a new coding standard](#creating) or are editing an existing coding standard, follow these steps: 1. Select the programming languages that the new coding standard should include. @@ -81,7 +81,7 @@ If you selected **Advanced setup** when [creating a new coding standard](#creati 1. In the next step, explicitly disable the tools that you don't want to use. ::: - ![Selecting the languages for the coding standard](images/coding-standard-select-languages.png) + ![Selecting the languages for the coding standard](./images/coding-standard-select-languages.png) 1. Click **Next: Tools and patterns**. @@ -92,16 +92,16 @@ If you selected **Advanced setup** when [creating a new coding standard](#creati - You can also use the **Discover patterns** option to find patterns across all tools. :::tip - - Use the filters to find the relevant tools and code patterns. The recommended configurations are manually curated by Codacy or based on tool defaults and are marked with the icon ![Recommended icon](images/coding-standard-recommended-icon.png). + - Use the filters to find the relevant tools and code patterns. The recommended configurations are manually curated by Codacy or based on tool defaults and are marked with the icon ![Recommended icon](./images/coding-standard-recommended-icon.png). - To toggle multiple code patterns at once, click the checkbox of the first pattern and **Shift+click** the checkbox of the last pattern in a range. - To toggle all the code patterns visible on the list, click the checkbox on the header of the code patterns list. If there are more code patterns to load on the list, you can click the link **Enable/Disable all <N> patterns** to toggle all patterns matching the current filters. ::: - ![Configuring the tools and patterns for the coding standard](images/coding-standard-configure-tools.png) + ![Configuring the tools and patterns for the coding standard](./images/coding-standard-configure-tools.png) 1. Proceed with the remaining wizard steps to finish [creating](#creating) or [editing](#editing) your coding standard. -## Defining default coding standards {#set-default} +## Defining default coding standards \{#set-default\} For ease of management, you can define multiple default coding standards that automatically apply to new repositories. In the absence of default coding standards, Codacy applies global defaults to all new repositories. :::note @@ -118,7 +118,7 @@ To mark an existing coding standard as default: ![Setting a coding standard as the default](images/coding-standard-set-default.png) -## Editing a coding standard {#editing} +## Editing a coding standard \{#editing\} :::note Any edits to the configurations of a coding standard are automatically applied on the next analysis of each associated repository. ::: @@ -129,7 +129,7 @@ To edit an existing coding standard or change the repositories that follow that 1. Click the edit icon on the coding standard card. - ![Editing an existing coding standard](images/coding-standard-edit.png) + ![Editing an existing coding standard](./images/coding-standard-edit.png) 1. Edit the current coding standard configurations and click the button **Next** to advance to the following [configuration pages](#advanced-settings): @@ -141,7 +141,7 @@ To edit an existing coding standard or change the repositories that follow that On this page, you can rename the coding standard by clicking the edit icon next to the name of the coding standard. - ![Renaming a coding standard](images/coding-standard-rename.png) + ![Renaming a coding standard](./images/coding-standard-rename.png) - **Choose tools and patterns**: the tool and code pattern configurations of the coding standard. - **Select and apply to repositories**: the repositories that follow the coding standard. @@ -150,7 +150,7 @@ To edit an existing coding standard or change the repositories that follow that Codacy will start using the updated coding standard on the next analysis of each selected repository. -## Deleting a coding standard {#deleting} +## Deleting a coding standard \{#deleting\} To delete a coding standard: 1. Open your organization **Policies** page, tab **Coding standards**. @@ -159,13 +159,13 @@ To delete a coding standard: ![Deleting a coding standard](images/coding-standard-delete.png) -## Using a coding standard alongside tool configuration files {#using-with-tool-configuration} +## Using a coding standard alongside tool configuration files \{#using-with-tool-configuration\} When using a [tool configuration file](../repositories-configure/configuring-code-patterns.md#using-your-own-tool-configuration-files) alongside a coding standard, the configuration file controls the code patterns, while the coding standard controls whether the tool is enabled or disabled. -## Using a coding standard alongside repository-level customizations {#using-with-repository-configuration} +## Using a coding standard alongside repository-level customizations \{#using-with-repository-configuration\} Tools and patterns enabled by a coding standard are enforced and cannot be disabled at the repository level. You can add extra tools and patterns, if these are not already enabled by any applied coding standard. -## Using multiple coding standards {#using-multiple} +## Using multiple coding standards \{#using-multiple\} When Codacy analyzes your code using multiple coding standards, it merges the tools and patterns from each standard. A common strategy is to start with a baseline standard containing fundamental rules that apply across all repositories, then layer additional standards based on specific needs. You can organize these additional standards by: @@ -175,7 +175,7 @@ A common strategy is to start with a baseline standard containing fundamental ru - **Languages or frameworks:** for example, React, Java or Python - **Teams or tribes:** Allow different teams or tribes to maintain their own standards while inheriting organization-wide rules -![Coding standards strategies](images/coding-standard-strategy.png) +![Coding standards strategies](./images/coding-standard-strategy.png) :::note You can apply up to 10 coding standards to your organization. Standards can overlap, meaning a single repository can follow multiple standards simultaneously. @@ -185,14 +185,14 @@ You can apply up to 10 coding standards to your organization. Standards can over If the same pattern appears in multiple standards, the version from the most recently created and applied standard (with its parameters) takes precedence. ::: -### Implementation guidelines {#standards-implementation} +### Implementation guidelines \{#standards-implementation\} Consider these points when implementing coding standards: - **Keep maintenance simple:** Minimize overlap between standards and establish clear ownership to reduce maintenance complexity -- **Manage access:** Assign organization managers or Git provider admin roles to users who should manage (create, edit and delete) organization-level standards (learn more in [Roles and Permissions](./roles-and-permissions-for-organizations.md/#managing-the-organization-manager-role)) +- **Manage access:** Assign organization managers or Git provider admin roles to users who should manage (create, edit and delete) organization-level standards (learn more in [Roles and Permissions](./roles-and-permissions-for-organizations.mdx#managing-the-organization-manager-role)) - **Be mindful of repository customization:** Individual repositories can have their own specific overrides through additional code patterns, custom tool configurations, or local configuration files ## See also -- [Configuring code patterns on each repository](../repositories-configure/configuring-code-patterns.md) +- [Configuring code patterns on each repository](../repositories-configure/configuring-code-patterns.mdx) - [How to implement Google JavaScript style guide with Codacy](https://blog.codacy.com/implement-google-javascript-style-guide-with-codacy/) diff --git a/docusaurus/docs/organizations/using-gate-policies.md b/docusaurus/docs/organizations/using-gate-policies.mdx similarity index 77% rename from docusaurus/docs/organizations/using-gate-policies.md rename to docusaurus/docs/organizations/using-gate-policies.mdx index db7e4620e5..1a30082e14 100644 --- a/docusaurus/docs/organizations/using-gate-policies.md +++ b/docusaurus/docs/organizations/using-gate-policies.mdx @@ -3,15 +3,15 @@ title: Using gate policies --- -Gate policies help you ensure that Codacy uses the same [quality gates](../repositories-configure/adjusting-quality-gates.md) across your organization repositories. +Gate policies help you ensure that Codacy uses the same [quality gates](../repositories-configure/adjusting-quality-gates.mdx) across your organization repositories. Codacy provides a built-in gate policy, **Codacy Gate Policy**, which sets minimum quality levels for pull requests and commits. The following screenshot displays the default configuration values: -![Codacy built-in gate policy](images/gate-policy-codacy-default.png) +![Codacy built-in gate policy](./images/gate-policy-codacy-default.png) By default, Codacy applies the **Codacy Gate Policy** automatically to newly added repositories. You can then create new gate policies with different quality gates and make them the default for your organization. -## Creating a new gate policy {#creating} +## Creating a new gate policy \{#creating\} To create a new gate policy for your organization: 1. Open your organization **Policies** page, tab **Gate policies**. @@ -20,19 +20,19 @@ To create a new gate policy for your organization: 1. Enter a unique name and click **Create gate policy**. - ![Creating a new gate policy](images/gate-policy-create.png) + ![Creating a new gate policy](./images/gate-policy-create.png) 1. Set the values for the quality gates and click **Next: Select and apply to repositories**. - ![Selecting the quality gate values for the gate policy](images/gate-policy-select-values.png) + ![Selecting the quality gate values for the gate policy](./images/gate-policy-select-values.png) 1. Select existing repositories that should follow the gate policy and click **Save and apply gate policy**. Codacy will start using the new gate policy on the next analysis of each selected repository. - ![Applying the gate policy to repositories](images/gate-policy-apply.png) + ![Applying the gate policy to repositories](./images/gate-policy-apply.png) -## Setting a gate policy as default {#set-default} +## Setting a gate policy as default \{#set-default\} To set a gate policy as default: 1. Open your organization **Policies** page, tab **Gate policies**. @@ -43,18 +43,18 @@ To set a gate policy as default: Only one gate policy at a time can be the default gate policy. ::: - ![Setting a gate policy as the default](images/gate-policy-set-default.png) + ![Setting a gate policy as the default](./images/gate-policy-set-default.png) Codacy will start applying the default gate policy to newly added repositories. -## Editing a gate policy {#editing} +## Editing a gate policy \{#editing\} To edit the quality gates of an existing gate policy or change the repositories that follow that gate policy: 1. Open your organization **Policies** page, tab **Gate policies**. 1. Click the edit icon on the gate policy card. - ![Editing an existing gate policy](images/gate-policy-edit.png) + ![Editing an existing gate policy](./images/gate-policy-edit.png) 1. Edit the current quality gate values and click the button **Next: Select and apply to repositories**. @@ -70,7 +70,7 @@ To edit the quality gates of an existing gate policy or change the repositories If you stop applying a gate policy to a repository, Codacy restores the previous quality gates of that repository. -## Deleting a gate policy {#deleting} +## Deleting a gate policy \{#deleting\} :::note You can't delete the built-in **Codacy Gate Policy**. ::: @@ -81,7 +81,7 @@ To delete an organization gate policy: 1. Click the trash can icon on the gate policy card and confirm. - ![Deleting a gate policy](images/gate-policy-delete.png) + ![Deleting a gate policy](./images/gate-policy-delete.png) When you delete a gate policy: diff --git a/docusaurus/docs/organizations/what-are-organizations.md b/docusaurus/docs/organizations/what-are-organizations.mdx similarity index 84% rename from docusaurus/docs/organizations/what-are-organizations.md rename to docusaurus/docs/organizations/what-are-organizations.mdx index fc1060843c..4d46ccb0ba 100644 --- a/docusaurus/docs/organizations/what-are-organizations.md +++ b/docusaurus/docs/organizations/what-are-organizations.mdx @@ -11,7 +11,7 @@ Changes to the organizations, repositories, and team members are synchronized wi To add a new organization to Codacy, select **Add organization** on the navigation menu. -![Adding an organization](images/organization-add-menu.png) +![Adding an organization](./images/organization-add-menu.png) This opens the list of organizations on your Git providers. @@ -19,14 +19,14 @@ This opens the list of organizations on your Git providers. The organization with the same name as your Git provider username contains your personal repositories. ::: -![Adding an organization](images/organization-add.png) +![Adding an organization](./images/organization-add.png) - To add a new organization to Codacy, click the link **Add** for that organization. - To join an organization that's already on Codacy, click the link **Join** for that organization. -- To add organizations from a Git provider not yet listed on this page, click **Add provider** and give the [necessary permissions](../getting-started/which-permissions-does-codacy-need-from-my-account.md) for Codacy to sync with the new Git provider and display your organizations. +- To add organizations from a Git provider not yet listed on this page, click **Add provider** and give the [necessary permissions](../getting-started/which-permissions-does-codacy-need-from-my-account.mdx) for Codacy to sync with the new Git provider and display your organizations. :::note -If you can't see the organization you're looking for, [follow these troubleshooting instructions](../faq/troubleshooting/why-cant-i-see-my-organization.md). +If you can't see the organization you're looking for, [follow these troubleshooting instructions](../faq/troubleshooting/why-cant-i-see-my-organization.mdx). ::: ## Updates on the Git provider @@ -46,7 +46,7 @@ If an update to your organization name isn't automatically reflected on Codacy, | Bitbucket Cloud | Yes | Yes | No | No | No | No | | Bitbucket Server | Yes | Yes | No | No | No | No | -Se also the [roles and permission mapping from the Git providers](roles-and-permissions-for-organizations.md). +Se also the [roles and permission mapping from the Git providers](./roles-and-permissions-for-organizations.mdx). ## Deleting an organization @@ -54,13 +54,13 @@ Deleting an organization on Codacy completely removes the configurations and all To delete an organization, open the **Profile** page and click the button **Delete organization**. -![Deleting an organization](images/organization-delete.png) +![Deleting an organization](./images/organization-delete.png) ## See also -- [How does Codacy support GitLab Cloud?](../faq/general/how-does-codacy-support-gitlab-cloud.md) -- [How does Codacy support GitLab Enterprise?](../faq/general/how-does-codacy-support-gitlab-enterprise.md) -- [How does Codacy support Bitbucket Cloud?](../faq/general/how-does-codacy-support-bitbucket-cloud.md) -- [How does Codacy support Bitbucket Server?](../faq/general/how-does-codacy-support-bitbucket-server.md) +- [How does Codacy support GitLab Cloud?](../faq/general/how-does-codacy-support-gitlab-cloud.mdx) +- [How does Codacy support GitLab Enterprise?](../faq/general/how-does-codacy-support-gitlab-enterprise.mdx) +- [How does Codacy support Bitbucket Cloud?](../faq/general/how-does-codacy-support-bitbucket-cloud.mdx) +- [How does Codacy support Bitbucket Server?](../faq/general/how-does-codacy-support-bitbucket-server.mdx) From ed7ddb6d3f8674876e6d706d3fedffb8f5f30a62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A1udia?= Date: Fri, 2 Jan 2026 13:18:02 +0000 Subject: [PATCH 14/19] fixing urls --- ...repository-api-tokens-programmatically.mdx | 4 +- .../docs/codacy-api/using-the-codacy-api.mdx | 2 +- ...tive-ways-of-running-coverage-reporter.mdx | 2 +- .../troubleshooting-coverage-cli-issues.mdx | 2 +- ...loading-coverage-in-advanced-scenarios.mdx | 2 +- .../code-analysis/how-to-skip-an-analysis.mdx | 2 +- .../why-cant-i-see-my-organization.mdx | 2 +- docusaurus/docs/release-notes/index.md | 243 +++++++++--------- .../self-hosted/v5.0.0-self-hosted.md | 2 +- .../self-hosted/v6.0.0-self-hosted.md | 2 +- .../self-hosted/v8.0.0-self-hosted.md | 2 +- .../adjusting-quality-gates.mdx | 2 +- .../codacy-configuration-file.mdx | 2 +- .../integrations/bitbucket-integration.mdx | 2 +- .../docs/repositories-configure/languages.mdx | 2 +- .../local-analysis/running-spotbugs.mdx | 2 +- docusaurus/docs/repositories/files.mdx | 2 +- docusaurus/docs/repositories/issues.mdx | 2 +- .../repositories/repository-dashboard.mdx | 2 +- docusaurus/docusaurus.config.ts | 7 +- 20 files changed, 145 insertions(+), 143 deletions(-) diff --git a/docusaurus/docs/codacy-api/examples/creating-repository-api-tokens-programmatically.mdx b/docusaurus/docs/codacy-api/examples/creating-repository-api-tokens-programmatically.mdx index 33608a9acc..8bdeb50886 100644 --- a/docusaurus/docs/codacy-api/examples/creating-repository-api-tokens-programmatically.mdx +++ b/docusaurus/docs/codacy-api/examples/creating-repository-api-tokens-programmatically.mdx @@ -7,7 +7,7 @@ import ApiExamplePaginationImportant from '../../_includes/ApiExamplePaginationI To create new [repository API tokens](../api-tokens) for your Codacy repositories programmatically, use the Codacy API endpoint [createRepositoryApiToken](https://app.codacy.com/api/api-docs#createrepositoryapitoken). You can also list all repository API tokens for a repository using the endpoint [listRepositoryApiTokens](https://api.codacy.com/api/api-docs#listrepositoryapitokens). -For example, if you're [setting up coverage](../../coverage-reporter/index.md) for all your repositories and prefer not to use a single account API token that grants the same permissions as an administrator, you need to create an individual repository API token for each repository. +For example, if you're [setting up coverage](../../coverage-reporter/index.mdx) for all your repositories and prefer not to use a single account API token that grants the same permissions as an administrator, you need to create an individual repository API token for each repository. ## Example: Creating a repository API token for a single repository @@ -44,7 +44,7 @@ This example creates new repository API tokens for all the repositories in an or The example script: -1. Defines the [account API token](../api-tokens.md#account-api-tokens) used to authenticate on the Codacy API, the Git provider, and the organization name. +1. Defines the [account API token](../api-tokens.mdx#account-api-tokens) used to authenticate on the Codacy API, the Git provider, and the organization name. 1. Calls the endpoint [listOrganizationRepositories](https://api.codacy.com/api/api-docs#listorganizationrepositories) to retrieve the list of repositories in the organization. 1. Uses [jq](https://github.com/stedolan/jq) to select only the name of the repositories. 1. Asks for confirmation from the user before making any changes. diff --git a/docusaurus/docs/codacy-api/using-the-codacy-api.mdx b/docusaurus/docs/codacy-api/using-the-codacy-api.mdx index 1fe932983c..779f9f7903 100644 --- a/docusaurus/docs/codacy-api/using-the-codacy-api.mdx +++ b/docusaurus/docs/codacy-api/using-the-codacy-api.mdx @@ -71,7 +71,7 @@ https:///api/v3 ## Authenticating requests -Most API endpoints require that you authenticate using an API token. After [obtaining the necessary tokens](api-tokens.md), include them in your request headers using the format `api-token: ` or `project-token: `. +Most API endpoints require that you authenticate using an API token. After [obtaining the necessary tokens](./api-tokens.mdx), include them in your request headers using the format `api-token: ` or `project-token: `. :::note Currently, all API v3 endpoints that require authentication must use **account API tokens**, while the API v2 endpoints require either **account or repository API tokens**. diff --git a/docusaurus/docs/coverage-reporter/alternative-ways-of-running-coverage-reporter.mdx b/docusaurus/docs/coverage-reporter/alternative-ways-of-running-coverage-reporter.mdx index e107f2600f..a2d74eb682 100644 --- a/docusaurus/docs/coverage-reporter/alternative-ways-of-running-coverage-reporter.mdx +++ b/docusaurus/docs/coverage-reporter/alternative-ways-of-running-coverage-reporter.mdx @@ -162,7 +162,7 @@ after_success: - bash <(curl -Ls https://coverage.codacy.com/get.sh) ``` -Make sure that you also [set your project or account API Token](index.md#authenticate) as an environment variable in your Travis CI job. +Make sure that you also [set your project or account API Token](./index.mdx#authenticate) as an environment variable in your Travis CI job. ### Gradle task diff --git a/docusaurus/docs/coverage-reporter/troubleshooting-coverage-cli-issues.mdx b/docusaurus/docs/coverage-reporter/troubleshooting-coverage-cli-issues.mdx index ac6e3ead39..585914f7a9 100644 --- a/docusaurus/docs/coverage-reporter/troubleshooting-coverage-cli-issues.mdx +++ b/docusaurus/docs/coverage-reporter/troubleshooting-coverage-cli-issues.mdx @@ -19,7 +19,7 @@ The sections below provide instructions or workarounds to overcome common issues ## Can't guess any report due to no matching -Codacy Coverage Reporter automatically searches for coverage reports matching the [file name conventions for supported formats](./index.md#generating-coverage). +Codacy Coverage Reporter automatically searches for coverage reports matching the [file name conventions for supported formats](./index.mdx#generating-coverage). However, if Codacy Coverage Reporter doesn't find your coverage report, you can explicitly define the report file name with the flag `-r`. For example: diff --git a/docusaurus/docs/coverage-reporter/uploading-coverage-in-advanced-scenarios.mdx b/docusaurus/docs/coverage-reporter/uploading-coverage-in-advanced-scenarios.mdx index ca702924ad..4e4ab6da91 100644 --- a/docusaurus/docs/coverage-reporter/uploading-coverage-in-advanced-scenarios.mdx +++ b/docusaurus/docs/coverage-reporter/uploading-coverage-in-advanced-scenarios.mdx @@ -74,7 +74,7 @@ bash <(curl -Ls https://coverage.codacy.com/get.sh) report \ ``` ## Uploading coverage for unsupported languages \{#unsupported-languages\} -If your language isn't in the [list of supported languages](index.md#generating-coverage), you can still send coverage to Codacy. +If your language isn't in the [list of supported languages](./index.mdx#generating-coverage), you can still send coverage to Codacy. To do this, provide the correct language with the flag `-l`, together with `--force-language`. For example: diff --git a/docusaurus/docs/faq/code-analysis/how-to-skip-an-analysis.mdx b/docusaurus/docs/faq/code-analysis/how-to-skip-an-analysis.mdx index f3be26be13..d7d5d4fc12 100644 --- a/docusaurus/docs/faq/code-analysis/how-to-skip-an-analysis.mdx +++ b/docusaurus/docs/faq/code-analysis/how-to-skip-an-analysis.mdx @@ -8,7 +8,7 @@ By default, Codacy automatically analyzes a repository whenever you push changes git commit -a -m "Add eslint-plugin-chai-expect version 1.1.1 [ci skip]" ``` -If you later decide to analyze a skipped commit, you can override any skip tags by [reanalyzing the commit](../repositories/how-do-i-reanalyze-my-repository.md). +If you later decide to analyze a skipped commit, you can override any skip tags by [reanalyzing the commit](../repositories/how-do-i-reanalyze-my-repository.mdx). :::note This feature isn't supported for pull requests. diff --git a/docusaurus/docs/faq/troubleshooting/why-cant-i-see-my-organization.mdx b/docusaurus/docs/faq/troubleshooting/why-cant-i-see-my-organization.mdx index 3171d13a77..2f4e771a6c 100644 --- a/docusaurus/docs/faq/troubleshooting/why-cant-i-see-my-organization.mdx +++ b/docusaurus/docs/faq/troubleshooting/why-cant-i-see-my-organization.mdx @@ -15,7 +15,7 @@ If you still can't see your organization on Codacy, follow the steps below to ch 1. **If you're using GitHub** [install and authorize Codacy on your organization](https://github.com/apps/codacy-production/installations/new). -1. [Revoke Codacy's OAuth integration](../../getting-started/which-permissions-does-codacy-need-from-my-account.md#revoking-access-to-integrations) with your Git provider and log in again to Codacy. +1. [Revoke Codacy's OAuth integration](../../getting-started/which-permissions-does-codacy-need-from-my-account.mdx#revoking-access-to-integrations) with your Git provider and log in again to Codacy. ![Revoking Codacy's OAuth integration](../../getting-started/images/revoke-integration.png) diff --git a/docusaurus/docs/release-notes/index.md b/docusaurus/docs/release-notes/index.md index 85bdfb04b3..2f279fbb51 100644 --- a/docusaurus/docs/release-notes/index.md +++ b/docusaurus/docs/release-notes/index.md @@ -18,192 +18,191 @@ Subscribe to this [codacy-white \ No newline at end of file diff --git a/docusaurus/docs/chart/assets/includes/images/self-hosted-version.png b/docusaurus/docs/chart/assets/includes/images/self-hosted-version.png new file mode 100644 index 0000000000000000000000000000000000000000..d5d07c406111f3c5e5983daa6c268c29bbee340f GIT binary patch literal 17126 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 # IP address of the external NFS server + path: /var/nfs/data/ # External NFS server directory or file system to be mounted + ``` + +1. Apply the new configuration by performing a Helm upgrade. To do so execute the command [used to install Codacy](../index.mdx#helm-upgrade): + + !!! important + **If you're using MicroK8s** you must use the file `values-microk8s.yaml` together with the file `values-production.yaml`. + + To do this, uncomment the last line before running the `helm upgrade` command below. + + ```bash + helm upgrade (...options used to install Codacy...) \ + --version {{ extra.codacy_self_hosted_version }} \ + --values values-production.yaml \ + # --values values-microk8s.yaml + ``` + +1. Validate that the `repository-listener` pod is now using the external NFS server: + + ```bash + $ kubectl describe pod -n codacy codacy-listener-<...> + + [...] + + Volumes: + listener-cache: + Type: NFS (an NFS mount that lasts the lifetime of a pod) + Server: + Path: /var/nfs/data/ + ReadOnly: false + ``` diff --git a/docusaurus/docs/chart/configuration/integrations/bitbucket-cloud.mdx b/docusaurus/docs/chart/configuration/integrations/bitbucket-cloud.mdx new file mode 100644 index 0000000000..4aceab3693 --- /dev/null +++ b/docusaurus/docs/chart/configuration/integrations/bitbucket-cloud.mdx @@ -0,0 +1,80 @@ +--- +description: Instructions on how to set up the Codacy Self-hosted integration with Bitbucket Cloud. +--- + +# Bitbucket Cloud + +Follow the instructions below to set up the Codacy Self-hosted integration with Bitbucket Cloud. + +## Create an OAuth consumer {#create-oauth} + +To integrate Codacy with Bitbucket Cloud, you must register an OAuth consumer for Codacy on Bitbucket. + +You can create a consumer on any existing individual or team account. To create a consumer, do the following: + +1. On Bitbucket, click on your avatar on the bottom left-hand corner and select **Bitbucket settings**. + +2. Select **OAuth** on the left sidebar and click the button **Add consumer**. + +3. Fill in the fields to create the OAuth consumer: + + - **Name:** Name of the OAuth consumer. For example, `Codacy`. + + - **Callback URL:** Copy the URL below, replacing the HTTP protocol and hostname with the correct values for your Codacy instance. + + ``` + https://codacy.example.com/login/Bitbucket?codacy_skip_ga=1 + ``` + + - **This is a private consumer:** Enable the check box. + + - Add the permissions: + + - **Account:** Write + - **Team membership:** Read + - **Projects:** Read + - **Repositories:** Admin + - **Pull requests:** Write + - **Issues:** Write + - **Webhooks:** Read and write + + ![Bitbucket consumer configuration](images/bitbucket-consumer-configuration.png) + + ![Bitbucket consumer permissions](images/bitbucket-consumer-permissions.png) + +4. Click Save, and then click the name of the new OAuth consumer to take note of the generated key and secret. + + ![Bitbucket consumer key and secret](images/bitbucket-consumer-key-and-secret.png) + +## Configure Bitbucket Cloud on Codacy {#configure} + +After creating the OAuth consumer on Bitbucket Cloud, you must configure it on Codacy: + +1. Edit the file `values-production.yaml` that you [used to install Codacy](../../index.mdx#helm-upgrade). + +2. Set `global.bitbucket.enabled: "true"` and define the remaining values as described below using the information obtained when you created the OAuth consumer: + + ```yaml + global: + bitbucket: + enabled: "true" + login: "true" # Show login button for Bitbucket Cloud + key: "" # OAuth consumer key + secret: "" # OAuth consumer secret + ``` + +3. Apply the new configuration by performing a Helm upgrade. To do so execute the command [used to install Codacy](../../index.mdx#helm-upgrade): + + !!! important + **If you're using MicroK8s** you must use the file `values-microk8s.yaml` together with the file `values-production.yaml`. + + To do this, uncomment the last line before running the `helm upgrade` command below. + + ```bash + helm upgrade (...options used to install Codacy...) \ + --version {{ extra.codacy_self_hosted_version }} \ + --values values-production.yaml \ + # --values values-microk8s.yaml + ``` + +After this is done you will be able to use Bitbucket Cloud to authenticate to Codacy. diff --git a/docusaurus/docs/chart/configuration/integrations/bitbucket-server.mdx b/docusaurus/docs/chart/configuration/integrations/bitbucket-server.mdx new file mode 100644 index 0000000000..7c37af8137 --- /dev/null +++ b/docusaurus/docs/chart/configuration/integrations/bitbucket-server.mdx @@ -0,0 +1,94 @@ +--- +description: Instructions on how to set up the Codacy Self-hosted integration with Bitbucket Server. +--- + +# Bitbucket Server + +Follow the instructions below to set up the Codacy Self-hosted integration with Bitbucket Server. + +## Create a Bitbucket Server application link + +To integrate Codacy with Bitbucket Server, you must create an application link on your Bitbucket Server instance: + +1. Create a key pair to sign and validate the requests between Codacy and the Bitbucket Server instance. + + Run the following command to create the key pair using the RSA algorithm in the PKCS#8 format: + + ```bash + bash <(curl -fsSL https://raw.githubusercontent.com/codacy/chart/master/docs/configuration/integrations/generate-bitbucket-server-secrets.sh) + ``` + + Store the keys in a safe place for usage in the next steps and as a backup. + +2. Open `/plugins/servlet/applinks/listApplicationLinks`, where `` is the URL of your Bitbucket Server instance. + +3. Create a new application link with the URL of your Codacy instance. + + !!! important + **If you're using Bitbucket Server 7.20 or later** you must select the application type **Atlassian product** while creating the new application link. + + This [forces the integration to use OAuth 1.0](https://confluence.atlassian.com/bitbucketserver/link-to-other-applications-1018764620.html#Linktootherapplications-LinktoAtlassianproductsorexternalapplicationsusingOAuth1.0) and is necessary to ensure the compatibility between Codacy and older versions of Bitbucket that only supported OAuth 1.0. + + ![Bitbucket Server application link](images/bitbucket-server-application-link.png) + + If Bitbucket Server may warn you that there was no response from the URL you entered. This is expected, and you can click **Continue** after verifying that the URL is correct. + + ![No response from Codacy instance URL](images/bitbucket-server-no-response.png) + +4. Fill in the fields: + + - **Application Name:** Name of the application. For example, `Codacy`. + - **Application Type:** Select `Generic Application`. + + The remaining fields should be left blank. + + ![Bitbucket Server application link naming](images/bitbucket-server-link-naming.png) + +5. After creating the new application link, click **Edit** to add an incoming authentication. + +6. Fill in the fields of the incoming authentication: + + - **Consumer Key:** Enter the `consumerKey` generated previously. + - **Consumer Name:** Name of the consumer. For example, `Codacy`. + - **Public Key:** Enter the `consumerPublicKey` generated previously. + + The remaining fields should be left blank. + + ![Bitbucket Server incoming authentication](images/bitbucket-server-incoming-authentication.png) + +## Configure Bitbucket Server on Codacy + +After creating the Bitbucket Server application link, you must configure it on Codacy: + +1. Edit the file `values-production.yaml` that you [used to install Codacy](../../index.mdx#helm-upgrade). + +2. Set `global.bitbucketEnterprise.enabled: "true"` and define the remaining values as described below and with the information obtained when you created the Bitbucket Server application link: + + ```yaml + bitbucketEnterprise: + enabled: "true" + login: "true" # Show login button for Bitbucket Server + hostname: "bitbucket.example.com" # Hostname of your Bitbucket Server instance + protocol: "https" # Protocol of your Bitbucket Server instance + port: 7990 # Port of your Bitbucket Server instance + consumerKey: "" # Generated when creating the Bitbucket Server application link + consumerPublicKey: "" # Generated when creating the Bitbucket Server application link + consumerPrivateKey: "" # Generated when creating the Bitbucket Server application link + contextPath: "" # Context path of your Bitbucket Server, if configured + ``` + +3. Apply the new configuration by performing a Helm upgrade. To do so execute the command [used to install Codacy](../../index.mdx#helm-upgrade): + + !!! important + **If you're using MicroK8s** you must use the file `values-microk8s.yaml` together with the file `values-production.yaml`. + + To do this, uncomment the last line before running the `helm upgrade` command below. + + ```bash + helm upgrade (...options used to install Codacy...) \ + --version {{ extra.codacy_self_hosted_version }} \ + --values values-production.yaml \ + # --values values-microk8s.yaml + ``` + +After this is done you will be able to use Bitbucket Server to authenticate to Codacy. diff --git a/docusaurus/docs/chart/configuration/integrations/email.mdx b/docusaurus/docs/chart/configuration/integrations/email.mdx new file mode 100644 index 0000000000..a49b1441e0 --- /dev/null +++ b/docusaurus/docs/chart/configuration/integrations/email.mdx @@ -0,0 +1,42 @@ +--- +description: Instructions on how to set up Codacy Self-hosted to send emails using your SMTP server. +--- + +# SMTP server + +Follow the instructions below to set up Codacy Self-hosted to send emails using your SMTP server: + +1. Edit the file `values-production.yaml` that you [used to install Codacy](../../index.mdx#helm-upgrade). + +2. Set `global.email.enabled: "true"` and define the remaining values with the credentials for your SMTP server: + + ```yaml + email: + enabled: "true" + replyTo: "notifications@mycompany.com" # Reply-to field on sent emails + smtp: + protocol: "smtp" # SMTP protocol to use, either smtps or smtp + hostname: "smtp.example.com" # Hostname of your SMTP server + # username: "" # Optional username to authenticate on your SMTP server + # password: "" # Optional password to authenticate on your SMTP server + # port: 25 # Optional port of your SMTP server, the default is 25 + ``` + +3. Apply the new configuration by performing a Helm upgrade. To do so execute the command [used to install Codacy](../../index.mdx#helm-upgrade): + + !!! important + **If you're using MicroK8s** you must use the file `values-microk8s.yaml` together with the file `values-production.yaml`. + + To do this, uncomment the last line before running the `helm upgrade` command below. + + ```bash + helm upgrade (...options used to install Codacy...) \ + --version {{ extra.codacy_self_hosted_version }} \ + --values values-production.yaml \ + # --values values-microk8s.yaml + ``` + +After this is done you will be able to: + +- Invite new users via email +- Receive commit and pull request email notifications diff --git a/docusaurus/docs/chart/configuration/integrations/generate-bitbucket-server-secrets.sh b/docusaurus/docs/chart/configuration/integrations/generate-bitbucket-server-secrets.sh new file mode 100755 index 0000000000..ec48e1cc98 --- /dev/null +++ b/docusaurus/docs/chart/configuration/integrations/generate-bitbucket-server-secrets.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash + +set -e + +TMP_WORKDIR=$(mktemp -d) + +cleanup() +{ + if [ -d "$TMP_WORKDIR" ]; then + rm -r $TMP_WORKDIR &>/dev/null + fi +} +trap cleanup EXIT + +cd $TMP_WORKDIR +openssl genrsa -out bbkey +openssl pkcs8 -nocrypt -in bbkey -out bbkey.pkcs8 -topk8 +openssl rsa -in bbkey -pubout -out bbkey.pub + +BB_CONSUMER_KEY=$(openssl rand -base64 10 | tr -dc 'a-zA-Z0-9') +BB_PUBLIC_KEY=$(cat $TMP_WORKDIR/bbkey.pub | head -n-1 | tail -n+2 | tr -d '\n') +BB_PRIVATE_KEY=$(cat $TMP_WORKDIR/bbkey.pkcs8 | head -n-1 | tail -n+2 | tr -d '\n') + +echo "=> These are your secrets for Bitbucket Server. Please keep them in a safe place." +echo "" +echo "# consumerKey" +echo "$BB_CONSUMER_KEY" +echo "" +echo "# consumerPublicKey" +echo "$BB_PUBLIC_KEY" +echo "" +echo "# consumerPrivateKey" +echo "$BB_PRIVATE_KEY" diff --git a/docusaurus/docs/chart/configuration/integrations/github-app-create.mdx b/docusaurus/docs/chart/configuration/integrations/github-app-create.mdx new file mode 100644 index 0000000000..8f399273ae --- /dev/null +++ b/docusaurus/docs/chart/configuration/integrations/github-app-create.mdx @@ -0,0 +1,44 @@ +# Creating a GitHub App + +You must create and correctly set up a [GitHub App](https://docs.github.com/en/developers/apps/getting-started-with-apps/about-apps) to allow Codacy Self-hosted to integrate with GitHub. + +To create the GitHub App: + +1. **If you're using GitHub Cloud**, open [https://github.com/settings/apps/new](https://github.com/settings/apps/new). + + **If you're using GitHub Enterprise**, open `https://github.example.com/settings/apps/new`, replacing the HTTP protocol and hostname with the correct values for your GitHub Enterprise instance. + +2. Configure the new GitHub App using the values listed on the table below, replacing `https://codacy.example.com` with the correct base URL of your Codacy instance. + + | Field | Value | + | --------------------------------------- | ------------------------------------------------------- | + | GitHub App name | Codacy | + | Homepage URL | \`https://codacy.example.com\` | + | User authorization callback URL | \`https://codacy.example.com\` | + | Request user authorization (OAuth) during installation | Enabled

Make sure this option is selected to request that the installing user grants access to their identity during the installation of your Codacy GitHub App. | + | Webhook URL | For GitHub Cloud:
`https://codacy.example.com/2.0/events/gh/organization`

For GitHub Enterprise:
`https://codacy.example.com/2.0/events/ghe/organization` | + | **Repository permissions** | | + | Administration | Read & write | + | Checks | Read & write | + | Issues | Read & write | + | Metadata | Read only | + | Pull requests | Read & write | + | Webhooks | Read & write | + | Commit statuses | Read & write | + | **Organization permissions** | | + | Members | Read only | + | Webhooks | Read & write | + | **User permissions** | | + | Email addresses | Read only | + | Git SSH keys | Read & write | + | Where can this GitHub App be installed? | Any account | + +3. Scroll to the bottom of the page, click **Generate a private key**, and save the `.pem` file containing the private key. + +4. Take note of the following information, as you'll need it to configure Codacy: + + - GitHub App name + - App ID + - Client ID + - Client secret + - Private key (contents of the `.pem` file generated in the previous step) diff --git a/docusaurus/docs/chart/configuration/integrations/github-cloud.mdx b/docusaurus/docs/chart/configuration/integrations/github-cloud.mdx new file mode 100644 index 0000000000..2c6ecce86b --- /dev/null +++ b/docusaurus/docs/chart/configuration/integrations/github-cloud.mdx @@ -0,0 +1,41 @@ +--- +description: Instructions on how to set up the Codacy Self-hosted integration with GitHub Cloud. +--- + +# GitHub Cloud + +Follow the instructions below to set up the Codacy Self-hosted integration with GitHub Cloud: + +1. Follow the instructions on [creating a GitHub App](github-app-create.mdx). + +2. Edit the file `values-production.yaml` that you [used to install Codacy](../../index.mdx#helm-upgrade). + +3. Set `global.github.enabled: "true"` and define the remaining values as described below using the information obtained when you created the GitHub App: + + ```yaml + github: + enabled: "true" + login: "true" # Show login button for GitHub Cloud + clientId: "" # Client ID + clientSecret: "" # Client secret + app: + name: "codacy" # GitHub App name + id: "1234" # App ID + privateKey: "" # Contents of the .pem file without newlines or the BEGIN/END lines + ``` + +4. Apply the new configuration by performing a Helm upgrade. To do so execute the command [used to install Codacy](../../index.mdx#helm-upgrade): + + !!! important + **If you're using MicroK8s** you must use the file `values-microk8s.yaml` together with the file `values-production.yaml`. + + To do this, uncomment the last line before running the `helm upgrade` command below. + + ```bash + helm upgrade (...options used to install Codacy...) \ + --version {{ extra.codacy_self_hosted_version }} \ + --values values-production.yaml \ + # --values values-microk8s.yaml + ``` + +After this is done you will be able to use GitHub Cloud to authenticate to Codacy. diff --git a/docusaurus/docs/chart/configuration/integrations/github-enterprise.mdx b/docusaurus/docs/chart/configuration/integrations/github-enterprise.mdx new file mode 100644 index 0000000000..1d2df24fed --- /dev/null +++ b/docusaurus/docs/chart/configuration/integrations/github-enterprise.mdx @@ -0,0 +1,46 @@ +--- +description: Instructions on how to set up the Codacy Self-hosted integration with GitHub Enterprise. +--- + +# GitHub Enterprise + +Follow the instructions below to set up the Codacy Self-hosted integration with GitHub Enterprise: + +1. Follow the instructions on [creating a GitHub App](github-app-create.mdx). + +2. Edit the file `values-production.yaml` that you [used to install Codacy](../../index.mdx#helm-upgrade). + +3. Set `global.githubEnterprise.enabled: "true"` and define the remaining values as described below using the information obtained when you created the GitHub App: + + ```yaml + githubEnterprise: + enabled: "true" + login: "true" # Show login button for GitHub Enterprise + hostname: "github.example.com" # Hostname of your GitHub Enterprise instance + protocol: "https" # Protocol of your GitHub Enterprise instance + port: 443 # Port of your GitHub Enterprise instance + disableSSL: "false" # Disable certificate validation + isPrivateMode: "true" # Status of private mode on your GitHub Enterprise instance + clientId: "" # GitHub App Client ID + clientSecret: "" # GitHub App Client secret + app: + name: "codacy" # GitHub App name + id: "1234" # GitHub App ID + privateKey: "" # Contents of the .pem file without newlines or the BEGIN/END lines + ``` + +4. Apply the new configuration by performing a Helm upgrade. To do so execute the command [used to install Codacy](../../index.mdx#helm-upgrade): + + !!! important + **If you're using MicroK8s** you must use the file `values-microk8s.yaml` together with the file `values-production.yaml`. + + To do this, uncomment the last line before running the `helm upgrade` command below. + + ```bash + helm upgrade (...options used to install Codacy...) \ + --version {{ extra.codacy_self_hosted_version }} \ + --values values-production.yaml \ + # --values values-microk8s.yaml + ``` + +After this is done you will be able to use GitHub Enterprise to authenticate to Codacy. diff --git a/docusaurus/docs/chart/configuration/integrations/gitlab-cloud.mdx b/docusaurus/docs/chart/configuration/integrations/gitlab-cloud.mdx new file mode 100644 index 0000000000..6aa5461988 --- /dev/null +++ b/docusaurus/docs/chart/configuration/integrations/gitlab-cloud.mdx @@ -0,0 +1,76 @@ +--- +description: Instructions on how to set up the Codacy Self-hosted integration with GitLab Cloud. +--- + +# GitLab Cloud + +Follow the instructions below to set up the Codacy Self-hosted integration with GitLab Cloud. + +## Create a GitLab application {#create-application} + +To integrate Codacy with GitLab Cloud, you must create a GitLab application: + +1. Open . + +2. Fill in the fields to register your Codacy instance on GitLab: + + - **Name:** Name of the application. For example, `Codacy`. + + - **Redirect URI:** Copy the URLs below, replacing the HTTP protocol and hostname with the correct values for your Codacy instance. This field is case sensitive. + + ```text + https://codacy.example.com/login/GitLab + https://codacy.example.com/add/addProvider/GitLab + https://codacy.example.com/add/addService/GitLab + https://codacy.example.com/add/addPermissions/GitLab + ``` + + - **Scopes:** Enable the scopes: + + - `api` + - `read_user` + - `read_repository` + - `openid` + + ![GitLab Cloud application](images/gitlab-cloud-application.png) + +3. Click **Save application** and take note of the generated Application Id and Secret. + +!!! note + You can ignore the following error that GitLab may display when you test or save the new GitLab application: + + ![GitLab appplication test error](images/gitlab-application-test-error.png) + + This happens because GitLab tests the new application by calling an endpoint that Codacy doesn't implement. + +## Configure GitLab Cloud on Codacy {#configure} + +After creating the GitLab application, you must configure it on Codacy: + +1. Edit the file `values-production.yaml` that you [used to install Codacy](../../index.mdx#helm-upgrade). + +2. Set `global.gitlab.enabled: "true"` and define the remaining values as described below using the information obtained when you created the GitLab application: + + ```yaml + gitlab: + enabled: "true" + login: "true" # Show login button for GitLab Cloud + clientId: "" # Application ID + clientSecret: "" # Secret + ``` + +3. Apply the new configuration by performing a Helm upgrade. To do so execute the command [used to install Codacy](../../index.mdx#helm-upgrade): + + !!! important + **If you're using MicroK8s** you must use the file `values-microk8s.yaml` together with the file `values-production.yaml`. + + To do this, uncomment the last line before running the `helm upgrade` command below. + + ```bash + helm upgrade (...options used to install Codacy...) \ + --version {{ extra.codacy_self_hosted_version }} \ + --values values-production.yaml \ + # --values values-microk8s.yaml + ``` + +After this is done you will be able to use GitLab Cloud to authenticate to Codacy. diff --git a/docusaurus/docs/chart/configuration/integrations/gitlab-enterprise.mdx b/docusaurus/docs/chart/configuration/integrations/gitlab-enterprise.mdx new file mode 100644 index 0000000000..b36604e365 --- /dev/null +++ b/docusaurus/docs/chart/configuration/integrations/gitlab-enterprise.mdx @@ -0,0 +1,104 @@ +--- +description: Instructions on how to set up the Codacy Self-hosted integration with GitLab Enterprise. +--- + +# GitLab Enterprise + +Follow the instructions below to set up the Codacy Self-hosted integration with GitLab Enterprise: + +## Create a GitLab application {#create-application} + +To integrate Codacy with GitLab Enterprise, you must create a GitLab application: + +1. Open `/-/profile/applications` as a GitLab admin, where `` is the URL of your GitLab Enterprise instance. + +2. Fill in the fields to register your Codacy instance on GitLab: + + - **Name:** Name of the application. For example, `Codacy`. + + - **Redirect URI:** Copy the URLs below, replacing the HTTP protocol and hostname with the correct values for your Codacy instance. This field is case sensitive. + + ```text + https://codacy.example.com/login/GitLabEnterprise + https://codacy.example.com/add/addProvider/GitLabEnterprise + https://codacy.example.com/add/addService/GitLabEnterprise + https://codacy.example.com/add/addPermissions/GitLabEnterprise + ``` + + - **Scopes:** Enable the scopes: + + - `api` + - `read_user` + - `read_repository` + - `openid` + + ![GitLab Enterprise application](images/gitlab-enterprise-application.png) + +3. Click **Save application** and take note of the generated Application Id and Secret. + +!!! note + You can ignore the following error that GitLab Enterprise may display when you test or save the new GitLab application: + + ![GitLab Enterprise appplication test error](images/gitlab-application-test-error.png) + + This happens because GitLab Enterprise tests the new application by calling an endpoint that Codacy doesn't implement. + +## Configure GitLab Enterprise on Codacy {#configure} + +After creating the GitLab application, you must configure it on Codacy: + +1. Edit the file `values-production.yaml` that you [used to install Codacy](../../index.mdx#helm-upgrade). + +2. Set `global.gitlabEnterprise.enabled: "true"` and define the remaining values as described below using the information obtained when you created the GitLab application: + + ```yaml + gitlabEnterprise: + enabled: "true" + login: "true" # Show login button for GitLab Enterprise + hostname: "gitlab.example.com" # Hostname of your GitLab Enterprise instance + protocol: "https" # Protocol of your GitLab Enterprise instance + port: 443 # Port of your GitLab Enterprise instance + clientId: "" # Application ID + clientSecret: "" # Secret + ``` + +3. Apply the new configuration by performing a Helm upgrade. To do so execute the command [used to install Codacy](../../index.mdx#helm-upgrade): + + !!! important + **If you're using MicroK8s** you must use the file `values-microk8s.yaml` together with the file `values-production.yaml`. + + To do this, uncomment the last line before running the `helm upgrade` command below. + + ```bash + helm upgrade (...options used to install Codacy...) \ + --version {{ extra.codacy_self_hosted_version }} \ + --values values-production.yaml \ + # --values values-microk8s.yaml + ``` + +After this is done you will be able to use GitLab Enterprise to authenticate to Codacy. + +## Detect changes to repositories and organizations + +Optionally, Codacy can automatically detect the following changes to repositories and organizations on your GitLab Enterprise instance: + +- **For repositories:** renames, deletes, and visibility changes +- **For organizations:** renames, deletes, and access removed + +To do this, you must configure a [System Hook](https://docs.gitlab.com/ee/system_hooks/system_hooks.html) on your GitLab Enterprise instance to notify Codacy of the changes: + +1. Open `/admin/hooks` as a GitLab admin, where `` is the URL of your GitLab Enterprise instance. + +2. Fill in the fields to create the System Hook: + + - **URL:** The URL of your Codacy instance with the path `/2.0/events/gle/organization`. For example, `http://codacy.example.com/2.0/events/gle/organization` + + - **Secret Token:** Copy the Application Secret from the GitLab application that you created previously, or from the value of `clientSecret` in the file `values-production.yaml` that you used to install Codacy. + + - **Trigger:** Enable the trigger `Repository update events` + + - **SSL verification:** Enable the SSL verification. + + ![GitLab Enterprise System Hook](images/gitlab-enterprise-system-hook.png) + +3. Click **Save Changes** to save the System Hook. diff --git a/docusaurus/docs/chart/configuration/integrations/images/bitbucket-consumer-configuration.png b/docusaurus/docs/chart/configuration/integrations/images/bitbucket-consumer-configuration.png new file mode 100644 index 0000000000000000000000000000000000000000..49996b34d7f760022bd311175234c4ba9b3c9565 GIT binary patch literal 125215 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 literal 0 HcmV?d00001 diff --git a/docusaurus/docs/chart/configuration/integrations/images/bitbucket-consumer-key-and-secret.png b/docusaurus/docs/chart/configuration/integrations/images/bitbucket-consumer-key-and-secret.png new file mode 100644 index 0000000000000000000000000000000000000000..af77ce1a214dd4f5648a27773199d373024e3345 GIT binary patch literal 30644 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 literal 0 HcmV?d00001 diff --git a/docusaurus/docs/chart/configuration/integrations/images/bitbucket-consumer-permissions.png b/docusaurus/docs/chart/configuration/integrations/images/bitbucket-consumer-permissions.png new file mode 100644 index 0000000000000000000000000000000000000000..e471892e32e90d8ed240e10b95a24214e86d1cd0 GIT binary patch literal 47187 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 zΝjVO?CKqXYu|-f&GrsMJ~z{EMjkV`^BcB1nW8LB1Z)xh4|3_JJifgz{?lGpJcg zCCKXIWHt6V(x7aWo#G#)(^pvMRt_js1~6N<(=nl4s7kM)o=2R5ceqf&h>+Da4(eKs z3kajk1F`xd=?IcbVynilU4v{96A8!PRP@D8H(3c2vm+Ms$?ML6s^1W}Ks+&{0m1Fd zx%ue8P7nCCBC_c~uG1~WZ;w#?Y`AaY7{Za@?Un0(B)`|S)s79j{3lH>+W|~3qusYP zxj2j5sckx6g?w&n6w+Q7A6s`wh{a+1RG4%uAI*D)&y*^e#tnYeH_Y?dvuE_lz~(7a zWaSCu!7QSvYjQ^LlcE7z;Bz8ss_Y|=RlHDz{YDBA`cj}hJ)SHXyR;Fz8}!yJeIq5S zC#0^u@|W|_3*J6yay)~Zn!lo(EG(VnzA!VSc#}lABpRKo}CNo&U>5 z+3k$^aAkhrT_IM}N9$!>e0dL#O6(5HS&*^oelxME1+o zK`({DO^?If^`EbBclRo$9$GR7`0A!n2!_+c8U>s1f*+exvkP`gIMeaQl@nfAFKeB0 z^V@oyngZ(NawOu5i(+(mLaWYAl2!%H8@=^){fE_BHGS1SN5h0?l6VbRG=djdY)89l zpjN-CfUGR#UU*AU3dQP4t=cA2FJnGRLGi5Sb!(z>A;J*OlTFYde)Pp|G$-f?*cG*+ zmyM`zrhkv8^t!IO;t@|C+jIvPuXN2F}XCn&fDNRsWD^_k%eJrUEKtsuZL z`{$dcs#7oU9mkwfO{(u;Noi>=(_h5}j!n*?lAdi+OOtnVIz1fqoqN_Hu)gOv zv)C@~-p>m~tx=$3qla!WT&Zc)Q5;5un;yVFS3tMESK~c!0FM(L;ff)9U&S-gpu{&* z8nse%!0_SuUBhCa=uf9Cw)0o@RTCr_n2AOIb_?S;97F(>kl+w(DRe&>KK?sB7OW`+ zBFUukMtmQVij3IE#--aA?0E?1?7BxcXKM~te%=qhM&6#0e%lr1;F-&0?>H3C@R`1!juDbY9_>!Q!X~7$zf**fa zt#Y^2@QG*@I$J2iC&UBNn37ywG?akLfG6y`e6)P`k3R9lM*%;3R+sMX`^?qZ^JL#2 z-7uFHrA5GHVkMKdf7>ft6|?OM3*UVGBY{x@H;ZTaS?k_qT)lK%H#clrH-Smi-C<8m zPV{xYUU}Akp}SX{3_E)D%%u0~OnZ!q?0cWtUYNeDzq3B9b&FF{dv`damBdt}jXeE= z0?Q(Sj{0-r{@d>n>^pXr^D@Rs?#ym`bTF&KPX5PhDQ#u`Yb%QLA#2Yb)F~=V5lo!5 zbn0EVchmCf&mCTUHx3vIVCg!0BqqATL1t6 literal 0 HcmV?d00001 diff --git a/docusaurus/docs/chart/configuration/integrations/images/bitbucket-server-incoming-authentication.png b/docusaurus/docs/chart/configuration/integrations/images/bitbucket-server-incoming-authentication.png new file mode 100644 index 0000000000000000000000000000000000000000..c4e44d11ba1dae280df7138e1e374a4785d1f88c GIT binary patch literal 73301 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 H^T+=KCNqOX literal 0 HcmV?d00001 diff --git a/docusaurus/docs/chart/configuration/integrations/images/bitbucket-server-link-naming.png b/docusaurus/docs/chart/configuration/integrations/images/bitbucket-server-link-naming.png new file mode 100644 index 0000000000000000000000000000000000000000..7dadb196a07f586818f4278ff99ee6b069cad0be GIT binary patch literal 61850 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 literal 0 HcmV?d00001 diff --git a/docusaurus/docs/chart/configuration/integrations/images/bitbucket-server-no-response.png b/docusaurus/docs/chart/configuration/integrations/images/bitbucket-server-no-response.png new file mode 100644 index 0000000000000000000000000000000000000000..d2fca23cd040501d3a78b7bd383537ac9315e4dd GIT binary patch literal 44349 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 literal 0 HcmV?d00001 diff --git a/docusaurus/docs/chart/configuration/integrations/images/gitlab-application-test-error.png b/docusaurus/docs/chart/configuration/integrations/images/gitlab-application-test-error.png new file mode 100644 index 0000000000000000000000000000000000000000..9974f2dbd7a55dfb441ea87acdf8231bd6199b77 GIT binary patch literal 17515 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 D)J$#c literal 0 HcmV?d00001 diff --git a/docusaurus/docs/chart/configuration/integrations/images/gitlab-cloud-application.png b/docusaurus/docs/chart/configuration/integrations/images/gitlab-cloud-application.png new file mode 100644 index 0000000000000000000000000000000000000000..c22236c5f4dcfeef867a6b90327d99beae988af4 GIT binary patch literal 209837 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

EVXVhqLxIbrNNid+OxW_U5=Z8wbx**!7Cp`pt#t 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 literal 0 HcmV?d00001 diff --git a/docusaurus/docs/chart/configuration/integrations/images/gitlab-enterprise-application.png b/docusaurus/docs/chart/configuration/integrations/images/gitlab-enterprise-application.png new file mode 100644 index 0000000000000000000000000000000000000000..f09dcbc2833f54676bd903f076b445189ce81db2 GIT binary patch literal 118352 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 **_%Er&x9W76tR_w=Wwns2 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

~(R7vn&O8-qKG|IV7_-@Hdd=FU>pJIPzxOU) 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


^c2*uvd>YgBx7PT%%| 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

I$X9Fd_BxvzO>{yNxB#F3*gr4WJ-jS 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

E+_+`paVGPzS~A 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 literal 0 HcmV?d00001 diff --git a/docusaurus/docs/chart/troubleshoot/images/github-invalid-client-id.png b/docusaurus/docs/chart/troubleshoot/images/github-invalid-client-id.png new file mode 100644 index 0000000000000000000000000000000000000000..b5d6cd2b320abb7334ed9d0bf8508be1a0a93514 GIT binary patch literal 71732 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 z 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 Br8EEl literal 0 HcmV?d00001 diff --git a/docusaurus/docs/chart/troubleshoot/images/gitlab-invalid-redirect-uri.png b/docusaurus/docs/chart/troubleshoot/images/gitlab-invalid-redirect-uri.png new file mode 100644 index 0000000000000000000000000000000000000000..d368f51141ee18c97014692dd16da98e45c04ffe GIT binary patch literal 17002 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 qw}KeamCV4!7*6^M9G|NG$cG%8TdiyFE(Bb0&EV +``` + +## Helm + +Check all the previous releases in your namespace: + +```bash +helm -n codacy history codacy +``` + +Rollback to a specific revision: + +```bash +helm -n codacy rollback codacy +``` + +## Edit configmap + +```bash +kubectl get configmaps +``` + +**and** + +```bash +kubectl edit configmap +``` + +## Restart deployment of daemonset + +### daemonsets + +```bash +kubectl get daemonsets +``` + +**and** + +```bash +kubectl rollout restart daemonset/ +``` + +### deployment + +```bash +kubectl get deployment +``` + +**and** + +```bash +kubectl rollout restart deployment/ +``` + +**and** + +```bash +kubectl rollout status deployment/ -w +``` + +## Read logs + +### daemonset with multiple containers + +```bash +kubectl logs daemonset/ -f +``` + +### service + +```bash +kubectl get svc +``` + +**and** + +```bash +kubectl logs -l $(kubectl get svc/ -o=json | jq ".spec.selector" | jq -r 'to_entries|map("\(.key)=\(.value|tostring)")|.[]' | sed -e 'H;${x;s/\n/,/g;s/^,//;p;};d') -f +``` + +## Open shell inside container + +```bash +kubectl exec -it daemonset/ -c sh +``` + +**or** + +```bash +kubectl exec -it deployment/ sh +``` + +## MicroK8s + +### Session Manager SSH + +When using AWS Session Manager, to connect to the instance where you installed microk8s, +since the CLI is very limited you will benefit from using these aliases: + +```bash +alias kubectl='sudo microk8s.kubectl -n ' +alias helm='sudo helm' +``` diff --git a/docusaurus/docs/chart/troubleshoot/logs-collect.mdx b/docusaurus/docs/chart/troubleshoot/logs-collect.mdx new file mode 100644 index 0000000000..f9b4a0d5f4 --- /dev/null +++ b/docusaurus/docs/chart/troubleshoot/logs-collect.mdx @@ -0,0 +1,31 @@ +--- +description: To help troubleshoot issues, obtain the logs from your Codacy Self-hosted instance and send them to Codacy's Support. +--- + +# Collecting logs for Support + +To help troubleshoot issues, obtain the logs from your Codacy Self-hosted instance and send them to Codacy's Support: + +1. Run the following command on a machine with network access to the Codacy cluster, replacing `` with the namespace in which Codacy was installed: + + ```bash + bash <(curl -fsSL https://raw.githubusercontent.com/codacy/chart/master/docs/troubleshoot/extract-codacy-logs.sh) \ + -n + ``` + + This will download the logs of the last 7 days as an archive file with the name `codacy_logs_.zip`. + + !!! tip + You can also download the script [extract-codacy-logs.sh](extract-codacy-logs.sh) to run it manually. + +2. Send the compressed logs to Codacy's support team at for analysis. + + !!! note + If the file is too big, please upload the file to either a cloud storage service such as [Google Drive](https://www.google.com/drive/) or to a file transfer service such as [WeTransfer](http://www.wetransfer.com/) and send us the link to the file instead. + + Alternatively, to reduce the size of the compressed archive file, retrieve logs for a smaller number of days by replacing `` with a number between 1 and 7: + + ```bash + bash <(curl -fsSL https://raw.githubusercontent.com/codacy/chart/master/docs/troubleshoot/extract-codacy-logs.sh) \ + -n -d + ``` diff --git a/docusaurus/docs/chart/troubleshoot/troubleshoot.mdx b/docusaurus/docs/chart/troubleshoot/troubleshoot.mdx new file mode 100644 index 0000000000..3317f36c07 --- /dev/null +++ b/docusaurus/docs/chart/troubleshoot/troubleshoot.mdx @@ -0,0 +1,148 @@ +# Troubleshooting Codacy Self-hosted + +This page includes information to help you troubleshoot issues that you may come across while installing, configuring, and operating Codacy Self-hosted. + +If the information provided on this page isn't enough to solve your issue, contact providing: + +- The description of the issue +- All the information that you were able to obtain while following these troubleshooting instructions +- The [collected logs](logs-collect.mdx) of your Codacy instance +- The version of your Codacy instance + + {% + include-markdown "../assets/includes/self-hosted-version.txt" + %} + + +## Git provider integrations + +The following sections help you troubleshoot the integration of Codacy with your Git provider. + +### GitHub Cloud and GitHub Enterprise authentication {#github} + +#### 404 error + +While trying to authenticate on GitHub you get the following error message: + +![Invalid client id](images/github-invalid-client-id.png) + +This might mean that there is a mismatch in the Client ID that Codacy is using to authenticate on GitHub. + +To solve this issue: + +1. Make sure that the value of `clientId` in your `values-production.yaml` file is the same as the Client ID of the [GitHub App that you created](../configuration/integrations/github-app-create.mdx) +2. If the values were different, update your configuration and re-execute the `helm upgrade` command as described for [GitHub Cloud](../configuration/integrations/github-cloud.mdx) or [GitHub Enterprise](../configuration/integrations/github-enterprise.mdx) + +If the error persists: + +1. Take note of the parameter `client_id` in the URL of the GitHub error page (for example, `Iv1.0000000000000000`) +2. Check if the value of the parameter matches the value of the Client ID of your GitHub App + +### GitLab Cloud and GitLab Enterprise authentication {#gitlab} + +#### Invalid redirect URI + +While trying to authenticate on GitLab you get the following error message: + +![Invalid redirect URI](images/gitlab-invalid-redirect-uri.png) + +This might mean that the redirect URIs are not correct in the GitLab application that Codacy is using to authenticate on GitLab. + +To solve this issue: + +1. Open the GitLab application that you created on [GitLab Cloud](../configuration/integrations/gitlab-cloud.mdx#create-application) or [GitLab Enterprise](../configuration/integrations/gitlab-enterprise.mdx#create-application) +2. Make sure that all the redirect URIs have the correct protocol for the Codacy instance endpoints, either `http://` or `https://` +3. Make sure that all the redirect URIs have the full path with the correct case, since the field is case-sensitive + +If the error persists: + +1. Take note of the parameter `redirect_uri` in the URL of the GitLab error page (for example, `https%3A%2F%2Fcodacy.example.com%2Flogin%2FGitLab` or `https%3A%2F%2Fcodacy.example.com%2Flogin%2FGitLabEnterprise`) +2. Decode the value of the parameter using a tool such as [urldecoder.com](https://www.urldecoder.org/) (for example, `https://codacy.example.com/login/GitLab` or `https://codacy.example.com/login/GitLabEnterprise`) +3. Check if the decoded value matches one of the redirect URIs of your GitLab application + +#### Unknown client + +While trying to authenticate on GitLab you get the following error message: + +![Invalid application id](images/gitlab-invalid-application-id.png) + +This might mean that there is a mismatch in the Application ID that Codacy is using to authenticate on GitLab. + +To solve this issue: + +1. Make sure that the value of `clientId` in your `values-production.yaml` file is the same as the Application ID of the [GitLab Cloud](../configuration/integrations/gitlab-cloud.mdx#create-application) or [GitLab Enterprise](../configuration/integrations/gitlab-enterprise.mdx#create-application) application that you created +2. If the values were different, update your configuration and re-execute the `helm upgrade` command as described for [GitLab Cloud](../configuration/integrations/gitlab-cloud.mdx#configure) or [GitLab Enterprise](../configuration/integrations/gitlab-enterprise.mdx#configure) + +If the error persists: + +1. Take note of the parameter `client_id` in the URL of the GitLab error page (for example, `cca35a2a1f9b9b516ac927d82947bd5149b0e57e922c9e5564ac092ea16a3ccd`) +2. Check if the value of the parameter matches the value of the Application ID of your GitLab application + +### Bitbucket Cloud authentication {#bitbucket-cloud} + +#### Invalid client_id + +While trying to authenticate on Bitbucket Cloud you get the following error message: + +![Invalid client_id](images/bitbucket-invalid-client-id.png) + +This might mean that there is a mismatch in the OAuth consumer Client ID that Codacy is using to authenticate on Bitbucket Cloud. + +To solve this issue: + +1. Make sure that the value of `key` in your `values-production.yaml` file is the same as the Key of the [Bitbucket OAuth consumer that you created](../configuration/integrations/bitbucket-cloud.mdx#create-oauth) +2. If the values were different, update your configuration and re-execute the `helm upgrade` command as described for [Bitbucket Cloud](../configuration/integrations/bitbucket-cloud.mdx#configure) + +If the error persists: + +1. Take note of the parameter `client_id` in the URL of the Bitbucket Cloud error page (for example, `r8QJDkkxj8unYfg4Bd`) +2. Check if the value of the parameter matches the value of the Client ID of your Bitbucket OAuth consumer + +## Accessing the RabbitMQ dashboard + +We use RabbitMQ for the internal message queue between our components. + +If you need to access the RabbitMQ dashboard: + +1. Create a `port-forward` from the `rabbitmq` pod to your local machine, replacing `` with the namespace in which Codacy was installed: + + ```bash + kubectl port-forward codacy-rabbitmq-ha-0 15672:15672 --namespace= + ``` + + !!! important + **If you're using MicroK8s** use `microk8s.kubectl` instead of `kubectl`. + +2. Access the RabbitMQ dashboard on the address `localhost:15672`, and log in with the configured RabbitMQ credentials. + + The default RabbitMQ credentials are the following: + + - **Username:** `rabbitmq-codacy` + - **Password:** `rabbitmq-codacy` + +## Missing new tools + +If the **Code patterns** page of your repositories doesn't list a new tool that was included in a new Codacy version, force the list of available tools to refresh by running the following command on any `codacy-engine-*` pod: + +```bash +curl -X POST localhost:9000/api/v1/engine/initialize +``` + +## Upgrade failed: cannot patch "codacy-minio" + +If you download and use an updated `values-production.yaml` file while upgrading to [Codacy Self-hosted 9.0.0](https://docs.codacy.com/release-notes/self-hosted/self-hosted-v9.0.0/), you'll get the following error: + +> Error: UPGRADE FAILED: cannot patch "codacy-minio" with kind PersistentVolumeClaim: persistentvolumeclaims "codacy-minio" is forbidden: only dynamically provisioned pvc can be resized and the storageclass that provisions the pvc must support resize + +This happens because [we updated the MinIO PVC size](https://github.com/codacy/chart/commit/40a158f8b6f62a6f90387060b86fe1dd8d008ed5). As a workaround, you can either: + +- Reset the PVC size back to the original value of 20Gi on your `values.yaml` file: + + ```yaml + minio: + fullnameOverride: codacy-minio + persistence: + size: 20Gi + ``` + +- [Uninstall your current version of Codacy](../maintenance/uninstall.mdx) and reinstall Codacy Self-hosted 9.0.0 directly. Your data won't be impacted by the uninstall since it's stored on the database. diff --git a/docusaurus/docs/chart/values-files/issuer-letsencrypt.yaml b/docusaurus/docs/chart/values-files/issuer-letsencrypt.yaml new file mode 100644 index 0000000000..a60885ff93 --- /dev/null +++ b/docusaurus/docs/chart/values-files/issuer-letsencrypt.yaml @@ -0,0 +1,15 @@ +apiVersion: cert-manager.io/v1alpha2 +kind: Issuer +metadata: + name: letsencrypt-codacy + namespace: codacy +spec: + acme: + server: https://acme-v02.api.letsencrypt.org/directory + email: <--- youremail@yourdomain.com ---> + privateKeySecretRef: + name: letsencrypt + solvers: + - http01: + ingress: + class: nginx diff --git a/docusaurus/docs/chart/values-files/values-cert-manager.yaml b/docusaurus/docs/chart/values-files/values-cert-manager.yaml new file mode 100644 index 0000000000..7b172eb1c5 --- /dev/null +++ b/docusaurus/docs/chart/values-files/values-cert-manager.yaml @@ -0,0 +1,9 @@ +webhook: + enabled: true +ingressShim: + defaultIssuerName: letsencrypt-codacy + defaultIssuerKind: Issuer + defaultIssuerGroup: cert-manager.io +global: + leaderElection: + namespace: codacy diff --git a/docusaurus/docs/chart/values-files/values-loki.yaml b/docusaurus/docs/chart/values-files/values-loki.yaml new file mode 100644 index 0000000000..1412bf0b2d --- /dev/null +++ b/docusaurus/docs/chart/values-files/values-loki.yaml @@ -0,0 +1,26 @@ +resources: + limits: + cpu: 1 + memory: 1000Mi + requests: + cpu: 500m + memory: 500Mi +config: + limits_config: + cardinality_limit: 200000 + ingestion_rate_mb: 15 + ingestion_burst_size_mb: 20 +serviceMonitor: + enabled: true +persistence: + enabled: true + size: 100Gi # adjust persistence volume size if needed + #storageClassName: <--- storage class ---> +table_manager: + retention_deletes_enabled: true + retention_period: 72h +rbac: + pspEnabled: false +grafana: + datasources: + enabled: true \ No newline at end of file diff --git a/docusaurus/docs/chart/values-files/values-microk8s.yaml b/docusaurus/docs/chart/values-files/values-microk8s.yaml new file mode 120000 index 0000000000..ed0f13efe2 --- /dev/null +++ b/docusaurus/docs/chart/values-files/values-microk8s.yaml @@ -0,0 +1 @@ +../../../../submodules/chart/codacy/values-microk8s.yaml \ No newline at end of file diff --git a/docusaurus/docs/chart/values-files/values-nginx.yaml b/docusaurus/docs/chart/values-files/values-nginx.yaml new file mode 100644 index 0000000000..5a9c73193c --- /dev/null +++ b/docusaurus/docs/chart/values-files/values-nginx.yaml @@ -0,0 +1,30 @@ +controller: + ingressClass: nginx + publishService: + enabled: true + service: + ## Use this annotation if you want private load balancers on AWS + #annotations: + # service.beta.kubernetes.io/aws-load-balancer-internal: "true" + # + ## Use this setting do restrict the load balancer source ip ranges. + #loadBalancerSourceRanges: + # - 10.0.0.0/16 # set this for the desired CIDR + # + clusterIP: "-" + defaultBackend: + clusterIP: "-" + enableAnnotationValidations: true + + # resources used by the nginx controller + resources: + limits: + cpu: 200m + memory: 500Mi + requests: + cpu: 100m + memory: 300Mi + + config: + # Hides the http response headers showing the explicit version of nginx + server-tokens: "false" diff --git a/docusaurus/docs/chart/values-files/values-production.yaml b/docusaurus/docs/chart/values-files/values-production.yaml new file mode 120000 index 0000000000..9e861c774c --- /dev/null +++ b/docusaurus/docs/chart/values-files/values-production.yaml @@ -0,0 +1 @@ +../../../../submodules/chart/codacy/values-production.yaml \ No newline at end of file diff --git a/docusaurus/docs/chart/values-files/values-prometheus-operator.yaml b/docusaurus/docs/chart/values-files/values-prometheus-operator.yaml new file mode 100644 index 0000000000..69909c26d5 --- /dev/null +++ b/docusaurus/docs/chart/values-files/values-prometheus-operator.yaml @@ -0,0 +1,77 @@ +grafana: + enabled: true + adminPassword: <--- grafana-admin-password ---> # password for the `admin` user. You can generate one using, for instance, `openssl rand -base64 24 | tr -dc 'a-zA-Z0-9'` + ingress: + enabled: true + annotations: + kubernetes.io/ingress.class: nginx + hosts: + - <--- grafana.codacy.example.com ---> # Codacy grafana DNS hostname. You'll need to add a record for this domain pointing to your ingress +## +## If using TLS uncomment this section and create the required secret. +## For instance, if you'll be using a self-signed certificate this can be done running: +## +## openssl req -x509 -nodes -days 10000 -newkey rsa:2048 -keyout grafana-tls.key -out grafana-tls.crt -subj "/CN=YOUR_CODACY_GRAFANA_DNS_HOSTNAME" +## kubectl create secret tls grafana-ingress-tls-secret --namespace monitoring --key grafana-tls.key --cert grafana-tls.crt +## +## For further information please see https://kubernetes.io/docs/tasks/administer-cluster/certificates/ +## +# tls: +# - secretName: grafana-ingress-tls-secret +# hosts: +# - <--- grafana.codacy.example.com ---> # this must match the url used above + + + sidecar: + dashboards: + searchNamespace: ALL + datasources: + defaultDatasourceEnabled: false + additionalDataSources: + - name: Loki + type: loki + url: http://loki:3100 + version: 1 + orgId: 1 + access: proxy + basicAuth: false + editable: true + jsonData: + tlsSkipVerify: true + - name: Prometheus + type: prometheus + url: http://monitoring-kube-prometheus-prometheus:9090 + version: 1 + orgId: 1 + access: proxy + basicAuth: false + editable: true + jsonData: + tlsSkipVerify: true + +prometheusOperator: + createCustomResource: false + tlsProxy: + enabled: false + admissionWebhooks: + enabled: false + patch: + enabled: false + tlsProxy: + enabled: false + +prometheus: + ingressPerReplica: + tlsSecretPerReplica: + enabled: false + thanos: + service: + enabled: false + service: + sessionAffinity: "ClientIP" + prometheusSpec: + replicas: 1 + serviceMonitorSelectorNilUsesHelmValues: false + walCompression: true + ruleSelectorNilUsesHelmValues: false + ruleSelector: {} diff --git a/docusaurus/docs/chart/values-files/values-promtail.yaml b/docusaurus/docs/chart/values-files/values-promtail.yaml new file mode 100644 index 0000000000..eec672a30e --- /dev/null +++ b/docusaurus/docs/chart/values-files/values-promtail.yaml @@ -0,0 +1,14 @@ +loki: + serviceName: loki + +config: + client: + batchwait: 1s + batchsize: 10240 + timeout: 20s + backoff_config: + minbackoff: 2s + maxbackoff: 20s + maxretries: 5 +rbac: + pspEnabled: false diff --git a/docusaurus/docs/codacy-api/api-tokens.mdx b/docusaurus/docs/codacy-api/api-tokens.mdx index e3d0b30584..8b53cdb35d 100644 --- a/docusaurus/docs/codacy-api/api-tokens.mdx +++ b/docusaurus/docs/codacy-api/api-tokens.mdx @@ -7,7 +7,7 @@ import ApiTokenWarning from './../_includes/ApiTokenWarning.mdx' Codacy provides **account** and **repository**-level API tokens that allow you to: -- [Upload coverage data](../coverage-reporter/index.md) to Codacy +- [Upload coverage data](../coverage-reporter/index.mdx) to Codacy - Upload to Codacy the results of [running client-side analysis tools](../repositories-configure/local-analysis/client-side-tools) - [Authenticate when using the Codacy API](using-the-codacy-api#authenticating-requests) @@ -66,6 +66,6 @@ To revoke a repository API token, click the **X** next to the token. After this, ## See also -- [Adding coverage to your repository](../coverage-reporter/index.md) +- [Adding coverage to your repository](../coverage-reporter/index.mdx) - [Client-side tools](../repositories-configure/local-analysis/client-side-tools) - [Creating repository API tokens programmatically](examples/creating-repository-api-tokens-programmatically) diff --git a/docusaurus/docs/codacy-api/examples/identifying-commits-without-coverage-data.mdx b/docusaurus/docs/codacy-api/examples/identifying-commits-without-coverage-data.mdx index 4b250fdf40..d2826b241d 100644 --- a/docusaurus/docs/codacy-api/examples/identifying-commits-without-coverage-data.mdx +++ b/docusaurus/docs/codacy-api/examples/identifying-commits-without-coverage-data.mdx @@ -58,7 +58,7 @@ Example usage and output, where: - The second commit listed for each pull request is the **common ancestor commit** of the pull request branch :::note -If you find commits where the coverage status is different from `Processed`, [follow these troubleshooting instructions](../../coverage-reporter/index.md#validating-coverage) to validate that your coverage setup is working correctly. +If you find commits where the coverage status is different from `Processed`, [follow these troubleshooting instructions](../../coverage-reporter/index.mdx#validating-coverage) to validate that your coverage setup is working correctly. ::: ```bash @@ -78,4 +78,4 @@ Coverage for 1a64ea8885717e7b9874c9f3702806ec96b00276 is null ## See also -- [Adding coverage to your repository](../../coverage-reporter/index.md) +- [Adding coverage to your repository](../../coverage-reporter/index.mdx) diff --git a/docusaurus/docs/coverage-reporter/index.mdx b/docusaurus/docs/coverage-reporter/index.mdx index a879402808..1a99d297e1 100644 --- a/docusaurus/docs/coverage-reporter/index.mdx +++ b/docusaurus/docs/coverage-reporter/index.mdx @@ -129,7 +129,7 @@ If you're generating a report format that Codacy doesn't support yet, [contribut - [danielpalme/ReportGenerator](https://github.com/danielpalme/ReportGenerator): convert between different report formats :::caution -Make sure that you [specify the language](./uploading-coverage-in-advanced-scenarios.md#unsupported-languages) when uploading coverage for an unsupported language. +Make sure that you [specify the language](./uploading-coverage-in-advanced-scenarios.mdx#unsupported-languages) when uploading coverage for an unsupported language. ::: As a last resort, you can also send the coverage data directly by calling one of the following Codacy API endpoints: @@ -200,10 +200,10 @@ However, the instructions on this page assume that you'll run the recommended [s bash <(curl -Ls https://coverage.codacy.com/get.sh) report -r ``` - Check the console output to validate that the Codacy Coverage Reporter **detected the correct commit SHA-1 hash** and **successfully uploaded** the coverage data to Codacy. If you need help, [check the troubleshooting page](troubleshooting-coverage-cli-issues.md) for solutions to the most common issues while running the CLI. + Check the console output to validate that the Codacy Coverage Reporter **detected the correct commit SHA-1 hash** and **successfully uploaded** the coverage data to Codacy. If you need help, [check the troubleshooting page](troubleshooting-coverage-cli-issues.mdx) for solutions to the most common issues while running the CLI. :::note - Be sure to also check the [instructions for more advanced scenarios](uploading-coverage-in-advanced-scenarios.md) while uploading the coverage data to Codacy, such as when running parallel tests, using monorepos, or testing source code in multiple or unsupported languages. + Be sure to also check the [instructions for more advanced scenarios](uploading-coverage-in-advanced-scenarios.mdx) while uploading the coverage data to Codacy, such as when running parallel tests, using monorepos, or testing source code in multiple or unsupported languages. ::: ## 3. Validating that the coverage setup is complete \{#validating-coverage\} diff --git a/docusaurus/docs/enterprise-cloud/github-enterprise-cloud.mdx b/docusaurus/docs/enterprise-cloud/github-enterprise-cloud.mdx index 34f428f32f..42b6628a01 100644 --- a/docusaurus/docs/enterprise-cloud/github-enterprise-cloud.mdx +++ b/docusaurus/docs/enterprise-cloud/github-enterprise-cloud.mdx @@ -63,7 +63,7 @@ Currently, the integration between Codacy and GitHub Enterprise has the followin ## See also -- [How does Codacy support GitLab Cloud?](../faq/general/how-does-codacy-support-gitlab-cloud.md) -- [How does Codacy support GitLab Enterprise?](../faq/general/how-does-codacy-support-gitlab-enterprise.md) -- [How does Codacy support Bitbucket Cloud?](../faq/general/how-does-codacy-support-bitbucket-cloud.md) -- [How does Codacy support Bitbucket Server?](../faq/general/how-does-codacy-support-bitbucket-server.md) +- [How does Codacy support GitLab Cloud?](../faq/general/how-does-codacy-support-gitlab-cloud.mdx) +- [How does Codacy support GitLab Enterprise?](../faq/general/how-does-codacy-support-gitlab-enterprise.mdx) +- [How does Codacy support Bitbucket Cloud?](../faq/general/how-does-codacy-support-bitbucket-cloud.mdx) +- [How does Codacy support Bitbucket Server?](../faq/general/how-does-codacy-support-bitbucket-server.mdx) diff --git a/docusaurus/docs/faq/code-analysis/which-metrics-does-codacy-calculate.mdx b/docusaurus/docs/faq/code-analysis/which-metrics-does-codacy-calculate.mdx index 8808d8c553..50e1801b84 100644 --- a/docusaurus/docs/faq/code-analysis/which-metrics-does-codacy-calculate.mdx +++ b/docusaurus/docs/faq/code-analysis/which-metrics-does-codacy-calculate.mdx @@ -49,7 +49,7 @@ Codacy calculates the number of issues in the following static code analysis cat - **Performance:** Code that can have performance problems - **Compatibility:** Mainly for frontend code, compatibility problems across different browser versions - **Unused code:** Unused variables and methods, code that can't be reached -- **Security:** Potential security vulnerabilities, including hard-coded passwords and keys (secret scanning), vulnerable dependencies (software composition analysis or SCA), and insecure code patterns (static application security testing or SAST). For more information, see the complete [list of security issue categories](../../organizations/managing-security-and-risk.md#supported-security-categories) +- **Security:** Potential security vulnerabilities, including hard-coded passwords and keys (secret scanning), vulnerable dependencies (software composition analysis or SCA), and insecure code patterns (static application security testing or SAST). For more information, see the complete [list of security issue categories](../../organizations/managing-security-and-risk.mdx#supported-security-categories) - **Documentation:** Methods and classes that don't have the correct comment annotations - **Best practice:** Code that doesn't follow the recommended coding standards and best practices - **Comprehensibility:** Code that can be difficult to understand and modify @@ -95,7 +95,7 @@ Codacy identifies clones or [sequences of duplicate code](https://en.wikipedia.o Codacy calculates duplication as follows: - The duplication value for each file is the number of clones in the file. -- A file is considered duplicated if the number of clones in the file is higher than the threshold [**File is duplicated when over**](../../repositories-configure/adjusting-quality-goals.md). +- A file is considered duplicated if the number of clones in the file is higher than the threshold [**File is duplicated when over**](../../repositories-configure/adjusting-quality-goals.mdx). - The duplication value of a commit or pull request is the number of clones introduced by the commit or pull request. :::note @@ -121,7 +121,7 @@ You must set up your CI/CD pipeline to [upload code coverage data to Codacy](../ Codacy calculates code coverage as follows: - The coverage value for each file is the percentage of coverable lines that are covered by tests in the file. If a line is covered multiple times, Codacy counts it as a single covered line when calculating coverage. -- A repository is considered to have acceptable coverage if the percentage of coverable lines that are covered by tests in the repository is higher than the threshold [**Coverage is under**](../../repositories-configure/adjusting-quality-goals.md). +- A repository is considered to have acceptable coverage if the percentage of coverable lines that are covered by tests in the repository is higher than the threshold [**Coverage is under**](../../repositories-configure/adjusting-quality-goals.mdx). {/**/} - The **coverage variation** of a commit or pull request is the increase or drop in the percentage of coverable lines that are covered by tests in the repository because of the changes of the commit or pull request. - The **diff coverage** of a pull request is the percentage of **coverable lines** that the pull request **added or modified** that are covered by tests. diff --git a/docusaurus/docs/faq/repositories/how-do-i-reanalyze-my-repository.mdx b/docusaurus/docs/faq/repositories/how-do-i-reanalyze-my-repository.mdx index dc92e20786..c71eceea86 100644 --- a/docusaurus/docs/faq/repositories/how-do-i-reanalyze-my-repository.mdx +++ b/docusaurus/docs/faq/repositories/how-do-i-reanalyze-my-repository.mdx @@ -14,7 +14,7 @@ Reanalyze the last commit in your branch or pull request: ![Greyed-out Codacy badge and repository grade](images/codacy-badge-grade-gray.png) :::caution -- If you have the setting **Run analysis on your build server** enabled in your repository **Settings** page so that you can [run client-side tools](../../repositories-configure/local-analysis/client-side-tools.md), you can't trigger a new analysis from the Codacy UI. +- If you have the setting **Run analysis on your build server** enabled in your repository **Settings** page so that you can [run client-side tools](../../repositories-configure/local-analysis/client-side-tools.mdx), you can't trigger a new analysis from the Codacy UI. Instead, you must manually run the client-side tools or wait for them to report the results for a new commit. diff --git a/docusaurus/docs/faq/troubleshooting/we-no-longer-have-access-to-this-repository.mdx b/docusaurus/docs/faq/troubleshooting/we-no-longer-have-access-to-this-repository.mdx index 12f853de95..39dca5c708 100644 --- a/docusaurus/docs/faq/troubleshooting/we-no-longer-have-access-to-this-repository.mdx +++ b/docusaurus/docs/faq/troubleshooting/we-no-longer-have-access-to-this-repository.mdx @@ -35,4 +35,4 @@ If the user that initially configured the repository on Codacy was using a user ![Generate new key](./images/we-no-longer-have-access-to-this-repository-new-key.png) -1. Open the tab **Integrations**, and refresh your [GitLab](../../repositories-configure/integrations/gitlab-integration.md#refreshing) or [Bitbucket](../../repositories-configure/integrations/bitbucket-integration.md#refreshing) integration. +1. Open the tab **Integrations**, and refresh your [GitLab](../../repositories-configure/integrations/gitlab-integration.mdx#refreshing) or [Bitbucket](../../repositories-configure/integrations/bitbucket-integration.mdx#refreshing) integration. diff --git a/docusaurus/docs/getting-started/adding-a-codacy-badge.mdx b/docusaurus/docs/getting-started/adding-a-codacy-badge.mdx index a792dcedd4..a323515f3e 100644 --- a/docusaurus/docs/getting-started/adding-a-codacy-badge.mdx +++ b/docusaurus/docs/getting-started/adding-a-codacy-badge.mdx @@ -2,7 +2,7 @@ title: Adding a Codacy badge --- -Add a Codacy badge to the README of your repository to display the current [code quality grade](../faq/code-analysis/which-metrics-does-codacy-calculate.md#grade) or [code coverage](../faq/code-analysis/which-metrics-does-codacy-calculate.md#code-coverage) of your repository. +Add a Codacy badge to the README of your repository to display the current [code quality grade](../faq/code-analysis/which-metrics-does-codacy-calculate.mdx#grade) or [code coverage](../faq/code-analysis/which-metrics-does-codacy-calculate.mdx#code-coverage) of your repository. {/**/} diff --git a/docusaurus/docs/getting-started/configuring-your-repository.mdx b/docusaurus/docs/getting-started/configuring-your-repository.mdx index 3f2b6938bd..95bb1944b3 100644 --- a/docusaurus/docs/getting-started/configuring-your-repository.mdx +++ b/docusaurus/docs/getting-started/configuring-your-repository.mdx @@ -33,7 +33,7 @@ To ensure that multiple repositories consistently follow the same global tool an ![Configuring the tools and code patterns](../repositories-configure/images/code-patterns.png) ## 3. Adding coverage to your repository (optional) \{#adding-coverage\} -If you want to use code coverage to block merging pull requests that don't meet your quality standards, make sure that you [add coverage to your repository](../coverage-reporter/index.md). +If you want to use code coverage to block merging pull requests that don't meet your quality standards, make sure that you [add coverage to your repository](../coverage-reporter/index.mdx). It's important that you set up coverage beforehand because Codacy can only report the coverage status for pull requests after receiving reports for the last commits **on both the pull request branch and the target branch**. diff --git a/docusaurus/docs/organizations/managing-repositories.mdx b/docusaurus/docs/organizations/managing-repositories.mdx index fdf426f1f1..0aed88b51f 100644 --- a/docusaurus/docs/organizations/managing-repositories.mdx +++ b/docusaurus/docs/organizations/managing-repositories.mdx @@ -85,4 +85,4 @@ Codacy allows you to utilise [**Segments**](../segments.mdx) to categorize and f ## See also - [How to setup Segments?](../segments) -- [Which metrics does Codacy calculate?](../faq/code-analysis/which-metrics-does-codacy-calculate.md) +- [Which metrics does Codacy calculate?](../faq/code-analysis/which-metrics-does-codacy-calculate.mdx) diff --git a/docusaurus/docs/organizations/managing-security-and-risk.mdx b/docusaurus/docs/organizations/managing-security-and-risk.mdx index 01a13027d4..cea03eadf4 100644 --- a/docusaurus/docs/organizations/managing-security-and-risk.mdx +++ b/docusaurus/docs/organizations/managing-security-and-risk.mdx @@ -114,7 +114,7 @@ To share the current view of the overview or findings page, click the **Copy URL ::: ## Ignoring findings \{#ignoring-findings\} -:::note[This feature is available only to organization admins and organization managers except for findings detected on [Git repositories](#opening-and-closing-items). For those findings, [repository permissions are respected](../repositories/issues.mdx.md#ignoring-and-managing-issues)] +:::note[This feature is available only to organization admins and organization managers except for findings detected on [Git repositories](#opening-and-closing-items). For those findings, [repository permissions are respected](../repositories/issues.mdx.mdx#ignoring-and-managing-issues)] ::: You can ignore a finding using the context menu both in the findings list page and the findings details page. When ignoring a finding you can optionally specify a reason for doing so. @@ -128,7 +128,7 @@ From Codacy's standpoint, ignoring a finding means it will be removed from the m :::note[[Jira](./integrations/jira-integration.mdx) findings can't be ignored in Codacy. You should closed the issue directly in Jira.] ::: -:::caution[Ignoring findings detected on [Git repositories](#opening-and-closing-items) will also [ignore the issue at the repository level](../repositories/issues.md#ignoring-and-managing-issues).] +:::caution[Ignoring findings detected on [Git repositories](#opening-and-closing-items) will also [ignore the issue at the repository level](../repositories/issues.mdx#ignoring-and-managing-issues).] ::: You can still see **Ignored** findings in the [findings list](#item-list), by filtering for the **Ignored** status in the **Statuses** dropdown. You can assess which status a finding has at his overview, on the right top corner. @@ -302,7 +302,7 @@ The following table describes how finding statuses map to deadlines: ## Supported security categories :::note -Due to a recent update, some issues may be temporarily assigned the **Not yet categorized** category. To categorize these issues, you can [reanalyze the default branch of the relevant repository](../faq/repositories/how-do-i-reanalyze-my-repository.md#reanalyzing-a-branch). For a list of repositories that have issues with this category, use the **Security category** filter on the [Findings](#item-list) page. +Due to a recent update, some issues may be temporarily assigned the **Not yet categorized** category. To categorize these issues, you can [reanalyze the default branch of the relevant repository](../faq/repositories/how-do-i-reanalyze-my-repository.mdx#reanalyzing-a-branch). For a list of repositories that have issues with this category, use the **Security category** filter on the [Findings](#item-list) page. Note that some issues just don't have a security category. These issues will remain **Not yet categorized**. ::: diff --git a/docusaurus/docs/organizations/organization-overview.mdx b/docusaurus/docs/organizations/organization-overview.mdx index 55a2da368a..ad256c2b5a 100644 --- a/docusaurus/docs/organizations/organization-overview.mdx +++ b/docusaurus/docs/organizations/organization-overview.mdx @@ -15,7 +15,7 @@ On the Organization overview you have the following areas to help you monitor yo - [Overall quality chart](#overall-quality-chart) - [Last updated repositories](#last-updated-repositories) -- [Issues metrics](issues-metrics.md) +- [Issues metrics](issues-metrics.mdx) On this page, you can also see the **Organization setup** area, which provides you with a checklist of items that you should complete to ensure that your organization is set up correctly and that you're getting the most out of Codacy. @@ -25,7 +25,7 @@ The following sections provide a detailed description of the repository-related ## Overall quality chart -The **Overall quality** chart compares the repositories that you follow regarding [grade](../faq/code-analysis/which-metrics-does-codacy-calculate.md#grade), [issues](../faq/code-analysis/which-metrics-does-codacy-calculate.md#issues), [complex files](../faq/code-analysis/which-metrics-does-codacy-calculate.md#complexity), [duplication](../faq/code-analysis/which-metrics-does-codacy-calculate.md#duplication), and [code coverage](../faq/code-analysis/which-metrics-does-codacy-calculate.md#code-coverage). Each tab displays the average value for the corresponding metric for the last updated repositories. +The **Overall quality** chart compares the repositories that you follow regarding [grade](../faq/code-analysis/which-metrics-does-codacy-calculate.mdx#grade), [issues](../faq/code-analysis/which-metrics-does-codacy-calculate.mdx#issues), [complex files](../faq/code-analysis/which-metrics-does-codacy-calculate.mdx#complexity), [duplication](../faq/code-analysis/which-metrics-does-codacy-calculate.mdx#duplication), and [code coverage](../faq/code-analysis/which-metrics-does-codacy-calculate.mdx#code-coverage). Each tab displays the average value for the corresponding metric for the last updated repositories. :::caution - The overall quality chart calculates metrics and displays data only for the **repositories that you follow** on Codacy. This means that depending on their list of followed repositories, two users can see different results on this chart. diff --git a/docusaurus/docs/organizations/roles-and-permissions-for-organizations.mdx b/docusaurus/docs/organizations/roles-and-permissions-for-organizations.mdx index 4988c9d6be..3c1bc78244 100644 --- a/docusaurus/docs/organizations/roles-and-permissions-for-organizations.mdx +++ b/docusaurus/docs/organizations/roles-and-permissions-for-organizations.mdx @@ -29,13 +29,13 @@ By default, only users with the Codacy role **repository write** can change anal To change this, open your organization **Settings**, page **Roles and permissions**, and choose the Codacy roles that can perform the following operations on the repositories of your organization: -- [Ignore issues](../repositories/issues.md#ignoring-and-managing-issues) -- [Ignore files](../repositories-configure/ignoring-files.md) -- [Configure code patterns](../repositories-configure/configuring-code-patterns.md) -- [Configure languages](../repositories-configure/languages.md) +- [Ignore issues](../repositories/issues.mdx#ignoring-and-managing-issues) +- [Ignore files](../repositories-configure/ignoring-files.mdx) +- [Configure code patterns](../repositories-configure/configuring-code-patterns.mdx) +- [Configure languages](../repositories-configure/languages.mdx) - [Manage branches](../repositories-configure/managing-branches.mdx) -- [Reanalyze branches and pull requests](../faq/repositories/how-do-i-reanalyze-my-repository.md) -- [Create targets and run Dynamic Application Security Testing scans](../organizations/managing-security-and-risk.md#app-scanning) +- [Reanalyze branches and pull requests](../faq/repositories/how-do-i-reanalyze-my-repository.mdx) +- [Create targets and run Dynamic Application Security Testing scans](../organizations/managing-security-and-risk.mdx#app-scanning) ![Configuring repository management permissions](images/roles-permissions-repo-management.png) diff --git a/docusaurus/docs/organizations/using-coding-standards.mdx b/docusaurus/docs/organizations/using-coding-standards.mdx index dc178abf65..a4ce7f1a5c 100644 --- a/docusaurus/docs/organizations/using-coding-standards.mdx +++ b/docusaurus/docs/organizations/using-coding-standards.mdx @@ -160,7 +160,7 @@ To delete a coding standard: ![Deleting a coding standard](images/coding-standard-delete.png) ## Using a coding standard alongside tool configuration files \{#using-with-tool-configuration\} -When using a [tool configuration file](../repositories-configure/configuring-code-patterns.md#using-your-own-tool-configuration-files) alongside a coding standard, the configuration file controls the code patterns, while the coding standard controls whether the tool is enabled or disabled. +When using a [tool configuration file](../repositories-configure/configuring-code-patterns.mdx#using-your-own-tool-configuration-files) alongside a coding standard, the configuration file controls the code patterns, while the coding standard controls whether the tool is enabled or disabled. ## Using a coding standard alongside repository-level customizations \{#using-with-repository-configuration\} Tools and patterns enabled by a coding standard are enforced and cannot be disabled at the repository level. You can add extra tools and patterns, if these are not already enabled by any applied coding standard. diff --git a/docusaurus/docs/release-notes/cloud/2018/2018-10-19-cloud.md b/docusaurus/docs/release-notes/cloud/2018/2018-10-19-cloud.md index 10e3c6074a..43542c7d74 100644 --- a/docusaurus/docs/release-notes/cloud/2018/2018-10-19-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2018/2018-10-19-cloud.md @@ -16,7 +16,7 @@ slug: /release-notes/cloud/cloud-2018-10-19 - We updated the following tools: - Scalameta now supports Scala 2.12 - - Credo version [0.10.2](https://github.com/rrrene/credo/blob/master/CHANGELOG.md#0102) + - Credo version [0.10.2](https://github.com/rrrene/credo/blob/master/CHANGELOG.mdx#0102) - Checkstyle version [8.13](http://checkstyle.sourceforge.net/releasenotes.html#Release_8.13) - Bandit version [1.5.1](https://github.com/PyCQA/bandit/releases/tag/1.5.1) - PHP_CodeSniffer version [3.1](https://pear.php.net/package/PHP_CodeSniffer/download/3.1.0) diff --git a/docusaurus/docs/release-notes/cloud/2018/2018-11-02-cloud.md b/docusaurus/docs/release-notes/cloud/2018/2018-11-02-cloud.md index 3047fa92c6..4abe556b37 100644 --- a/docusaurus/docs/release-notes/cloud/2018/2018-11-02-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2018/2018-11-02-cloud.md @@ -21,7 +21,7 @@ slug: /release-notes/cloud/cloud-2018-11-02 ## Tool updates -- Updated RuboCop to version [v0.59.2](https://github.com/rubocop/rubocop/blob/master/relnotes/v0.59.2.md) +- Updated RuboCop to version [v0.59.2](https://github.com/rubocop/rubocop/blob/master/relnotes/v0.59.2.mdx) - Updated ESLint to version [v5.7.0](https://eslint.org/blog/2018/10/eslint-v5.7.0-released) - Added support to [TSLint 5](https://www.npmjs.com/package/tslint/v/5.11.0) - Previous versions are no longer supported. diff --git a/docusaurus/docs/release-notes/cloud/2018/2018-11-16-cloud.md b/docusaurus/docs/release-notes/cloud/2018/2018-11-16-cloud.md index 0f8f486203..d3ccfb40a7 100644 --- a/docusaurus/docs/release-notes/cloud/2018/2018-11-16-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2018/2018-11-16-cloud.md @@ -17,7 +17,7 @@ Created default patterns for Flawfinder. We updated the following tools to newer versions: -- RuboCop to [v0.60.0](https://github.com/rubocop/rubocop/blob/master/relnotes/v0.60.0.md) +- RuboCop to [v0.60.0](https://github.com/rubocop/rubocop/blob/master/relnotes/v0.60.0.mdx) - ESLint to [v5.8.0](https://eslint.org/blog/2018/10/eslint-v5.8.0-released) - ESLint plugin airbnb-eslint-config to [v17.1.0](https://www.npmjs.com/package/eslint-config-airbnb/v/17.1.0) - ESLint plugin babel-eslint to [v10.0.1](https://www.npmjs.com/package/babel-eslint/v/10.0.1) diff --git a/docusaurus/docs/release-notes/cloud/2019/2019-02-18-cloud-bitbucket-changes.md b/docusaurus/docs/release-notes/cloud/2019/2019-02-18-cloud-bitbucket-changes.md index 284e152eb7..2a8ff529a2 100644 --- a/docusaurus/docs/release-notes/cloud/2019/2019-02-18-cloud-bitbucket-changes.md +++ b/docusaurus/docs/release-notes/cloud/2019/2019-02-18-cloud-bitbucket-changes.md @@ -27,7 +27,7 @@ Previously, we were using OAuth 1, which forced us to request all permissions. T The original user who set up your Bitbucket integration will need to log in to Codacy to confirm the new permissions. **Otherwise, Codacy will no longer be able to detect new Pull Requests, and existing repositories will stop receiving Pull Request status and comments on Bitbucket.** -If the original user who set up your Bitbucket integration isn't available, someone who has Admin permissions in both Codacy and Bitbucket to [re-do the integration](../../../repositories-configure/integrations/bitbucket-integration.md) in Codacy. +If the original user who set up your Bitbucket integration isn't available, someone who has Admin permissions in both Codacy and Bitbucket to [re-do the integration](../../../repositories-configure/integrations/bitbucket-integration.mdx) in Codacy. You can log in with Bitbucket through [www.codacy.com/login-with/bitbucket](https://www.codacy.com/login-with/bitbucket). diff --git a/docusaurus/docs/release-notes/cloud/2019/2019-03-29-cloud.md b/docusaurus/docs/release-notes/cloud/2019/2019-03-29-cloud.md index db637c97ee..77568c2153 100644 --- a/docusaurus/docs/release-notes/cloud/2019/2019-03-29-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2019/2019-03-29-cloud.md @@ -9,7 +9,7 @@ slug: /release-notes/cloud/cloud-2019-03-29 ## Product enhancements -- We now integrate with [Bitbucket using OAuth2](../../../organizations/what-are-organizations.md). This has allowed us to reduce the level of permissions we require when you integrate Codacy with your Bitbucket account. +- We now integrate with [Bitbucket using OAuth2](../../../organizations/what-are-organizations.mdx). This has allowed us to reduce the level of permissions we require when you integrate Codacy with your Bitbucket account. - We updated TSLint to version [5.14.0](https://www.npmjs.com/package/tslint/v/5.14.0). diff --git a/docusaurus/docs/release-notes/cloud/2019/2019-05-20-cloud.md b/docusaurus/docs/release-notes/cloud/2019/2019-05-20-cloud.md index a07885bb57..dc2ea923fd 100644 --- a/docusaurus/docs/release-notes/cloud/2019/2019-05-20-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2019/2019-05-20-cloud.md @@ -9,7 +9,7 @@ slug: /release-notes/cloud/cloud-2019-05-20 ## Product enhancements -- As a way of improving performance and provide faster analysis, Codacy will no longer check for new updates in projects that don't have [post-commit hooks](../../../repositories-configure/integrations/post-commit-hooks.md) enabled. +- As a way of improving performance and provide faster analysis, Codacy will no longer check for new updates in projects that don't have [post-commit hooks](../../../repositories-configure/integrations/post-commit-hooks.mdx) enabled. ## Bug fixes diff --git a/docusaurus/docs/release-notes/cloud/2019/2019-11-15-cloud.md b/docusaurus/docs/release-notes/cloud/2019/2019-11-15-cloud.md index 5fdaf4c699..a0f70d5e0b 100644 --- a/docusaurus/docs/release-notes/cloud/2019/2019-11-15-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2019/2019-11-15-cloud.md @@ -11,7 +11,7 @@ slug: /release-notes/cloud/cloud-2019-11-15 Synced organizations for GitHub are live! -This feature will allow for easier integration with GitHub and organization management. Here you can find our [documentation on the new features and how to use them](../../../organizations/what-are-organizations.md). +This feature will allow for easier integration with GitHub and organization management. Here you can find our [documentation on the new features and how to use them](../../../organizations/what-are-organizations.mdx). As a consequence, the next time you log in to Codacy you will see a window asking for one additional permission on GitHub with this information: diff --git a/docusaurus/docs/release-notes/cloud/2021/2021-07-03-cloud-scheduled-db-maintenance.md b/docusaurus/docs/release-notes/cloud/2021/2021-07-03-cloud-scheduled-db-maintenance.md index 42a2be57c0..7b4a1df8a4 100644 --- a/docusaurus/docs/release-notes/cloud/2021/2021-07-03-cloud-scheduled-db-maintenance.md +++ b/docusaurus/docs/release-notes/cloud/2021/2021-07-03-cloud-scheduled-db-maintenance.md @@ -32,4 +32,4 @@ The following is the expected impact after the maintenance operation is complete ## What to do if you're missing information on your repositories? -You can wait for Codacy to analyze new pushes to your repositories or [manually trigger the re-analysis](../../../faq/repositories/how-do-i-reanalyze-my-repository.md) of any commits and pull requests to re-populate the pages. +You can wait for Codacy to analyze new pushes to your repositories or [manually trigger the re-analysis](../../../faq/repositories/how-do-i-reanalyze-my-repository.mdx) of any commits and pull requests to re-populate the pages. diff --git a/docusaurus/docs/release-notes/cloud/2021/2021-11-02-cloud-legacy-organizations.md b/docusaurus/docs/release-notes/cloud/2021/2021-11-02-cloud-legacy-organizations.md index a9580e1781..2a35cb3a63 100644 --- a/docusaurus/docs/release-notes/cloud/2021/2021-11-02-cloud-legacy-organizations.md +++ b/docusaurus/docs/release-notes/cloud/2021/2021-11-02-cloud-legacy-organizations.md @@ -4,11 +4,11 @@ slug: /release-notes/cloud/cloud-2021-11-02-legacy-organizations --- -On November 2, 2021, as part of our efforts to improve Codacy Cloud and allow all our customers to benefit from a more seamless experience, we’re removing the support for legacy manual organizations. As part of this process, we'll automatically migrate your legacy organization to a new [synced organization](../../../organizations/what-are-organizations.md). +On November 2, 2021, as part of our efforts to improve Codacy Cloud and allow all our customers to benefit from a more seamless experience, we’re removing the support for legacy manual organizations. As part of this process, we'll automatically migrate your legacy organization to a new [synced organization](../../../organizations/what-are-organizations.mdx). To make sure that Codacy will continue to analyze your repositories **please perform the following steps before November 2, 2021**: -1. **If you're using GitHub** you must [install the Codacy GitHub App](https://github.com/apps/codacy-production/installations/new) on the GitHub organizations that contain your repositories so that Codacy has the [necessary permissions](../../../getting-started/which-permissions-does-codacy-need-from-my-account.md) to analyze your code. +1. **If you're using GitHub** you must [install the Codacy GitHub App](https://github.com/apps/codacy-production/installations/new) on the GitHub organizations that contain your repositories so that Codacy has the [necessary permissions](../../../getting-started/which-permissions-does-codacy-need-from-my-account.mdx) to analyze your code. 1. Make sure that your Git provider organization owners belong to the **Administrators** team of your legacy organization on Codacy. @@ -32,4 +32,4 @@ Codacy appreciates your continued support through this time of growth and change ## See also -- **On Codacy Self-hosted,** legacy manual organizations stopped being supported on [version 5.0.0](../self-hosted/self-hosted-v5.0.0.md) +- **On Codacy Self-hosted,** legacy manual organizations stopped being supported on [version 5.0.0](../self-hosted/self-hosted-v5.0.0.mdx) diff --git a/docusaurus/docs/release-notes/cloud/2021/2021-11-cloud.md b/docusaurus/docs/release-notes/cloud/2021/2021-11-cloud.md index 5ad416f4cf..0b87566542 100644 --- a/docusaurus/docs/release-notes/cloud/2021/2021-11-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2021/2021-11-cloud.md @@ -18,7 +18,7 @@ These release notes are for the Codacy Cloud updates during November 2021. - Now, Codacy supports linting OpenAPI and AsyncAPI descriptions in either YAML or JSON files using [Spectral](https://stoplight.io/open-source/spectral/). (CY-5088) -- You can now [use an organization coding standard](../../../organizations/using-coding-standards.md) to apply the same coding best practices, conventions, or security rules to a group of repositories. (CY-4654) +- You can now [use an organization coding standard](../../../organizations/using-coding-standards.mdx) to apply the same coding best practices, conventions, or security rules to a group of repositories. (CY-4654) ![Organization coding standard](../../images/cy-4654.png) diff --git a/docusaurus/docs/release-notes/cloud/2021/2021-12-cloud.md b/docusaurus/docs/release-notes/cloud/2021/2021-12-cloud.md index 9550145afb..8b4de64134 100644 --- a/docusaurus/docs/release-notes/cloud/2021/2021-12-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2021/2021-12-cloud.md @@ -16,7 +16,7 @@ These release notes are for the Codacy Cloud updates during December 2021. ## Product enhancements -- It's now possible to [assign a coding standard automatically to new repositories](../../../organizations/using-coding-standards.md#set-default). (CY-5263) +- It's now possible to [assign a coding standard automatically to new repositories](../../../organizations/using-coding-standards.mdx#set-default). (CY-5263) ## Bug fixes diff --git a/docusaurus/docs/release-notes/cloud/2022/2022-01-cloud.md b/docusaurus/docs/release-notes/cloud/2022/2022-01-cloud.md index 3acd15cb49..9032ca437d 100644 --- a/docusaurus/docs/release-notes/cloud/2022/2022-01-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2022/2022-01-cloud.md @@ -16,7 +16,7 @@ These release notes are for the Codacy Cloud updates during January 2022. ## Product enhancements -- The Codacy API now includes endpoints that allow you to [create and manage project API tokens programmatically](../../../codacy-api/examples/creating-repository-api-tokens-programmatically.md). This feature can be used to automate setting up coverage for either new repositories or for all your existing repositories. (CY-5090) +- The Codacy API now includes endpoints that allow you to [create and manage project API tokens programmatically](../../../codacy-api/examples/creating-repository-api-tokens-programmatically.mdx). This feature can be used to automate setting up coverage for either new repositories or for all your existing repositories. (CY-5090) - Added the plugin [eslint-plugin-storybook](https://www.npmjs.com/package/eslint-plugin-storybook) to [codacy-eslint](https://github.com/codacy/codacy-eslint). (CY-5406) - Now, Codacy supports static code analysis for Dart/Flutter projects using [dartanalyzer](https://github.com/dart-lang/sdk/tree/main/pkg/analyzer_cli). The new tool checks your code for errors and warnings that are specified in the [Dart language specification](https://dart.dev/guides/language/spec). (CY-4314) - Now, all configurable Stylelint code patterns have [default values set to the recommended settings](https://github.com/codacy/codacy-stylelint/pull/240/files), ensuring that they're ready to be used as soon as you enable them. (CY-3275) diff --git a/docusaurus/docs/release-notes/cloud/2022/2022-02-16-cloud-pmd-legacy-removal.md b/docusaurus/docs/release-notes/cloud/2022/2022-02-16-cloud-pmd-legacy-removal.md index 60557ccb50..ad79095d7b 100644 --- a/docusaurus/docs/release-notes/cloud/2022/2022-02-16-cloud-pmd-legacy-removal.md +++ b/docusaurus/docs/release-notes/cloud/2022/2022-02-16-cloud-pmd-legacy-removal.md @@ -14,6 +14,6 @@ However, the legacy version of PMD is almost five years old and is no longer bei ## If you were using PMD (Legacy) -To continue using PMD to analyze your repositories, [enable the **PMD** tool](../../../repositories-configure/configuring-code-patterns.md) on the **Code patterns** page of your repositories. +To continue using PMD to analyze your repositories, [enable the **PMD** tool](../../../repositories-configure/configuring-code-patterns.mdx) on the **Code patterns** page of your repositories. If you have any questions or need help, please contact [support@codacy.com](mailto:support@codacy.com). diff --git a/docusaurus/docs/release-notes/cloud/2022/2022-02-cloud.md b/docusaurus/docs/release-notes/cloud/2022/2022-02-cloud.md index ffff38e90c..a180eeee19 100644 --- a/docusaurus/docs/release-notes/cloud/2022/2022-02-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2022/2022-02-cloud.md @@ -16,13 +16,13 @@ These release notes are for the Codacy Cloud updates during February 2022. ## Product enhancements -- The [**Overall quality** chart](../../../organizations/organization-overview.md#overall-quality-chart) now allows drilling down on the information to understand which repositories require attention to improve the organization's code quality. (Beta) (CY-5580) +- The [**Overall quality** chart](../../../organizations/organization-overview.mdx#overall-quality-chart) now allows drilling down on the information to understand which repositories require attention to improve the organization's code quality. (Beta) (CY-5580) ![Drilling down on the Overall quality chart](../../images/cy-5580.png) - Now, Codacy calculates the new metric [diff coverage for pull requests](../../../repositories/pull-requests.mdx#quality-overview). (CY-5533) - It's also possible to [set up a quality gate rule](../../../repositories-configure/adjusting-quality-gates.md) for diff coverage. (CY-5534) + It's also possible to [set up a quality gate rule](../../../repositories-configure/adjusting-quality-gates.mdx) for diff coverage. (CY-5534) ![Diff coverage for a pull request](../../images/cy-5533.png) @@ -41,8 +41,8 @@ These release notes are for the Codacy Cloud updates during February 2022. - [rubocop-ast 1.15.1](https://rubygems.org/gems/rubocop-ast/versions/1.15.1) - Now, the **Coverage** column always appears on the Files page even when there's no coverage data, avoiding a jump in the view. (CY-5518) -- Now, the [**Issues breakdown** area on the Repository Dashboard](../../../repositories/repository-dashboard.md#issues-breakdown) displays all issue categories, including **Code complexity**. (CY-5463) -- You can now use the Codacy configuration file to [adjust how PMD CPD detects duplicated code](../../../repositories-configure/codacy-configuration-file.md#pmd-cpd-duplication), giving you more flexibility to eliminate false positives. (CY-5184) +- Now, the [**Issues breakdown** area on the Repository Dashboard](../../../repositories/repository-dashboard.mdx#issues-breakdown) displays all issue categories, including **Code complexity**. (CY-5463) +- You can now use the Codacy configuration file to [adjust how PMD CPD detects duplicated code](../../../repositories-configure/codacy-configuration-file.mdx#pmd-cpd-duplication), giving you more flexibility to eliminate false positives. (CY-5184) ## Tool versions diff --git a/docusaurus/docs/release-notes/cloud/2022/2022-03-cloud.md b/docusaurus/docs/release-notes/cloud/2022/2022-03-cloud.md index a333909c9e..2b80bb311a 100644 --- a/docusaurus/docs/release-notes/cloud/2022/2022-03-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2022/2022-03-cloud.md @@ -22,7 +22,7 @@ These release notes are for the Codacy Cloud updates during March 2022. - Configuring the project - Changing the following analysis settings: ignoring issues and files, configuring code patterns, configuring file extensions, and managing branches - [See the updated permissions](../../../organizations/roles-and-permissions-for-organizations.md#permissions-for-gitlab) for all GitLab roles. (CY-5876) + [See the updated permissions](../../../organizations/roles-and-permissions-for-organizations.mdx#permissions-for-gitlab) for all GitLab roles. (CY-5876) - Included ESLint 8 as a new supported tool and deprecated ESLint 7. @@ -46,18 +46,18 @@ These release notes are for the Codacy Cloud updates during March 2022. - The **Organization Overview** and **Repositories list** pages have improved loading times using a short-lived cache in the user's browser. (CY-5793) -- Codacy Coverage Reporter now supports [automatic commit SHA hash detection](../../../coverage-reporter/troubleshooting-coverage-cli-issues.md#commit-detection) on AWS CodeBuild. (CY-5787) +- Codacy Coverage Reporter now supports [automatic commit SHA hash detection](../../../coverage-reporter/troubleshooting-coverage-cli-issues.mdx#commit-detection) on AWS CodeBuild. (CY-5787) - Added new Codacy Analysis CLI options to allow uploading analysis results in batches of configurable size and to use only specific tool categories while performing the analysis. For more information [see the documentation](https://github.com/codacy/codacy-analysis-cli#commands-and-configuration) of the options `--tool` and `--upload-batch-size`. (CY-5727) - The [**Repositories list** page](https://docs.codacy.com/v7.0/organizations/managing-repositories/) now allows sorting the list of repositories using the available columns in organizations with less than 100 repositories. (CY-5695) -- Moved the code coverage setup page under the repository **Settings**, tab **Coverage**. The new page includes a list of the most recent coverage reports uploaded to Codacy to [help you troubleshoot your coverage setup](../../../coverage-reporter/index.md#uploading-coverage). (CY-5399) +- Moved the code coverage setup page under the repository **Settings**, tab **Coverage**. The new page includes a list of the most recent coverage reports uploaded to Codacy to [help you troubleshoot your coverage setup](../../../coverage-reporter/index.mdx#uploading-coverage). (CY-5399) ## Bug fixes -- Fixed an issue that prevented running [standalone tools](../../../repositories-configure/local-analysis/client-side-tools.md) using the Codacy Analysis CLI GitHub Action. (CY-5812) -- Fixed an issue that caused inconsistencies on the last updated date when listing GitHub repositories. Now, the last updated date is the [date of the last push to the repositories](../../../organizations/organization-overview.md#last-updated-repositories). (CY-5784) +- Fixed an issue that prevented running [standalone tools](../../../repositories-configure/local-analysis/client-side-tools.mdx) using the Codacy Analysis CLI GitHub Action. (CY-5812) +- Fixed an issue that caused inconsistencies on the last updated date when listing GitHub repositories. Now, the last updated date is the [date of the last push to the repositories](../../../organizations/organization-overview.mdx#last-updated-repositories). (CY-5784) - Fixed an issue on the API endpoint [getRepositoryPullRequest](https://api.codacy.com/api/api-docs#getrepositorypullrequest) where the grades for coverage weren't being taken into account when calculating if the pull request is up to standards. (CY-5716) - dartanalyzer now supports including the packages [lints](https://pub.dev/packages/lints) and [flutter_lints](https://pub.dev/packages/flutter_lints) in the `analysis_option.yaml` configuration file. (CY-5626) - The re-analyze button is now hidden on repositories that are running analysis through a build server. (CY-4205) @@ -78,7 +78,7 @@ Codacy Cloud now includes the tool versions below. The tools that were recently - Cppcheck 2.2 - Credo 1.4.0 - CSSLint 1.0.5 -- **[dartanalyzer 2.16.1](https://github.com/dart-lang/sdk/blob/main/CHANGELOG.md#2161---2022-02-09) (updated from 2.15.1)** +- **[dartanalyzer 2.16.1](https://github.com/dart-lang/sdk/blob/main/CHANGELOG.mdx#2161---2022-02-09) (updated from 2.15.1)** - detekt 1.19.0 - **[ESLint 8.12.0](https://github.com/eslint/eslint/releases/tag/v8.12.0) (new)** - ESLint 7.32.0 (**deprecated**) diff --git a/docusaurus/docs/release-notes/cloud/2022/2022-04-cloud.md b/docusaurus/docs/release-notes/cloud/2022/2022-04-cloud.md index 79f93b5bf3..b0c664c5d8 100644 --- a/docusaurus/docs/release-notes/cloud/2022/2022-04-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2022/2022-04-cloud.md @@ -22,7 +22,7 @@ These release notes are for the Codacy Cloud updates during April 2022. ## Bug fixes - Fixed a broken link in the notification emails sent to organization admins when new members ask to join an organization. (CY-5979) -- Now, the PMD CPD duplication tool runs [without the `--ignore-identifiers` flag](../../../repositories-configure/codacy-configuration-file.md#pmd-cpd-duplication) because it was found to report more false positives. (CY-5955) +- Now, the PMD CPD duplication tool runs [without the `--ignore-identifiers` flag](../../../repositories-configure/codacy-configuration-file.mdx#pmd-cpd-duplication) because it was found to report more false positives. (CY-5955) - Fixed an issue that prevented Codacy from listing GitHub repositories on the Repositories list. (CY-5935) - Fixed an issue that could cause the **Organization Overview** page to display pull requests with the wrong status under the **Most problematic** open pull requests tab. (CY-5872) @@ -42,7 +42,7 @@ Codacy Cloud now includes the tool versions below. The tools that were recently - Cppcheck 2.2 - Credo 1.4.0 - CSSLint 1.0.5 -- **[dartanalyzer 2.16.2](https://github.com/dart-lang/sdk/blob/main/CHANGELOG.md) (updated from 2.16.1)** +- **[dartanalyzer 2.16.2](https://github.com/dart-lang/sdk/blob/main/CHANGELOG.mdx) (updated from 2.16.1)** - detekt 1.19.0 - **[ESLint 8.14.0](https://github.com/eslint/eslint/releases/tag/v8.14.0) (updated from 8.12.0)** - ESLint (deprecated) 7.32.0 diff --git a/docusaurus/docs/release-notes/cloud/2022/2022-05-cloud.md b/docusaurus/docs/release-notes/cloud/2022/2022-05-cloud.md index 6387906fec..0039264d39 100644 --- a/docusaurus/docs/release-notes/cloud/2022/2022-05-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2022/2022-05-cloud.md @@ -16,7 +16,7 @@ These release notes are for the Codacy Cloud updates during May 2022. ## Product enhancements -- The [**Code Patterns** page](../../../repositories-configure/configuring-code-patterns.md) was redesigned to make which tool is being configured more noticeable. (CY-6021) +- The [**Code Patterns** page](../../../repositories-configure/configuring-code-patterns.mdx) was redesigned to make which tool is being configured more noticeable. (CY-6021) ![Configuring code patterns for a tool](../../images/cy-6021.png) @@ -51,7 +51,7 @@ Codacy Cloud now includes the tool versions below. The tools that were recently - Cppcheck 2.2 - Credo 1.4.0 - CSSLint 1.0.5 -- **[dartanalyzer 2.17.0](https://github.com/dart-lang/sdk/blob/main/CHANGELOG.md#2170---2022-05-11) (updated from 2.16.2)** +- **[dartanalyzer 2.17.0](https://github.com/dart-lang/sdk/blob/main/CHANGELOG.mdx#2170---2022-05-11) (updated from 2.16.2)** - detekt 1.19.0 - **[ESLint 8.15.0](https://github.com/eslint/eslint/releases/tag/v8.15.0) (updated from 8.14.0)** - ESLint (deprecated) 7.32.0 diff --git a/docusaurus/docs/release-notes/cloud/2022/2022-06-cloud.md b/docusaurus/docs/release-notes/cloud/2022/2022-06-cloud.md index d03e0e62e1..87b4e09351 100644 --- a/docusaurus/docs/release-notes/cloud/2022/2022-06-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2022/2022-06-cloud.md @@ -16,8 +16,8 @@ These release notes are for the Codacy Cloud updates during June 2022. ## Product enhancements -- Codacy now supports using [expiring access tokens](https://docs.gitlab.com/ee/integration/oauth_provider.html#expiring-access-tokens) to integrate with GitLab. Users affected by issues connecting to GitLab should re-login on the Codacy UI **using their GitLab accounts**, or [revoke the GitLab integration on Codacy](../../../getting-started/which-permissions-does-codacy-need-from-my-account.md#revoking-access-to-integrations) if the issues persist. (CY-6117) -- [Pull request notification emails](../../../account/emails.md#managing-your-email-notifications) now display the diff coverage metric. (CY-5700) +- Codacy now supports using [expiring access tokens](https://docs.gitlab.com/ee/integration/oauth_provider.html#expiring-access-tokens) to integrate with GitLab. Users affected by issues connecting to GitLab should re-login on the Codacy UI **using their GitLab accounts**, or [revoke the GitLab integration on Codacy](../../../getting-started/which-permissions-does-codacy-need-from-my-account.mdx#revoking-access-to-integrations) if the issues persist. (CY-6117) +- [Pull request notification emails](../../../account/emails.mdx#managing-your-email-notifications) now display the diff coverage metric. (CY-5700) ## Bug fixes @@ -66,7 +66,7 @@ Codacy Cloud now includes the tool versions below. The tools that were recently - Revive 1.2.1 - RuboCop 1.28.2 - Scalastyle 1.5.0 -- **[ShellCheck 0.8.0](https://github.com/koalaman/shellcheck/blob/master/CHANGELOG.md#v080---2021-11-06) (updated from v0.7.2)** +- **[ShellCheck 0.8.0](https://github.com/koalaman/shellcheck/blob/master/CHANGELOG.mdx#v080---2021-11-06) (updated from v0.7.2)** - SonarC# 8.39 - SonarVB 8.15 - Spectral 1.2.7 diff --git a/docusaurus/docs/release-notes/cloud/2022/2022-07-cloud.md b/docusaurus/docs/release-notes/cloud/2022/2022-07-cloud.md index 424e2c15e8..e0107f1961 100644 --- a/docusaurus/docs/release-notes/cloud/2022/2022-07-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2022/2022-07-cloud.md @@ -56,7 +56,7 @@ Codacy Cloud now includes the tool versions below. The tools that were recently - Revive 1.2.1 - RuboCop 1.28.2 - Scalastyle 1.5.0 -- **[ShellCheck 0.8.0](https://github.com/koalaman/shellcheck/blob/master/CHANGELOG.md#v080---2021-11-06) (updated from v0.8.0)** +- **[ShellCheck 0.8.0](https://github.com/koalaman/shellcheck/blob/master/CHANGELOG.mdx#v080---2021-11-06) (updated from v0.8.0)** - SonarC# 8.39 - SonarVB 8.15 - Spectral 1.2.7 diff --git a/docusaurus/docs/release-notes/cloud/2022/2022-08-cloud.md b/docusaurus/docs/release-notes/cloud/2022/2022-08-cloud.md index c0f45917f8..7441930df9 100644 --- a/docusaurus/docs/release-notes/cloud/2022/2022-08-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2022/2022-08-cloud.md @@ -16,7 +16,7 @@ These release notes are for the Codacy Cloud updates during August 2022. ## Product enhancements -- The [GitHub integration](../../../repositories-configure/integrations/github-integration.md) now uses a GitHub Apps token instead of a personal one so that the following features continue working even if the person who created the integration leaves the organization on GitHub: +- The [GitHub integration](../../../repositories-configure/integrations/github-integration.mdx) now uses a GitHub Apps token instead of a personal one so that the following features continue working even if the person who created the integration leaves the organization on GitHub: - Analyzing new commits and pull requests - Updating the status check of pull requests @@ -29,7 +29,7 @@ These release notes are for the Codacy Cloud updates during August 2022. - Added the new API endpoint [searchOrganizationRepositoriesWithAnalysis](https://api.codacy.com/api/api-docs#searchorganizationrepositorieswithanalysis) to allow searching for repositories in more advanced use cases. For now, it's possible to search for repositories filtered by a list of names. (PLUTO-45) -- Codacy now displays the coverage variation metric with a precision of two decimal places on the [Pull request](../../../repositories/pull-requests.mdx), [Commit](../../../repositories/commits.mdx), and [Files](../../../repositories/files.md) page. +- Codacy now displays the coverage variation metric with a precision of two decimal places on the [Pull request](../../../repositories/pull-requests.mdx), [Commit](../../../repositories/commits.mdx), and [Files](../../../repositories/files.mdx) page. The increased precision of the metric reflects the code coverage changes better by reducing issues with rounding errors. (IO-92, IO-93) @@ -39,7 +39,7 @@ These release notes are for the Codacy Cloud updates during August 2022. - Improved the error handling for the [Stylelint exit codes](https://stylelint.io/user-guide/usage/cli/#exit-codes). (IO-47) -- The [Organization Overview](../../../organizations/organization-overview.md) now allows filtering repositories to help you see and focus on the information for the repositories that matter most to your team. (CY-5573) +- The [Organization Overview](../../../organizations/organization-overview.mdx) now allows filtering repositories to help you see and focus on the information for the repositories that matter most to your team. (CY-5573) ![Repository filter on the Organization Overview](../../images/cy-5573.png) diff --git a/docusaurus/docs/release-notes/cloud/2022/2022-09-cloud.md b/docusaurus/docs/release-notes/cloud/2022/2022-09-cloud.md index e838b4d9ea..9723d566fe 100644 --- a/docusaurus/docs/release-notes/cloud/2022/2022-09-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2022/2022-09-cloud.md @@ -16,13 +16,13 @@ These release notes are for the Codacy Cloud updates during September 2022. ## Product enhancements -- Codacy now displays the coverage variation metric with a precision of two decimal places on the [Repository Dashboard](../../../repositories/repository-dashboard.md) and [Organization Overview](../../../organizations/organization-overview.md), and you can [define quality gates](../../../repositories-configure/adjusting-quality-gates.md) with a coverage variation threshold using the same precision. +- Codacy now displays the coverage variation metric with a precision of two decimal places on the [Repository Dashboard](../../../repositories/repository-dashboard.mdx) and [Organization Overview](../../../organizations/organization-overview.mdx), and you can [define quality gates](../../../repositories-configure/adjusting-quality-gates.mdx) with a coverage variation threshold using the same precision. The increased precision of the metric reflects the code coverage changes better by reducing issues with rounding errors. (IO-54, IO-56) ![Coverage threshold with two decimal places on the Quality settings page](../../images/io-56.png) -- While [configuring a coding standard](../../../organizations/using-coding-standards.md), you can now toggle all code patterns that are currently visible on the list using the new checkbox on the header. This allows you to conveniently toggle code patterns in bulk, for example, to enable all security code patterns. (CY-6336) +- While [configuring a coding standard](../../../organizations/using-coding-standards.mdx), you can now toggle all code patterns that are currently visible on the list using the new checkbox on the header. This allows you to conveniently toggle code patterns in bulk, for example, to enable all security code patterns. (CY-6336) ![Selecting all code patterns while configuring a coding standard](../../images/cy-6336.png) diff --git a/docusaurus/docs/release-notes/cloud/2022/2022-10-cloud.md b/docusaurus/docs/release-notes/cloud/2022/2022-10-cloud.md index 58b2f90dd3..38987a4945 100644 --- a/docusaurus/docs/release-notes/cloud/2022/2022-10-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2022/2022-10-cloud.md @@ -17,7 +17,7 @@ These release notes are for the Codacy Cloud updates during October 2022. ## Product enhancements - Improved the performance and error handling of retrieving many open pull requests from the Git providers while populating the [**Pull requests** page](../../../repositories/pull-requests.mdx). (IO-133) -- While [configuring a coding standard](../../../organizations/using-coding-standards.md), you can now click the link **Enable/Disable all <N> patterns** to toggle all patterns matching the current filters, including the code patterns that weren't loaded on the list yet. (CY-6255) +- While [configuring a coding standard](../../../organizations/using-coding-standards.mdx), you can now click the link **Enable/Disable all <N> patterns** to toggle all patterns matching the current filters, including the code patterns that weren't loaded on the list yet. (CY-6255) ## Bug fixes diff --git a/docusaurus/docs/release-notes/cloud/2022/2022-11-cloud.md b/docusaurus/docs/release-notes/cloud/2022/2022-11-cloud.md index 09c5bc9482..c8784def7c 100644 --- a/docusaurus/docs/release-notes/cloud/2022/2022-11-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2022/2022-11-cloud.md @@ -16,9 +16,9 @@ These release notes are for the Codacy Cloud updates during November 2022. ## Product enhancements -- Improved the performance of applying [coding standards](../../../organizations/using-coding-standards.md) to repositories to avoid timeouts when updating hundreds of repositories. (PLUTO-83) -- The **Status** column of the [coverage reports list](../../../coverage-reporter/index.md#validating-coverage) now includes direct links to troubleshooting instructions when there are coverage errors. (IO-155) -- Codacy now supports the [client-side tool Unity Roslyn Analyzers](../../../repositories-configure/local-analysis/client-side-tools.md) for reporting error-prone and performance issues on C# projects that use the Unity framework. (IO-96) +- Improved the performance of applying [coding standards](../../../organizations/using-coding-standards.mdx) to repositories to avoid timeouts when updating hundreds of repositories. (PLUTO-83) +- The **Status** column of the [coverage reports list](../../../coverage-reporter/index.mdx#validating-coverage) now includes direct links to troubleshooting instructions when there are coverage errors. (IO-155) +- Codacy now supports the [client-side tool Unity Roslyn Analyzers](../../../repositories-configure/local-analysis/client-side-tools.mdx) for reporting error-prone and performance issues on C# projects that use the Unity framework. (IO-96) ## Bug fixes diff --git a/docusaurus/docs/release-notes/cloud/2022/2022-12-cloud.md b/docusaurus/docs/release-notes/cloud/2022/2022-12-cloud.md index 8c69069108..50169ae3b6 100644 --- a/docusaurus/docs/release-notes/cloud/2022/2022-12-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2022/2022-12-cloud.md @@ -16,14 +16,14 @@ These release notes are for the Codacy Cloud updates during December 2022. ## Product enhancements -- The pull request detail page now displays a message when Codacy can't calculate the pull request metrics. The message includes a link to the **Coverage** tab in your repository settings, where you can [test and validate your coverage setup](../../../coverage-reporter/index.md#validating-coverage). (IO-152) +- The pull request detail page now displays a message when Codacy can't calculate the pull request metrics. The message includes a link to the **Coverage** tab in your repository settings, where you can [test and validate your coverage setup](../../../coverage-reporter/index.mdx#validating-coverage). (IO-152) ![Warning on pull request missing coverage data](../../images/io-152.png) ## Bug fixes - Fixed an issue that caused Codacy to display the coverage value on the wrong file in specific edge cases. (COV-25) -- All [coding standards API endpoints](https://api.codacy.com/api/api-docs#codacy-api-coding-standards) now return the **`403 Forbidden`** status code when authorization is required instead of **`401 Forbidden`**, since user permissions on Codacy are [synced with the permissions on the Git provider](../../../organizations/roles-and-permissions-for-organizations.md) and re-authenticating the user doesn't change the access to the endpoints. (IO-333) +- All [coding standards API endpoints](https://api.codacy.com/api/api-docs#codacy-api-coding-standards) now return the **`403 Forbidden`** status code when authorization is required instead of **`401 Forbidden`**, since user permissions on Codacy are [synced with the permissions on the Git provider](../../../organizations/roles-and-permissions-for-organizations.mdx) and re-authenticating the user doesn't change the access to the endpoints. (IO-333) - Fixed an issue affecting GitLab repositories configured to use merge request pipelines, where Codacy would create a separate branch pipeline. (PLUTO-184) - Fixed an issue that caused Checkov to output warnings when the tool had no files to analyze. (TS-11) @@ -66,7 +66,7 @@ Codacy Cloud now includes the tool versions below. The tools that were recently - Revive 1.2.3 - RuboCop 1.39.0 - Scalastyle 1.5.0 -- **[ShellCheck 0.9.0](https://github.com/koalaman/shellcheck/blob/master/CHANGELOG.md#v090---2022-12-12) (updated from 0.8.0)** +- **[ShellCheck 0.9.0](https://github.com/koalaman/shellcheck/blob/master/CHANGELOG.mdx#v090---2022-12-12) (updated from 0.8.0)** - SonarC# 8.39 - SonarVB 8.15 - Spectral 1.2.7 diff --git a/docusaurus/docs/release-notes/cloud/2023/2023-01-cloud.md b/docusaurus/docs/release-notes/cloud/2023/2023-01-cloud.md index f32584e895..9cfb2129cc 100644 --- a/docusaurus/docs/release-notes/cloud/2023/2023-01-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2023/2023-01-cloud.md @@ -16,23 +16,23 @@ These release notes are for the Codacy Cloud updates during January 2023. ## Product enhancements -- The Codacy Coverage Reporter now supports [automatic commit SHA-1 detection](../../../coverage-reporter/troubleshooting-coverage-cli-issues.md#commit-detection) on Argo CD. (TS-140) -- Extended the visibility of the [coding standards page](../../../organizations/using-coding-standards.md) to all users, regardless of their permission level. (IO-359) -- The pull request detail page now displays the [commits that are missing coverage data](../../../coverage-reporter/index.md#validating-coverage) for Codacy to calculate the coverage metrics. This information is also visible in the analysis logs. (IO-152) +- The Codacy Coverage Reporter now supports [automatic commit SHA-1 detection](../../../coverage-reporter/troubleshooting-coverage-cli-issues.mdx#commit-detection) on Argo CD. (TS-140) +- Extended the visibility of the [coding standards page](../../../organizations/using-coding-standards.mdx) to all users, regardless of their permission level. (IO-359) +- The pull request detail page now displays the [commits that are missing coverage data](../../../coverage-reporter/index.mdx#validating-coverage) for Codacy to calculate the coverage metrics. This information is also visible in the analysis logs. (IO-152) ![Pull request analysis logs showing the commits that are missing coverage data](../../images/io-152b.png) -- The documentation now includes an end-to-end example illustrating the usage of an [API endpoint to identify commits without coverage data](../../../codacy-api/examples/identifying-commits-without-coverage-data.md) to troubleshoot issues with the calculation of coverage metrics. (DOCS-503) +- The documentation now includes an end-to-end example illustrating the usage of an [API endpoint to identify commits without coverage data](../../../codacy-api/examples/identifying-commits-without-coverage-data.mdx) to troubleshoot issues with the calculation of coverage metrics. (DOCS-503) -- Codacy now supports [reporting a summary of the coverage metrics](../../../repositories-configure/integrations/github-integration.md#coverage-summaries) directly on your pull requests. For now, this feature is only supported on GitHub Cloud. (COV-2, COV-3) +- Codacy now supports [reporting a summary of the coverage metrics](../../../repositories-configure/integrations/github-integration.mdx#coverage-summaries) directly on your pull requests. For now, this feature is only supported on GitHub Cloud. (COV-2, COV-3) ![Coverage summary on GitHub](../../images/cov-2.png) ## Bug fixes -- Codacy no longer counts ignored files towards the [maximum number of files for calculating complexity](../../../faq/code-analysis/does-codacy-place-limits-on-the-code-analysis.md). (TS-93) +- Codacy no longer counts ignored files towards the [maximum number of files for calculating complexity](../../../faq/code-analysis/does-codacy-place-limits-on-the-code-analysis.mdx). (TS-93) - Fixed an issue that caused all ESLint 8 code patterns to be turned off by default when adding a new repository. (TS-50) - Fixed the repository page not opening for Bitbucket users with scope `repository:admin` when the Bitbucket repository has many branch restrictions. (PLUTO-290) - The Files page now correctly loads and displays more files when scrolling. (PLUTO-225) diff --git a/docusaurus/docs/release-notes/cloud/2023/2023-02-cloud.md b/docusaurus/docs/release-notes/cloud/2023/2023-02-cloud.md index 27bc9b784b..43bd1d1c49 100644 --- a/docusaurus/docs/release-notes/cloud/2023/2023-02-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2023/2023-02-cloud.md @@ -17,7 +17,7 @@ These release notes are for the Codacy Cloud updates during February 2023. ## Product enhancements - In some Enterprise plans, Codacy now automatically adds to the organization new people that commit to your private repositories and analyzes their commits, providing a more streamlined user management experience. (PLUTO-244) -- You can now run the Codacy Coverage Reporter [Java binary](../../../coverage-reporter/alternative-ways-of-running-coverage-reporter.md#java) using the latest Java version. (TS-261) +- You can now run the Codacy Coverage Reporter [Java binary](../../../coverage-reporter/alternative-ways-of-running-coverage-reporter.mdx#java) using the latest Java version. (TS-261) - Added support for the following ESLint plugins: - [eslint-config-qiw](https://www.npmjs.com/package/eslint-config-qiwi) (TS-256) - [@remix-run/eslint-config](https://www.npmjs.com/package/@remix-run/eslint-config) (TS-234) @@ -28,7 +28,7 @@ These release notes are for the Codacy Cloud updates during February 2023. - Fixed an unexpected error when editing a coding standard and moving back to the **Select languages** step and then forward to the tool selection step. (IO-434) - Fixed an issue that caused Codacy to send incorrect analysis status notifications to Git providers when failing to reanalyze a pull request. (IO-424) - The **Files** page on public repositories now correctly displays the **Coverage** column to users who are logged out. (COV-181) -- Fixed the scenarios where Codacy didn't merge the coverage data from [multiple coverage reports](../../../coverage-reporter/uploading-coverage-in-advanced-scenarios.md#multiple-reports). (COV-147) +- Fixed the scenarios where Codacy didn't merge the coverage data from [multiple coverage reports](../../../coverage-reporter/uploading-coverage-in-advanced-scenarios.mdx#multiple-reports). (COV-147) ## Tool versions @@ -41,7 +41,7 @@ Codacy Cloud now includes the tool versions below. The tools that were recently - Checkov 2.1.188 - Checkstyle 10.3.1 - Clang-Tidy 10.0.1 -- **[CodeNarc 3.2.0](https://github.com/CodeNarc/CodeNarc/blob/master/CHANGELOG.md#version-320----jan-2023) (updated from 2.2.0)** +- **[CodeNarc 3.2.0](https://github.com/CodeNarc/CodeNarc/blob/master/CHANGELOG.mdx#version-320----jan-2023) (updated from 2.2.0)** - CoffeeLint 2.1.0 - **[Cppcheck 2.10](https://github.com/danmar/cppcheck/releases/tag/2.10) (updated from 2.2)** - Credo 1.4.0 diff --git a/docusaurus/docs/release-notes/cloud/2023/2023-03-cloud.md b/docusaurus/docs/release-notes/cloud/2023/2023-03-cloud.md index 2c18d79c30..855cc41286 100644 --- a/docusaurus/docs/release-notes/cloud/2023/2023-03-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2023/2023-03-cloud.md @@ -21,7 +21,7 @@ These release notes are for the Codacy Cloud updates during March 2023. - [pylint-beam](https://github.com/kvudata/pylint-beam) for Pylint (Python 3) (TS-274) - [PHPCompatibilityWP](https://github.com/PHPCompatibility/PHPCompatibilityWP) for PHP_CodeSniffer (TS-56) - Some Enterprise plans now allow downloading a CSV list of all organization members from the **People** page. This feature is also available on all plans using the API endpoint [listPeopleFromOrganizationCsv](https://api.codacy.com/api/api-docs#listpeoplefromorganizationcsv). (PLUTO-388) -- Codacy now supports up to 10 coding standards per organization, allowing you to [optimize and apply quality settings to multiple repositories quickly](../../../organizations/using-coding-standards.md). (IO-358) +- Codacy now supports up to 10 coding standards per organization, allowing you to [optimize and apply quality settings to multiple repositories quickly](../../../organizations/using-coding-standards.mdx). (IO-358) ![Multiple coding standards](../../images/io-358.png) diff --git a/docusaurus/docs/release-notes/cloud/2023/2023-04-cloud.md b/docusaurus/docs/release-notes/cloud/2023/2023-04-cloud.md index 8b23e3cc6d..e3d6baa7e7 100644 --- a/docusaurus/docs/release-notes/cloud/2023/2023-04-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2023/2023-04-cloud.md @@ -16,7 +16,7 @@ These release notes are for the Codacy Cloud updates during April 2023. ## Product enhancements -- We’ve revamped the way you [manage your repositories](../../../organizations/managing-repositories.md) on Codacy. You can now select which repositories you want to follow on Codacy, giving you more control over your dashboard for a cleaner, more personalized view. (PLUTO-336) +- We’ve revamped the way you [manage your repositories](../../../organizations/managing-repositories.mdx) on Codacy. You can now select which repositories you want to follow on Codacy, giving you more control over your dashboard for a cleaner, more personalized view. (PLUTO-336) ## Bug fixes diff --git a/docusaurus/docs/release-notes/cloud/2023/2023-05-cloud.md b/docusaurus/docs/release-notes/cloud/2023/2023-05-cloud.md index 880792a5b1..f91016b7fd 100644 --- a/docusaurus/docs/release-notes/cloud/2023/2023-05-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2023/2023-05-cloud.md @@ -21,11 +21,11 @@ These release notes are for the Codacy Cloud updates during May 2023. - [eslint-plugin-markdown](https://www.npmjs.com/package/eslint-plugin-markdown) (TS-121) - [eslint-plugin-yml](https://www.npmjs.com/package/eslint-plugin-yml) (TS-121) -- The [quality gates](../../../repositories-configure/adjusting-quality-gates.md) defined for your repository now apply to both pull requests and commits. (PLUTO-540) +- The [quality gates](../../../repositories-configure/adjusting-quality-gates.mdx) defined for your repository now apply to both pull requests and commits. (PLUTO-540) -- To enhance your experience and bring clarity to your settings, we've split the **Quality settings** of your repository into two tabs, [**Gates**](../../../repositories-configure/adjusting-quality-gates.md) and [**Goals**](../../../repositories-configure/adjusting-quality-goals.md). (PLUTO-520) +- To enhance your experience and bring clarity to your settings, we've split the **Quality settings** of your repository into two tabs, [**Gates**](../../../repositories-configure/adjusting-quality-gates.mdx) and [**Goals**](../../../repositories-configure/adjusting-quality-goals.mdx). (PLUTO-520) -- To ensure consistency across repositories, organization admins can now configure the [default settings that Codacy uses to integrate with the Git provider](../../../organizations/integrations/default-git-provider-integration-settings.md) when adding a new repository to Codacy. These default settings can also be applied to all repositories. (PLUTO-470, PLUTO-546) +- To ensure consistency across repositories, organization admins can now configure the [default settings that Codacy uses to integrate with the Git provider](../../../organizations/integrations/default-git-provider-integration-settings.mdx) when adding a new repository to Codacy. These default settings can also be applied to all repositories. (PLUTO-470, PLUTO-546) ![Organization-level settings for the Git provider integration](../../images/pluto-470.png) diff --git a/docusaurus/docs/release-notes/cloud/2023/2023-06-cloud.md b/docusaurus/docs/release-notes/cloud/2023/2023-06-cloud.md index a2c1d5c441..a6f1a35bb9 100644 --- a/docusaurus/docs/release-notes/cloud/2023/2023-06-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2023/2023-06-cloud.md @@ -45,11 +45,11 @@ These release notes are for the Codacy Cloud updates during June 2023. - [eslint-plugin-sort-destructure-keys](https://www.npmjs.com/package/eslint-plugin-sort-destructure-keys) (TS-448) - Improved the performance of the tool Stylelint by reviewing and refactoring the tool configurations and supported packages. (TS-438) - Updated and refactored the tool Ameba. [Thanks to Sija for the contribution!](https://github.com/codacy/codacy-ameba/pull/25) (TS-417) -- There's now an onboarding tutorial to guide you through the steps of [adding and setting up your first repository](../../../getting-started/codacy-quickstart.md#adding-your-first-repository). (DOCS-468) +- There's now an onboarding tutorial to guide you through the steps of [adding and setting up your first repository](../../../getting-started/codacy-quickstart.mdx#adding-your-first-repository). (DOCS-468) ## Bug fixes -- While [configuring code patterns](../../../repositories-configure/configuring-code-patterns.md), it's now possible to correctly configure rules using strings that include the character sequence `\\`, such as regular expressions. Before, Codacy stripped out one of the `\` characters. (IO-484) +- While [configuring code patterns](../../../repositories-configure/configuring-code-patterns.mdx), it's now possible to correctly configure rules using strings that include the character sequence `\\`, such as regular expressions. Before, Codacy stripped out one of the `\` characters. (IO-484) ## Tool versions diff --git a/docusaurus/docs/release-notes/cloud/2023/2023-07-cloud.md b/docusaurus/docs/release-notes/cloud/2023/2023-07-cloud.md index f893bcad4b..6a76a1dbd3 100644 --- a/docusaurus/docs/release-notes/cloud/2023/2023-07-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2023/2023-07-cloud.md @@ -20,11 +20,11 @@ These release notes are for the Codacy Cloud updates during July 2023. ![AI-generated context-aware comments and fix suggestions](../../images/cy-6855.png) -- You can now use [Security and risk management](../../../organizations/managing-security-and-risk.md) to detect security vulnerabilities across your Codacy repositories and Jira issues and assign the Security Manager role to any organization member. For more details, [see the announcement on our blog](https://blog.codacy.com/centralized-view-of-security-issues/). (HRZ-6, PUL-1924, HRZ-180) +- You can now use [Security and risk management](../../../organizations/managing-security-and-risk.mdx) to detect security vulnerabilities across your Codacy repositories and Jira issues and assign the Security Manager role to any organization member. For more details, [see the announcement on our blog](https://blog.codacy.com/centralized-view-of-security-issues/). (HRZ-6, PUL-1924, HRZ-180) ![Security and risk management item list](../../images/hrz-6.png) -- To ensure that Codacy uses the same quality gates across your repositories, organization admins can now apply [gate policies](../../../organizations/using-gate-policies.md) to multiple repositories. **Gate policies** are available under the new organization page **Policies**, where you can now also find your **Coding standards**. (PLUTO-484) +- To ensure that Codacy uses the same quality gates across your repositories, organization admins can now apply [gate policies](../../../organizations/using-gate-policies.mdx) to multiple repositories. **Gate policies** are available under the new organization page **Policies**, where you can now also find your **Coding standards**. (PLUTO-484) ![Organization-level gate policies](../../images/pluto-484.png) diff --git a/docusaurus/docs/release-notes/cloud/2023/2023-08-cloud.md b/docusaurus/docs/release-notes/cloud/2023/2023-08-cloud.md index 15f4bcfb33..0d1f24e008 100644 --- a/docusaurus/docs/release-notes/cloud/2023/2023-08-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2023/2023-08-cloud.md @@ -16,7 +16,7 @@ These release notes are for the Codacy Cloud updates during August 2023. ## Product enhancements -- Added [support for Trivy](../../../getting-started/supported-languages-and-tools.md) to detect committed secrets, IaC misconfigurations, and other security risks. (TAROT-2290) +- Added [support for Trivy](../../../getting-started/supported-languages-and-tools.mdx) to detect committed secrets, IaC misconfigurations, and other security risks. (TAROT-2290) - The CSV file exported by Security and risk management now includes three new columns: file path, line number, and detected pattern. (TAROT-2203) - When developers commit from Bitbucket, now Codacy automatically associates all commit email addresses belonging to the same Bitbucket user with a single Codacy committer. This reduces the number of duplicate seats for Bitbucket organizations when developers don’t log in to Codacy. (PLUTO-652) - The [getRepositoryWithAnalysis API endpoint](https://api.codacy.com/api/api-docs#getrepositorywithanalysis) now includes data about coverable and covered lines for a given repository. (ALA-254) diff --git a/docusaurus/docs/release-notes/cloud/2023/2023-09-cloud.md b/docusaurus/docs/release-notes/cloud/2023/2023-09-cloud.md index 69c3485387..7e2ff98bfc 100644 --- a/docusaurus/docs/release-notes/cloud/2023/2023-09-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2023/2023-09-cloud.md @@ -16,11 +16,11 @@ These release notes are for the Codacy Cloud updates during September 2023. ## Product enhancements -- It's now possible to send notifications to a Slack channel of your choice whenever Codacy detects new critical Security issues in the default branch of any repository in your organization. See [how to install the Codacy Slack integration for Security issues](../../../organizations/integrations/slack-integration.md). (TAROT-2242) +- It's now possible to send notifications to a Slack channel of your choice whenever Codacy detects new critical Security issues in the default branch of any repository in your organization. See [how to install the Codacy Slack integration for Security issues](../../../organizations/integrations/slack-integration.mdx). (TAROT-2242) ![Slack integration for Security issues](../../images/tarot-2242.png) -- You can now use the new [Codacy Visual Studio Code extension](https://github.com/codacy/codacy-vscode-extension) to review and manage the issues found by Codacy for a pull request directly within Visual Studio Code. See [how to install and use the Codacy Visual Studio Code extension](../../../getting-started/integrating-codacy-with-visual-studio-code.md). (ALA-549) +- You can now use the new [Codacy Visual Studio Code extension](https://github.com/codacy/codacy-vscode-extension) to review and manage the issues found by Codacy for a pull request directly within Visual Studio Code. See [how to install and use the Codacy Visual Studio Code extension](../../../getting-started/integrating-codacy-with-visual-studio-code.mdx). (ALA-549) ![Visual Studio Code extension](../../images/ala-549.png) diff --git a/docusaurus/docs/release-notes/cloud/2023/2023-10-13-cloud-bundler-audit-deprecation.md b/docusaurus/docs/release-notes/cloud/2023/2023-10-13-cloud-bundler-audit-deprecation.md index 9c7115139e..df939e6a91 100644 --- a/docusaurus/docs/release-notes/cloud/2023/2023-10-13-cloud-bundler-audit-deprecation.md +++ b/docusaurus/docs/release-notes/cloud/2023/2023-10-13-cloud-bundler-audit-deprecation.md @@ -14,7 +14,7 @@ On January 1st, 2024 we'll be removing **bundler-audit** from Codacy. ## If you are using bundler-audit -To continue monitoring your repositories for vulnerable Ruby gems, enable the **Trivy** tool in your [organization coding standards](../../../organizations/using-coding-standards.md) (recommended) or on the [code patterns page](../../../repositories-configure/configuring-code-patterns.md) of each of the affected repositories. +To continue monitoring your repositories for vulnerable Ruby gems, enable the **Trivy** tool in your [organization coding standards](../../../organizations/using-coding-standards.mdx) (recommended) or on the [code patterns page](../../../repositories-configure/configuring-code-patterns.mdx) of each of the affected repositories. For new repositories, **Trivy** will be active by default. diff --git a/docusaurus/docs/release-notes/cloud/2023/2023-10-25-cloud-csslint-jshint-fauxpas-tailor-tslint-deprecation.md b/docusaurus/docs/release-notes/cloud/2023/2023-10-25-cloud-csslint-jshint-fauxpas-tailor-tslint-deprecation.md index e54736c82f..fca2bcfb09 100644 --- a/docusaurus/docs/release-notes/cloud/2023/2023-10-25-cloud-csslint-jshint-fauxpas-tailor-tslint-deprecation.md +++ b/docusaurus/docs/release-notes/cloud/2023/2023-10-25-cloud-csslint-jshint-fauxpas-tailor-tslint-deprecation.md @@ -20,7 +20,7 @@ The remaining deprecated tools (Faux Pas, JSHint, and Tailor) will be removed la ## If you are using one of these tools -To continue analyzing your repositories, enable the replacement tool for the corresponding deprecated tool listed below in your [organization coding standards](../../../organizations/using-coding-standards.md) (recommended) or on the [code patterns page](../../../repositories-configure/configuring-code-patterns.md) of each affected repository: +To continue analyzing your repositories, enable the replacement tool for the corresponding deprecated tool listed below in your [organization coding standards](../../../organizations/using-coding-standards.mdx) (recommended) or on the [code patterns page](../../../repositories-configure/configuring-code-patterns.mdx) of each affected repository: | Deprecated tool | Replacement tool | |-----------------|------------------| @@ -30,6 +30,6 @@ To continue analyzing your repositories, enable the replacement tool for the cor | Tailor | SwiftLint | | TSLint | ESLint | -The suggested replacement tools are enabled by default for new repositories, except for Clang Tidy, which is a [client-side tool](../../../repositories-configure/local-analysis/client-side-tools.md). +The suggested replacement tools are enabled by default for new repositories, except for Clang Tidy, which is a [client-side tool](../../../repositories-configure/local-analysis/client-side-tools.mdx). If you have any questions or need help, please contact [support@codacy.com](mailto:support@codacy.com). diff --git a/docusaurus/docs/release-notes/cloud/2023/2023-10-cloud.md b/docusaurus/docs/release-notes/cloud/2023/2023-10-cloud.md index cf2b0b4501..a23a92fbf9 100644 --- a/docusaurus/docs/release-notes/cloud/2023/2023-10-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2023/2023-10-cloud.md @@ -57,7 +57,7 @@ Codacy Cloud now includes the tool versions below. The tools that were recently - Checkov 2.3.187 - Checkstyle 10.12.3 - Clang-Tidy 10.0.1 -- **[CodeNarc 3.3.0](https://github.com/CodeNarc/CodeNarc/blob/master/CHANGELOG.md) (updated from 3.2.0)** +- **[CodeNarc 3.3.0](https://github.com/CodeNarc/CodeNarc/blob/master/CHANGELOG.mdx) (updated from 3.2.0)** - Cppcheck 2.12.0 - Credo 1.4.0 - CSSLint (deprecated) 1.0.5 diff --git a/docusaurus/docs/release-notes/cloud/2023/2023-11-23-cloud-new-coverage-engine-status-checks.mdx b/docusaurus/docs/release-notes/cloud/2023/2023-11-23-cloud-new-coverage-engine-status-checks.mdx index c2633bcdb4..53c1cb1867 100644 --- a/docusaurus/docs/release-notes/cloud/2023/2023-11-23-cloud-new-coverage-engine-status-checks.mdx +++ b/docusaurus/docs/release-notes/cloud/2023/2023-11-23-cloud-new-coverage-engine-status-checks.mdx @@ -45,7 +45,7 @@ Because of this transition, both old and new data will coexist during this perio ::: ## Git provider status checks from the new Coverage engine \{#status-checks\} -:::note[This section applies to the repositories for which you set Codacy to send pull request coverage status data to your Git provider (see how on [GitHub](../../../repositories-configure/integrations/github-integration.md#status-checks), [GitLab](../../../repositories-configure/integrations/gitlab-integration.md#pull-request-status), and [Bitbucket](../../../repositories-configure/integrations/bitbucket-integration.md#pull-request-status)).] +:::note[This section applies to the repositories for which you set Codacy to send pull request coverage status data to your Git provider (see how on [GitHub](../../../repositories-configure/integrations/github-integration.mdx#status-checks), [GitLab](../../../repositories-configure/integrations/gitlab-integration.mdx#pull-request-status), and [Bitbucket](../../../repositories-configure/integrations/bitbucket-integration.mdx#pull-request-status)).] ::: On June 5th 2024, Codacy stopped sending coverage checks from the old Coverage engine. As a consequence of this, you will only see the new checks from the new Coverage engine, **Codacy Diff Coverage** and **Codacy Coverage Variation**, and will no longer see the old **Codacy Coverage Report** check on your pull requests. @@ -114,7 +114,7 @@ If you are using the old status check to block merging pull requests on GitHub, ![New Coverage status checks GitHub](../../images/ala-695-update-status-checks-github.png) ## GitHub coverage summaries from the new Coverage engine \{#coverage-summaries\} -:::note[This section applies to the repositories for which you set Codacy to post [coverage summaries](../../../repositories-configure/integrations/github-integration.md#coverage-summaries) to your GitHub pull requests] +:::note[This section applies to the repositories for which you set Codacy to post [coverage summaries](../../../repositories-configure/integrations/github-integration.mdx#coverage-summaries) to your GitHub pull requests] ::: @@ -136,7 +136,7 @@ You may notice missing coverage data on the Coverage Pull requests page for olde ``` ### Differences in coverage metrics between the old and new Coverage engines \{#differences-in-coverage-metrics-between-the-old-and-new-coverage-engines\} -You may notice some differences in the coverage metrics reported by the old and new Coverage engines and may need to update your [coverage gate rules](../../../repositories-configure/adjusting-quality-gates.md) accordingly. This may happen because the new Coverage engine calculates coverage metrics considering all the files included in the coverage report, while the old Coverage engine ignores some files: +You may notice some differences in the coverage metrics reported by the old and new Coverage engines and may need to update your [coverage gate rules](../../../repositories-configure/adjusting-quality-gates.mdx) accordingly. This may happen because the new Coverage engine calculates coverage metrics considering all the files included in the coverage report, while the old Coverage engine ignores some files: - The old Coverage engine ignores any files on a coverage report that aren't present on the repository on that given commit. -- The old Coverage engine may ignore additional files since it shares [ignore rules](../../../repositories-configure/ignoring-files.md) with the Codacy analysis engine. +- The old Coverage engine may ignore additional files since it shares [ignore rules](../../../repositories-configure/ignoring-files.mdx) with the Codacy analysis engine. diff --git a/docusaurus/docs/release-notes/cloud/2023/2023-11-cloud.md b/docusaurus/docs/release-notes/cloud/2023/2023-11-cloud.md index 9cebac55bc..e8fddcfb42 100644 --- a/docusaurus/docs/release-notes/cloud/2023/2023-11-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2023/2023-11-cloud.md @@ -16,7 +16,7 @@ These release notes are for the Codacy Cloud updates during November 2023. ## Product enhancements -- Added [support for Semgrep’s open-source engine](../../../getting-started/supported-languages-and-tools.md) to perform static application security testing (SAST), with the option to upgrade to Semgrep Pro. (TAROT-2347) +- Added [support for Semgrep’s open-source engine](../../../getting-started/supported-languages-and-tools.mdx) to perform static application security testing (SAST), with the option to upgrade to Semgrep Pro. (TAROT-2347) - You now get two additional coverage status reports from the new, faster Coverage engine on your Git provider, showing whether your diff coverage and coverage variation are up to standard or not as configured on the quality gate rules for your repository. (ALA-624) :::note diff --git a/docusaurus/docs/release-notes/cloud/2023/2023-12-cloud.md b/docusaurus/docs/release-notes/cloud/2023/2023-12-cloud.md index 1c43070e02..14a8fc362d 100644 --- a/docusaurus/docs/release-notes/cloud/2023/2023-12-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2023/2023-12-cloud.md @@ -16,7 +16,7 @@ These release notes are for the Codacy Cloud updates during December 2023. ## Product enhancements -- The [Security and risk management feature](../../../organizations/managing-security-and-risk.md), previously only available to organization admins and security managers, is now open to all organization members and shows information related to the repositories that each member follows. (TAROT-2442) +- The [Security and risk management feature](../../../organizations/managing-security-and-risk.mdx), previously only available to organization admins and security managers, is now open to all organization members and shows information related to the repositories that each member follows. (TAROT-2442) - The [GitHub coverage summaries](/release-notes/cloud/cloud-2023-11-23-new-coverage-engine-status-checks#coverage-summaries) and the Codacy app UI diff tabs now get data from the new Coverage engine. For more information, [see the rollout details of the new Coverage engine](/release-notes/cloud/cloud-2023-11-23-new-coverage-engine-status-checks). (ALA-589, ALA-676) :::caution diff --git a/docusaurus/docs/release-notes/cloud/2024/2024-01-15-cloud-gh-repository-ssh-keys-discontinuation.md b/docusaurus/docs/release-notes/cloud/2024/2024-01-15-cloud-gh-repository-ssh-keys-discontinuation.md index ee018db91b..0b4107bea1 100644 --- a/docusaurus/docs/release-notes/cloud/2024/2024-01-15-cloud-gh-repository-ssh-keys-discontinuation.md +++ b/docusaurus/docs/release-notes/cloud/2024/2024-01-15-cloud-gh-repository-ssh-keys-discontinuation.md @@ -79,4 +79,4 @@ To ensure the conditions to use installation access tokens on GitHub organizatio ## See also -- [Which permissions are required by Codacy GitHub App?](../../../getting-started/which-permissions-does-codacy-need-from-my-account.md#github-cloud) +- [Which permissions are required by Codacy GitHub App?](../../../getting-started/which-permissions-does-codacy-need-from-my-account.mdx#github-cloud) diff --git a/docusaurus/docs/release-notes/cloud/2024/2024-01-cloud.md b/docusaurus/docs/release-notes/cloud/2024/2024-01-cloud.md index 33a3606c5d..60706649d6 100644 --- a/docusaurus/docs/release-notes/cloud/2024/2024-01-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2024/2024-01-cloud.md @@ -17,7 +17,7 @@ These release notes are for the Codacy Cloud updates during January 2024. ## Product enhancements - Codacy now uses installation access tokens to integrate with your GitHub repositories instead of repository SSH keys, which are being discontinued. For more information, [see the discontinuation notice](/release-notes/cloud/cloud-2024-01-15-gh-repository-ssh-keys-discontinuation). (PLUTO-764) -- You can now filter the [security and risk items](../../../organizations/managing-security-and-risk.md) by security category. (TAROT-2444) +- You can now filter the [security and risk items](../../../organizations/managing-security-and-risk.mdx) by security category. (TAROT-2444) ## Bug fixes @@ -29,7 +29,7 @@ These release notes are for the Codacy Cloud updates during January 2024. ## Feature removal - We deleted the existing Slack, Jira, and Webhook repository integrations, and all related data, including authentication data. For more information, [see the deprecation notice](/release-notes/cloud/cloud-2023-11-13-jira-slack-webhooks-repo-integrations-removal). (CY-7202, CY-7203, CY-7204) -- The repository security monitor has been replaced by the [Security and risk management feature](../../../organizations/managing-security-and-risk.md), which shows the information related to the repositories that each member follows. (TAROT-2444) +- The repository security monitor has been replaced by the [Security and risk management feature](../../../organizations/managing-security-and-risk.mdx), which shows the information related to the repositories that each member follows. (TAROT-2444) ## Tool versions diff --git a/docusaurus/docs/release-notes/cloud/2024/2024-02-cloud.md b/docusaurus/docs/release-notes/cloud/2024/2024-02-cloud.md index 4f703ed751..31c0a080a0 100644 --- a/docusaurus/docs/release-notes/cloud/2024/2024-02-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2024/2024-02-cloud.md @@ -19,8 +19,8 @@ These release notes are for the Codacy Cloud updates during February 2024. - The Codacy GitHub App no longer requires **Read and write access to Administration** repository permission. For more information, see the [Discontinuation of SSH keys for GitHub repositories](/release-notes/cloud/cloud-2024-01-15-gh-repository-ssh-keys-discontinuation). (PLUTO-803) - The coverage data sent by the new Coverage engine to your Git provider moved from **beta** to stable. Thus, the coverage data sent by the old engine is now marked **deprecated**. For more information, [see the rollout details of the new Coverage engine](/release-notes/cloud/cloud-2023-11-23-new-coverage-engine-status-checks). (ALA-766) - The Coverage Pull Requests page now gets data from the new Coverage engine. For more information, [see the rollout details of the new Coverage engine](/release-notes/cloud/cloud-2023-11-23-new-coverage-engine-status-checks). (ALA-770) -- The [Organization overview](../../../organizations/organization-overview.md) is now available on all plans. (ALA-842) -- Improved the mechanism to refresh organizations from the Git provider. As a result, we removed the option to manually refresh the list of organizations when [adding new organizations to Codacy](../../../organizations/what-are-organizations.md#adding-an-organization). (ALA-862) +- The [Organization overview](../../../organizations/organization-overview.mdx) is now available on all plans. (ALA-842) +- Improved the mechanism to refresh organizations from the Git provider. As a result, we removed the option to manually refresh the list of organizations when [adding new organizations to Codacy](../../../organizations/what-are-organizations.mdx#adding-an-organization). (ALA-862) - For GitHub, if you have email privacy enabled on the provider, Codacy doesn't show your private email addresses when displaying your personal details on lists, search filters, or activity. (PLUTO-794) - Added support for the Checkstyle filters [SuppressionCommentFilter](https://checkstyle.sourceforge.io/filters/suppressioncommentfilter.html), [SuppressWarningsHolder](https://checkstyle.sourceforge.io/checks/annotation/suppresswarningsholder.html), and [SuppressWarningsFilter](https://checkstyle.sourceforge.io/filters/suppresswarningsfilter.html). (TCE-709) @@ -53,7 +53,7 @@ Codacy Cloud now includes the tool versions below. The tools that were recently - Cppcheck 2.12.0 - Credo 1.7.2 - CSSLint (deprecated) 1.0.5 -- **[dartanalyzer 3.3.0](https://github.com/dart-lang/sdk/blob/main/CHANGELOG.md) (updated from 2.17.0)** +- **[dartanalyzer 3.3.0](https://github.com/dart-lang/sdk/blob/main/CHANGELOG.mdx) (updated from 2.17.0)** - **[detekt 1.23.5](https://github.com/detekt/detekt/releases/tag/v1.23.5) (updated from 1.22.0)** - ESLint 8.56.0 - ESLint (deprecated) 7.32.0 diff --git a/docusaurus/docs/release-notes/cloud/2024/2024-03-cloud.md b/docusaurus/docs/release-notes/cloud/2024/2024-03-cloud.md index b7c32564d5..7b02ff4267 100644 --- a/docusaurus/docs/release-notes/cloud/2024/2024-03-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2024/2024-03-cloud.md @@ -16,9 +16,9 @@ These release notes are for the Codacy Cloud updates during March 2024. ## Product enhancements -- Streamlined new organization setup with a guided path for adding new organizations and a setup checklist on the [Organization overview](../../../organizations/organization-overview.md) page. (ALA-825) +- Streamlined new organization setup with a guided path for adding new organizations and a setup checklist on the [Organization overview](../../../organizations/organization-overview.mdx) page. (ALA-825) - It's now possible to display penetration testing results in the Codacy app. See how to [start pen testing with Codacy](https://go.codacy.com/pen-testing-product). (TAROT-2553) -- It's now possible to [unfollow a repository](../../../organizations/managing-repositories.md#follow-unfollow) through the Codacy app. (PLUTO-902) +- It's now possible to [unfollow a repository](../../../organizations/managing-repositories.mdx#follow-unfollow) through the Codacy app. (PLUTO-902) - In Enterprise plans where Codacy automatically manages seat usage for your organization, the billing period is now based only on the code analysis activity. Codacy app users who don’t contribute to your private repositories no longer occupy a seat. (PLUTO-867) ## Bug fixes @@ -30,7 +30,7 @@ These release notes are for the Codacy Cloud updates during March 2024. ## Feature removal -- We removed the option to bulk copy code patterns between repositories and to import code pattern configurations from another repository. If you want to share tool and code pattern configurations between repositories, the recommended approach is to use a [coding standard](../../../organizations/using-coding-standards.md). (ALA-826) +- We removed the option to bulk copy code patterns between repositories and to import code pattern configurations from another repository. If you want to share tool and code pattern configurations between repositories, the recommended approach is to use a [coding standard](../../../organizations/using-coding-standards.mdx). (ALA-826) ## Tool versions @@ -48,7 +48,7 @@ Codacy Cloud now includes the tool versions below. The tools that were recently - **[Cppcheck 2.13.0](https://github.com/danmar/cppcheck/releases/tag/2.13.0) (updated from 2.12.0)** - Credo 1.7.2 - CSSLint (deprecated) 1.0.5 -- **[dartanalyzer 3.3.3](https://github.com/dart-lang/sdk/blob/main/CHANGELOG.md) (updated from 3.3.0)** +- **[dartanalyzer 3.3.3](https://github.com/dart-lang/sdk/blob/main/CHANGELOG.mdx) (updated from 3.3.0)** - detekt 1.23.5 - **[ESLint 8.57.0](https://github.com/eslint/eslint/releases/tag/v8.57.0) (updated from 8.56.0)** - ESLint (deprecated) 7.32.0 diff --git a/docusaurus/docs/release-notes/cloud/2024/2024-04-cloud.md b/docusaurus/docs/release-notes/cloud/2024/2024-04-cloud.md index cbe122466c..10681c8d8f 100644 --- a/docusaurus/docs/release-notes/cloud/2024/2024-04-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2024/2024-04-cloud.md @@ -16,7 +16,7 @@ These release notes are for the Codacy Cloud updates during April 2024. ## Product enhancements -- Improved [Security and risk management](../../../organizations/managing-security-and-risk.md) with a redesigned overview page, offering comprehensive metrics and summary graphs for better visibility and tracking of security findings. An improved findings table now includes a streamlined view of security findings. (TAROT-2546) +- Improved [Security and risk management](../../../organizations/managing-security-and-risk.mdx) with a redesigned overview page, offering comprehensive metrics and summary graphs for better visibility and tracking of security findings. An improved findings table now includes a streamlined view of security findings. (TAROT-2546) :::note To align with the new features, all references to **security items** were updated to **security findings**. @@ -24,12 +24,12 @@ These release notes are for the Codacy Cloud updates during April 2024. ![Security and risk management](../../images/tarot-2546.png) -- Repository admins can now [bypass Codacy status check](../../../faq/code-analysis/can-i-bypass-codacy-status-check.md) to unblock the merge of a pull request. (IO-1036) +- Repository admins can now [bypass Codacy status check](../../../faq/code-analysis/can-i-bypass-codacy-status-check.mdx) to unblock the merge of a pull request. (IO-1036) - You can now manually trigger the reanalysis of the coverage of a pull request using the [`reanalyzeCoverage`](https://api.codacy.com/api/api-docs#reanalyzecoverage) API endpoint. (ALA-1003) ## Bug fixes -- The [Codacy configuration file](../../../repositories-configure/codacy-configuration-file.md) no longer overrides the [default ignored files](../../../repositories-configure/ignoring-files.md#default-ignored-files). Also, Codacy no longer ignores by default files matching the regular expression `.*docs?/.*`. (IO-1031) +- The [Codacy configuration file](../../../repositories-configure/codacy-configuration-file.mdx) no longer overrides the [default ignored files](../../../repositories-configure/ignoring-files.mdx#default-ignored-files). Also, Codacy no longer ignores by default files matching the regular expression `.*docs?/.*`. (IO-1031) - Fixed a parsing error causing detected issues of a commit to show on the analysis logs instead of listed on the commit's Issues tab. (IO-1054) - Improved the resilience of cloning repositories during analysis that would sporadically fail. (IO-1057) - Fixed an issue in the analysis retention mechanism causing some data to be incorrectly deleted without being eligible for retention. (IO-1059) diff --git a/docusaurus/docs/release-notes/cloud/2024/2024-05-cloud.md b/docusaurus/docs/release-notes/cloud/2024/2024-05-cloud.md index 09afa07510..cd5549bcd1 100644 --- a/docusaurus/docs/release-notes/cloud/2024/2024-05-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2024/2024-05-cloud.md @@ -16,14 +16,14 @@ These release notes are for the Codacy Cloud updates during May 2024. ## Product enhancements -- You can now [create a new coding standard](../../../organizations/using-coding-standards.md#creating) by adjusting the sensitivity of preset category groups. This option is also available when setting up a new organization to create a default coding standard. (ALA-824) +- You can now [create a new coding standard](../../../organizations/using-coding-standards.mdx#creating) by adjusting the sensitivity of preset category groups. This option is also available when setting up a new organization to create a default coding standard. (ALA-824) ![New coding standard presets](../../images/ala-824.png) - Improved repositories integration with the Git provider: - - Now the integration is always enabled. For [GitLab](../../../repositories-configure/integrations/gitlab-integration.md#refreshing) and [Bitbucket](../../../repositories-configure/integrations/bitbucket-integration.md#refreshing), repository admins are able to refresh the integration in case the user who added the repository to Codacy loses access to the repository. - - For consistency across the Codacy app, we renamed the [GitLab](../../../repositories-configure/integrations/gitlab-integration.md#configuring) and [Bitbucket](../../../repositories-configure/integrations/bitbucket-integration.md#configuring) integration options - **Pull Request Status** is now **Status checks**, **Pull Request Comment** is now **Issue annotations**, and **Pull Request Summary** is now **Issue summaries**. (CY-6612) + - Now the integration is always enabled. For [GitLab](../../../repositories-configure/integrations/gitlab-integration.mdx#refreshing) and [Bitbucket](../../../repositories-configure/integrations/bitbucket-integration.mdx#refreshing), repository admins are able to refresh the integration in case the user who added the repository to Codacy loses access to the repository. + - For consistency across the Codacy app, we renamed the [GitLab](../../../repositories-configure/integrations/gitlab-integration.mdx#configuring) and [Bitbucket](../../../repositories-configure/integrations/bitbucket-integration.mdx#configuring) integration options - **Pull Request Status** is now **Status checks**, **Pull Request Comment** is now **Issue annotations**, and **Pull Request Summary** is now **Issue summaries**. (CY-6612) ![Repository Git provider integration](../../images/cy-6612.png) @@ -37,8 +37,8 @@ These release notes are for the Codacy Cloud updates during May 2024. ## Bug fixes -- Fixed an issue that caused [Security and risk management](../../../organizations/managing-security-and-risk.md) to miscalculate the counts of open findings in aggregated data. (TAROT-2682) -- Fixed an issue preventing the analysis of a file that had previously been [ignored using the Codacy configuration file](../../../repositories-configure/codacy-configuration-file.md#ignore-files) and later removed from `exclude_path` setting. (TCE-924) +- Fixed an issue that caused [Security and risk management](../../../organizations/managing-security-and-risk.mdx) to miscalculate the counts of open findings in aggregated data. (TAROT-2682) +- Fixed an issue preventing the analysis of a file that had previously been [ignored using the Codacy configuration file](../../../repositories-configure/codacy-configuration-file.mdx#ignore-files) and later removed from `exclude_path` setting. (TCE-924) ## Tool versions @@ -56,7 +56,7 @@ Codacy Cloud now includes the tool versions below. The tools that were recently - Cppcheck 2.13.0 - Credo 1.7.2 - CSSLint (deprecated) 1.0.5 -- **[dartanalyzer 3.3.4](https://github.com/dart-lang/sdk/blob/main/CHANGELOG.md) (updated from 3.3.3)** +- **[dartanalyzer 3.3.4](https://github.com/dart-lang/sdk/blob/main/CHANGELOG.mdx) (updated from 3.3.3)** - detekt 1.23.5 - ESLint 8.57.0 - ESLint (deprecated) 7.32.0 diff --git a/docusaurus/docs/release-notes/cloud/2024/2024-06-cloud.md b/docusaurus/docs/release-notes/cloud/2024/2024-06-cloud.md index a68c6e11fd..f7ae064f43 100644 --- a/docusaurus/docs/release-notes/cloud/2024/2024-06-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2024/2024-06-cloud.md @@ -16,9 +16,9 @@ These release notes are for the Codacy Cloud updates during June 2024. ## Product enhancements -- You can now [filter Security and Risk Management findings by scan type](../../../organizations/managing-security-and-risk.md#scan-types) to see results based on the detection method, including Code Scanning, Software Composition Analysis, Exposed Secrets, Infrastructure as Code, and Penetration Testing. (TCE-1028) -- For increased security, Codacy now sets [automatic expiration timeouts](../../../account/user-session-management.md) for every session. (PLUTO-879) -- The Codacy configuration file now supports a [new field `include_paths`](../../../repositories-configure/codacy-configuration-file.md#include-files) that lets you explicitly specify files or directories to include in the analysis. This is particularly useful for bypassing files or directories that are ignored by default or specified in `exclude_paths`. (TCE-977) +- You can now [filter Security and Risk Management findings by scan type](../../../organizations/managing-security-and-risk.mdx#scan-types) to see results based on the detection method, including Code Scanning, Software Composition Analysis, Exposed Secrets, Infrastructure as Code, and Penetration Testing. (TCE-1028) +- For increased security, Codacy now sets [automatic expiration timeouts](../../../account/user-session-management.mdx) for every session. (PLUTO-879) +- The Codacy configuration file now supports a [new field `include_paths`](../../../repositories-configure/codacy-configuration-file.mdx#include-files) that lets you explicitly specify files or directories to include in the analysis. This is particularly useful for bypassing files or directories that are ignored by default or specified in `exclude_paths`. (TCE-977) - Codacy can now detect duplicated code in the following languages: CoffeeScript, Elixir, Groovy, Objective C, Rust, Visual Basic (TCE-1021) ## Bug fixes @@ -47,7 +47,7 @@ Codacy Cloud now includes the tool versions below. The tools that were recently - Cppcheck 2.13.0 - Credo 1.7.2 - CSSLint (deprecated) 1.0.5 -- **[dartanalyzer 3.4.2](https://github.com/dart-lang/sdk/blob/main/CHANGELOG.md) (updated from 3.3.4)** +- **[dartanalyzer 3.4.2](https://github.com/dart-lang/sdk/blob/main/CHANGELOG.mdx) (updated from 3.3.4)** - detekt 1.23.5 - ESLint 8.57.0 - ESLint (deprecated) 7.32.0 diff --git a/docusaurus/docs/release-notes/cloud/2024/2024-07-cloud.md b/docusaurus/docs/release-notes/cloud/2024/2024-07-cloud.md index 55141c3459..13c201c022 100644 --- a/docusaurus/docs/release-notes/cloud/2024/2024-07-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2024/2024-07-cloud.md @@ -16,7 +16,7 @@ These release notes are for the Codacy Cloud updates during July 2024. ## Product enhancements -- You can now [upload Dynamic Application Security Testing (DAST) findings](../../../codacy-api/examples/uploading-dast-results.md) which appear in the [Security and Risk Management dashboard](../../../organizations/managing-security-and-risk.md#dashboard). (TAROT-2657) +- You can now [upload Dynamic Application Security Testing (DAST) findings](../../../codacy-api/examples/uploading-dast-results.mdx) which appear in the [Security and Risk Management dashboard](../../../organizations/managing-security-and-risk.mdx#dashboard). (TAROT-2657) - The Quality Issues page now groups issues detected in a repository by code pattern and displays them as a list for quick filtering. (ALA-1147) ## Tool versions diff --git a/docusaurus/docs/release-notes/cloud/2025/2025-07-cloud.md b/docusaurus/docs/release-notes/cloud/2025/2025-07-cloud.md index 62a04c9b11..4501a44141 100644 --- a/docusaurus/docs/release-notes/cloud/2025/2025-07-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2025/2025-07-cloud.md @@ -28,7 +28,7 @@ Use Codacy Segments to easily identify the relevant repositories for applying yo Users can now create account API tokens with expiration settings. Choose a predefined range (7–90 days), set a custom date, or opt for no expiration. (LK-1443) **Unfollow repositories:** -You can now [unfollow repositories](../../../organizations/managing-repositories.md#follow-unfollow) directly from the Codacy app. (LK-902) +You can now [unfollow repositories](../../../organizations/managing-repositories.mdx#follow-unfollow) directly from the Codacy app. (LK-902) **Static API authentication for DAST targets:** Business tier customers can now scan DAST API targets with or without authentication headers. (TAROT-2977) diff --git a/docusaurus/docs/release-notes/self-hosted/v1.0.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v1.0.0-self-hosted.md index 72985bef53..76801f7a16 100644 --- a/docusaurus/docs/release-notes/self-hosted/v1.0.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v1.0.0-self-hosted.md @@ -9,7 +9,7 @@ slug: /release-notes/self-hosted/self-hosted-v1.0.0 These release notes are for [Codacy Self-hosted v1.0.0](https://github.com/codacy/chart/releases/tag/1.0.0), released on May 18, 2020. -To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.md). +To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.mdx). ## Product enhancements diff --git a/docusaurus/docs/release-notes/self-hosted/v1.0.1-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v1.0.1-self-hosted.md index 17244d850e..f02b76840e 100644 --- a/docusaurus/docs/release-notes/self-hosted/v1.0.1-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v1.0.1-self-hosted.md @@ -9,7 +9,7 @@ slug: /release-notes/self-hosted/self-hosted-v1.0.1 These release notes are for [Codacy Self-hosted v1.0.1](https://github.com/codacy/chart/releases/tag/1.0.1), released on May 21, 2020. -To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.md). +To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.mdx). ## Bug fixes diff --git a/docusaurus/docs/release-notes/self-hosted/v1.1.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v1.1.0-self-hosted.md index 5c84a10b8b..0c6c55a889 100644 --- a/docusaurus/docs/release-notes/self-hosted/v1.1.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v1.1.0-self-hosted.md @@ -9,7 +9,7 @@ slug: /release-notes/self-hosted/self-hosted-v1.1.0 These release notes are for [Codacy Self-hosted v1.1.0](https://github.com/codacy/chart/releases/tag/1.1.0), released on May 26, 2020. -To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.md). +To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.mdx). ## Product enhancements diff --git a/docusaurus/docs/release-notes/self-hosted/v1.2.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v1.2.0-self-hosted.md index 89cea83477..c1a3d8b1a5 100644 --- a/docusaurus/docs/release-notes/self-hosted/v1.2.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v1.2.0-self-hosted.md @@ -9,7 +9,7 @@ slug: /release-notes/self-hosted/self-hosted-v1.2.0 These release notes are for [Codacy Self-hosted v1.2.0](https://github.com/codacy/chart/releases/tag/1.2.0), released on June 4, 2020. -To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.md). +To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.mdx). ## Product enhancements diff --git a/docusaurus/docs/release-notes/self-hosted/v1.3.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v1.3.0-self-hosted.md index da3cc75668..b443885624 100644 --- a/docusaurus/docs/release-notes/self-hosted/v1.3.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v1.3.0-self-hosted.md @@ -9,7 +9,7 @@ slug: /release-notes/self-hosted/self-hosted-v1.3.0 These release notes are for [Codacy Self-hosted v1.3.0](https://github.com/codacy/chart/releases/tag/1.3.0), released on June 12, 2020. -To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.md). +To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.mdx). ## Bug fixes diff --git a/docusaurus/docs/release-notes/self-hosted/v1.4.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v1.4.0-self-hosted.md index 6bd72ce432..35c6b955d6 100644 --- a/docusaurus/docs/release-notes/self-hosted/v1.4.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v1.4.0-self-hosted.md @@ -9,7 +9,7 @@ slug: /release-notes/self-hosted/self-hosted-v1.4.0 These release notes are for [Codacy Self-hosted v1.4.0](https://github.com/codacy/chart/releases/tag/1.4.0), released on June 23, 2020. -To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.md). +To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.mdx). ## Bug fixes diff --git a/docusaurus/docs/release-notes/self-hosted/v1.5.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v1.5.0-self-hosted.md index 9219198fe2..623934f941 100644 --- a/docusaurus/docs/release-notes/self-hosted/v1.5.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v1.5.0-self-hosted.md @@ -9,11 +9,11 @@ slug: /release-notes/self-hosted/self-hosted-v1.5.0 These release notes are for [Codacy Self-hosted v1.5.0](https://github.com/codacy/chart/releases/tag/1.5.0), released on July 20, 2020. -To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.md). +To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.mdx). ## Product enhancements -- Added support for Gosec, the Golang Security Checker, as a [client-side tool](../../repositories-configure/local-analysis/client-side-tools.md). +- Added support for Gosec, the Golang Security Checker, as a [client-side tool](../../repositories-configure/local-analysis/client-side-tools.mdx). - It's now possible to add repositories to Codacy programmatically with the new API v3 endpoint [addRepository](https://app.codacy.com/api/api-docs#addrepository). (CY-1877) - Streamlined the configuration of Git providers and improved the onboarding flow that guides the user while performing the initial Codacy setup. (CY-468) - Added support for GitLab Enterprise synced organizations. (CY-68) diff --git a/docusaurus/docs/release-notes/self-hosted/v10.0.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v10.0.0-self-hosted.md index 57345e7336..1130d7e796 100644 --- a/docusaurus/docs/release-notes/self-hosted/v10.0.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v10.0.0-self-hosted.md @@ -17,7 +17,7 @@ These release notes are for [Codacy Self-hosted v10.0.0](https://github.com/coda Follow the steps below to upgrade to Codacy Self-hosted v10.0.0: -1. Check the [release notes for all Codacy Self-hosted versions](../index.md#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. +1. Check the [release notes for all Codacy Self-hosted versions](../index.mdx#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. 1. Follow the instructions to [upgrade your Codacy Self-hosted instance](https://docs.codacy.com/v10.0/chart/maintenance/upgrade/). diff --git a/docusaurus/docs/release-notes/self-hosted/v11.0.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v11.0.0-self-hosted.md index b1a7530100..f01bdc5780 100644 --- a/docusaurus/docs/release-notes/self-hosted/v11.0.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v11.0.0-self-hosted.md @@ -17,7 +17,7 @@ These release notes are for [Codacy Self-hosted v11.0.0](https://github.com/coda Follow the steps below to upgrade to Codacy Self-hosted v11.0.0: -1. Check the [release notes for all Codacy Self-hosted versions](../index.md#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. +1. Check the [release notes for all Codacy Self-hosted versions](../index.mdx#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. 1. Follow the instructions to [upgrade your Codacy Self-hosted instance](https://docs.codacy.com/v11.0/chart/maintenance/upgrade/). @@ -57,7 +57,7 @@ This version of Codacy Self-hosted includes the tool versions below. The tools t - Checkov 2.1.188 - Checkstyle 10.3.1 - Clang-Tidy 10.0.1 -- **[CodeNarc 3.2.0](https://github.com/CodeNarc/CodeNarc/blob/master/CHANGELOG.md#version-320----jan-2023) (updated from 2.2.0)** +- **[CodeNarc 3.2.0](https://github.com/CodeNarc/CodeNarc/blob/master/CHANGELOG.mdx#version-320----jan-2023) (updated from 2.2.0)** - CoffeeLint 2.1.0 - **[Cppcheck 2.10](https://github.com/danmar/cppcheck/releases/tag/2.10) (updated from 2.2)** - Credo 1.4.0 @@ -84,7 +84,7 @@ This version of Codacy Self-hosted includes the tool versions below. The tools t - Revive 1.2.3 - RuboCop 1.39.0 - Scalastyle 1.5.0 -- **[ShellCheck 0.9.0](https://github.com/koalaman/shellcheck/blob/master/CHANGELOG.md#v090---2022-12-12) (updated from 0.8.0)** +- **[ShellCheck 0.9.0](https://github.com/koalaman/shellcheck/blob/master/CHANGELOG.mdx#v090---2022-12-12) (updated from 0.8.0)** - **[SonarC# 8.40](https://github.com/SonarSource/sonar-dotnet/releases/tag/8.40.0.48530) (updated from 8.39)** - SonarVB 8.15 - Spectral 1.2.7 diff --git a/docusaurus/docs/release-notes/self-hosted/v12.0.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v12.0.0-self-hosted.md index 3309ce9475..094c68ab1a 100644 --- a/docusaurus/docs/release-notes/self-hosted/v12.0.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v12.0.0-self-hosted.md @@ -17,7 +17,7 @@ These release notes are for [Codacy Self-hosted v12.0.0](https://github.com/coda Follow the steps below to upgrade to Codacy Self-hosted v12.0.0: -1. Check the [release notes for all Codacy Self-hosted versions](../index.md#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. +1. Check the [release notes for all Codacy Self-hosted versions](../index.mdx#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. 1. Follow the instructions to [upgrade your Codacy Self-hosted instance](https://docs.codacy.com/v12.0/chart/maintenance/upgrade/). diff --git a/docusaurus/docs/release-notes/self-hosted/v13.0.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v13.0.0-self-hosted.md index 4b03018215..2dae46d43d 100644 --- a/docusaurus/docs/release-notes/self-hosted/v13.0.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v13.0.0-self-hosted.md @@ -17,7 +17,7 @@ These release notes are for [Codacy Self-hosted v13.0.0](https://github.com/coda Follow the steps below to upgrade to Codacy Self-hosted v13.0.0: -1. Check the [release notes for all Codacy Self-hosted versions](../index.md#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. +1. Check the [release notes for all Codacy Self-hosted versions](../index.mdx#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. 1. Follow the instructions to [upgrade your Codacy Self-hosted instance](https://docs.codacy.com/v13.0/chart/maintenance/upgrade/). @@ -110,7 +110,7 @@ This version of Codacy Self-hosted includes the tool versions below. The tools t - Checkov 2.3.187 - **[Checkstyle 10.12.3](https://checkstyle.sourceforge.io/releasenotes.html#Release_10.12.3) (updated from 10.3.1)** - Clang-Tidy 10.0.1 -- **[CodeNarc 3.3.0](https://github.com/CodeNarc/CodeNarc/blob/master/CHANGELOG.md) (updated from 3.2.0)** +- **[CodeNarc 3.3.0](https://github.com/CodeNarc/CodeNarc/blob/master/CHANGELOG.mdx) (updated from 3.2.0)** - **[CoffeeLint 5.2.11](https://github.com/coffeelint/coffeelint/releases/tag/v5.2.11) (updated from 2.1.0)** - **[Cppcheck 2.12.0](https://github.com/danmar/cppcheck/releases/tag/2.12.0) (updated from 2.10.3)** - Credo 1.4.0 diff --git a/docusaurus/docs/release-notes/self-hosted/v14.0.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v14.0.0-self-hosted.md index 4de119e22e..476dd6efdb 100644 --- a/docusaurus/docs/release-notes/self-hosted/v14.0.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v14.0.0-self-hosted.md @@ -17,7 +17,7 @@ These release notes are for [Codacy Self-hosted v14.0.0](https://github.com/coda Follow the steps below to upgrade to Codacy Self-hosted v14.0.0: -1. Check the [release notes for all Codacy Self-hosted versions](../index.md#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. +1. Check the [release notes for all Codacy Self-hosted versions](../index.mdx#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. 1. Follow the instructions to [upgrade your Codacy Self-hosted instance](https://docs.codacy.com/v14.0/chart/maintenance/upgrade/). @@ -51,7 +51,7 @@ This version of Codacy Self-hosted includes the tool versions below. The tools t - Cppcheck 2.12.0 - **[Credo 1.7.2](https://github.com/rrrene/credo/releases/tag/v1.7.2) (updated from 1.4.0)** - CSSLint (deprecated) 1.0.5 -- **[dartanalyzer 3.3.0](https://github.com/dart-lang/sdk/blob/main/CHANGELOG.md) (updated from 2.17.0)** +- **[dartanalyzer 3.3.0](https://github.com/dart-lang/sdk/blob/main/CHANGELOG.mdx) (updated from 2.17.0)** - **[detekt 1.23.5](https://github.com/detekt/detekt/releases/tag/v1.23.5) (updated from 1.22.0)** - **[ESLint 8.56.0](https://github.com/eslint/eslint/releases/tag/v8.56.0) (updated from 8.51.0)** - ESLint (deprecated) 7.32.0 diff --git a/docusaurus/docs/release-notes/self-hosted/v14.1.1-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v14.1.1-self-hosted.md index 09f6a1e68a..f488bd383b 100644 --- a/docusaurus/docs/release-notes/self-hosted/v14.1.1-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v14.1.1-self-hosted.md @@ -18,7 +18,7 @@ These release notes are for [Codacy Self-hosted v14.1.1](https://github.com/coda Follow the steps below to upgrade to Codacy Self-hosted v14.1.1: -1. Check the [release notes for all Codacy Self-hosted versions](../index.md#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. +1. Check the [release notes for all Codacy Self-hosted versions](../index.mdx#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. 1. Follow the instructions to [upgrade your Codacy Self-hosted instance](https://docs.codacy.com/v14.1/chart/maintenance/upgrade/). diff --git a/docusaurus/docs/release-notes/self-hosted/v15.0.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v15.0.0-self-hosted.md index 21862c5ddb..235b48fa4a 100644 --- a/docusaurus/docs/release-notes/self-hosted/v15.0.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v15.0.0-self-hosted.md @@ -18,7 +18,7 @@ These release notes are for [Codacy Self-hosted v15.0.0](https://github.com/coda Follow the steps below to upgrade to Codacy Self-hosted v15.0.0: -1. Check the [release notes for all Codacy Self-hosted versions](../index.md#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. +1. Check the [release notes for all Codacy Self-hosted versions](../index.mdx#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. 1. Follow the instructions to [upgrade your Codacy Self-hosted instance](https://docs.codacy.com/v14.1/chart/maintenance/upgrade/). diff --git a/docusaurus/docs/release-notes/self-hosted/v2.0.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v2.0.0-self-hosted.md index 760d12213a..00c6cbb212 100644 --- a/docusaurus/docs/release-notes/self-hosted/v2.0.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v2.0.0-self-hosted.md @@ -9,7 +9,7 @@ slug: /release-notes/self-hosted/self-hosted-v2.0.0 These release notes are for [Codacy Self-hosted v2.0.0](https://github.com/codacy/chart/releases/tag/2.0.0), released on August 18, 2020. -To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.md). +To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.mdx). ## Breaking changes diff --git a/docusaurus/docs/release-notes/self-hosted/v2.1.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v2.1.0-self-hosted.md index e373d5756f..8bdd9a0184 100644 --- a/docusaurus/docs/release-notes/self-hosted/v2.1.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v2.1.0-self-hosted.md @@ -9,11 +9,11 @@ slug: /release-notes/self-hosted/self-hosted-v2.1.0 These release notes are for [Codacy Self-hosted v2.1.0](https://github.com/codacy/chart/releases/tag/2.1.0), released on September 16, 2020. -To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.md). +To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.mdx). ## Product enhancements -- Improved the [repositories list page](../../organizations/managing-repositories.md) to streamline managing the repositories in an organization and display metrics for each repository. (CY-1847) +- Improved the [repositories list page](../../organizations/managing-repositories.mdx) to streamline managing the repositories in an organization and display metrics for each repository. (CY-1847) ## Bug fixes diff --git a/docusaurus/docs/release-notes/self-hosted/v2.1.1-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v2.1.1-self-hosted.md index 062fb390c0..ea0a7c63d6 100644 --- a/docusaurus/docs/release-notes/self-hosted/v2.1.1-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v2.1.1-self-hosted.md @@ -9,7 +9,7 @@ slug: /release-notes/self-hosted/self-hosted-v2.1.1 These release notes are for [Codacy Self-hosted v2.1.1](https://github.com/codacy/chart/releases/tag/2.1.1), released on September 24, 2020. -To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.md). +To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.mdx). ## Bug fixes diff --git a/docusaurus/docs/release-notes/self-hosted/v2.2.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v2.2.0-self-hosted.md index 7b37a3167b..aa13edf80f 100644 --- a/docusaurus/docs/release-notes/self-hosted/v2.2.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v2.2.0-self-hosted.md @@ -9,13 +9,13 @@ slug: /release-notes/self-hosted/self-hosted-v2.2.0 These release notes are for [Codacy Self-hosted v2.2.0](https://github.com/codacy/chart/releases/tag/2.2.0), released on October 8, 2020. -To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.md). +To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.mdx). ## Product enhancements - You can now use the Codacy Analysis CLI [GitHub Action](https://github.com/marketplace/actions/codacy-analysis-cli) to analyze each commit and pull request. (CY-2663) -- You can now use [personal organizations](../../organizations/what-are-organizations.md#adding-an-organization) to manage your personal repositories. (CY-1802) -- Updated the [Organization](../../organizations/organization-overview.md) and [Repository](../../repositories/repository-dashboard.md) dashboards with a cleaner user experience and better performance. (CY-1733) +- You can now use [personal organizations](../../organizations/what-are-organizations.mdx#adding-an-organization) to manage your personal repositories. (CY-1802) +- Updated the [Organization](../../organizations/organization-overview.mdx) and [Repository](../../repositories/repository-dashboard.mdx) dashboards with a cleaner user experience and better performance. (CY-1733) ## Bug fixes diff --git a/docusaurus/docs/release-notes/self-hosted/v2.2.1-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v2.2.1-self-hosted.md index 4553e1f1c3..440572ef6f 100644 --- a/docusaurus/docs/release-notes/self-hosted/v2.2.1-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v2.2.1-self-hosted.md @@ -9,7 +9,7 @@ slug: /release-notes/self-hosted/self-hosted-v2.2.1 These release notes are for [Codacy Self-hosted v2.2.1](https://github.com/codacy/chart/releases/tag/2.2.1), released on October 22, 2020. -To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.md). After that, restart the Fluentd pods by running the following command, replacing `` with the namespace in which Codacy was installed: +To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.mdx). After that, restart the Fluentd pods by running the following command, replacing `` with the namespace in which Codacy was installed: ```bash daemonset=$(kubectl get daemonsets --namespace -o jsonpath='{.items[*].metadata.name}') && \ @@ -19,7 +19,7 @@ kubectl rollout status daemonset $daemonset --namespace --watch ## Bug fixes -- Fixed an issue that caused the [script that collects logs from a Codacy instance](../../chart/troubleshoot/logs-collect.md) to return an empty archive. (CY-3068) +- Fixed an issue that caused the [script that collects logs from a Codacy instance](../../chart/troubleshoot/logs-collect.mdx) to return an empty archive. (CY-3068) - Fixed a UI glitch that prevented enabling Git provider integrations in the repository settings. (CY-3049) - Fixed an issue that prevented Codacy from displaying repositories in Bitbucket organizations. (CY-3048) - Fixed an issue that prevented Codacy from displaying repositories in GitHub organizations. (CY-3002) diff --git a/docusaurus/docs/release-notes/self-hosted/v3.0.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v3.0.0-self-hosted.md index dbe5797c3f..6ab607ca17 100644 --- a/docusaurus/docs/release-notes/self-hosted/v3.0.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v3.0.0-self-hosted.md @@ -9,7 +9,7 @@ slug: /release-notes/self-hosted/self-hosted-v3.0.0 These release notes are for [Codacy Self-hosted v3.0.0](https://github.com/codacy/chart/releases/tag/3.0.0), released on November 2, 2020. -To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.md). +To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.mdx). ## Breaking changes diff --git a/docusaurus/docs/release-notes/self-hosted/v3.1.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v3.1.0-self-hosted.md index 224a5eb9f3..3cb61ed41a 100644 --- a/docusaurus/docs/release-notes/self-hosted/v3.1.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v3.1.0-self-hosted.md @@ -9,14 +9,14 @@ slug: /release-notes/self-hosted/self-hosted-v3.1.0 These release notes are for [Codacy Self-hosted v3.1.0](https://github.com/codacy/chart/releases/tag/3.1.0), released on December 10, 2020. -To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.md). +To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.mdx). ## Product enhancements - Now, Codacy stores the date when users are removed so that this information is available when using [`codacy-usage-report`](https://github.com/codacy/codacy-usage-report). (CY-3194) -- Improvements to the [supported languages and tools](../../getting-started/supported-languages-and-tools.md): +- Improvements to the [supported languages and tools](../../getting-started/supported-languages-and-tools.mdx): - Added static analysis support for **Objective-C** with the tool Faux Pas. - - Expanded static analysis support for **Go** with the [client-side tools](../../repositories-configure/local-analysis/client-side-tools.md) aligncheck, deadcode, and Staticcheck. + - Expanded static analysis support for **Go** with the [client-side tools](../../repositories-configure/local-analysis/client-side-tools.mdx) aligncheck, deadcode, and Staticcheck. - Added duplication and complexity support for **Kotlin** with the tools jscpd and detekt. (CY-3003) ## Bug fixes diff --git a/docusaurus/docs/release-notes/self-hosted/v3.2.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v3.2.0-self-hosted.md index 831ddc3f41..431b572272 100644 --- a/docusaurus/docs/release-notes/self-hosted/v3.2.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v3.2.0-self-hosted.md @@ -9,7 +9,7 @@ slug: /release-notes/self-hosted/self-hosted-v3.2.0 These release notes are for [Codacy Self-hosted v3.2.0](https://github.com/codacy/chart/releases/tag/3.2.0), released on December 17, 2020. -To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.md). +To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.mdx). ## Product enhancements diff --git a/docusaurus/docs/release-notes/self-hosted/v3.3.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v3.3.0-self-hosted.md index d88b3f1212..2f61d5b26b 100644 --- a/docusaurus/docs/release-notes/self-hosted/v3.3.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v3.3.0-self-hosted.md @@ -9,7 +9,7 @@ slug: /release-notes/self-hosted/self-hosted-v3.3.0 These release notes are for [Codacy Self-hosted v3.3.0](https://github.com/codacy/chart/releases/tag/3.3.0), released on February 12, 2021. -To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.md). +To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.mdx). ## Product enhancements diff --git a/docusaurus/docs/release-notes/self-hosted/v3.4.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v3.4.0-self-hosted.md index 7ea9301587..087d34d107 100644 --- a/docusaurus/docs/release-notes/self-hosted/v3.4.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v3.4.0-self-hosted.md @@ -9,7 +9,7 @@ slug: /release-notes/self-hosted/self-hosted-v3.4.0 These release notes are for [Codacy Self-hosted v3.4.0](https://github.com/codacy/chart/releases/tag/3.4.0), released on March 12, 2021. -To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.md). +To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.mdx). ## Product enhancements diff --git a/docusaurus/docs/release-notes/self-hosted/v3.5.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v3.5.0-self-hosted.md index 5c636eba4a..d60bbebafd 100644 --- a/docusaurus/docs/release-notes/self-hosted/v3.5.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v3.5.0-self-hosted.md @@ -9,7 +9,7 @@ slug: /release-notes/self-hosted/self-hosted-v3.5.0 These release notes are for [Codacy Self-hosted v3.5.0](https://github.com/codacy/chart/releases/tag/3.5.0), released on March 31, 2021. -To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.md). +To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.mdx). ## Product enhancements diff --git a/docusaurus/docs/release-notes/self-hosted/v3.5.1-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v3.5.1-self-hosted.md index 3e18078aa8..b1687b5bc0 100644 --- a/docusaurus/docs/release-notes/self-hosted/v3.5.1-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v3.5.1-self-hosted.md @@ -9,7 +9,7 @@ slug: /release-notes/self-hosted/self-hosted-v3.5.1 These release notes are for [Codacy Self-hosted v3.5.1](https://github.com/codacy/chart/releases/tag/3.5.1), released on June 1, 2021. -To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.md). +To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.mdx). ## Bug fixes diff --git a/docusaurus/docs/release-notes/self-hosted/v4.0.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v4.0.0-self-hosted.md index 1716b043f5..ec460e87c5 100644 --- a/docusaurus/docs/release-notes/self-hosted/v4.0.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v4.0.0-self-hosted.md @@ -9,7 +9,7 @@ slug: /release-notes/self-hosted/self-hosted-v4.0.0 These release notes are for [Codacy Self-hosted v4.0.0](https://github.com/codacy/chart/releases/tag/4.0.0), released on May 18, 2021. -To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.md). +To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.mdx). ## Breaking changes diff --git a/docusaurus/docs/release-notes/self-hosted/v4.0.1-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v4.0.1-self-hosted.md index f2fecd9911..2bd9c7e938 100644 --- a/docusaurus/docs/release-notes/self-hosted/v4.0.1-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v4.0.1-self-hosted.md @@ -9,7 +9,7 @@ slug: /release-notes/self-hosted/self-hosted-v4.0.1 These release notes are for [Codacy Self-hosted v4.0.1](https://github.com/codacy/chart/releases/tag/4.0.1), released on June 2, 2021. -To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.md). +To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.mdx). ## Bug fixes diff --git a/docusaurus/docs/release-notes/self-hosted/v4.1.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v4.1.0-self-hosted.md index 4c8c194e6f..2d1b543432 100644 --- a/docusaurus/docs/release-notes/self-hosted/v4.1.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v4.1.0-self-hosted.md @@ -9,7 +9,7 @@ slug: /release-notes/self-hosted/self-hosted-v4.1.0 These release notes are for [Codacy Self-hosted v4.1.0](https://github.com/codacy/chart/releases/tag/4.1.0), released on July 6, 2021. -To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.md). +To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.mdx). ## Product enhancements diff --git a/docusaurus/docs/release-notes/self-hosted/v4.2.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v4.2.0-self-hosted.md index a99755a092..f1e3000cbb 100644 --- a/docusaurus/docs/release-notes/self-hosted/v4.2.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v4.2.0-self-hosted.md @@ -11,7 +11,7 @@ slug: /release-notes/self-hosted/self-hosted-v4.2.0 These release notes are for [Codacy Self-hosted v4.2.0](https://github.com/codacy/chart/releases/tag/4.2.0), released on August 31, 2021. -To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.md). +To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.mdx). ## Product enhancements diff --git a/docusaurus/docs/release-notes/self-hosted/v4.3.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v4.3.0-self-hosted.md index 95648bf04e..04903d9367 100644 --- a/docusaurus/docs/release-notes/self-hosted/v4.3.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v4.3.0-self-hosted.md @@ -11,7 +11,7 @@ slug: /release-notes/self-hosted/self-hosted-v4.3.0 These release notes are for [Codacy Self-hosted v4.3.0](https://github.com/codacy/chart/releases/tag/4.3.0), released on September 16, 2021. -To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.md). +To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.mdx). 📢 [Visit the Codacy roadmap](https://roadmap.codacy.com) and let us know your feedback on both new and planned product updates! diff --git a/docusaurus/docs/release-notes/self-hosted/v4.4.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v4.4.0-self-hosted.md index 85429cbefb..2c0c40e304 100644 --- a/docusaurus/docs/release-notes/self-hosted/v4.4.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v4.4.0-self-hosted.md @@ -11,7 +11,7 @@ slug: /release-notes/self-hosted/self-hosted-v4.4.0 These release notes are for [Codacy Self-hosted v4.4.0](https://github.com/codacy/chart/releases/tag/4.4.0), released on October 12, 2021. -To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.md). +To upgrade Codacy, follow [these instructions](../../chart/maintenance/upgrade.mdx). 📢 [Visit the Codacy roadmap](https://roadmap.codacy.com) and let us know your feedback on both new and planned product updates! diff --git a/docusaurus/docs/release-notes/self-hosted/v5.0.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v5.0.0-self-hosted.md index fd3ce4b3d2..05f4e66130 100644 --- a/docusaurus/docs/release-notes/self-hosted/v5.0.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v5.0.0-self-hosted.md @@ -17,13 +17,13 @@ These release notes are for [Codacy Self-hosted v5.0.0](https://github.com/codac Follow the steps below to upgrade to Codacy Self-hosted v5.0.0: -1. [Check the release notes](../index.md#self-hosted) for all Codacy Self-hosted versions between your current version and the most recent version for breaking changes and follow the instructions provided carefully. +1. [Check the release notes](../index.mdx#self-hosted) for all Codacy Self-hosted versions between your current version and the most recent version for breaking changes and follow the instructions provided carefully. :::warning **This version drops the support for legacy manual organizations.** Please be sure to [review the breaking changes](#breaking-changes) introduced in this version before upgrading. ::: -1. Follow the instructions to [upgrade your Codacy Self-hosted instance](../../chart/maintenance/upgrade.md). +1. Follow the instructions to [upgrade your Codacy Self-hosted instance](../../chart/maintenance/upgrade.mdx). 1. Update your Codacy command-line tools to the versions with the Git tag `self-hosted-5.0.0`: @@ -132,4 +132,4 @@ This version of Codacy Self-hosted includes the tool versions below. The tools t ## See also -- Announcement for the [end of support for legacy manual organizations on Codacy Cloud](../cloud/2021/2021-11-02-cloud-legacy-organizations.md) +- Announcement for the [end of support for legacy manual organizations on Codacy Cloud](../cloud/2021/2021-11-02-cloud-legacy-organizations.mdx) diff --git a/docusaurus/docs/release-notes/self-hosted/v5.1.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v5.1.0-self-hosted.md index 63b383eb13..5f8821ab11 100644 --- a/docusaurus/docs/release-notes/self-hosted/v5.1.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v5.1.0-self-hosted.md @@ -17,13 +17,13 @@ These release notes are for [Codacy Self-hosted v5.1.0](https://github.com/codac Follow the steps below to upgrade to Codacy Self-hosted v5.1.0: -1. [Check the release notes](../index.md#self-hosted) for all Codacy Self-hosted versions between your current version and the most recent version for breaking changes and follow the instructions provided carefully. +1. [Check the release notes](../index.mdx#self-hosted) for all Codacy Self-hosted versions between your current version and the most recent version for breaking changes and follow the instructions provided carefully. :::warning **Codacy Self-hosted v5.0.0 dropped the support for legacy manual organizations.** Please be sure to [review the breaking changes](/release-notes/self-hosted/self-hosted-v5.0.0#breaking-changes) introduced in that version before upgrading. ::: -1. Follow the instructions to [upgrade your Codacy Self-hosted instance](../../chart/maintenance/upgrade.md). +1. Follow the instructions to [upgrade your Codacy Self-hosted instance](../../chart/maintenance/upgrade.mdx). 1. Update your Codacy command-line tools to the versions with the Git tag `self-hosted-5.1.0`: diff --git a/docusaurus/docs/release-notes/self-hosted/v6.0.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v6.0.0-self-hosted.md index 0191e5973a..dcf5bad425 100644 --- a/docusaurus/docs/release-notes/self-hosted/v6.0.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v6.0.0-self-hosted.md @@ -17,7 +17,7 @@ These release notes are for [Codacy Self-hosted v6.0.0](https://github.com/codac Follow the steps below to upgrade to Codacy Self-hosted v6.0.0: -1. Check the [release notes for all Codacy Self-hosted versions](../index.md#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. +1. Check the [release notes for all Codacy Self-hosted versions](../index.mdx#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. 1. Follow the instructions to [upgrade your Codacy Self-hosted instance](https://docs.codacy.com/v6.0/chart/maintenance/upgrade/). diff --git a/docusaurus/docs/release-notes/self-hosted/v7.0.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v7.0.0-self-hosted.md index a0f68257fd..027f8d87c3 100644 --- a/docusaurus/docs/release-notes/self-hosted/v7.0.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v7.0.0-self-hosted.md @@ -17,7 +17,7 @@ These release notes are for [Codacy Self-hosted v7.0.0](https://github.com/codac Follow the steps below to upgrade to Codacy Self-hosted v7.0.0: -1. Check the [release notes for all Codacy Self-hosted versions](../index.md#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. +1. Check the [release notes for all Codacy Self-hosted versions](../index.mdx#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. 1. Follow the instructions to [upgrade your Codacy Self-hosted instance](https://docs.codacy.com/v7.0/chart/maintenance/upgrade/). @@ -102,7 +102,7 @@ This version of Codacy Self-hosted includes the tool versions below. The tools t - Cppcheck 2.2 - Credo 1.4.0 - CSSLint 1.0.5 -- **[dartanalyzer 2.16.1](https://github.com/dart-lang/sdk/blob/main/CHANGELOG.md#2161---2022-02-09) (updated from 2.15.1)** +- **[dartanalyzer 2.16.1](https://github.com/dart-lang/sdk/blob/main/CHANGELOG.mdx#2161---2022-02-09) (updated from 2.15.1)** - detekt 1.19.0 - **[ESLint 8.10.0](https://github.com/eslint/eslint/releases/tag/v8.10.0) (new)** - ESLint 7.32.0 (**deprecated**) diff --git a/docusaurus/docs/release-notes/self-hosted/v8.0.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v8.0.0-self-hosted.md index dee126fade..8167808f20 100644 --- a/docusaurus/docs/release-notes/self-hosted/v8.0.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v8.0.0-self-hosted.md @@ -17,7 +17,7 @@ These release notes are for [Codacy Self-hosted v8.0.0](https://github.com/codac Follow the steps below to upgrade to Codacy Self-hosted v8.0.0: -1. Check the [release notes for all Codacy Self-hosted versions](../index.md#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. +1. Check the [release notes for all Codacy Self-hosted versions](../index.mdx#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. 1. Follow the instructions to [upgrade your Codacy Self-hosted instance](https://docs.codacy.com/v8.0/chart/maintenance/upgrade/). @@ -32,7 +32,7 @@ ESLint 8 will be **enabled by default on new repositories** starting on this ver The previous Codacy Self-hosted version [already included ESLint 8 as a new supported tool and deprecated ESLint 7](/release-notes/self-hosted/self-hosted-v7.0.0#product-enhancements), and Codacy recommends that you migrate to the new version of the tool to benefit from the new features and fixes of ESLint. -See [how to migrate your configuration files to use ESLint 8](../cloud/2022/2022-03-31-cloud-adding-eslint8.md#migrating-your-configuration-files-to-use-eslint-8). (CY-5848) +See [how to migrate your configuration files to use ESLint 8](../cloud/2022/2022-03-31-cloud-adding-eslint8.mdx#migrating-your-configuration-files-to-use-eslint-8). (CY-5848) ## Product enhancements @@ -64,7 +64,7 @@ This version of Codacy Self-hosted includes the tool versions below. The tools t - Cppcheck 2.2 - Credo 1.4.0 - CSSLint 1.0.5 -- **[dartanalyzer 2.16.2](https://github.com/dart-lang/sdk/blob/main/CHANGELOG.md#2162---2022-03-24) (updated from 2.16.1)** +- **[dartanalyzer 2.16.2](https://github.com/dart-lang/sdk/blob/main/CHANGELOG.mdx#2162---2022-03-24) (updated from 2.16.1)** - detekt 1.19.0 - **[ESLint 8.14.0](https://github.com/eslint/eslint/releases/tag/v8.14.0) (updated from 8.10.0)** - ESLint (deprecated) 7.32.0 diff --git a/docusaurus/docs/release-notes/self-hosted/v8.1.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v8.1.0-self-hosted.md index 93eca502e6..27e6753fbf 100644 --- a/docusaurus/docs/release-notes/self-hosted/v8.1.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v8.1.0-self-hosted.md @@ -17,7 +17,7 @@ These release notes are for [Codacy Self-hosted v8.1.0](https://github.com/codac Follow the steps below to upgrade to Codacy Self-hosted v8.1.0: -1. Check the [release notes for all Codacy Self-hosted versions](../index.md#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. +1. Check the [release notes for all Codacy Self-hosted versions](../index.mdx#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. 1. Follow the instructions to [upgrade your Codacy Self-hosted instance](https://docs.codacy.com/v8.1/chart/maintenance/upgrade/). @@ -61,7 +61,7 @@ This version of Codacy Self-hosted includes the tool versions below. The tools t - Cppcheck 2.2 - Credo 1.4.0 - CSSLint 1.0.5 -- **[dartanalyzer 2.17.0](https://github.com/dart-lang/sdk/blob/main/CHANGELOG.md#2170---2022-05-11) (updated from 2.16.2)** +- **[dartanalyzer 2.17.0](https://github.com/dart-lang/sdk/blob/main/CHANGELOG.mdx#2170---2022-05-11) (updated from 2.16.2)** - detekt 1.19.0 - **[ESLint 8.15.0](https://github.com/eslint/eslint/releases/tag/v8.15.0) (updated from 8.14.0)** - ESLint (deprecated) 7.32.0 diff --git a/docusaurus/docs/release-notes/self-hosted/v9.0.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v9.0.0-self-hosted.md index 6d3de05ba8..25983a4199 100644 --- a/docusaurus/docs/release-notes/self-hosted/v9.0.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v9.0.0-self-hosted.md @@ -17,7 +17,7 @@ These release notes are for [Codacy Self-hosted v9.0.0](https://github.com/codac Follow the steps below to upgrade to Codacy Self-hosted v9.0.0: -1. Check the [release notes for all Codacy Self-hosted versions](../index.md#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. +1. Check the [release notes for all Codacy Self-hosted versions](../index.mdx#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. 1. Follow the instructions to [upgrade your Codacy Self-hosted instance](https://docs.codacy.com/v9.0/chart/maintenance/upgrade/). @@ -133,7 +133,7 @@ This version of Codacy Self-hosted includes the tool versions below. The tools t - **[Revive 1.2.3](https://github.com/mgechev/revive/releases/tag/v1.2.3) (updated from 1.2.1)** - **[RuboCop 1.32.0](https://github.com/rubocop/rubocop/releases/tag/v1.32.0) (updated from 1.28.2)** - Scalastyle 1.5.0 -- **[ShellCheck 0.8.0](https://github.com/koalaman/shellcheck/blob/master/CHANGELOG.md#v080---2021-11-06) (updated from v0.7.2)** +- **[ShellCheck 0.8.0](https://github.com/koalaman/shellcheck/blob/master/CHANGELOG.mdx#v080---2021-11-06) (updated from v0.7.2)** - SonarC# 8.39 - SonarVB 8.15 - Spectral 1.2.7 diff --git a/docusaurus/sidebars.ts b/docusaurus/sidebars.ts index 1d92a21690..935dc519e2 100644 --- a/docusaurus/sidebars.ts +++ b/docusaurus/sidebars.ts @@ -3,8 +3,8 @@ import type {SidebarsConfig} from '@docusaurus/plugin-content-docs'; import {gettingStartedOrder} from './docs/getting-started/_order'; import {accountOrder} from './docs/account/_order'; import {codacyApiOrder} from './docs/codacy-api/_order'; +import {chartOrder} from './docs/chart/_order'; import {codacyGuardrailsOrder} from './docs/codacy-guardrails/_order'; -import {coverageReporterOrder} from './docs/coverage-reporter/_order'; import {faqOrder} from './docs/faq/_order'; import {organizationsOrder} from './docs/organizations/_order'; import {repositoriesOrder} from './docs/repositories/_order'; @@ -70,6 +70,11 @@ const sidebars: SidebarsConfig = { label: 'Codacy API', items: codacyApiOrder, }, + { + type: 'category', + label: 'Managing Self-Hosted', + items: chartOrder, + }, { type: 'category', label: 'Troubleshooting & FAQs', From a29941a3f08e192f183f4026edcec0cb4dd9cf0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A1udia?= Date: Fri, 2 Jan 2026 15:13:54 +0000 Subject: [PATCH 16/19] fixing charts/ components and urls --- .../assets/includes/self-hosted-version.mdx | 5 +++ .../assets/includes/self-hosted-version.txt | 4 -- .../docs/chart/configuration/caching.mdx | 2 +- .../integrations/bitbucket-cloud.mdx | 10 ++--- .../integrations/bitbucket-server.mdx | 6 +-- .../configuration/integrations/email.mdx | 6 +-- .../integrations/github-app-create.mdx | 4 +- .../integrations/github-cloud.mdx | 6 +-- .../integrations/github-enterprise.mdx | 3 +- .../integrations/gitlab-cloud.mdx | 17 +++---- .../integrations/gitlab-enterprise.mdx | 16 +++---- .../docs/chart/configuration/logging.mdx | 8 ++-- .../docs/chart/configuration/monitoring.mdx | 12 ++--- docusaurus/docs/chart/index.mdx | 45 ++++++++++--------- .../chart/infrastructure/eks-quickstart.mdx | 11 ++--- .../infrastructure/microk8s-quickstart.mdx | 4 +- .../docs/chart/maintenance/database.mdx | 7 +-- docusaurus/docs/chart/maintenance/license.mdx | 3 +- .../docs/chart/maintenance/uninstall.mdx | 4 +- docusaurus/docs/chart/maintenance/upgrade.mdx | 7 ++- docusaurus/docs/chart/requirements.mdx | 42 ++++++++--------- .../chart/troubleshoot/k8s-cheatsheet.mdx | 10 ++--- .../docs/chart/troubleshoot/logs-collect.mdx | 9 ++-- .../docs/chart/troubleshoot/troubleshoot.mdx | 18 ++++---- docusaurus/docusaurus.config.ts | 8 ++-- 25 files changed, 140 insertions(+), 127 deletions(-) create mode 100644 docusaurus/docs/chart/assets/includes/self-hosted-version.mdx delete mode 100644 docusaurus/docs/chart/assets/includes/self-hosted-version.txt diff --git a/docusaurus/docs/chart/assets/includes/self-hosted-version.mdx b/docusaurus/docs/chart/assets/includes/self-hosted-version.mdx new file mode 100644 index 0000000000..5f0c544117 --- /dev/null +++ b/docusaurus/docs/chart/assets/includes/self-hosted-version.mdx @@ -0,0 +1,5 @@ +:::tip +To see the version of your Codacy Self-hosted instance click your avatar on the top right-hand corner of any Codacy page: + +![Obtaining the Codacy Self-hosted version](./images/self-hosted-version.png) +::: \ No newline at end of file diff --git a/docusaurus/docs/chart/assets/includes/self-hosted-version.txt b/docusaurus/docs/chart/assets/includes/self-hosted-version.txt deleted file mode 100644 index 89077c111a..0000000000 --- a/docusaurus/docs/chart/assets/includes/self-hosted-version.txt +++ /dev/null @@ -1,4 +0,0 @@ -!!! tip - To see the version of your Codacy Self-hosted instance click your avatar on the top right-hand corner of any Codacy page: - - ![Obtaining the Codacy Self-hosted version](images/self-hosted-version.png) diff --git a/docusaurus/docs/chart/configuration/caching.mdx b/docusaurus/docs/chart/configuration/caching.mdx index 4d586da951..d0e84fc010 100644 --- a/docusaurus/docs/chart/configuration/caching.mdx +++ b/docusaurus/docs/chart/configuration/caching.mdx @@ -1,8 +1,8 @@ --- +title: Caching description: Configure Codacy Self-hosted to use an external NFS server to improve the performance of the cloned repository cache. --- -# Caching Codacy Self-hosted includes a built-in NFS server provisioner that deploys a shared volume to cache the cloned repository files while they're being analyzed by each tool. However, if you're dealing with big repositories or a high volume of analysis, using an NFS server external to the cluster will improve the performance of the cache. diff --git a/docusaurus/docs/chart/configuration/integrations/bitbucket-cloud.mdx b/docusaurus/docs/chart/configuration/integrations/bitbucket-cloud.mdx index 4aceab3693..b71faadfeb 100644 --- a/docusaurus/docs/chart/configuration/integrations/bitbucket-cloud.mdx +++ b/docusaurus/docs/chart/configuration/integrations/bitbucket-cloud.mdx @@ -1,12 +1,11 @@ --- +title: Bitbucket Cloud description: Instructions on how to set up the Codacy Self-hosted integration with Bitbucket Cloud. --- -# Bitbucket Cloud - Follow the instructions below to set up the Codacy Self-hosted integration with Bitbucket Cloud. -## Create an OAuth consumer {#create-oauth} +## Create an OAuth consumer \{#create-oauth\} To integrate Codacy with Bitbucket Cloud, you must register an OAuth consumer for Codacy on Bitbucket. @@ -46,7 +45,7 @@ You can create a consumer on any existing individual or team account. To create ![Bitbucket consumer key and secret](images/bitbucket-consumer-key-and-secret.png) -## Configure Bitbucket Cloud on Codacy {#configure} +## Configure Bitbucket Cloud on Codacy \{#configure\} After creating the OAuth consumer on Bitbucket Cloud, you must configure it on Codacy: @@ -65,10 +64,11 @@ After creating the OAuth consumer on Bitbucket Cloud, you must configure it on C 3. Apply the new configuration by performing a Helm upgrade. To do so execute the command [used to install Codacy](../../index.mdx#helm-upgrade): - !!! important + :::caution **If you're using MicroK8s** you must use the file `values-microk8s.yaml` together with the file `values-production.yaml`. To do this, uncomment the last line before running the `helm upgrade` command below. + ::: ```bash helm upgrade (...options used to install Codacy...) \ diff --git a/docusaurus/docs/chart/configuration/integrations/bitbucket-server.mdx b/docusaurus/docs/chart/configuration/integrations/bitbucket-server.mdx index 7c37af8137..bd95ca0e03 100644 --- a/docusaurus/docs/chart/configuration/integrations/bitbucket-server.mdx +++ b/docusaurus/docs/chart/configuration/integrations/bitbucket-server.mdx @@ -1,9 +1,8 @@ --- +title: Bitbucket Server description: Instructions on how to set up the Codacy Self-hosted integration with Bitbucket Server. --- -# Bitbucket Server - Follow the instructions below to set up the Codacy Self-hosted integration with Bitbucket Server. ## Create a Bitbucket Server application link @@ -24,10 +23,11 @@ To integrate Codacy with Bitbucket Server, you must create an application link o 3. Create a new application link with the URL of your Codacy instance. - !!! important + :::caution **If you're using Bitbucket Server 7.20 or later** you must select the application type **Atlassian product** while creating the new application link. This [forces the integration to use OAuth 1.0](https://confluence.atlassian.com/bitbucketserver/link-to-other-applications-1018764620.html#Linktootherapplications-LinktoAtlassianproductsorexternalapplicationsusingOAuth1.0) and is necessary to ensure the compatibility between Codacy and older versions of Bitbucket that only supported OAuth 1.0. + ::: ![Bitbucket Server application link](images/bitbucket-server-application-link.png) diff --git a/docusaurus/docs/chart/configuration/integrations/email.mdx b/docusaurus/docs/chart/configuration/integrations/email.mdx index a49b1441e0..01b425351e 100644 --- a/docusaurus/docs/chart/configuration/integrations/email.mdx +++ b/docusaurus/docs/chart/configuration/integrations/email.mdx @@ -1,9 +1,8 @@ --- +title: SMTP server description: Instructions on how to set up Codacy Self-hosted to send emails using your SMTP server. --- -# SMTP server - Follow the instructions below to set up Codacy Self-hosted to send emails using your SMTP server: 1. Edit the file `values-production.yaml` that you [used to install Codacy](../../index.mdx#helm-upgrade). @@ -24,10 +23,11 @@ Follow the instructions below to set up Codacy Self-hosted to send emails using 3. Apply the new configuration by performing a Helm upgrade. To do so execute the command [used to install Codacy](../../index.mdx#helm-upgrade): - !!! important + :::caution **If you're using MicroK8s** you must use the file `values-microk8s.yaml` together with the file `values-production.yaml`. To do this, uncomment the last line before running the `helm upgrade` command below. + ::: ```bash helm upgrade (...options used to install Codacy...) \ diff --git a/docusaurus/docs/chart/configuration/integrations/github-app-create.mdx b/docusaurus/docs/chart/configuration/integrations/github-app-create.mdx index 8f399273ae..2f6428a26d 100644 --- a/docusaurus/docs/chart/configuration/integrations/github-app-create.mdx +++ b/docusaurus/docs/chart/configuration/integrations/github-app-create.mdx @@ -1,4 +1,6 @@ -# Creating a GitHub App +--- +title: Creating a GitHub App +--- You must create and correctly set up a [GitHub App](https://docs.github.com/en/developers/apps/getting-started-with-apps/about-apps) to allow Codacy Self-hosted to integrate with GitHub. diff --git a/docusaurus/docs/chart/configuration/integrations/github-cloud.mdx b/docusaurus/docs/chart/configuration/integrations/github-cloud.mdx index 2c6ecce86b..8da251d5fd 100644 --- a/docusaurus/docs/chart/configuration/integrations/github-cloud.mdx +++ b/docusaurus/docs/chart/configuration/integrations/github-cloud.mdx @@ -1,9 +1,8 @@ --- +title: GitHub Cloud description: Instructions on how to set up the Codacy Self-hosted integration with GitHub Cloud. --- -# GitHub Cloud - Follow the instructions below to set up the Codacy Self-hosted integration with GitHub Cloud: 1. Follow the instructions on [creating a GitHub App](github-app-create.mdx). @@ -26,10 +25,11 @@ Follow the instructions below to set up the Codacy Self-hosted integration with 4. Apply the new configuration by performing a Helm upgrade. To do so execute the command [used to install Codacy](../../index.mdx#helm-upgrade): - !!! important + :::caution **If you're using MicroK8s** you must use the file `values-microk8s.yaml` together with the file `values-production.yaml`. To do this, uncomment the last line before running the `helm upgrade` command below. + ::: ```bash helm upgrade (...options used to install Codacy...) \ diff --git a/docusaurus/docs/chart/configuration/integrations/github-enterprise.mdx b/docusaurus/docs/chart/configuration/integrations/github-enterprise.mdx index 1d2df24fed..93ce5a54ad 100644 --- a/docusaurus/docs/chart/configuration/integrations/github-enterprise.mdx +++ b/docusaurus/docs/chart/configuration/integrations/github-enterprise.mdx @@ -1,9 +1,8 @@ --- +title: GitHub Enterprise description: Instructions on how to set up the Codacy Self-hosted integration with GitHub Enterprise. --- -# GitHub Enterprise - Follow the instructions below to set up the Codacy Self-hosted integration with GitHub Enterprise: 1. Follow the instructions on [creating a GitHub App](github-app-create.mdx). diff --git a/docusaurus/docs/chart/configuration/integrations/gitlab-cloud.mdx b/docusaurus/docs/chart/configuration/integrations/gitlab-cloud.mdx index 6aa5461988..0c380d461e 100644 --- a/docusaurus/docs/chart/configuration/integrations/gitlab-cloud.mdx +++ b/docusaurus/docs/chart/configuration/integrations/gitlab-cloud.mdx @@ -1,16 +1,16 @@ --- +title: GitLab Cloud description: Instructions on how to set up the Codacy Self-hosted integration with GitLab Cloud. --- -# GitLab Cloud Follow the instructions below to set up the Codacy Self-hosted integration with GitLab Cloud. -## Create a GitLab application {#create-application} +## Create a GitLab application \{#create-application\} To integrate Codacy with GitLab Cloud, you must create a GitLab application: -1. Open . +1. Open [https://gitlab.com/-/profile/applications](https://gitlab.com/-/profile/applications). 2. Fill in the fields to register your Codacy instance on GitLab: @@ -36,14 +36,15 @@ To integrate Codacy with GitLab Cloud, you must create a GitLab application: 3. Click **Save application** and take note of the generated Application Id and Secret. -!!! note - You can ignore the following error that GitLab may display when you test or save the new GitLab application: +:::note +You can ignore the following error that GitLab may display when you test or save the new GitLab application: - ![GitLab appplication test error](images/gitlab-application-test-error.png) +![GitLab appplication test error](images/gitlab-application-test-error.png) - This happens because GitLab tests the new application by calling an endpoint that Codacy doesn't implement. +This happens because GitLab tests the new application by calling an endpoint that Codacy doesn't implement. +::: -## Configure GitLab Cloud on Codacy {#configure} +## Configure GitLab Cloud on Codacy \{#configure\} After creating the GitLab application, you must configure it on Codacy: diff --git a/docusaurus/docs/chart/configuration/integrations/gitlab-enterprise.mdx b/docusaurus/docs/chart/configuration/integrations/gitlab-enterprise.mdx index b36604e365..80dfa53116 100644 --- a/docusaurus/docs/chart/configuration/integrations/gitlab-enterprise.mdx +++ b/docusaurus/docs/chart/configuration/integrations/gitlab-enterprise.mdx @@ -1,12 +1,11 @@ --- +title: GitLab Enterprise description: Instructions on how to set up the Codacy Self-hosted integration with GitLab Enterprise. --- -# GitLab Enterprise - Follow the instructions below to set up the Codacy Self-hosted integration with GitLab Enterprise: -## Create a GitLab application {#create-application} +## Create a GitLab application \{#create-application\} To integrate Codacy with GitLab Enterprise, you must create a GitLab application: @@ -36,14 +35,15 @@ To integrate Codacy with GitLab Enterprise, you must create a GitLab application 3. Click **Save application** and take note of the generated Application Id and Secret. -!!! note - You can ignore the following error that GitLab Enterprise may display when you test or save the new GitLab application: +:::note +You can ignore the following error that GitLab Enterprise may display when you test or save the new GitLab application: - ![GitLab Enterprise appplication test error](images/gitlab-application-test-error.png) +![GitLab Enterprise appplication test error](images/gitlab-application-test-error.png) - This happens because GitLab Enterprise tests the new application by calling an endpoint that Codacy doesn't implement. +This happens because GitLab Enterprise tests the new application by calling an endpoint that Codacy doesn't implement. +::: -## Configure GitLab Enterprise on Codacy {#configure} +## Configure GitLab Enterprise on Codacy \{#configure\} After creating the GitLab application, you must configure it on Codacy: diff --git a/docusaurus/docs/chart/configuration/logging.mdx b/docusaurus/docs/chart/configuration/logging.mdx index 5a5c9b45be..f4a7c92fb8 100644 --- a/docusaurus/docs/chart/configuration/logging.mdx +++ b/docusaurus/docs/chart/configuration/logging.mdx @@ -1,9 +1,8 @@ --- +title: Logging description: Configure log levels and log retention periods for your Codacy Self-hosted instance. --- -# Logging - Currently, Codacy Self-hosted supports two types of log configurations: - **[Log level](#configuring-the-log-level):** The severity of the messages that will be shown in logs. @@ -11,12 +10,13 @@ Currently, Codacy Self-hosted supports two types of log configurations: The sections below provide instructions on how to configure each logging configuration. -## Configuring the log level {#configuring-the-log-level} +## Configuring the log level \{#configuring-the-log-level\} The log level defines the minimum severity of the events contained in the logs, and affects the necessary storage space in MinIO. -!!! important +:::caution We recommend that you don't use a log level lower than WARN, as the logs are useful to troubleshoot any issues in your Codacy Self-hosted instance. +::: Codacy supports configuring the log level of the following components: diff --git a/docusaurus/docs/chart/configuration/monitoring.mdx b/docusaurus/docs/chart/configuration/monitoring.mdx index 8eac94761e..a3c12b7038 100644 --- a/docusaurus/docs/chart/configuration/monitoring.mdx +++ b/docusaurus/docs/chart/configuration/monitoring.mdx @@ -1,9 +1,8 @@ --- +title: Monitoring description: Instructions on how to set up monitoring for your Codacy Self-hosted instance. --- -# Monitoring - Currently, Codacy Self-hosted supports two monitoring solutions: - **[Crow](#setting-up-monitoring-using-crow):** A simple, lightweight, and built-in monitoring solution, enabled by default when you install Codacy. @@ -11,7 +10,7 @@ Currently, Codacy Self-hosted supports two monitoring solutions: The sections below provide instructions on how to set up each monitoring solution. -## Setting up monitoring using Crow {#setting-up-monitoring-using-crow} +## Setting up monitoring using Crow \{#setting-up-monitoring-using-crow\} Crow displays information about the projects that are pending analysis and the jobs currently running on Codacy. @@ -47,7 +46,7 @@ We highly recommend that you define a custom password for Crow, if you haven't a # --values values-microk8s.yaml ``` -## Setting up monitoring using Grafana, Prometheus, and Loki {#setting-up-monitoring-using-grafana-prometheus-and-loki} +## Setting up monitoring using Grafana, Prometheus, and Loki \{#setting-up-monitoring-using-grafana-prometheus-and-loki\} [Prometheus](https://prometheus.io) is an open-source systems monitoring and alerting toolkit. Logs can be collected using [Loki](https://grafana.com/oss/loki/), which is a horizontally-scalable, highly-available, multi-tenant log aggregation system. Its data can be visualized with [Grafana](https://grafana.com), a widely used open source analytics and monitoring solution. @@ -55,8 +54,9 @@ This solution is considerably more resource demanding than Crow, and is recommen The instructions below cover the basic installation of these monitoring services using the [Kube Prometheus Stack](https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack). -!!! important - **If you're using MicroK8s** run `alias kubectl=microk8s.kubectl`. +:::important +**If you're using MicroK8s** run `alias kubectl=microk8s.kubectl`. +::: ### 1. Install custom resources diff --git a/docusaurus/docs/chart/index.mdx b/docusaurus/docs/chart/index.mdx index d428ca6bc0..4bbdde2e3b 100644 --- a/docusaurus/docs/chart/index.mdx +++ b/docusaurus/docs/chart/index.mdx @@ -1,13 +1,13 @@ --- +title: Installing Codacy Self-hosted description: Install and configure Codacy Self-hosted on Kubernetes or MicroK8s. --- -# Installing Codacy Self-hosted - This documentation guides you on how to install Codacy Self-hosted on Kubernetes or MicroK8s. -!!! important - **If you're running the legacy Codacy Self-hosted solution running on Docker** please contact so that we can assist you with the migration to Codacy Self-hosted running on Kubernetes or MicroK8s. +:::caution + **If you're running the legacy Codacy Self-hosted solution running on Docker** please contact [support@codacy.com](mailto:support@codacy.com) so that we can assist you with the migration to Codacy Self-hosted running on Kubernetes or MicroK8s. +::: To install Codacy you must complete these main steps: @@ -31,12 +31,12 @@ Before you start, you must prepare and provision the database server and Kuberne Carefully review and set up the system requirements to run Codacy by following the instructions on the page below: -- [System requirements](requirements.mdx) +- [System requirements](./requirements.mdx) Optionally, you can follow one of the guides below to quickly create a new Kubernetes or MicroK8s cluster that satisfies the characteristics described in the system requirements: -- [Creating an Amazon EKS cluster](infrastructure/eks-quickstart.mdx) -- [Creating a MicroK8s cluster](infrastructure/microk8s-quickstart.mdx) +- [Creating an Amazon EKS cluster](./infrastructure/eks-quickstart.mdx) +- [Creating a MicroK8s cluster](./infrastructure/microk8s-quickstart.mdx) ## 2. Installing Codacy @@ -46,8 +46,9 @@ Install Codacy on an existing cluster using our Helm chart: - [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) within one minor version difference of your cluster - !!! important - **If you're using MicroK8s** you don't need to install kubectl because you will execute all `kubectl` commands as `microk8s.kubectl` commands instead. To simplify this, [check how to create an alias](infrastructure/microk8s-quickstart.mdx#notes-on-installing-codacy) for `kubectl`. + :::caution + **If you're using MicroK8s** you don't need to install kubectl because you will execute all `kubectl` commands as `microk8s.kubectl` commands instead. To simplify this, [check how to create an alias](./infrastructure/microk8s-quickstart.mdx#notes-on-installing-codacy) for `kubectl`. + ::: - [Helm](https://helm.sh/docs/intro/install/) version >= 3.9 @@ -72,13 +73,15 @@ Install Codacy on an existing cluster using our Helm chart: 5. Create an address record on your DNS provider mapping the hostname you used in the previous step to the IP address of your Ingress controller. - !!! important + :::caution **If you're using MicroK8s** you must map the hostname to the public IP address of the machine running MicroK8s. + ::: -6. Add Codacy's chart repository to your Helm client and install the Codacy chart using the file `values-production.yaml` created previously. {#helm-upgrade} +6. Add Codacy's chart repository to your Helm client and install the Codacy chart using the file `values-production.yaml` created previously. - !!! important + :::caution **If you're using MicroK8s** you must download and use the file [`values-microk8s.yaml`](./values-files/values-microk8s.yaml) together with the file `values-production.yaml` by uncommenting the last line in the `helm upgrade` command below. + ::: ```bash helm repo add codacy-stable https://charts.codacy.com/stable/ @@ -124,16 +127,16 @@ After successfully installing Codacy on your cluster, you're now ready to perfor 3. Follow Codacy's onboarding process, which will guide you through the following steps: - Configuring one or more of the following supported integrations: - - [GitHub Cloud](configuration/integrations/github-cloud.mdx) - - [GitHub Enterprise](configuration/integrations/github-enterprise.mdx) - - [GitLab Cloud](configuration/integrations/gitlab-cloud.mdx) - - [GitLab Enterprise](configuration/integrations/gitlab-enterprise.mdx) - - [Bitbucket Cloud](configuration/integrations/bitbucket-cloud.mdx) - - [Bitbucket Server](configuration/integrations/bitbucket-server.mdx) - - [Email](configuration/integrations/email.mdx) + - [GitHub Cloud](./configuration/integrations/github-cloud.mdx) + - [GitHub Enterprise](./configuration/integrations/github-enterprise.mdx) + - [GitLab Cloud](./configuration/integrations/gitlab-cloud.mdx) + - [GitLab Enterprise](./configuration/integrations/gitlab-enterprise.mdx) + - [Bitbucket Cloud](./configuration/integrations/bitbucket-cloud.mdx) + - [Bitbucket Server](./configuration/integrations/bitbucket-server.mdx) + - [Email](./configuration/integrations/email.mdx) - Creating an initial organization - Inviting users to Codacy -4. As a last step we recommend that you [set up monitoring](configuration/monitoring.mdx) on your Codacy instance. +4. As a last step we recommend that you [set up monitoring](./configuration/monitoring.mdx) on your Codacy instance. -If you run into any issues while configuring Codacy, be sure to [check our troubleshooting guide](troubleshoot/troubleshoot.mdx) for more help. +If you run into any issues while configuring Codacy, be sure to [check our troubleshooting guide](./troubleshoot/troubleshoot.mdx) for more help. diff --git a/docusaurus/docs/chart/infrastructure/eks-quickstart.mdx b/docusaurus/docs/chart/infrastructure/eks-quickstart.mdx index acc8d48070..54824fc88c 100644 --- a/docusaurus/docs/chart/infrastructure/eks-quickstart.mdx +++ b/docusaurus/docs/chart/infrastructure/eks-quickstart.mdx @@ -1,14 +1,14 @@ --- +title: Creating an Amazon EKS cluster descriptions: Set up an Amazon EKS cluster to run Codacy Self-hosted, including the necessary underlying infrastructure, using Terraform. --- -# Creating an Amazon EKS cluster Follow the instructions below to set up an Amazon EKS cluster from scratch, including the necessary underlying infrastructure, using Terraform. The following diagram is a non-exhaustive overview of what you can expect to have deployed in your AWS account by using this quickstart guide. -![Codacy Amazon EKS quickstart](images/codacy-chart-eks-quickstart.jpg){: width="1024"} +![Codacy Amazon EKS quickstart](images/codacy-chart-eks-quickstart.jpg) ## 1. Prepare your environment @@ -136,7 +136,7 @@ Install the NGINX Ingress Controller: 2. Install the NGINX Ingress Controller. - **If you're using Kubernetes version <=1.21**, run: + **If you're using Kubernetes version `<= 1.21`**, run: ```bash kubectl create namespace codacy @@ -154,8 +154,9 @@ Install the NGINX Ingress Controller: ## Uninstalling the Amazon EKS cluster -!!! warning - If you proceed beyond this point you'll permanently delete and break things. +:::warning +If you proceed beyond this point you'll permanently delete and break things. +::: 1. Delete the Kubernetes cluster. diff --git a/docusaurus/docs/chart/infrastructure/microk8s-quickstart.mdx b/docusaurus/docs/chart/infrastructure/microk8s-quickstart.mdx index 7be89e56c6..a51e4f0fb9 100644 --- a/docusaurus/docs/chart/infrastructure/microk8s-quickstart.mdx +++ b/docusaurus/docs/chart/infrastructure/microk8s-quickstart.mdx @@ -1,8 +1,8 @@ --- +title: Creating a MicroK8s cluster descriptions: Set up a MicroK8s instance to run Codacy Self-hosted, including all the necessary dependencies and configurations. --- -# Creating a MicroK8s cluster Follow the instructions below to set up a MicroK8s instance from scratch, including all the necessary dependencies and configurations. @@ -132,7 +132,7 @@ Now that MicroK8s is running on the machine we can proceed to enabling the neces After these steps you have ensured that DNS, HTTP, and NGINX Ingress are enabled and working properly inside the MicroK8s instance. -## Notes on installing Codacy {#notes-on-installing-codacy} +## Notes on installing Codacy \{#notes-on-installing-codacy\} You can now follow the generic [Codacy installation instructions](../index.mdx#2-installing-codacy) but please note the following: diff --git a/docusaurus/docs/chart/maintenance/database.mdx b/docusaurus/docs/chart/maintenance/database.mdx index 73d3c8505e..7e3199f4f2 100644 --- a/docusaurus/docs/chart/maintenance/database.mdx +++ b/docusaurus/docs/chart/maintenance/database.mdx @@ -1,8 +1,8 @@ --- +title: Database migration guide description: Instructions on how to migrate your Codacy Self-hosted database. --- -# Database migration guide Migrating databases between pods is a straightforward process with 3 steps: @@ -54,8 +54,9 @@ PGPASSWORD=$DB_PASSWORD pg_restore -h $DEST_HOSTNAME -p $DEST_HOSTPORT -U $DB_US With the custom format from `pg_dump` (by using `-Fc`) we can now invoke `pg_restore` with multiple parallel jobs. This should make the restoration of the databases quicker, depending on which value you provide for the number of parallel jobs to execute. We provide a value of 8 parallel jobs in the example above (`-j 8`). -!!! note - If you run into any problems while restoring, make sure that you have the database created in that Postgres instance (e.g. before restoring the jobs database the Postgres instance should have an empty database called `jobs` created there). +:::note +If you run into any problems while restoring, make sure that you have the database created in that Postgres instance (e.g. before restoring the jobs database the Postgres instance should have an empty database called `jobs` created there). +::: For more information and additional options, please check the [official documentation](https://www.postgresql.org/docs/12/app-pgrestore.html). diff --git a/docusaurus/docs/chart/maintenance/license.mdx b/docusaurus/docs/chart/maintenance/license.mdx index c5dd756567..786557bdbd 100644 --- a/docusaurus/docs/chart/maintenance/license.mdx +++ b/docusaurus/docs/chart/maintenance/license.mdx @@ -1,9 +1,8 @@ --- +title: Updating your Codacy license description: Some changes to your Codacy plan require that you update your Codacy Self-hosted license with a new one provided by a Codacy representative. --- -# Updating your Codacy license - Some changes to your Codacy plan require that you update your Codacy Self-hosted license with a new one provided by a Codacy representative: 1. Edit the value of `codacy-api.config.license` in the `values-production.yaml` file that you used to install Codacy: diff --git a/docusaurus/docs/chart/maintenance/uninstall.mdx b/docusaurus/docs/chart/maintenance/uninstall.mdx index 78791ca45a..e44b1c0cd5 100644 --- a/docusaurus/docs/chart/maintenance/uninstall.mdx +++ b/docusaurus/docs/chart/maintenance/uninstall.mdx @@ -1,4 +1,6 @@ -# Uninstalling Codacy +--- +title: Uninstalling Codacy +--- To ensure a clean removal you should uninstall Codacy Self-hosted before destroying the cluster. diff --git a/docusaurus/docs/chart/maintenance/upgrade.mdx b/docusaurus/docs/chart/maintenance/upgrade.mdx index 94e1203940..e49e1fac7d 100644 --- a/docusaurus/docs/chart/maintenance/upgrade.mdx +++ b/docusaurus/docs/chart/maintenance/upgrade.mdx @@ -1,8 +1,9 @@ --- +title: Upgrading Codacy description: Instructions on how to upgrade Codacy Self-hosted to the latest stable version. --- -# Upgrading Codacy +import SelfHostedVersion from '../assets/includes/self-hosted-version.mdx' To upgrade Codacy Self-hosted to the latest stable version: @@ -13,9 +14,7 @@ To upgrade Codacy Self-hosted to the latest stable version: **In particular, [Codacy Self-hosted v5.0.0](https://docs.codacy.com/release-notes/self-hosted/self-hosted-v5.0.0/) drops the support for legacy manual organizations**. - {% - include-markdown "../assets/includes/self-hosted-version.txt" - %} + 1. Store all your currently defined configuration values in a file: diff --git a/docusaurus/docs/chart/requirements.mdx b/docusaurus/docs/chart/requirements.mdx index 380e6383fb..6c21b1a6d7 100644 --- a/docusaurus/docs/chart/requirements.mdx +++ b/docusaurus/docs/chart/requirements.mdx @@ -1,9 +1,8 @@ --- +title: System requirements description: Before installing Codacy Self-hosted you must ensure that you have your infrastructure correctly provisioned and configured. --- -# System requirements - Before installing Codacy Self-hosted you must ensure that you have the following infrastructure correctly provisioned and configured: - [Git provider](#git-provider) @@ -12,11 +11,11 @@ Before installing Codacy Self-hosted you must ensure that you have the following The next sections describe in detail how to set up these prerequisites. -## Git provider {#git-provider} +## Git provider \{#git-provider\} -To use Codacy Self-hosted, you must use one or more of our [supported Git providers](../../faq/general/which-version-control-systems-do-you-support/). In particular, if you're using a self-hosted Git provider, make sure that your version is supported by Codacy. +To use Codacy Self-hosted, you must use one or more of our [supported Git providers](../../faq/general/which-version-control-systems-do-you-support). In particular, if you're using a self-hosted Git provider, make sure that your version is supported by Codacy. -## Kubernetes or MicroK8s cluster setup {#kubernetes-or-microk8s-cluster-setup} +## Kubernetes or MicroK8s cluster setup \{#kubernetes-or-microk8s-cluster-setup\} The cluster running Codacy must satisfy the following requirements: @@ -45,7 +44,7 @@ The cluster must be configured to accept and establish connections on the follow The high-level architecture described in the next section is important in understanding how Codacy uses and allocates hardware resources. Below we also provide guidance on [resource provisioning for typical scenarios](#standard-cluster-provisioning). -For a custom hardware resource recommendation, please contact us at . +For a custom hardware resource recommendation, please contact us at [support@codacy.com](support@codacy.com). #### Codacy architecture @@ -54,7 +53,7 @@ You can look at Codacy separately as two groups of components: - The **"Platform"** contains the UI and other components important to treat and show results - The **"Analysis"** is the swarm of workers that run **between one and four** linters simultaneously, depending on factors such as the number of files or the programming languages used in your projects -![High-level Codacy architecture](images/codacy-architecture.svg) +![High-level Codacy architecture](./images/codacy-architecture.svg) Since all components are running on a cluster, you can increase the number of pod replicas in every deployment to give you more resilience and throughput, at a cost of increased resource usage. @@ -65,14 +64,15 @@ The following is a simplified overview of how to calculate resource allocation f | Platform
(1 pod replica per component) | 4 | 8 GB | | Analysis
(1 Analysis Worker pod with **up to** 4 linters) | 5
(per Analysis Worker) | 10 GB
(per Analysis Worker) | -#### Standard cluster provisioning {#standard-cluster-provisioning} +#### Standard cluster provisioning \{#standard-cluster-provisioning\} As described in the section above, Codacy's architecture allows scaling the "Analysis" group of components, meaning that the resources needed for Codacy **depend mainly on the rate of commits** done by your team that Codacy will be analyzing. The resources recommended on the following table are based on our experience and are also the defaults in the [`values-production.yaml`](./values-files/values-production.yaml) file. You might need to adapt these defaults taking into account your use case. In particular, you should set the value of `global.workerManager.workers.config.dedicatedMax` to the maximum number of concurrent analysis depending on the available resources and number of replicas per component. -!!! note - For MicroK8s clusters we added an extra 1.5 vCPU and 1.5 GB memory to the "Platform" to account for the MicroK8s platform itself running on the same machine. +:::note +For MicroK8s clusters we added an extra 1.5 vCPU and 1.5 GB memory to the "Platform" to account for the MicroK8s platform itself running on the same machine. +::: | Installation type | Pod replicas per component | Max. concurrent analysis | Platform resources | Analysis resources | **~ Total resources** | | -------------------------------------------- | -------------------------- | ------------------------ | --------------------------- | ------------------------- | ----------------------------- | @@ -91,10 +91,11 @@ The storage requirements recommended on the following table **depend mainly on t | Minio | Yes | **20 GB** | | PostgreSQL | No (external DB recommended) | **500 GB+** | -!!! note - Please note that due to the way Codacy works, a small number of pods will run in privileged mode with the `CAP_SYS_ADMIN` capability. This is required to allow the Worker pods to serve NFS shares to be mounted by the pods running the static code analysis tools. +:::note +Please note that due to the way Codacy works, a small number of pods will run in privileged mode with the `CAP_SYS_ADMIN` capability. This is required to allow the Worker pods to serve NFS shares to be mounted by the pods running the static code analysis tools. +::: -## PostgreSQL server setup {#postgresql-server-setup} +## PostgreSQL server setup \{#postgresql-server-setup\} Codacy requires a database server to persist data that must satisfy the following requirements: @@ -103,15 +104,16 @@ Codacy requires a database server to persist data that must satisfy the followin - The PostgreSQL server must be configured to accept connections from the cluster - The Codacy databases and a dedicated user must be created using the instructions below -!!! important - Google, the developer of Kubernetes, [doesn't recommend running database servers on your cluster](https://cloud.google.com/blog/products/databases/to-run-or-not-to-run-a-database-on-kubernetes-what-to-consider). As such, consider using a managed solution like Amazon RDS or Google Cloud SQL, or running the PostgreSQL server on a dedicated virtual machine. +:::important +Google, the developer of Kubernetes, [doesn't recommend running database servers on your cluster](https://cloud.google.com/blog/products/databases/to-run-or-not-to-run-a-database-on-kubernetes-what-to-consider). As such, consider using a managed solution like Amazon RDS or Google Cloud SQL, or running the PostgreSQL server on a dedicated virtual machine. - We recommend that you use a managed solution to reduce maintenance and configuration costs of the PostgreSQL server. The main cloud providers all have this service that you can use, for example: +We recommend that you use a managed solution to reduce maintenance and configuration costs of the PostgreSQL server. The main cloud providers all have this service that you can use, for example: - - [Amazon RDS for PostgreSQL](https://aws.amazon.com/rds/postgresql/resources/) or [Amazon Aurora PostgreSQL-Compatible Edition](https://aws.amazon.com/rds/aurora/postgresql-features/) - - [Azure Database for PostgreSQL](https://docs.microsoft.com/en-us/azure/postgresql/) - - [Google Cloud SQL for PostgreSQL](https://cloud.google.com/sql/docs/postgres) - - [Digital Ocean Managed Databases](https://www.digitalocean.com/products/managed-databases-postgresql/) +- [Amazon RDS for PostgreSQL](https://aws.amazon.com/rds/postgresql/resources/) or [Amazon Aurora PostgreSQL-Compatible Edition](https://aws.amazon.com/rds/aurora/postgresql-features/) +- [Azure Database for PostgreSQL](https://docs.microsoft.com/en-us/azure/postgresql/) +- [Google Cloud SQL for PostgreSQL](https://cloud.google.com/sql/docs/postgres) +- [Digital Ocean Managed Databases](https://www.digitalocean.com/products/managed-databases-postgresql/) +::: diff --git a/docusaurus/docs/chart/troubleshoot/k8s-cheatsheet.mdx b/docusaurus/docs/chart/troubleshoot/k8s-cheatsheet.mdx index 800c525d39..9b88fab5e3 100644 --- a/docusaurus/docs/chart/troubleshoot/k8s-cheatsheet.mdx +++ b/docusaurus/docs/chart/troubleshoot/k8s-cheatsheet.mdx @@ -1,14 +1,14 @@ --- +title: Kubernetes cheatsheet description: Useful helm and kubectl commands to help troubleshoot your Codacy Self-hosted instance. --- -# Kubernetes cheatsheet - ## Debugging using events -!!! important - Always check the pods and deployment versions in the namespace - to make sure you aren't debugging an issue in a version that's not the one you would expect +:::caution +Always check the pods and deployment versions in the namespace +to make sure you aren't debugging an issue in a version that's not the one you would expect +::: Events are a great way to understand what's going on under the hood in a Kubernetes cluster. By looking at them you can see if probes are failing, and other important signals from your cluster. diff --git a/docusaurus/docs/chart/troubleshoot/logs-collect.mdx b/docusaurus/docs/chart/troubleshoot/logs-collect.mdx index f9b4a0d5f4..b3971c4920 100644 --- a/docusaurus/docs/chart/troubleshoot/logs-collect.mdx +++ b/docusaurus/docs/chart/troubleshoot/logs-collect.mdx @@ -1,8 +1,8 @@ --- +title: Collecting logs for Support description: To help troubleshoot issues, obtain the logs from your Codacy Self-hosted instance and send them to Codacy's Support. --- -# Collecting logs for Support To help troubleshoot issues, obtain the logs from your Codacy Self-hosted instance and send them to Codacy's Support: @@ -16,11 +16,11 @@ To help troubleshoot issues, obtain the logs from your Codacy Self-hosted instan This will download the logs of the last 7 days as an archive file with the name `codacy_logs_.zip`. !!! tip - You can also download the script [extract-codacy-logs.sh](extract-codacy-logs.sh) to run it manually. + You can also download the script [extract-codacy-logs.sh](./extract-codacy-logs.sh) to run it manually. -2. Send the compressed logs to Codacy's support team at for analysis. +2. Send the compressed logs to Codacy's support team at [support@codacy.com](mailto:support@codacy.com) for analysis. - !!! note + :::note If the file is too big, please upload the file to either a cloud storage service such as [Google Drive](https://www.google.com/drive/) or to a file transfer service such as [WeTransfer](http://www.wetransfer.com/) and send us the link to the file instead. Alternatively, to reduce the size of the compressed archive file, retrieve logs for a smaller number of days by replacing `` with a number between 1 and 7: @@ -29,3 +29,4 @@ To help troubleshoot issues, obtain the logs from your Codacy Self-hosted instan bash <(curl -fsSL https://raw.githubusercontent.com/codacy/chart/master/docs/troubleshoot/extract-codacy-logs.sh) \ -n -d ``` + ::: \ No newline at end of file diff --git a/docusaurus/docs/chart/troubleshoot/troubleshoot.mdx b/docusaurus/docs/chart/troubleshoot/troubleshoot.mdx index 3317f36c07..1053da8232 100644 --- a/docusaurus/docs/chart/troubleshoot/troubleshoot.mdx +++ b/docusaurus/docs/chart/troubleshoot/troubleshoot.mdx @@ -1,24 +1,26 @@ -# Troubleshooting Codacy Self-hosted +--- +title: Troubleshooting Codacy Self-hosted +--- + +import SelfHostedVersion from '../assets/includes/self-hosted-version.mdx' This page includes information to help you troubleshoot issues that you may come across while installing, configuring, and operating Codacy Self-hosted. -If the information provided on this page isn't enough to solve your issue, contact providing: +If the information provided on this page isn't enough to solve your issue, contact [support@codacy.com](mailto:support@codacy.com) providing: - The description of the issue - All the information that you were able to obtain while following these troubleshooting instructions - The [collected logs](logs-collect.mdx) of your Codacy instance - The version of your Codacy instance - {% - include-markdown "../assets/includes/self-hosted-version.txt" - %} + ## Git provider integrations The following sections help you troubleshoot the integration of Codacy with your Git provider. -### GitHub Cloud and GitHub Enterprise authentication {#github} +### GitHub Cloud and GitHub Enterprise authentication \{#github\} #### 404 error @@ -38,7 +40,7 @@ If the error persists: 1. Take note of the parameter `client_id` in the URL of the GitHub error page (for example, `Iv1.0000000000000000`) 2. Check if the value of the parameter matches the value of the Client ID of your GitHub App -### GitLab Cloud and GitLab Enterprise authentication {#gitlab} +### GitLab Cloud and GitLab Enterprise authentication \{#gitlab\} #### Invalid redirect URI @@ -78,7 +80,7 @@ If the error persists: 1. Take note of the parameter `client_id` in the URL of the GitLab error page (for example, `cca35a2a1f9b9b516ac927d82947bd5149b0e57e922c9e5564ac092ea16a3ccd`) 2. Check if the value of the parameter matches the value of the Application ID of your GitLab application -### Bitbucket Cloud authentication {#bitbucket-cloud} +### Bitbucket Cloud authentication \{#bitbucket-cloud\} #### Invalid client_id diff --git a/docusaurus/docusaurus.config.ts b/docusaurus/docusaurus.config.ts index 94d610dac7..3bafd55f08 100644 --- a/docusaurus/docusaurus.config.ts +++ b/docusaurus/docusaurus.config.ts @@ -29,12 +29,12 @@ const config: Config = { organizationName: 'Codacy', // Usually your GitHub org/user name. projectName: 'docs-docusaurus', // Usually your repo name. - onBrokenLinks: 'throw', - onBrokenAnchors: 'throw', - onDuplicateRoutes: 'throw', + onBrokenLinks: 'warn', + onBrokenAnchors: 'warn', + onDuplicateRoutes: 'warn', markdown: { hooks: { - onBrokenMarkdownLinks: 'throw', + onBrokenMarkdownLinks: 'warn', }, }, From d530b34a83df69b536bf1004b93312ea871b4658 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A1udia?= Date: Fri, 2 Jan 2026 15:20:00 +0000 Subject: [PATCH 17/19] fix last url errors --- .../docs/organizations/managing-repositories.mdx | 6 +++--- .../organizations/managing-security-and-risk.mdx | 12 ++++++------ docusaurus/docs/organizations/segments.mdx | 8 ++++---- .../2021/2021-11-02-cloud-legacy-organizations.md | 2 +- .../release-notes/self-hosted/v10.0.0-self-hosted.md | 2 +- .../release-notes/self-hosted/v11.0.0-self-hosted.md | 2 +- .../release-notes/self-hosted/v12.0.0-self-hosted.md | 2 +- .../release-notes/self-hosted/v13.0.0-self-hosted.md | 2 +- .../release-notes/self-hosted/v14.0.0-self-hosted.md | 2 +- .../release-notes/self-hosted/v14.1.1-self-hosted.md | 2 +- .../release-notes/self-hosted/v15.0.0-self-hosted.md | 2 +- .../release-notes/self-hosted/v5.0.0-self-hosted.md | 4 ++-- .../release-notes/self-hosted/v5.1.0-self-hosted.md | 2 +- .../release-notes/self-hosted/v6.0.0-self-hosted.md | 2 +- .../release-notes/self-hosted/v7.0.0-self-hosted.md | 2 +- .../release-notes/self-hosted/v8.0.0-self-hosted.md | 4 ++-- .../release-notes/self-hosted/v8.1.0-self-hosted.md | 2 +- .../release-notes/self-hosted/v9.0.0-self-hosted.md | 2 +- 18 files changed, 30 insertions(+), 30 deletions(-) diff --git a/docusaurus/docs/organizations/managing-repositories.mdx b/docusaurus/docs/organizations/managing-repositories.mdx index 0aed88b51f..5aac7044ca 100644 --- a/docusaurus/docs/organizations/managing-repositories.mdx +++ b/docusaurus/docs/organizations/managing-repositories.mdx @@ -72,8 +72,8 @@ Conversely, you automatically **stop following** a repository as soon as you try ::: ## Finding your repositories with Segments \{#provider-segments\} -Codacy allows you to utilise [**Segments**](../segments.mdx) to categorize and filter repositories more effectively within the Codacy platform. -:::note[Check out how to [enable and configure **Segments**](../segments.mdx#enabling-segments)] +Codacy allows you to utilise [**Segments**](./segments.mdx) to categorize and filter repositories more effectively within the Codacy platform. +:::note[Check out how to [enable and configure **Segments**](./segments.mdx#enabling-segments)] ::: ![Repositories list filter](images/organization-manage-repos-custom-properties.png) @@ -84,5 +84,5 @@ Codacy allows you to utilise [**Segments**](../segments.mdx) to categorize and f ## See also -- [How to setup Segments?](../segments) +- [How to setup Segments?](./segments.mdx) - [Which metrics does Codacy calculate?](../faq/code-analysis/which-metrics-does-codacy-calculate.mdx) diff --git a/docusaurus/docs/organizations/managing-security-and-risk.mdx b/docusaurus/docs/organizations/managing-security-and-risk.mdx index cea03eadf4..361cbc44cf 100644 --- a/docusaurus/docs/organizations/managing-security-and-risk.mdx +++ b/docusaurus/docs/organizations/managing-security-and-risk.mdx @@ -31,8 +31,8 @@ The overview page includes six panels: - [Top 10 high-risk repositories](#top-10-high-risk-repositories) - [Top 10 common security categories](#top-10-common-security-categories) -To limit the information displayed in each panel, use the filter drop-down above the main area, and choose the relevant repositories, or utilise [**Segments**](../segments.mdx). -:::note[Check out how to [enable and configure **Segments**](../segments.mdx#enabling-segments)] +To limit the information displayed in each panel, use the filter drop-down above the main area, and choose the relevant repositories, or utilise [**Segments**](./segments.mdx). +:::note[Check out how to [enable and configure **Segments**](./segments.mdx#enabling-segments)] ::: @@ -97,8 +97,8 @@ To access the findings page, access the [overview page](#dashboard) and click th ![Security and risk management findings page](./images/security-risk-management-findings.png) -On the left section of the page, besides sorting, you can update the filtering criteria by clicking the [**Segments**](../segments) , **Repositories**, **Severities**, **Statuses**, **Security categories**, or **Scan types** dropdowns above the list. -:::note[Check out how to [enable and configure **Segments**](../segments.mdx#enabling-segments)] +On the left section of the page, besides sorting, you can update the filtering criteria by clicking the [**Segments**](./segments.mdx) , **Repositories**, **Severities**, **Statuses**, **Security categories**, or **Scan types** dropdowns above the list. +:::note[Check out how to [enable and configure **Segments**](./segments.mdx#enabling-segments)] ::: On the right section, you can view the filtered list of findings. Each finding card offers a quick overview of the vulnerability found, including its title, [source platform](#opening-and-closing-items), [scan type](#scan-types), [security category](#supported-security-categories), and related information such as the repository name, Jira issue key, or affected URL targets. To find out more, click this overview to navigate to the finding details on the source platform. @@ -110,11 +110,11 @@ The same Common Vulnerability and Exposure can be classified with different seve ## Sharing a filtered view of findings \{#sharing-filtered-view\} To share the current view of the overview or findings page, click the **Copy URL** button in the top right-hand corner of the page. This action copies the URL with the current filters applied to the clipboard. -:::caution[ [**Segments**](../segments.mdx) filter won't be considered when sharing the filtered view] +:::caution[ [**Segments**](./segments.mdx) filter won't be considered when sharing the filtered view] ::: ## Ignoring findings \{#ignoring-findings\} -:::note[This feature is available only to organization admins and organization managers except for findings detected on [Git repositories](#opening-and-closing-items). For those findings, [repository permissions are respected](../repositories/issues.mdx.mdx#ignoring-and-managing-issues)] +:::note[This feature is available only to organization admins and organization managers except for findings detected on [Git repositories](#opening-and-closing-items). For those findings, [repository permissions are respected](../repositories/issues.mdx#ignoring-and-managing-issues)] ::: You can ignore a finding using the context menu both in the findings list page and the findings details page. When ignoring a finding you can optionally specify a reason for doing so. diff --git a/docusaurus/docs/organizations/segments.mdx b/docusaurus/docs/organizations/segments.mdx index 7ae749893c..344636be19 100644 --- a/docusaurus/docs/organizations/segments.mdx +++ b/docusaurus/docs/organizations/segments.mdx @@ -11,13 +11,13 @@ Segments are dimensions that Codacy reads from your provider that organizes repo ## Where can Segments be utilised? -- [Repository list](../managing-repositories.mdx#provider-segments) -- [Security & Management Risk](../managing-security-and-risk.mdx) +- [Repository list](./managing-repositories.mdx#provider-segments) +- [Security & Management Risk](./managing-security-and-risk.mdx) ## Enabling Segments \{#enabling-segments\} To enable Segments, an initial sync between your provider and Codacy needs to happen. Once completed, you can use Segments to better locate and organize repositories within Codacy. -![Segments sync](../organizations/images/Segments-no-sync.png) -![Segments after sync](../organizations/images/segments-after-sync.png) +![Segments sync](./images/Segments-no-sync.png) +![Segments after sync](./images/segments-after-sync.png)

diff --git a/docusaurus/docs/release-notes/cloud/2021/2021-11-02-cloud-legacy-organizations.md b/docusaurus/docs/release-notes/cloud/2021/2021-11-02-cloud-legacy-organizations.md index 2a35cb3a63..6e377d075a 100644 --- a/docusaurus/docs/release-notes/cloud/2021/2021-11-02-cloud-legacy-organizations.md +++ b/docusaurus/docs/release-notes/cloud/2021/2021-11-02-cloud-legacy-organizations.md @@ -32,4 +32,4 @@ Codacy appreciates your continued support through this time of growth and change ## See also -- **On Codacy Self-hosted,** legacy manual organizations stopped being supported on [version 5.0.0](../self-hosted/self-hosted-v5.0.0.mdx) +- **On Codacy Self-hosted,** legacy manual organizations stopped being supported on [version 5.0.0](./../../self-hosted/v5.0.0-self-hosted.md) diff --git a/docusaurus/docs/release-notes/self-hosted/v10.0.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v10.0.0-self-hosted.md index 1130d7e796..57345e7336 100644 --- a/docusaurus/docs/release-notes/self-hosted/v10.0.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v10.0.0-self-hosted.md @@ -17,7 +17,7 @@ These release notes are for [Codacy Self-hosted v10.0.0](https://github.com/coda Follow the steps below to upgrade to Codacy Self-hosted v10.0.0: -1. Check the [release notes for all Codacy Self-hosted versions](../index.mdx#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. +1. Check the [release notes for all Codacy Self-hosted versions](../index.md#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. 1. Follow the instructions to [upgrade your Codacy Self-hosted instance](https://docs.codacy.com/v10.0/chart/maintenance/upgrade/). diff --git a/docusaurus/docs/release-notes/self-hosted/v11.0.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v11.0.0-self-hosted.md index f01bdc5780..9482ef0884 100644 --- a/docusaurus/docs/release-notes/self-hosted/v11.0.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v11.0.0-self-hosted.md @@ -17,7 +17,7 @@ These release notes are for [Codacy Self-hosted v11.0.0](https://github.com/coda Follow the steps below to upgrade to Codacy Self-hosted v11.0.0: -1. Check the [release notes for all Codacy Self-hosted versions](../index.mdx#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. +1. Check the [release notes for all Codacy Self-hosted versions](../index.md#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. 1. Follow the instructions to [upgrade your Codacy Self-hosted instance](https://docs.codacy.com/v11.0/chart/maintenance/upgrade/). diff --git a/docusaurus/docs/release-notes/self-hosted/v12.0.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v12.0.0-self-hosted.md index 094c68ab1a..3309ce9475 100644 --- a/docusaurus/docs/release-notes/self-hosted/v12.0.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v12.0.0-self-hosted.md @@ -17,7 +17,7 @@ These release notes are for [Codacy Self-hosted v12.0.0](https://github.com/coda Follow the steps below to upgrade to Codacy Self-hosted v12.0.0: -1. Check the [release notes for all Codacy Self-hosted versions](../index.mdx#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. +1. Check the [release notes for all Codacy Self-hosted versions](../index.md#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. 1. Follow the instructions to [upgrade your Codacy Self-hosted instance](https://docs.codacy.com/v12.0/chart/maintenance/upgrade/). diff --git a/docusaurus/docs/release-notes/self-hosted/v13.0.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v13.0.0-self-hosted.md index 2dae46d43d..a36501ab47 100644 --- a/docusaurus/docs/release-notes/self-hosted/v13.0.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v13.0.0-self-hosted.md @@ -17,7 +17,7 @@ These release notes are for [Codacy Self-hosted v13.0.0](https://github.com/coda Follow the steps below to upgrade to Codacy Self-hosted v13.0.0: -1. Check the [release notes for all Codacy Self-hosted versions](../index.mdx#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. +1. Check the [release notes for all Codacy Self-hosted versions](../index.md#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. 1. Follow the instructions to [upgrade your Codacy Self-hosted instance](https://docs.codacy.com/v13.0/chart/maintenance/upgrade/). diff --git a/docusaurus/docs/release-notes/self-hosted/v14.0.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v14.0.0-self-hosted.md index 476dd6efdb..39e08c7d20 100644 --- a/docusaurus/docs/release-notes/self-hosted/v14.0.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v14.0.0-self-hosted.md @@ -17,7 +17,7 @@ These release notes are for [Codacy Self-hosted v14.0.0](https://github.com/coda Follow the steps below to upgrade to Codacy Self-hosted v14.0.0: -1. Check the [release notes for all Codacy Self-hosted versions](../index.mdx#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. +1. Check the [release notes for all Codacy Self-hosted versions](../index.md#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. 1. Follow the instructions to [upgrade your Codacy Self-hosted instance](https://docs.codacy.com/v14.0/chart/maintenance/upgrade/). diff --git a/docusaurus/docs/release-notes/self-hosted/v14.1.1-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v14.1.1-self-hosted.md index f488bd383b..09f6a1e68a 100644 --- a/docusaurus/docs/release-notes/self-hosted/v14.1.1-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v14.1.1-self-hosted.md @@ -18,7 +18,7 @@ These release notes are for [Codacy Self-hosted v14.1.1](https://github.com/coda Follow the steps below to upgrade to Codacy Self-hosted v14.1.1: -1. Check the [release notes for all Codacy Self-hosted versions](../index.mdx#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. +1. Check the [release notes for all Codacy Self-hosted versions](../index.md#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. 1. Follow the instructions to [upgrade your Codacy Self-hosted instance](https://docs.codacy.com/v14.1/chart/maintenance/upgrade/). diff --git a/docusaurus/docs/release-notes/self-hosted/v15.0.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v15.0.0-self-hosted.md index 235b48fa4a..21862c5ddb 100644 --- a/docusaurus/docs/release-notes/self-hosted/v15.0.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v15.0.0-self-hosted.md @@ -18,7 +18,7 @@ These release notes are for [Codacy Self-hosted v15.0.0](https://github.com/coda Follow the steps below to upgrade to Codacy Self-hosted v15.0.0: -1. Check the [release notes for all Codacy Self-hosted versions](../index.mdx#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. +1. Check the [release notes for all Codacy Self-hosted versions](../index.md#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. 1. Follow the instructions to [upgrade your Codacy Self-hosted instance](https://docs.codacy.com/v14.1/chart/maintenance/upgrade/). diff --git a/docusaurus/docs/release-notes/self-hosted/v5.0.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v5.0.0-self-hosted.md index 05f4e66130..126238fd1f 100644 --- a/docusaurus/docs/release-notes/self-hosted/v5.0.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v5.0.0-self-hosted.md @@ -17,7 +17,7 @@ These release notes are for [Codacy Self-hosted v5.0.0](https://github.com/codac Follow the steps below to upgrade to Codacy Self-hosted v5.0.0: -1. [Check the release notes](../index.mdx#self-hosted) for all Codacy Self-hosted versions between your current version and the most recent version for breaking changes and follow the instructions provided carefully. +1. [Check the release notes](../index.md#self-hosted) for all Codacy Self-hosted versions between your current version and the most recent version for breaking changes and follow the instructions provided carefully. :::warning **This version drops the support for legacy manual organizations.** Please be sure to [review the breaking changes](#breaking-changes) introduced in this version before upgrading. @@ -132,4 +132,4 @@ This version of Codacy Self-hosted includes the tool versions below. The tools t ## See also -- Announcement for the [end of support for legacy manual organizations on Codacy Cloud](../cloud/2021/2021-11-02-cloud-legacy-organizations.mdx) +- Announcement for the [end of support for legacy manual organizations on Codacy Cloud](../cloud/2021/2021-11-02-cloud-legacy-organizations.md) diff --git a/docusaurus/docs/release-notes/self-hosted/v5.1.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v5.1.0-self-hosted.md index 5f8821ab11..1acac1b425 100644 --- a/docusaurus/docs/release-notes/self-hosted/v5.1.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v5.1.0-self-hosted.md @@ -17,7 +17,7 @@ These release notes are for [Codacy Self-hosted v5.1.0](https://github.com/codac Follow the steps below to upgrade to Codacy Self-hosted v5.1.0: -1. [Check the release notes](../index.mdx#self-hosted) for all Codacy Self-hosted versions between your current version and the most recent version for breaking changes and follow the instructions provided carefully. +1. [Check the release notes](../index.md#self-hosted) for all Codacy Self-hosted versions between your current version and the most recent version for breaking changes and follow the instructions provided carefully. :::warning **Codacy Self-hosted v5.0.0 dropped the support for legacy manual organizations.** Please be sure to [review the breaking changes](/release-notes/self-hosted/self-hosted-v5.0.0#breaking-changes) introduced in that version before upgrading. diff --git a/docusaurus/docs/release-notes/self-hosted/v6.0.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v6.0.0-self-hosted.md index dcf5bad425..0191e5973a 100644 --- a/docusaurus/docs/release-notes/self-hosted/v6.0.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v6.0.0-self-hosted.md @@ -17,7 +17,7 @@ These release notes are for [Codacy Self-hosted v6.0.0](https://github.com/codac Follow the steps below to upgrade to Codacy Self-hosted v6.0.0: -1. Check the [release notes for all Codacy Self-hosted versions](../index.mdx#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. +1. Check the [release notes for all Codacy Self-hosted versions](../index.md#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. 1. Follow the instructions to [upgrade your Codacy Self-hosted instance](https://docs.codacy.com/v6.0/chart/maintenance/upgrade/). diff --git a/docusaurus/docs/release-notes/self-hosted/v7.0.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v7.0.0-self-hosted.md index 027f8d87c3..e35d74c0ef 100644 --- a/docusaurus/docs/release-notes/self-hosted/v7.0.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v7.0.0-self-hosted.md @@ -17,7 +17,7 @@ These release notes are for [Codacy Self-hosted v7.0.0](https://github.com/codac Follow the steps below to upgrade to Codacy Self-hosted v7.0.0: -1. Check the [release notes for all Codacy Self-hosted versions](../index.mdx#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. +1. Check the [release notes for all Codacy Self-hosted versions](../index.md#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. 1. Follow the instructions to [upgrade your Codacy Self-hosted instance](https://docs.codacy.com/v7.0/chart/maintenance/upgrade/). diff --git a/docusaurus/docs/release-notes/self-hosted/v8.0.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v8.0.0-self-hosted.md index 8167808f20..cc1b37e7a7 100644 --- a/docusaurus/docs/release-notes/self-hosted/v8.0.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v8.0.0-self-hosted.md @@ -17,7 +17,7 @@ These release notes are for [Codacy Self-hosted v8.0.0](https://github.com/codac Follow the steps below to upgrade to Codacy Self-hosted v8.0.0: -1. Check the [release notes for all Codacy Self-hosted versions](../index.mdx#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. +1. Check the [release notes for all Codacy Self-hosted versions](../index.md#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. 1. Follow the instructions to [upgrade your Codacy Self-hosted instance](https://docs.codacy.com/v8.0/chart/maintenance/upgrade/). @@ -32,7 +32,7 @@ ESLint 8 will be **enabled by default on new repositories** starting on this ver The previous Codacy Self-hosted version [already included ESLint 8 as a new supported tool and deprecated ESLint 7](/release-notes/self-hosted/self-hosted-v7.0.0#product-enhancements), and Codacy recommends that you migrate to the new version of the tool to benefit from the new features and fixes of ESLint. -See [how to migrate your configuration files to use ESLint 8](../cloud/2022/2022-03-31-cloud-adding-eslint8.mdx#migrating-your-configuration-files-to-use-eslint-8). (CY-5848) +See [how to migrate your configuration files to use ESLint 8](../cloud/2022/2022-03-31-cloud-adding-eslint8.md#migrating-your-configuration-files-to-use-eslint-8). (CY-5848) ## Product enhancements diff --git a/docusaurus/docs/release-notes/self-hosted/v8.1.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v8.1.0-self-hosted.md index 27e6753fbf..673946585a 100644 --- a/docusaurus/docs/release-notes/self-hosted/v8.1.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v8.1.0-self-hosted.md @@ -17,7 +17,7 @@ These release notes are for [Codacy Self-hosted v8.1.0](https://github.com/codac Follow the steps below to upgrade to Codacy Self-hosted v8.1.0: -1. Check the [release notes for all Codacy Self-hosted versions](../index.mdx#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. +1. Check the [release notes for all Codacy Self-hosted versions](../index.md#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. 1. Follow the instructions to [upgrade your Codacy Self-hosted instance](https://docs.codacy.com/v8.1/chart/maintenance/upgrade/). diff --git a/docusaurus/docs/release-notes/self-hosted/v9.0.0-self-hosted.md b/docusaurus/docs/release-notes/self-hosted/v9.0.0-self-hosted.md index 25983a4199..a5246986a0 100644 --- a/docusaurus/docs/release-notes/self-hosted/v9.0.0-self-hosted.md +++ b/docusaurus/docs/release-notes/self-hosted/v9.0.0-self-hosted.md @@ -17,7 +17,7 @@ These release notes are for [Codacy Self-hosted v9.0.0](https://github.com/codac Follow the steps below to upgrade to Codacy Self-hosted v9.0.0: -1. Check the [release notes for all Codacy Self-hosted versions](../index.mdx#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. +1. Check the [release notes for all Codacy Self-hosted versions](../index.md#self-hosted) **between your current version and the most recent version** for breaking changes and follow the instructions provided carefully. 1. Follow the instructions to [upgrade your Codacy Self-hosted instance](https://docs.codacy.com/v9.0/chart/maintenance/upgrade/). From be495c5108271b4e81956ab8e8d103efb3824ba8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A1udia?= Date: Fri, 2 Jan 2026 15:37:19 +0000 Subject: [PATCH 18/19] fix urls with id attributes --- .../docs/_includes/AdminAccessControlInfo.mdx | 2 +- .../ApiExamplePaginationImportant.mdx | 2 +- .../_includes/ServiceAccountIntegration.mdx | 2 +- .../docs/account/managing-your-profile.mdx | 2 +- docusaurus/docs/codacy-ai/codacy-ai.mdx | 6 +++--- ...ding-people-to-codacy-programmatically.mdx | 6 +++--- ...epositories-to-codacy-programmatically.mdx | 4 ++-- ...repository-api-tokens-programmatically.mdx | 4 ++-- ...ntifying-commits-without-coverage-data.mdx | 2 +- ...taining-code-quality-metrics-for-files.mdx | 2 +- ...taining-current-issues-in-repositories.mdx | 2 +- .../examples/triggering-dast-scans.mdx | 8 ++++---- .../examples/uploading-dast-results.mdx | 6 +++--- ...dacy-guardrails-how-to-configure-rules.mdx | 4 ++-- docusaurus/docs/coverage-reporter/index.mdx | 6 +++--- .../troubleshooting-coverage-cli-issues.mdx | 2 +- .../can-i-bypass-codacy-status-check.mdx | 4 ++-- .../which-metrics-does-codacy-calculate.mdx | 12 +++++------ .../how-can-i-change-or-cancel-my-plan.mdx | 2 +- ...ow-does-codacy-support-bitbucket-cloud.mdx | 2 +- ...w-does-codacy-support-bitbucket-server.mdx | 4 ++-- .../how-does-codacy-support-gitlab-cloud.mdx | 4 ++-- ...-does-codacy-support-gitlab-enterprise.mdx | 4 ++-- .../how-do-i-reanalyze-my-repository.mdx | 4 ++-- .../not-a-member-of-the-organization.mdx | 6 +++--- .../why-cant-i-see-my-organization.mdx | 2 +- ...odacy-stop-commenting-on-pull-requests.mdx | 4 ++-- .../why-is-my-file-over-150-kb-missing.mdx | 2 +- .../getting-started/adding-a-codacy-badge.mdx | 2 +- .../integrating-codacy-with-intellij-ides.mdx | 10 +++++----- ...grating-codacy-with-visual-studio-code.mdx | 14 ++++++------- ...egrating-codacy-with-your-git-workflow.mdx | 2 +- .../supported-languages-and-tools.mdx | 6 +++--- .../release-notes/cloud/2023/2023-12-cloud.md | 4 ++-- .../release-notes/cloud/2024/2024-06-cloud.md | 2 +- .../adjusting-quality-gates.mdx | 6 +++--- .../adjusting-quality-goals.mdx | 2 +- .../codacy-configuration-file.mdx | 20 +++++++++---------- .../configuring-code-patterns.mdx | 12 +++++------ .../repositories-configure/ignoring-files.mdx | 8 ++++---- .../integrations/bitbucket-integration.mdx | 4 ++-- .../integrations/github-integration.mdx | 2 +- .../integrations/gitlab-integration.mdx | 4 ++-- docusaurus/docs/repositories/commits.mdx | 8 ++++---- docusaurus/docs/repositories/coverage.mdx | 2 +- docusaurus/docs/repositories/files.mdx | 4 ++-- docusaurus/docs/repositories/issues.mdx | 4 ++-- 47 files changed, 113 insertions(+), 113 deletions(-) diff --git a/docusaurus/docs/_includes/AdminAccessControlInfo.mdx b/docusaurus/docs/_includes/AdminAccessControlInfo.mdx index 7d9034565c..86778ac9f9 100644 --- a/docusaurus/docs/_includes/AdminAccessControlInfo.mdx +++ b/docusaurus/docs/_includes/AdminAccessControlInfo.mdx @@ -1,3 +1,3 @@ :::note -Organization admins can [manage access to this feature](/organizations/roles-and-permissions-for-organizations#change-analysis-configuration) +Organization admins can [manage access to this feature](/organizations/roles-and-permissions-for-organizations.mdx#change-analysis-configuration) ::: \ No newline at end of file diff --git a/docusaurus/docs/_includes/ApiExamplePaginationImportant.mdx b/docusaurus/docs/_includes/ApiExamplePaginationImportant.mdx index 71abd02404..8d61d31731 100644 --- a/docusaurus/docs/_includes/ApiExamplePaginationImportant.mdx +++ b/docusaurus/docs/_includes/ApiExamplePaginationImportant.mdx @@ -1,3 +1,3 @@ :::caution -[Learn how to use pagination](/codacy-api/using-the-codacy-api#using-pagination) to ensure that you process all results returned by the API. +[Learn how to use pagination](/codacy-api/using-the-codacy-api.mdx#using-pagination) to ensure that you process all results returned by the API. ::: \ No newline at end of file diff --git a/docusaurus/docs/_includes/ServiceAccountIntegration.mdx b/docusaurus/docs/_includes/ServiceAccountIntegration.mdx index 3d2a99ac5c..8a5333f571 100644 --- a/docusaurus/docs/_includes/ServiceAccountIntegration.mdx +++ b/docusaurus/docs/_includes/ServiceAccountIntegration.mdx @@ -6,5 +6,5 @@ which may happen when a user leaves the team or the organization. For more information and instructions on how to set up a dedicated service account see -[Why did Codacy stop commenting on pull requests?](/faq/troubleshooting/why-did-codacy-stop-commenting-on-pull-requests#outdated-permissions) +[Why did Codacy stop commenting on pull requests?](/faq/troubleshooting/why-did-codacy-stop-commenting-on-pull-requests.mdx#outdated-permissions) ::: diff --git a/docusaurus/docs/account/managing-your-profile.mdx b/docusaurus/docs/account/managing-your-profile.mdx index 7baf8d17c6..b416fa7640 100644 --- a/docusaurus/docs/account/managing-your-profile.mdx +++ b/docusaurus/docs/account/managing-your-profile.mdx @@ -27,4 +27,4 @@ This operation doesn't make any changes on your Git provider. To delete your account, click the button **Delete account** and confirm that you really want to proceed. :::note -If you're the last organization admin of any of your organizations, you must either add someone else as an owner or [delete those organizations](../organizations/what-are-organizations#deleting-an-organization) before you can delete your account. +If you're the last organization admin of any of your organizations, you must either add someone else as an owner or [delete those organizations](../organizations/what-are-organizations.mdx#deleting-an-organization) before you can delete your account. diff --git a/docusaurus/docs/codacy-ai/codacy-ai.mdx b/docusaurus/docs/codacy-ai/codacy-ai.mdx index dceb6fb449..69b940ea50 100644 --- a/docusaurus/docs/codacy-ai/codacy-ai.mdx +++ b/docusaurus/docs/codacy-ai/codacy-ai.mdx @@ -18,7 +18,7 @@ _This feature leverages OpenAI models, and is strictly opt-in: it will only run AI-enhanced comments are optional, machine-generated suggestions that appear directly in pull requests and review threads. They use Codacy's AI to provide concise issue summaries, remediation suggestions, and links to relevant documentation — helping reviewers and authors quickly understand and fix problems. -More details about [AI-enhanced comments here →](../repositories-configure/integrations/github-integration#ai-enhanced-comments). +More details about [AI-enhanced comments here →](../repositories-configure/integrations/github-integration.mdx#ai-enhanced-comments). **How to turn it on** @@ -47,7 +47,7 @@ _This feature leverages OpenAI models, and is strictly opt-in: you need to get i Codacy False Positive triage analyzes results on a commit basis to give you visibility into issues that may be false positives (based on their context). During triage, each issue is given a confidence score along with an explanation. When the confidence level falls below a defined threshold, the issue is then flagged as an AI false positive and surfaced for manual review. You can evaluate potential false positives during a pull request in app or on any Codacy page where issues appear. These issues can be ignored or marked as Not a false positive. -More details about [False Positives here →](../repositories/commits#false-positive-issues). +More details about [False Positives here →](../repositories/commits.mdx#false-positive-issues). **How to turn it on** @@ -71,7 +71,7 @@ _This feature leverages Google Gemini models, and is strictly opt-in: it will on The AI Reviewer combines the reliability of deterministic, rule-based static code analysis with the power of AI. It draws in the necessary context from source code and PR metadata to ensure the business intent matches the technical outcome, and can catch logic gaps that conventional scanners (and human reviewers) often miss. -More details about [AI Reviewer here →](../repositories-configure/integrations/github-integration#ai-reviewer). +More details about [AI Reviewer here →](../repositories-configure/integrations/github-integration.mdx#ai-reviewer). **How to turn it on** diff --git a/docusaurus/docs/codacy-api/examples/adding-people-to-codacy-programmatically.mdx b/docusaurus/docs/codacy-api/examples/adding-people-to-codacy-programmatically.mdx index b7a04f9707..4805e11dc8 100644 --- a/docusaurus/docs/codacy-api/examples/adding-people-to-codacy-programmatically.mdx +++ b/docusaurus/docs/codacy-api/examples/adding-people-to-codacy-programmatically.mdx @@ -16,7 +16,7 @@ curl -X POST https://app.codacy.com/api/v3/organizations///`. 1. For each repository, calls the endpoint [addRepository](https://app.codacy.com/api/api-docs#addrepository) to add a new repository specifying `gh` as the Git provider and the value of `full_name` as the full path of the repository. diff --git a/docusaurus/docs/codacy-api/examples/creating-repository-api-tokens-programmatically.mdx b/docusaurus/docs/codacy-api/examples/creating-repository-api-tokens-programmatically.mdx index 8bdeb50886..ac8dd62582 100644 --- a/docusaurus/docs/codacy-api/examples/creating-repository-api-tokens-programmatically.mdx +++ b/docusaurus/docs/codacy-api/examples/creating-repository-api-tokens-programmatically.mdx @@ -15,7 +15,7 @@ This example creates a new repository API token for a repository and outputs the The example script: -1. Defines the [account API token](../api-tokens#account-api-tokens) used to authenticate on the Codacy API, the Git provider, the organization name, and the repository name passed as an argument to the script. +1. Defines the [account API token](../api-tokens.mdx#account-api-tokens) used to authenticate on the Codacy API, the Git provider, the organization name, and the repository name passed as an argument to the script. 1. Calls the endpoint [createRepositoryApiToken](https://app.codacy.com/api/api-docs#createrepositoryapitoken) to create a new repository API token and uses [jq](https://github.com/stedolan/jq) to obtain only the created token string. ```bash @@ -95,7 +95,7 @@ This example lists all repository API tokens created for a repository. The example script: -1. Defines the [account API token](../api-tokens#account-api-tokens) used to authenticate on the Codacy API, the Git provider, the organization name, and the repository name passed as an argument to the script. +1. Defines the [account API token](../api-tokens.mdx#account-api-tokens) used to authenticate on the Codacy API, the Git provider, the organization name, and the repository name passed as an argument to the script. 1. Calls the endpoint [listRepositoryApiTokens](https://api.codacy.com/api/api-docs#listrepositoryapitokens) to list the repository API tokens available on the repository and uses [jq](https://github.com/stedolan/jq) to obtain only the token strings, or exit with a non-zero status if the repository doesn't have any repository API tokens created yet. ```bash diff --git a/docusaurus/docs/codacy-api/examples/identifying-commits-without-coverage-data.mdx b/docusaurus/docs/codacy-api/examples/identifying-commits-without-coverage-data.mdx index d2826b241d..ac25bc1143 100644 --- a/docusaurus/docs/codacy-api/examples/identifying-commits-without-coverage-data.mdx +++ b/docusaurus/docs/codacy-api/examples/identifying-commits-without-coverage-data.mdx @@ -24,7 +24,7 @@ This example checks whether the open pull requests in a repository have received The example script: -1. Defines the [account API token](../api-tokens#account-api-tokens) used to authenticate on the Codacy API, the Git provider, the organization name, and the repository name passed as an argument to the script. +1. Defines the [account API token](../api-tokens.mdx#account-api-tokens) used to authenticate on the Codacy API, the Git provider, the organization name, and the repository name passed as an argument to the script. 1. Calls the Codacy API endpoint [listRepositoryPullRequests](https://api.codacy.com/api/api-docs#listrepositorypullrequests) to retrieve the list of open pull requests on the repository. 1. Uses [jq](https://github.com/stedolan/jq) to select only the numbers that identify the pull requests on the Git provider. 1. For each pull request, outputs the pull request number and calls the Codacy API endpoint [getPullRequestCoverageReports](https://api.codacy.com/api/api-docs#getpullrequestcoveragereports) to obtain the information about the coverage data received for the head and common ancestor commits of the pull request. diff --git a/docusaurus/docs/codacy-api/examples/obtaining-code-quality-metrics-for-files.mdx b/docusaurus/docs/codacy-api/examples/obtaining-code-quality-metrics-for-files.mdx index 4a5cf02b56..0215403aeb 100644 --- a/docusaurus/docs/codacy-api/examples/obtaining-code-quality-metrics-for-files.mdx +++ b/docusaurus/docs/codacy-api/examples/obtaining-code-quality-metrics-for-files.mdx @@ -16,7 +16,7 @@ This example exports the grade, total issues, complexity, coverage, and duplicat The example script: -1. Defines the [account API token](../api-tokens#account-api-tokens) used to authenticate on the Codacy API. +1. Defines the [account API token](../api-tokens.mdx#account-api-tokens) used to authenticate on the Codacy API. 1. Calls the endpoint [listFiles](https://app.codacy.com/api/api-docs#listfiles) to retrieve the code quality metrics, filtering the results by files that include `src/router/` in the path. 1. Uses [jq](https://github.com/stedolan/jq) to select only the necessary data fields and convert the results to the CSV format. diff --git a/docusaurus/docs/codacy-api/examples/obtaining-current-issues-in-repositories.mdx b/docusaurus/docs/codacy-api/examples/obtaining-current-issues-in-repositories.mdx index d23e0043ea..da17922eb8 100644 --- a/docusaurus/docs/codacy-api/examples/obtaining-current-issues-in-repositories.mdx +++ b/docusaurus/docs/codacy-api/examples/obtaining-current-issues-in-repositories.mdx @@ -15,7 +15,7 @@ This example exports the pattern ID, issue level, file path, and timestamp for a The example script: -1. Defines the [account API token](../api-tokens#account-api-tokens) used to authenticate on the Codacy API. +1. Defines the [account API token](../api-tokens.mdx#account-api-tokens) used to authenticate on the Codacy API. 1. Calls the endpoint [searchRepositoryIssues](https://app.codacy.com/api/api-docs#searchrepositoryissues) to retrieve information about the issues, filtering the results by security issues with the relevant severity levels. 1. Uses [jq](https://github.com/stedolan/jq) to select only the necessary data fields and convert the results to the CSV format. diff --git a/docusaurus/docs/codacy-api/examples/triggering-dast-scans.mdx b/docusaurus/docs/codacy-api/examples/triggering-dast-scans.mdx index 26d2c9999e..a5e2cf055a 100644 --- a/docusaurus/docs/codacy-api/examples/triggering-dast-scans.mdx +++ b/docusaurus/docs/codacy-api/examples/triggering-dast-scans.mdx @@ -52,7 +52,7 @@ Replace the placeholders with your own values: | Field | Required | Description | |-------|----------|-------------| -| **API_KEY** | true | [Account API token](../api-tokens#account-api-tokens) used to authenticate on the Codacy API | +| **API_KEY** | true | [Account API token](../api-tokens.mdx#account-api-tokens) used to authenticate on the Codacy API | | **GIT_PROVIDER** | true | Git provider hosting of the organization, using one of the values in the table below.
**Options:** `gh` (GitHub Cloud), `ghe`(GitHub Enterprise), `gl` (Gitlab Cloud), `gle` (Gitlab Enterprise), `bb` (Bitbucket Cloud), `bbe` (Bitbucket Server) | | **ORGANIZATION** | true | Name of the organization on the Git provider. You must have admin permissions over the organization on the Git provider.
For example, `codacy` | | **TARGET_URL** | true | URL of the Web app or API that will be scanned.
Must start with `http://` or `https://`
For example, `https://api.codacy.com/v1`| @@ -79,12 +79,12 @@ curl -X POST https://app.codacy.com/api/v3/organizations/{GIT_PROVIDER}/{ORGANIZ Replace the placeholders with your own values: -- **API_KEY:** [Account API token](../api-tokens#account-api-tokens) used to authenticate on the Codacy API. +- **API_KEY:** [Account API token](../api-tokens.mdx#account-api-tokens) used to authenticate on the Codacy API. - **GIT_PROVIDER:** Git provider hosting of the organization (check the table on the example above). For example, `gh` for GitHub Cloud. - **ORGANIZATION:** Name of the organization on the Git provider. For example, `codacy`. You must have admin permissions over the organization on the Git provider. -- **DAST_TARGET_ID:** Identifier of a DAST target to analyze (obtained in the [previous section](./triggering-dast-scans#creating-targets). For example, `457`. You must have admin permissions over the organization on the Git provider. +- **DAST_TARGET_ID:** Identifier of a DAST target to analyze (obtained in the [previous section](./triggering-dast-scans.mdx#creating-targets). For example, `457`. You must have admin permissions over the organization on the Git provider. -Scans occur asynchronously. To monitor an ongoing scan you can use the [target management page in Codacy](../../organizations/managing-security-and-risk#app-scanning). Once completed, you can access all scan results by navigating to the **Security dashboard**, selecting the **Findings tab** and filtering by **Scan types > DAST/App scanning**, or by clicking on a configured target to expand all of that target's results. +Scans occur asynchronously. To monitor an ongoing scan you can use the [target management page in Codacy](../../organizations/managing-security-and-risk.mdx#app-scanning). Once completed, you can access all scan results by navigating to the **Security dashboard**, selecting the **Findings tab** and filtering by **Scan types > DAST/App scanning**, or by clicking on a configured target to expand all of that target's results. Additionaly, you can use the `SearchSRMItems` endpoint to filter findings by their DAST target URL with the following request: ```bash curl -X POST https://app.codacy.com/api/v3/organizations/gh/codacy/security/items/search \ diff --git a/docusaurus/docs/codacy-api/examples/uploading-dast-results.mdx b/docusaurus/docs/codacy-api/examples/uploading-dast-results.mdx index 7fd0a11480..fcb22d7d2d 100644 --- a/docusaurus/docs/codacy-api/examples/uploading-dast-results.mdx +++ b/docusaurus/docs/codacy-api/examples/uploading-dast-results.mdx @@ -28,7 +28,7 @@ To ensure the security of your web applications, Codacy allows you to upload DAS Replace the placeholders with your own values: -- **API_KEY:** [Account API token](../api-tokens#account-api-tokens) used to authenticate on the Codacy API. +- **API_KEY:** [Account API token](../api-tokens.mdx#account-api-tokens) used to authenticate on the Codacy API. - **GIT_PROVIDER:** Git provider hosting of the organization, using one of the values in the table below. For example, `gh` for GitHub Cloud. | Value | Git provider | @@ -62,7 +62,7 @@ curl -X GET https://api.codacy.com/api/v3/organizations//uploadDASTReport](https://app.codacy.com/api/api-docs#uploaddastreport) to upload the report to Codacy. diff --git a/docusaurus/docs/codacy-guardrails/codacy-guardrails-how-to-configure-rules.mdx b/docusaurus/docs/codacy-guardrails/codacy-guardrails-how-to-configure-rules.mdx index f82758176a..14e0ec69f5 100644 --- a/docusaurus/docs/codacy-guardrails/codacy-guardrails-how-to-configure-rules.mdx +++ b/docusaurus/docs/codacy-guardrails/codacy-guardrails-how-to-configure-rules.mdx @@ -74,7 +74,7 @@ To use a configuration file for a static analysis tool: :::note - After activating a configuration file for a tool, Codacy uses that configuration file even if you [exclude it from Codacy analysis](../repositories-configure/ignoring-files). -- When [using a tool configuration file alongside a coding standard](../organizations/using-coding-standards#using-with-tool-configuration), the configuration file controls the code patterns, while the coding standard controls whether the tool is enabled or disabled. +- When [using a tool configuration file alongside a coding standard](../organizations/using-coding-standards.mdx#using-with-tool-configuration), the configuration file controls the code patterns, while the coding standard controls whether the tool is enabled or disabled. - Codacy uses the version of the configuration file **in the branch being analyzed**. For example, if you open a pull request that includes changes to the configuration file, the analysis results take those changes into account. - If Codacy analyzes a branch that doesn't include the configuration file, Codacy reverts to using the code patterns configured for the tool before you selected the option **Configuration file** on the Code patterns page. - For performance reasons, when you update pattern settings using a configuration file, Codacy may display outdated messages for issues identified previously by those patterns. @@ -107,7 +107,7 @@ In order to set up your rules, please follow the next steps: ![Toggling tools](images/code-patterns-toggle-tools.png) -3. Select a tool to enable or disable its code patterns. To make it easier to find relevant patterns, use the filters above the pattern list. You can filter by [issue category](../faq/code-analysis/which-metrics-does-codacy-calculate#issues), status, severity level, or display only recommended code patterns. +3. Select a tool to enable or disable its code patterns. To make it easier to find relevant patterns, use the filters above the pattern list. You can filter by [issue category](../faq/code-analysis/which-metrics-does-codacy-calculate.mdx#issues), status, severity level, or display only recommended code patterns. To see an explanation of the issues that a pattern detects and how to fix them, click the respective dropdown arrow. diff --git a/docusaurus/docs/coverage-reporter/index.mdx b/docusaurus/docs/coverage-reporter/index.mdx index 1a99d297e1..15530a5b87 100644 --- a/docusaurus/docs/coverage-reporter/index.mdx +++ b/docusaurus/docs/coverage-reporter/index.mdx @@ -151,18 +151,18 @@ Please note that Codacy needs to receive coverage data for: :::note[Alternative ways of running the Codacy Coverage Reporter] Codacy makes available [alternative ways to run the Codacy Coverage Reporter](./alternative-ways-of-running-coverage-reporter), such as by installing the binary manually or by using Docker, a GitHub Action, or a CircleCI Orb. -However, the instructions on this page assume that you'll run the recommended [self-contained bash script `get.sh`](./alternative-ways-of-running-coverage-reporter#bash-script) to automatically download and run the most recent version of the Codacy Coverage Reporter. +However, the instructions on this page assume that you'll run the recommended [self-contained bash script `get.sh`](./alternative-ways-of-running-coverage-reporter.mdx#bash-script) to automatically download and run the most recent version of the Codacy Coverage Reporter. ::: 1. Set up an API token to allow Codacy Coverage Reporter to authenticate on Codacy: - - **If you're setting up coverage for one repository**, [obtain a repository API token](../codacy-api/api-tokens#repository-api-tokens) and set the following environment variable to specify your repository API token: + - **If you're setting up coverage for one repository**, [obtain a repository API token](../codacy-api/api-tokens.mdx#repository-api-tokens) and set the following environment variable to specify your repository API token: ```bash export CODACY_PROJECT_TOKEN= ``` - - **If you're setting up and automating coverage for multiple repositories**, [obtain an account API Token](../codacy-api/api-tokens#account-api-tokens) and set the following environment variables: + - **If you're setting up and automating coverage for multiple repositories**, [obtain an account API Token](../codacy-api/api-tokens.mdx#account-api-tokens) and set the following environment variables: - **CODACY_API_TOKEN:** Your account API token. diff --git a/docusaurus/docs/coverage-reporter/troubleshooting-coverage-cli-issues.mdx b/docusaurus/docs/coverage-reporter/troubleshooting-coverage-cli-issues.mdx index 585914f7a9..7912981b20 100644 --- a/docusaurus/docs/coverage-reporter/troubleshooting-coverage-cli-issues.mdx +++ b/docusaurus/docs/coverage-reporter/troubleshooting-coverage-cli-issues.mdx @@ -99,7 +99,7 @@ If you get a `com.fasterxml.jackson.core.JsonParseException` error while uploadi There are some ways you can solve this: -- Split your coverage reports into smaller files and [upload them to Codacy one at a time](./uploading-coverage-in-advanced-scenarios#multiple-reports). +- Split your coverage reports into smaller files and [upload them to Codacy one at a time](./uploading-coverage-in-advanced-scenarios.mdx#multiple-reports). - **If you're using dotCover to generate coverage reports for your C# projects**, you should [exclude xUnit files](https://www.jetbrains.com/help/dotcover/Running_Coverage_Analysis_from_the_Command_LIne.html#filters_cmd) from the coverage analysis as follows: diff --git a/docusaurus/docs/faq/code-analysis/can-i-bypass-codacy-status-check.mdx b/docusaurus/docs/faq/code-analysis/can-i-bypass-codacy-status-check.mdx index 04d9e5f6fe..01057c939f 100644 --- a/docusaurus/docs/faq/code-analysis/can-i-bypass-codacy-status-check.mdx +++ b/docusaurus/docs/faq/code-analysis/can-i-bypass-codacy-status-check.mdx @@ -6,10 +6,10 @@ title: Can I bypass Codacy status check? **This will only apply to gates enforcing quality checks.** If coverage is blocking a pull request analysis, we recommend contacting your git provider admin or temporarily disabling the coverage gate on the repo and reanalyzing the pull request before enabling them again. ::: -To protect your code from unwelcome changes, you can [configure your Git workflow to block merging pull requests](../../getting-started/integrating-codacy-with-your-git-workflow#blocking-pull-requests) if they don't pass the Codacy status check. +To protect your code from unwelcome changes, you can [configure your Git workflow to block merging pull requests](../../getting-started/integrating-codacy-with-your-git-workflow.mdx#blocking-pull-requests) if they don't pass the Codacy status check. However, on **very specific and exceptional situations** where your pull request merging is blocked due to an unexpected issue not related to the quality of your code, Codacy allows **repository admins** to bypass the Codacy status check for that pull request. -To bypass Codacy status check for a pull request, a repository admin must click **Bypass status checks** on the [pull request status area](../../repositories/pull-requests#status) of the pull request detail screen. +To bypass Codacy status check for a pull request, a repository admin must click **Bypass status checks** on the [pull request status area](../../repositories/pull-requests.mdx#status) of the pull request detail screen. ![Bypass status check for pull request](./images/bypass-status-check.png) diff --git a/docusaurus/docs/faq/code-analysis/which-metrics-does-codacy-calculate.mdx b/docusaurus/docs/faq/code-analysis/which-metrics-does-codacy-calculate.mdx index 50e1801b84..c520f3ff54 100644 --- a/docusaurus/docs/faq/code-analysis/which-metrics-does-codacy-calculate.mdx +++ b/docusaurus/docs/faq/code-analysis/which-metrics-does-codacy-calculate.mdx @@ -34,7 +34,7 @@ Codacy displays grades on the following places: |-----|------| |[Files page](../../repositories/files)|Grade for each file in your repository| |[Repository Dashboard](../../repositories/repository-dashboard)
[Codacy badge](../../getting-started/adding-a-codacy-badge)|Grade of each analyzed branch in your repository| -|[Email notifications](../../account/emails#managing-your-email-notifications)|Grade of your repository| +|[Email notifications](../../account/emails.mdx#managing-your-email-notifications)|Grade of your repository| |[Organization overview](../../organizations/organization-overview)|Average grade of the repositories in your organization and grade of each repository| |[Repositories list](../../organizations/managing-repositories)|Grade of each repository in your organization| @@ -61,7 +61,7 @@ Codacy displays issues on the following places: |Place|Metric| |-----|------| -|[Commit detail page](../../repositories/commits)
[Pull request detail page](../../repositories/pull-requests)
[Email notifications](../../account/emails#managing-your-email-notifications)|Number of new and fixed issues introduced by the commit or pull request| +|[Commit detail page](../../repositories/commits)
[Pull request detail page](../../repositories/pull-requests)
[Email notifications](../../account/emails.mdx#managing-your-email-notifications)|Number of new and fixed issues introduced by the commit or pull request| |[Files page](../../repositories/files)|Number of issues in each file| |[Issues page](../../repositories/issues)|List of all issues detected in each branch| |[Repository Dashboard](../../repositories/repository-dashboard)|Issues per 1000 lines of code| @@ -82,7 +82,7 @@ Codacy displays complexity on the following places: |Place|Metric| |-----|------| -|[Commit detail page](../../repositories/commits)
[Pull request detail page](../../repositories/pull-requests)
[Email notifications](../../account/emails#managing-your-email-notifications)|The complexity variation introduced by a commit or pull request is calculated by summing the complexity differences of all changed files where the difference is 4 or more. +|[Commit detail page](../../repositories/commits)
[Pull request detail page](../../repositories/pull-requests)
[Email notifications](../../account/emails.mdx#managing-your-email-notifications)|The complexity variation introduced by a commit or pull request is calculated by summing the complexity differences of all changed files where the difference is 4 or more. |[Files page](../../repositories/files)|The file complexity value is the sum of the complexity values of all methods defined within the file| |[Repository Dashboard](../../repositories/repository-dashboard)|Percentage of complex files in your repository and how the metric is evolving over time| |[Organization overview](../../organizations/organization-overview)|Average percentage of complex files in the repositories in your organization and percentage of complex files in each repository| @@ -99,14 +99,14 @@ Codacy calculates duplication as follows: - The duplication value of a commit or pull request is the number of clones introduced by the commit or pull request. :::note -You can [customize the rules for identifying duplicated blocks of code](../../repositories-configure/codacy-configuration-file#pmd-cpd-duplication) when using PMD CPD to analyze the source code of your repository. +You can [customize the rules for identifying duplicated blocks of code](../../repositories-configure/codacy-configuration-file.mdx#pmd-cpd-duplication) when using PMD CPD to analyze the source code of your repository. ::: Codacy displays duplication on the following places: |Place|Metric| |-----|------| -|[Commit detail page](../../repositories/commits)
[Pull request detail page](../../repositories/pull-requests)
[Email notifications](../../account/emails#managing-your-email-notifications)|Number of clones added or fixed by a commit or pull request| +|[Commit detail page](../../repositories/commits)
[Pull request detail page](../../repositories/pull-requests)
[Email notifications](../../account/emails.mdx#managing-your-email-notifications)|Number of clones added or fixed by a commit or pull request| |[Files page](../../repositories/files)|Duplication value of each file| |[Repository Dashboard](../../repositories/repository-dashboard)|Percentage of duplicated files in your repository and how the metric is evolving over time| |[Organization overview](../../organizations/organization-overview)|Average percentage of duplicated files in the repositories in your organization and percentage of complex files in each repository| @@ -140,7 +140,7 @@ Once the coverage setup is complete, Codacy displays coverage data on the follow |Place|Metric| |-----|------| -|[Commit detail page](../../repositories/commits)
[Pull request detail page](../../repositories/pull-requests)
[Email notifications](../../account/emails#managing-your-email-notifications)|Variation in percentage points of the coverage value for all files in the commit or pull request| +|[Commit detail page](../../repositories/commits)
[Pull request detail page](../../repositories/pull-requests)
[Email notifications](../../account/emails.mdx#managing-your-email-notifications)|Variation in percentage points of the coverage value for all files in the commit or pull request| |[Pull request detail page](../../repositories/pull-requests)|Diff coverage for the changes included in the pull request| |[Files page](../../repositories/files)|Coverage percentage of each file| |[Repository Dashboard](../../repositories/repository-dashboard)|Coverage of the most recent commit of the selected branch and its evolution over time| diff --git a/docusaurus/docs/faq/general/how-can-i-change-or-cancel-my-plan.mdx b/docusaurus/docs/faq/general/how-can-i-change-or-cancel-my-plan.mdx index 7e9d7b6f9c..61677334dd 100644 --- a/docusaurus/docs/faq/general/how-can-i-change-or-cancel-my-plan.mdx +++ b/docusaurus/docs/faq/general/how-can-i-change-or-cancel-my-plan.mdx @@ -11,7 +11,7 @@ Codacy values feedback and we thank you in advance for letting us know the prima If you're using Codacy Cloud see [how to change the plan and billing of your Codacy organization](../../organizations/changing-your-plan-and-billing). -Alternatively, [delete your organization](../../organizations/what-are-organizations#deleting-an-organization) to remove all its repositories from Codacy and cancel your existing plan. +Alternatively, [delete your organization](../../organizations/what-are-organizations.mdx#deleting-an-organization) to remove all its repositories from Codacy and cancel your existing plan. ## If you're using Codacy Self-hosted diff --git a/docusaurus/docs/faq/general/how-does-codacy-support-bitbucket-cloud.mdx b/docusaurus/docs/faq/general/how-does-codacy-support-bitbucket-cloud.mdx index 66bfad06a5..b163e8e61f 100644 --- a/docusaurus/docs/faq/general/how-does-codacy-support-bitbucket-cloud.mdx +++ b/docusaurus/docs/faq/general/how-does-codacy-support-bitbucket-cloud.mdx @@ -7,7 +7,7 @@ When you use Bitbucket Cloud to sign up or log into Codacy, the Bitbucket teams After adding a team: - Codacy displays the list of all repositories in that team so that you can add them to Codacy as repositories to be analyzed -- The members of the team will be able to [join or request to join Codacy](../../organizations/managing-people#joining) +- The members of the team will be able to [join or request to join Codacy](../../organizations/managing-people.mdx#joining) If you have repositories that don't belong to any team, you can still add those on Codacy directly under **My Repositories**. diff --git a/docusaurus/docs/faq/general/how-does-codacy-support-bitbucket-server.mdx b/docusaurus/docs/faq/general/how-does-codacy-support-bitbucket-server.mdx index 2a7864b8f3..974042a11e 100644 --- a/docusaurus/docs/faq/general/how-does-codacy-support-bitbucket-server.mdx +++ b/docusaurus/docs/faq/general/how-does-codacy-support-bitbucket-server.mdx @@ -7,7 +7,7 @@ When you use Bitbucket Server to sign up or log into Codacy, the Bitbucket proje After adding a project: - Codacy displays the list of all repositories that you own in that project so that you can add them to Codacy as repositories to be analyzed -- The members of the project will be able to [join or request to join Codacy](../../organizations/managing-people#joining) +- The members of the project will be able to [join or request to join Codacy](../../organizations/managing-people.mdx#joining) ## Limitations @@ -19,7 +19,7 @@ Currently, the integration between Codacy and Bitbucket Server has the following - **Repositories that are moved between teams are not automatically transferred between Organizations on Codacy.** You must manually delete these repositories from their source Organization and add them to their new Organization. - **Personal repositories are not supported.** You can only add repositories to Codacy if they belong to a project. - **Codacy only sends commit and pull request notification emails to the authors of the commits and pull requests.** -- **[Pull request summaries](../../repositories-configure/integrations/bitbucket-integration#pull-request-summary) aren't available** +- **[Pull request summaries](../../repositories-configure/integrations/bitbucket-integration.mdx#pull-request-summary) aren't available** - **The Repositories screen doesn't include the "Last updated" date for each repository.** As such, the repositories are sorted alphabetically. - **Codacy doesn't analyze pull requests submitted from forked repositories.** diff --git a/docusaurus/docs/faq/general/how-does-codacy-support-gitlab-cloud.mdx b/docusaurus/docs/faq/general/how-does-codacy-support-gitlab-cloud.mdx index 3d1f55f103..5e61535b4f 100644 --- a/docusaurus/docs/faq/general/how-does-codacy-support-gitlab-cloud.mdx +++ b/docusaurus/docs/faq/general/how-does-codacy-support-gitlab-cloud.mdx @@ -8,9 +8,9 @@ When you use GitLab Cloud to sign up or log into Codacy, the GitLab Groups that After adding a Group: - Codacy displays the list of all repositories that you own in that Group and Subgroups so that you can add them to Codacy as repositories to be analyzed -- The members of the Group will be able to [join or request to join Codacy](../../organizations/managing-people#joining) +- The members of the Group will be able to [join or request to join Codacy](../../organizations/managing-people.mdx#joining) -If you have repositories that don't belong to any Group, you can still [add those on Codacy by choosing your "personal" organization](../../getting-started/codacy-quickstart#choosing-organization). +If you have repositories that don't belong to any Group, you can still [add those on Codacy by choosing your "personal" organization](../../getting-started/codacy-quickstart.mdx#choosing-organization). ## Limitations diff --git a/docusaurus/docs/faq/general/how-does-codacy-support-gitlab-enterprise.mdx b/docusaurus/docs/faq/general/how-does-codacy-support-gitlab-enterprise.mdx index 07e498e8c2..4aa4f52f7c 100644 --- a/docusaurus/docs/faq/general/how-does-codacy-support-gitlab-enterprise.mdx +++ b/docusaurus/docs/faq/general/how-does-codacy-support-gitlab-enterprise.mdx @@ -8,9 +8,9 @@ When you use GitLab Enterprise to sign up or log into Codacy, the GitLab Groups After adding a Group: - Codacy displays the list of all repositories that you own in that Group and Subgroups so that you can add them to Codacy as repositories to be analyzed -- The members of the Group will be able to [join or request to join Codacy](../../organizations/managing-people#joining) +- The members of the Group will be able to [join or request to join Codacy](../../organizations/managing-people.mdx#joining) -If you have repositories that don't belong to any Group, you can still [add those on Codacy by choosing your "personal" organization](../../getting-started/codacy-quickstart#choosing-organization). +If you have repositories that don't belong to any Group, you can still [add those on Codacy by choosing your "personal" organization](../../getting-started/codacy-quickstart.mdx#choosing-organization). ## Limitations diff --git a/docusaurus/docs/faq/repositories/how-do-i-reanalyze-my-repository.mdx b/docusaurus/docs/faq/repositories/how-do-i-reanalyze-my-repository.mdx index c71eceea86..0d39aede5f 100644 --- a/docusaurus/docs/faq/repositories/how-do-i-reanalyze-my-repository.mdx +++ b/docusaurus/docs/faq/repositories/how-do-i-reanalyze-my-repository.mdx @@ -50,5 +50,5 @@ To reanalyze a pull request in your repository: ## See also -- [Commit status](../../repositories/commits#status) -- [Pull request status](../../repositories/pull-requests#status) +- [Commit status](../../repositories/commits.mdx#status) +- [Pull request status](../../repositories/pull-requests.mdx#status) diff --git a/docusaurus/docs/faq/troubleshooting/not-a-member-of-the-organization.mdx b/docusaurus/docs/faq/troubleshooting/not-a-member-of-the-organization.mdx index a0f8e5fae2..61aa6f78ea 100644 --- a/docusaurus/docs/faq/troubleshooting/not-a-member-of-the-organization.mdx +++ b/docusaurus/docs/faq/troubleshooting/not-a-member-of-the-organization.mdx @@ -16,12 +16,12 @@ There may be different reasons for this issue to happen: - **The user making the commit hasn't signed in to Codacy Cloud and joined the organization yet** - The user must [join the organization](../../organizations/managing-people#joining) or, if you're the organization admin, you can [add the user](../../organizations/managing-people#adding-people) instead. + The user must [join the organization](../../organizations/managing-people.mdx#joining) or, if you're the organization admin, you can [add the user](../../organizations/managing-people.mdx#adding-people) instead. - **The commit email address isn't associated with the account of a Codacy Cloud user** - Make sure the user [updates the email addresses associated with their Codacy account](../../account/emails#updating) to include the missing commit email address. + Make sure the user [updates the email addresses associated with their Codacy account](../../account/emails.mdx#updating) to include the missing commit email address. - **Git isn't configured with the correct email address** - Make sure the user [sets the Git email address](../../account/emails#git-config) correctly. + Make sure the user [sets the Git email address](../../account/emails.mdx#git-config) correctly. diff --git a/docusaurus/docs/faq/troubleshooting/why-cant-i-see-my-organization.mdx b/docusaurus/docs/faq/troubleshooting/why-cant-i-see-my-organization.mdx index 2f4e771a6c..7ce0c47705 100644 --- a/docusaurus/docs/faq/troubleshooting/why-cant-i-see-my-organization.mdx +++ b/docusaurus/docs/faq/troubleshooting/why-cant-i-see-my-organization.mdx @@ -3,7 +3,7 @@ title: Why can't I see my organization? description: Try these steps if you don't see your organization when adding your organization on Codacy. --- -If you can't [add your organization to Codacy](../../organizations/what-are-organizations#adding-an-organization) because it doesn't appear on the Organizations page, please try re-adding your Git provider by clicking **Add provider** on the Organizations page: +If you can't [add your organization to Codacy](../../organizations/what-are-organizations.mdx#adding-an-organization) because it doesn't appear on the Organizations page, please try re-adding your Git provider by clicking **Add provider** on the Organizations page: ![Refreshing the list of organizations](./images/organization-refresh-list.png) diff --git a/docusaurus/docs/faq/troubleshooting/why-did-codacy-stop-commenting-on-pull-requests.mdx b/docusaurus/docs/faq/troubleshooting/why-did-codacy-stop-commenting-on-pull-requests.mdx index 421f22a014..fcf6d51a71 100644 --- a/docusaurus/docs/faq/troubleshooting/why-did-codacy-stop-commenting-on-pull-requests.mdx +++ b/docusaurus/docs/faq/troubleshooting/why-did-codacy-stop-commenting-on-pull-requests.mdx @@ -43,9 +43,9 @@ To fix this issue and avoid future disruptions, refresh the GitLab or Bitbucket 1. Make sure the Git provider integration is configured as needed: - - [Configuring the GitLab integration](../../repositories-configure/integrations/gitlab-integration#configuring) + - [Configuring the GitLab integration](../../repositories-configure/integrations/gitlab-integration.mdx#configuring) - - [Configuring the Bitbucket integration](../../repositories-configure/integrations/bitbucket-integration#configuring) + - [Configuring the Bitbucket integration](../../repositories-configure/integrations/bitbucket-integration.mdx#configuring) ## See also diff --git a/docusaurus/docs/faq/troubleshooting/why-is-my-file-over-150-kb-missing.mdx b/docusaurus/docs/faq/troubleshooting/why-is-my-file-over-150-kb-missing.mdx index 456feca7b4..6917df512d 100644 --- a/docusaurus/docs/faq/troubleshooting/why-is-my-file-over-150-kb-missing.mdx +++ b/docusaurus/docs/faq/troubleshooting/why-is-my-file-over-150-kb-missing.mdx @@ -31,7 +31,7 @@ To update the file size limit: maxFileSizeBytes: 150000 ``` -1. Apply the new configuration by performing a Helm upgrade and specifying the Codacy Self-hosted version currently installed. To do so execute the command [used to install Codacy](../../chart#helm-upgrade): +1. Apply the new configuration by performing a Helm upgrade and specifying the Codacy Self-hosted version currently installed. To do so execute the command [used to install Codacy](../../chart/index.mdx#helm-upgrade): :::caution **If you're using MicroK8s** you must use the file `values-microk8s.yaml` together with the file `values-production.yaml`. diff --git a/docusaurus/docs/getting-started/adding-a-codacy-badge.mdx b/docusaurus/docs/getting-started/adding-a-codacy-badge.mdx index a323515f3e..bd7bf0006d 100644 --- a/docusaurus/docs/getting-started/adding-a-codacy-badge.mdx +++ b/docusaurus/docs/getting-started/adding-a-codacy-badge.mdx @@ -27,7 +27,7 @@ The Codacy badges for your repository may become unavailable or grayed out if th To fix each badge: -- [Reanalyze the branch](../faq/repositories/how-do-i-reanalyze-my-repository#reanalyzing-a-branch) associated with the **code quality badge** +- [Reanalyze the branch](../faq/repositories/how-do-i-reanalyze-my-repository.mdx#reanalyzing-a-branch) associated with the **code quality badge** - Make sure that you're [generating and uploading code coverage reports](../../coverage-reporter/) for all the commits in the branch associated with the **coverage badge** If these steps don't fix your Codacy badges it can mean that the badges are no longer valid. In this case, repeat the steps above to replace the existing badges with new ones. diff --git a/docusaurus/docs/getting-started/integrating-codacy-with-intellij-ides.mdx b/docusaurus/docs/getting-started/integrating-codacy-with-intellij-ides.mdx index ea5c47ac58..4a2cc1800a 100644 --- a/docusaurus/docs/getting-started/integrating-codacy-with-intellij-ides.mdx +++ b/docusaurus/docs/getting-started/integrating-codacy-with-intellij-ides.mdx @@ -18,13 +18,13 @@ In the main view, you can find the following information: - The **Status** of the pull request, either up to standards or not up to standards, based on the [Gates](../repositories-configure/adjusting-quality-gates) set for the repository. -- Any **issues** introduced or fixed by the pull request. These are the same issues you find in the [Issues tabs](../repositories/pull-requests#issues-tabs) in the Codacy app and are also visible in IntelliJ's Problems tab. +- Any **issues** introduced or fixed by the pull request. These are the same issues you find in the [Issues tabs](../repositories/pull-requests.mdx#issues-tabs) in the Codacy app and are also visible in IntelliJ's Problems tab. When this item is expanded, the number next to each file name is the total number of issues that the pull request adds to that file. - The **diff coverage** introduced by the pull request. The percentage next to each file name is the coverage variation for that file. -- Sequences of **duplicate code** (clones) introduced by the pull request. These are the same ones you find in the [Duplication tabs](../repositories/pull-requests#duplication-tabs) in the Codacy app. +- Sequences of **duplicate code** (clones) introduced by the pull request. These are the same ones you find in the [Duplication tabs](../repositories/pull-requests.mdx#duplication-tabs) in the Codacy app. - Variations in **code complexity** introduced by the pull request. @@ -36,7 +36,7 @@ In the main view, you can find the following information: 1. Make sure that the repository you’re working on is analyzed by Codacy and that you have a [repository read](../organizations/roles-and-permissions-for-organizations) role or higher. :::tip - If this is your first time using Codacy, see [how to add and analyze your first repository](./codacy-quickstart#adding-your-first-repository). + If this is your first time using Codacy, see [how to add and analyze your first repository](./codacy-quickstart.mdx#adding-your-first-repository). ::: 1. Install the plugin from the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/23924-codacy) or through the [plugin settings panel](https://www.jetbrains.com/help/idea/managing-plugins.html) in your IntelliJ IDE. @@ -48,7 +48,7 @@ To see Codacy quality and coverage data for an open pull request, follow these s 1. Open the repository directory in your IntelliJ IDE. :::note - If the repository isn't on Codacy yet, [add it to Codacy](../organizations/managing-repositories#adding-a-repository) first. + If the repository isn't on Codacy yet, [add it to Codacy](../organizations/managing-repositories.mdx#adding-a-repository) first. ::: 1. Open the main view by clicking the **Codacy logo** in the left tool window bar. @@ -90,7 +90,7 @@ To review issues: When the analysis is complete, the Codacy plugin automatically refreshes the pull request analysis result. You can also refresh the pull request data manually by clicking the Refresh Pull Request button in the main view. ## Running Codacy Guardrails -As of version [0.0.8](https://plugins.jetbrains.com/plugin/23924-codacy/versions/stable/840439), the IntelliJ plugin now supports Codacy Guardrails. To see how to get it quickly setup refer to our quickstart guide [here](../codacy-guardrails/codacy-guardrails-getting-started#how-to-install-quick-guide-jetbrains). +As of version [0.0.8](https://plugins.jetbrains.com/plugin/23924-codacy/versions/stable/840439), the IntelliJ plugin now supports Codacy Guardrails. To see how to get it quickly setup refer to our quickstart guide [here](../codacy-guardrails/codacy-guardrails-getting-started.mdx#how-to-install-quick-guide-jetbrains). ## See also diff --git a/docusaurus/docs/getting-started/integrating-codacy-with-visual-studio-code.mdx b/docusaurus/docs/getting-started/integrating-codacy-with-visual-studio-code.mdx index 275d41ccaa..d7d215bf78 100644 --- a/docusaurus/docs/getting-started/integrating-codacy-with-visual-studio-code.mdx +++ b/docusaurus/docs/getting-started/integrating-codacy-with-visual-studio-code.mdx @@ -26,7 +26,7 @@ The **Pull request status** tab displays the following information for the pull - The **Status** of the pull request, either up to standards or not up to standards, based on the [Gates](../repositories-configure/adjusting-quality-gates) set for the repository. -- Any **issues** introduced or fixed by the pull request. These are the same issues you find in the [Issues tabs](../repositories/pull-requests#issues-tabs) in the Codacy app and are also visible in VS Code's Problems tab. +- Any **issues** introduced or fixed by the pull request. These are the same issues you find in the [Issues tabs](../repositories/pull-requests.mdx#issues-tabs) in the Codacy app and are also visible in VS Code's Problems tab. When this item is expanded, the number next to each file name is the total number of issues that the pull request adds to or removes from that file. The number farther to the right, added by VS Code, is the total number of problems in that file, which may or may not be issues from Codacy. If there are any Medium or Critical issues, the file name is also highlighted in yellow (Medium) or red (Critical). @@ -58,11 +58,11 @@ The **Open Pull Requests** tab lists all open pull requests for the repository, - The source and target branches of the pull request. -- Any **issues** introduced or fixed by the pull request. These are the same issues you find in the [Issues tabs](../repositories/pull-requests#issues-tabs) in the Codacy app. +- Any **issues** introduced or fixed by the pull request. These are the same issues you find in the [Issues tabs](../repositories/pull-requests.mdx#issues-tabs) in the Codacy app. -- Sequences of **duplicate code** (clones) introduced by the pull request. These are the same ones you find in the [Duplication tabs](../repositories/pull-requests#duplication-tabs) in the Codacy app. +- Sequences of **duplicate code** (clones) introduced by the pull request. These are the same ones you find in the [Duplication tabs](../repositories/pull-requests.mdx#duplication-tabs) in the Codacy app. -- Variations in **code complexity** introduced by the pull request. This is the same value you find on the [Pull request quality overview](../repositories/pull-requests#quality-overview) in the Codacy app. +- Variations in **code complexity** introduced by the pull request. This is the same value you find on the [Pull request quality overview](../repositories/pull-requests.mdx#quality-overview) in the Codacy app. ### Analyzed branch tab @@ -77,7 +77,7 @@ See [how to manage the analysis of your repository's branches](../repositories-c 1. Make sure that the repository you’re working on is analyzed by Codacy and that you have a [repository read](../organizations/roles-and-permissions-for-organizations) role or higher. :::tip - If this is your first time using Codacy, see [how to add and analyze your first repository](./codacy-quickstart#adding-your-first-repository). + If this is your first time using Codacy, see [how to add and analyze your first repository](./codacy-quickstart.mdx#adding-your-first-repository). ::: 1. Install the extension from the [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=codacy-app.codacy) or through the [Extensions view in VS Code](https://code.visualstudio.com/docs/editor/extension-marketplace#_browse-for-extensions). @@ -91,7 +91,7 @@ To see Codacy quality and coverage data for an open pull request, follow these s 1. Open the repository directory in VS Code. :::note - If the repository isn't on Codacy yet, [add it to Codacy](../organizations/managing-repositories#adding-a-repository) first. + If the repository isn't on Codacy yet, [add it to Codacy](../organizations/managing-repositories.mdx#adding-a-repository) first. ::: 1. Open the main view by clicking the **Codacy logo** in the activity bar or the **Codacy tab** in the status bar. @@ -126,7 +126,7 @@ To review issues: 1. Hover over a highlighted issue in the code editor to view available actions and suggested quick fixes (if available). - For a list of tools that support quick fixes, see [Supported languages and tools](./supported-languages-and-tools#supported-languages-and-tools). + For a list of tools that support quick fixes, see [Supported languages and tools](./supported-languages-and-tools.mdx#supported-languages-and-tools). 1. Once you've addressed the problems in your code, push your changes to the Git provider so that Codacy analyzes the updated code. diff --git a/docusaurus/docs/getting-started/integrating-codacy-with-your-git-workflow.mdx b/docusaurus/docs/getting-started/integrating-codacy-with-your-git-workflow.mdx index e9f6d186a2..6fcc14d894 100644 --- a/docusaurus/docs/getting-started/integrating-codacy-with-your-git-workflow.mdx +++ b/docusaurus/docs/getting-started/integrating-codacy-with-your-git-workflow.mdx @@ -38,7 +38,7 @@ Codacy generally recommends that on a first stage you configure rules that focus ![Adjusting the quality gates](../repositories-configure/images/quality-settings-gates.png) ## 2. Configuring the Git provider integration \{#git-provider-integration\} -Make sure you enable the option **Status checks** ([GitHub](../repositories-configure/integrations/github-integration#status-checks)) or **Pull request status** ([GitLab](../repositories-configure/integrations/gitlab-integration#pull-request-status) and [Bitbucket](../repositories-configure/integrations/bitbucket-integration#pull-request-status)). +Make sure you enable the option **Status checks** ([GitHub](../repositories-configure/integrations/github-integration.mdx#status-checks)) or **Pull request status** ([GitLab](../repositories-configure/integrations/gitlab-integration.mdx#pull-request-status) and [Bitbucket](../repositories-configure/integrations/bitbucket-integration.mdx#pull-request-status)). diff --git a/docusaurus/docs/getting-started/supported-languages-and-tools.mdx b/docusaurus/docs/getting-started/supported-languages-and-tools.mdx index 885083b71a..0ec9d5c54f 100644 --- a/docusaurus/docs/getting-started/supported-languages-and-tools.mdx +++ b/docusaurus/docs/getting-started/supported-languages-and-tools.mdx @@ -371,18 +371,18 @@ The following table lists the Codacy GitHub repositories corresponding to each s -[^semgrep]: Semgrep supports additional security rules when signing up for [Semgrep Pro](https://semgrep.dev/pricing/). This tool doesn't support [custom file extensions](../repositories-configure/languages#configuring-file-extensions). +[^semgrep]: Semgrep supports additional security rules when signing up for [Semgrep Pro](https://semgrep.dev/pricing/). This tool doesn't support [custom file extensions](../repositories-configure/languages.mdx#configuring-file-extensions). [^yaml-only]: Currently, only YAML file scanning is supported on this platform. [^client-side]: Supported as a [client-side tool](../repositories-configure/local-analysis/client-side-tools). [^cppcheck-misra]: Currently, Cppcheck only supports the MISRA guidelines for C. [^dart-limitations]: Currently, Codacy only supports including the packages [lints](https://pub.dev/packages/lints) and [flutter_lints](https://pub.dev/packages/flutter_lints) on dartanalyzer configuration files. -[^complexity-limitations]: Doesn't calculate [the number of methods and the complexity per method](../repositories/files#file-details) for each file. +[^complexity-limitations]: Doesn't calculate [the number of methods and the complexity per method](../repositories/files.mdx#file-details) for each file. [^semgrep-brakeman]: Due to licensing limitations, Codacy doesn't support the latest version of Brakeman. To analyze your Ruby code for the latest security vulnerabilities, use [Semgrep](https://semgrep.dev/), which provides comprehensive and up-to-date security scanning. [^swiftlint-complexity]: Supports [reporting warnings or errors](https://realm.github.io/SwiftLint/cyclomatic_complexity.html) on functions above specific complexity thresholds. Enable the rule **Cyclomatic Complexity** on the [Code patterns page](../repositories-configure/configuring-code-patterns), or use a [configuration file](https://realm.github.io/SwiftLint/index.html#configuration) to customize the thresholds. [^scala-dependencies]: Requires the [sbt-dependency-lock](https://github.com/stringbean/sbt-dependency-lock) plugin for generating the lockfile. [^different-tools]: Codacy may use a different version of this tool for measuring complexity and duplication. [^malicious-packages-detection]: Malicious packages identified in the [OpenSSF Malicious Packages database](https://github.com/ossf/malicious-packages). -[^suggest-fixes]: Supports [suggesting fixes](../repositories-configure/integrations/github-integration#suggest-fixes) for identified issues. +[^suggest-fixes]: Supports [suggesting fixes](../repositories-configure/integrations/github-integration.mdx#suggest-fixes) for identified issues. ## See also diff --git a/docusaurus/docs/release-notes/cloud/2023/2023-12-cloud.md b/docusaurus/docs/release-notes/cloud/2023/2023-12-cloud.md index 14a8fc362d..eda5de6b9d 100644 --- a/docusaurus/docs/release-notes/cloud/2023/2023-12-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2023/2023-12-cloud.md @@ -17,13 +17,13 @@ These release notes are for the Codacy Cloud updates during December 2023. ## Product enhancements - The [Security and risk management feature](../../../organizations/managing-security-and-risk.mdx), previously only available to organization admins and security managers, is now open to all organization members and shows information related to the repositories that each member follows. (TAROT-2442) -- The [GitHub coverage summaries](/release-notes/cloud/cloud-2023-11-23-new-coverage-engine-status-checks#coverage-summaries) and the Codacy app UI diff tabs now get data from the new Coverage engine. For more information, [see the rollout details of the new Coverage engine](/release-notes/cloud/cloud-2023-11-23-new-coverage-engine-status-checks). (ALA-589, ALA-676) +- The [GitHub coverage summaries](/release-notes/cloud/2023/2023-11-23-cloud-new-coverage-engine-status-checks.mdx#coverage-summaries) and the Codacy app UI diff tabs now get data from the new Coverage engine. For more information, [see the rollout details of the new Coverage engine](/release-notes/cloud/2023/2023-11-23-cloud-new-coverage-engine-status-checks.mdx). (ALA-589, ALA-676) :::caution These features require updated app permissions. Make sure an organization owner [approves the updated permissions for the Codacy GitHub App](https://docs.github.com/en/enterprise-cloud@latest/apps/using-github-apps/reviewing-and-modifying-installed-github-apps#reviewing-permissions) on your GitHub organization. ::: -- When calculating coverage data, the [new coverage engine](/release-notes/cloud/cloud-2023-11-23-new-coverage-engine-status-checks) now ignores files in the coverage report that aren't in the associated Git repository. (ALA-716) +- When calculating coverage data, the [new coverage engine](/release-notes/cloud/2023/2023-11-23-cloud-new-coverage-engine-status-checks.mdx) now ignores files in the coverage report that aren't in the associated Git repository. (ALA-716) ## Bug fixes diff --git a/docusaurus/docs/release-notes/cloud/2024/2024-06-cloud.md b/docusaurus/docs/release-notes/cloud/2024/2024-06-cloud.md index f7ae064f43..8c8bbd8280 100644 --- a/docusaurus/docs/release-notes/cloud/2024/2024-06-cloud.md +++ b/docusaurus/docs/release-notes/cloud/2024/2024-06-cloud.md @@ -29,7 +29,7 @@ These release notes are for the Codacy Cloud updates during June 2024. ## Deprecations -- On June 5th, Codacy [stopped sending status checks from the old Coverage engine](/release-notes/cloud/cloud-2023-11-23-new-coverage-engine-status-checks#deprecation-and-removal-calendar-for-the-old-coverage-engine-status-checks). (ALA-767) +- On June 5th, Codacy [stopped sending status checks from the old Coverage engine](/release-notes/cloud/2023/2023-11-23-cloud-new-coverage-engine-status-checks.mdx#deprecation-and-removal-calendar-for-the-old-coverage-engine-status-checks). (ALA-767) ## Tool versions diff --git a/docusaurus/docs/repositories-configure/adjusting-quality-gates.mdx b/docusaurus/docs/repositories-configure/adjusting-quality-gates.mdx index 57cebcc213..37461c0202 100644 --- a/docusaurus/docs/repositories-configure/adjusting-quality-gates.mdx +++ b/docusaurus/docs/repositories-configure/adjusting-quality-gates.mdx @@ -5,7 +5,7 @@ title: Adjusting quality gates The **quality gates** of your repository configure when Codacy reports your pull requests and commits as not up to standards. -When you add your repository to Codacy, it automatically follows the [default gate policy for your organization](../organizations/using-gate-policies). If you want to set different quality gates for the repository, [create a new organization gate policy](../organizations/using-gate-policies#creating) to apply to the repository. +When you add your repository to Codacy, it automatically follows the [default gate policy for your organization](../organizations/using-gate-policies). If you want to set different quality gates for the repository, [create a new organization gate policy](../organizations/using-gate-policies.mdx#creating) to apply to the repository. :::note Although you can define custom quality gate settings for specific repositories, we recommend that you always [use a gate policy](../organizations/using-gate-policies.mdx) defined by your organization to enforce consistent rules across multiple repositories. @@ -28,12 +28,12 @@ To access the quality gates, open your repository **Settings**, tab **Gates**. - **Coverage variation is under:** Pull requests or commits are marked not up to standards if they introduce a variation to coverage lower than the set value. :::tip - **Set this gate to -0.10% or lower.** This will ensure that developers have a coverage drop margin so they aren't blocked [while performing some types of code refactors](../faq/code-analysis/why-does-codacy-show-unexpected-coverage-changes#example-pull-request-coverage-variation-is-negative-but-no-files-have-coverage-variation) + **Set this gate to -0.10% or lower.** This will ensure that developers have a coverage drop margin so they aren't blocked [while performing some types of code refactors](../faq/code-analysis/why-does-codacy-show-unexpected-coverage-changes.mdx#example-pull-request-coverage-variation-is-negative-but-no-files-have-coverage-variation) To ensure that the changes in each pull request have a minimum level of coverage, use the gate **Diff coverage is under** instead. ::: -- **Diff coverage is under:** Pull requests are marked not up to standards if the diff coverage of the pull request is lower than the set value or `∅` ([not applicable](../faq/code-analysis/which-metrics-does-codacy-calculate#code-coverage)). This rule is only available for pull requests. +- **Diff coverage is under:** Pull requests are marked not up to standards if the diff coverage of the pull request is lower than the set value or `∅` ([not applicable](../faq/code-analysis/which-metrics-does-codacy-calculate.mdx#code-coverage)). This rule is only available for pull requests. ## See also diff --git a/docusaurus/docs/repositories-configure/adjusting-quality-goals.mdx b/docusaurus/docs/repositories-configure/adjusting-quality-goals.mdx index ea35446f57..afb39495be 100644 --- a/docusaurus/docs/repositories-configure/adjusting-quality-goals.mdx +++ b/docusaurus/docs/repositories-configure/adjusting-quality-goals.mdx @@ -5,7 +5,7 @@ title: Adjusting quality goals Adjust the **quality goals** to help you monitor the progress of the code quality in your repository dashboard, and configure which files Codacy considers complex or duplicated. -Codacy displays the quality goals as dashed lines on the [quality evolution chart](../repositories/repository-dashboard#evolution-chart) to help you monitor the progress and overall quality status of your repository. +Codacy displays the quality goals as dashed lines on the [quality evolution chart](../repositories/repository-dashboard.mdx#evolution-chart) to help you monitor the progress and overall quality status of your repository. To access the quality goals, open your repository **Settings**, tab **Goals**. The following screenshot displays the default configuration values: diff --git a/docusaurus/docs/repositories-configure/codacy-configuration-file.mdx b/docusaurus/docs/repositories-configure/codacy-configuration-file.mdx index 589635a508..845db2774a 100644 --- a/docusaurus/docs/repositories-configure/codacy-configuration-file.mdx +++ b/docusaurus/docs/repositories-configure/codacy-configuration-file.mdx @@ -23,7 +23,7 @@ Codacy supports configuring certain advanced features through a configuration fi ## Using a Codacy configuration file :::caution -- If your repository has a Codacy configuration file, the [Ignored files settings](./ignoring-files) defined on the Codacy UI don't apply and you must [ignore files using the configuration file](#syntax-for-ignoring-files) instead. +- If your repository has a Codacy configuration file, the [Ignored files settings](./ignoring-files.mdx) defined on the Codacy UI don't apply and you must [ignore files using the configuration file](#syntax-for-ignoring-files) instead. - Codacy always uses the configuration file **in the default branch**. New settings added to the Codacy configuration file by a pull request are also considered for the pull request analysis, but the existing configuration in the default branch takes precedence. For example, if a pull request removes an ignored path from the Codacy configuration file, any matching files will stay ignored until that pull request is merged into the default branch. @@ -38,7 +38,7 @@ To use a Codacy configuration file: 1. Add your settings to the configuration file based on the example template below. - If you defined any [Ignored files settings](./ignoring-files) for the repository, make sure you [add those settings](#syntax-for-ignoring-files) to the Codacy configuration file. + If you defined any [Ignored files settings](./ignoring-files.mdx) for the repository, make sure you [add those settings](#syntax-for-ignoring-files) to the Codacy configuration file. ```yaml --- @@ -82,7 +82,7 @@ To use a Codacy configuration file: ``` ## Ignoring files using a Codacy configuration file \{#ignore-files\} -The Codacy configuration file gives you more flexibility in [ignoring or excluding files](./ignoring-files) from the Codacy analysis. +The Codacy configuration file gives you more flexibility in [ignoring or excluding files](./ignoring-files.mdx) from the Codacy analysis. :::note @@ -155,7 +155,7 @@ In this example, while all directories matching `lib*` are excluded, `lib-a` is ## Adjusting tool configurations \{#tool-conf\} :::note -The Codacy configuration file lets you [configure tools](#tool-specific-configurations), but you can't enable or disable them. A tool can only be enabled or disabled on the [Code patterns page](./configuring-code-patterns) by users with the [necessary permissions](../organizations/roles-and-permissions-for-organizations). +The Codacy configuration file lets you [configure tools](#tool-specific-configurations), but you can't enable or disable them. A tool can only be enabled or disabled on the [Code patterns page](./configuring-code-patterns.mdx) by users with the [necessary permissions](../organizations/roles-and-permissions-for-organizations.mdx). ::: ### Which tools can be configured and which name should I use? @@ -170,7 +170,7 @@ The Codacy configuration file lets you [configure tools](#tool-specific-configur docs/repositories-configure/codacy-configuration-file.md (list of tool short names to use on the Codacy configuration file) -->*/} -You can use the Codacy configuration file to configure all tools supported by Codacy except the [client-side tools](./local-analysis/client-side-tools). +You can use the Codacy configuration file to configure all tools supported by Codacy except the [client-side tools](./local-analysis/client-side-tools.mdx). The following are the tool names that must be used in the Codacy configuration file: @@ -268,7 +268,7 @@ engines: ``` :::tip -If you're using Python 3.4.\* or later as your programming language, disable the tool **Pylint (legacy)** and enable the tool **Pylint** on your repository [Code patterns page](./configuring-code-patterns) instead. For more information, see [What's New in Pylint 2.0](https://pylint.pycqa.org/en/latest/whatsnew/2/2.0/index.html). +If you're using Python 3.4.\* or later as your programming language, disable the tool **Pylint (legacy)** and enable the tool **Pylint** on your repository [Code patterns page](./configuring-code-patterns.mdx) instead. For more information, see [What's New in Pylint 2.0](https://pylint.pycqa.org/en/latest/whatsnew/2/2.0/index.html). ::: #### PMD CPD (Duplication) @@ -279,7 +279,7 @@ If you're using Python 3.4.\* or later as your programming language, disable the https://github.com/codacy/codacy-duplication-pmdcpd/blob/c799cb3a80d1f3b3a8eb9868f63abee13e3e81c4/src/main/scala/com/codacy/duplication/pmd/Cpd.scala#L128 -->*/} -Codacy uses [PMD's Copy/Paste Detector (CPD)](https://docs.pmd-code.org/latest/) to identify duplicated blocks of code [on the supported languages](../getting-started/supported-languages-and-tools). +Codacy uses [PMD's Copy/Paste Detector (CPD)](https://docs.pmd-code.org/latest/) to identify duplicated blocks of code [on the supported languages](../getting-started/supported-languages-and-tools.mdx). By default, Codacy only reports duplicate code blocks that have the following minimum token length, depending on the language: @@ -325,11 +325,11 @@ engines: You can use a Codacy configuration file to manage the languages that Codacy analyzes in your repository. :::note -Codacy applies the language settings from the Codacy configuration file as well as any settings defined [in the Codacy UI](./languages). +Codacy applies the language settings from the Codacy configuration file as well as any settings defined [in the Codacy UI](./languages.mdx). ::: ### Adding custom file extensions \{#file-extensions\} -To [add custom file extensions to languages](./languages#configuring-file-extensions) using a Codacy configuration file, you must define one or more extensions under `languages..extensions`. Keep in mind that some tools might not work out of the box with those extensions. +To [add custom file extensions to languages](./languages.mdx#configuring-file-extensions) using a Codacy configuration file, you must define one or more extensions under `languages..extensions`. Keep in mind that some tools might not work out of the box with those extensions. For example: @@ -342,7 +342,7 @@ languages: ``` ### Disabling analysis of a language \{#disable-language\} -To [disable the analysis of a specific language](./languages#disable-language) using a Codacy configuration file, set `languages..enabled` to `false`. The analysis is enabled by default for all languages. +To [disable the analysis of a specific language](./languages.mdx#disable-language) using a Codacy configuration file, set `languages..enabled` to `false`. The analysis is enabled by default for all languages. For example: diff --git a/docusaurus/docs/repositories-configure/configuring-code-patterns.mdx b/docusaurus/docs/repositories-configure/configuring-code-patterns.mdx index 51de161b29..ef24c7bac8 100644 --- a/docusaurus/docs/repositories-configure/configuring-code-patterns.mdx +++ b/docusaurus/docs/repositories-configure/configuring-code-patterns.mdx @@ -27,7 +27,7 @@ To configure the tools and code patterns for a repository using the Codacy UI: ![Toggling tools](./images/code-patterns-toggle-tools.png) -1. Select a tool to enable or disable its code patterns. To make it easier to find relevant patterns, use the filters above the pattern list. You can filter by [issue category](../faq/code-analysis/which-metrics-does-codacy-calculate#issues), status, severity level, or display only recommended code patterns. +1. Select a tool to enable or disable its code patterns. To make it easier to find relevant patterns, use the filters above the pattern list. You can filter by [issue category](../faq/code-analysis/which-metrics-does-codacy-calculate.mdx#issues), status, severity level, or display only recommended code patterns. To see an explanation of the issues that a pattern detects and how to fix them, click the respective dropdown arrow. @@ -39,7 +39,7 @@ To configure the tools and code patterns for a repository using the Codacy UI: ![Configuring code patterns](./images/code-patterns-configure.png) -1. Optionally, to take the changes into account immediately, [reanalyze the repository manually](../faq/repositories/how-do-i-reanalyze-my-repository). Otherwise, Codacy will use the updated configuration when analyzing new commits and pull requests. +1. Optionally, to take the changes into account immediately, [reanalyze the repository manually](../faq/repositories/how-do-i-reanalyze-my-repository.mdx). Otherwise, Codacy will use the updated configuration when analyzing new commits and pull requests. ## Discover code patterns across all tools \{#discover-code-patterns-across-all-tools\} To discover code patterns across all tools, click **Discover patterns** at the top of the **Tools** list. @@ -49,7 +49,7 @@ Use the input field to search for patterns by name or description. You can also You can also expand your search to include patterns from all tools, even if the tool is not enabled for the repository. ## Customizing applied coding standards \{#customizing-applied-coding-standards\} -To apply or edit a repository's [coding standards](../organizations/using-coding-standards), click **Customize** in the **Following ...** section at the top of the **Code patterns** page. +To apply or edit a repository's [coding standards](../organizations/using-coding-standards.mdx), click **Customize** in the **Following ...** section at the top of the **Code patterns** page. ![Customize applied coding standards](./images/code-patterns-cs-customize.png) @@ -74,9 +74,9 @@ You can add extra tools and patterns, if these are not enabled by any applied co -->*/} :::note -- After activating a configuration file for a tool, Codacy uses that configuration file even if you [exclude it from Codacy analysis](./ignoring-files). +- After activating a configuration file for a tool, Codacy uses that configuration file even if you [exclude it from Codacy analysis](./ignoring-files.mdx). -- When [using a tool configuration file alongside a coding standard](../organizations/using-coding-standards#using-with-tool-configuration), the configuration file controls the code patterns, while the coding standard controls whether the tool is enabled or disabled. +- When [using a tool configuration file alongside a coding standard](../organizations/using-coding-standards.mdx#using-with-tool-configuration), the configuration file controls the code patterns, while the coding standard controls whether the tool is enabled or disabled. ::: @@ -324,5 +324,5 @@ Codacy doesn't support configuration files for the following tools: ## See also -- [Applying a coding standard across multiple repositories](../organizations/using-coding-standards) +- [Applying a coding standard across multiple repositories](../organizations/using-coding-standards.mdx) - [How to implement Google JavaScript style guide with Codacy](https://blog.codacy.com/implement-google-javascript-style-guide-with-codacy/) diff --git a/docusaurus/docs/repositories-configure/ignoring-files.mdx b/docusaurus/docs/repositories-configure/ignoring-files.mdx index e907f2239e..1d83445351 100644 --- a/docusaurus/docs/repositories-configure/ignoring-files.mdx +++ b/docusaurus/docs/repositories-configure/ignoring-files.mdx @@ -17,24 +17,24 @@ To exclude files from your repository analysis open your repository **Settings** :::note - See below the files that Codacy [ignores by default](#default-ignored-files). -- You can also ignore files using your own [tool configuration files](./configuring-code-patterns#using-your-own-tool-configuration-files), although this depends on the option being supported by each tool. +- You can also ignore files using your own [tool configuration files](./configuring-code-patterns.mdx#using-your-own-tool-configuration-files), although this depends on the option being supported by each tool. - - When excluding files from **Duplication** analysis, you must state the **entire path** to the files. Unlike quality analysis, wildcards will not work, resulting in files not being excluded. ::: -If you need more flexibility in ignoring files, use a Codacy configuration file to [define a custom list of file paths to exclude](codacy-configuration-file#syntax-for-ignoring-files). +If you need more flexibility in ignoring files, use a Codacy configuration file to [define a custom list of file paths to exclude](./codacy-configuration-file.mdx#syntax-for-ignoring-files). :::caution -If your repository has a [Codacy configuration file](./codacy-configuration-file), the **Ignored files** settings defined on the Codacy UI don't apply and you must [ignore files using the configuration file](./codacy-configuration-file#ignore-files) instead. +If your repository has a [Codacy configuration file](./codacy-configuration-file.mdx), the **Ignored files** settings defined on the Codacy UI don't apply and you must [ignore files using the configuration file](./codacy-configuration-file.mdx#ignore-files) instead. ::: ![Ignored files](./images/ignored-files-configuration-file.png) ## Default ignored files -By default, Codacy ignores all the files that match the regular expressions below. If you need to analyze files that match these regular expressions, use a Codacy configuration file to [define a custom list of file paths to include](./codacy-configuration-file#include-files). +By default, Codacy ignores all the files that match the regular expressions below. If you need to analyze files that match these regular expressions, use a Codacy configuration file to [define a custom list of file paths to include](./codacy-configuration-file.mdx#include-files). ```text .*[\.-]min\.css diff --git a/docusaurus/docs/repositories-configure/integrations/bitbucket-integration.mdx b/docusaurus/docs/repositories-configure/integrations/bitbucket-integration.mdx index 763c39c7cb..61516f487e 100644 --- a/docusaurus/docs/repositories-configure/integrations/bitbucket-integration.mdx +++ b/docusaurus/docs/repositories-configure/integrations/bitbucket-integration.mdx @@ -26,7 +26,7 @@ Depending on the options that you enable, Codacy will automatically update pull ### Status checks \{#pull-request-status\} -Adds a report to your pull requests showing whether your pull requests and coverage are up to standards or not as configured on the [quality gate rules](../../repositories-configure/adjusting-quality-gates) for your repository. You can then optionally [block merging pull requests that aren't up to standards](../../getting-started/integrating-codacy-with-your-git-workflow#blocking-pull-requests). +Adds a report to your pull requests showing whether your pull requests and coverage are up to standards or not as configured on the [quality gate rules](../../repositories-configure/adjusting-quality-gates) for your repository. You can then optionally [block merging pull requests that aren't up to standards](../../getting-started/integrating-codacy-with-your-git-workflow.mdx#blocking-pull-requests). @@ -56,7 +56,7 @@ Adds AI-enhanced comments with insights to help you fix identified issues. ## Refreshing the Bitbucket integration \{#refreshing\} If the user who added the repository to Codacy loses access to the repository, which may happen when the user leaves the team or the organization, Codacy won't be able to create comments on pull requests. -In this situation, another user with [administrator access to the repository](../../organizations/roles-and-permissions-for-organizations#permissions-for-bitbucket) needs to refresh the Bitbucket integration: +In this situation, another user with [administrator access to the repository](../../organizations/roles-and-permissions-for-organizations.mdx#permissions-for-bitbucket) needs to refresh the Bitbucket integration: diff --git a/docusaurus/docs/repositories-configure/integrations/github-integration.mdx b/docusaurus/docs/repositories-configure/integrations/github-integration.mdx index b890b8fba0..2ed2676834 100644 --- a/docusaurus/docs/repositories-configure/integrations/github-integration.mdx +++ b/docusaurus/docs/repositories-configure/integrations/github-integration.mdx @@ -23,7 +23,7 @@ Depending on the options that you enable, Codacy will automatically update pull ### Status checks -Adds a report to your pull requests showing whether your pull requests and coverage are up to standards or not as configured on the [quality gate rules](../../repositories-configure/adjusting-quality-gates) for your repository. You can then optionally [block merging pull requests that aren't up to standards](../../getting-started/integrating-codacy-with-your-git-workflow#blocking-pull-requests). +Adds a report to your pull requests showing whether your pull requests and coverage are up to standards or not as configured on the [quality gate rules](../../repositories-configure/adjusting-quality-gates) for your repository. You can then optionally [block merging pull requests that aren't up to standards](../../getting-started/integrating-codacy-with-your-git-workflow.mdx#blocking-pull-requests). diff --git a/docusaurus/docs/repositories-configure/integrations/gitlab-integration.mdx b/docusaurus/docs/repositories-configure/integrations/gitlab-integration.mdx index 489c79b76c..d10db8e0e1 100644 --- a/docusaurus/docs/repositories-configure/integrations/gitlab-integration.mdx +++ b/docusaurus/docs/repositories-configure/integrations/gitlab-integration.mdx @@ -26,7 +26,7 @@ Depending on the options that you enable, Codacy will automatically update merge ### Status checks \{#pull-request-status\} -Adds a report to your merge requests showing whether your merge requests and coverage are up to standards or not as configured on the [quality gate rules](../../repositories-configure/adjusting-quality-gates) for your project. You can then optionally [block merging merge requests that aren't up to standards](../../getting-started/integrating-codacy-with-your-git-workflow#blocking-pull-requests). +Adds a report to your merge requests showing whether your merge requests and coverage are up to standards or not as configured on the [quality gate rules](../../repositories-configure/adjusting-quality-gates) for your project. You can then optionally [block merging merge requests that aren't up to standards](../../getting-started/integrating-codacy-with-your-git-workflow.mdx#blocking-pull-requests). @@ -69,7 +69,7 @@ Adds AI-enhanced comments with insights to help you fix identified issues. ## Refreshing the GitLab integration \{#refreshing\} If the user who added the repository to Codacy loses access to the repository, which may happen when the user leaves the team or the organization, Codacy won't be able to create comments on merge requests. -In this situation, another user with [administrator access to the repository](../../organizations/roles-and-permissions-for-organizations#permissions-for-gitlab) needs to refresh the GitLab integration: +In this situation, another user with [administrator access to the repository](../../organizations/roles-and-permissions-for-organizations.mdx#permissions-for-gitlab) needs to refresh the GitLab integration: diff --git a/docusaurus/docs/repositories/commits.mdx b/docusaurus/docs/repositories/commits.mdx index 3f2f113440..76027936cf 100644 --- a/docusaurus/docs/repositories/commits.mdx +++ b/docusaurus/docs/repositories/commits.mdx @@ -73,7 +73,7 @@ The **Issues** tab displays the lists of issues that the commit creates or fixes -To [ignore or manage an issue](./issues#ignoring-and-managing-issues), click the associated options in the menu. +To [ignore or manage an issue](./issues.mdx#ignoring-and-managing-issues), click the associated options in the menu. ![Issues tab](./images/commits-tab-issues.png) @@ -87,7 +87,7 @@ The following are example situations that can lead to potential issues: - If a file had [more than 50 issues reported by the same tool](../faq/code-analysis/does-codacy-place-limits-on-the-code-analysis) and you push a new commit that fixes some of these issues, Codacy will report more issues until the limit of 50 issues. These issues will be potential issues if they're outside the lines of code changed in the new commit. :::note -**If you're using GitHub** you may see [annotations](../repositories-configure/integrations/github-integration#issue-annotations) for potential issues reported under **Unchanged files with check annotations** on the **Files changed** tab of your pull requests. +**If you're using GitHub** you may see [annotations](../repositories-configure/integrations/github-integration.mdx#issue-annotations) for potential issues reported under **Unchanged files with check annotations** on the **Files changed** tab of your pull requests. This happens when Codacy reports potential issues in files that weren't changed in your pull request. [Read more about this GitHub feature](https://developer.github.com/changes/2019-09-06-more-check-annotations-shown-in-files-changed-tab/). ::: @@ -100,7 +100,7 @@ The False Positive detection is a business tier feature. If you are a Codacy Pro If your commit includes issues detected as false positives, an **Ignore all false positives** option will appear above the first issue in the list. This allows you to bulk ignore all detected false positives at once. -For more details on managing false positives, see [Managing system-detected false positives](./issues#managing-system-detected-false-positives). +For more details on managing false positives, see [Managing system-detected false positives](./issues.mdx#managing-system-detected-false-positives). ![Detected false positives](./images/pull-requests-false-positives.png) @@ -123,7 +123,7 @@ The **Duplication** tab displays the lists of clones (duplicated code blocks) th The **Complexity** tab displays the complexity changes introduced by the commit. Use the sidebar filters to filter the list by high increase (4 or more), low increase (1 to 3), or improvement (less than 0). :::note -For more information, see [how Codacy calculates cyclomatic complexity](../faq/code-analysis/which-metrics-does-codacy-calculate#complexity). +For more information, see [how Codacy calculates cyclomatic complexity](../faq/code-analysis/which-metrics-does-codacy-calculate.mdx#complexity). ::: ![Complexity tab](./images/commits-tab-complexity.png) diff --git a/docusaurus/docs/repositories/coverage.mdx b/docusaurus/docs/repositories/coverage.mdx index 907d3ca653..ac8a76268d 100644 --- a/docusaurus/docs/repositories/coverage.mdx +++ b/docusaurus/docs/repositories/coverage.mdx @@ -10,7 +10,7 @@ By default, the page displays the coverage information on the main branch of you ## Code coverage metrics -Codacy displays the following [code coverage metrics](../faq/code-analysis/which-metrics-does-codacy-calculate#code-coverage), if available: +Codacy displays the following [code coverage metrics](../faq/code-analysis/which-metrics-does-codacy-calculate.mdx#code-coverage), if available: - **Coverage percentage:** Percentage of code covered - **Covered / Coverable lines:** Number of covered and coverable lines diff --git a/docusaurus/docs/repositories/files.mdx b/docusaurus/docs/repositories/files.mdx index 7b319e7a6e..f600359967 100644 --- a/docusaurus/docs/repositories/files.mdx +++ b/docusaurus/docs/repositories/files.mdx @@ -61,11 +61,11 @@ The Files page only displays files in your repository that were analyzed by Coda - **The file might be ignored** - The Files page doesn't display [ignored files](../repositories-configure/ignoring-files) that aren't meant to be analyzed, including the [files that Codacy ignores by default](../repositories-configure/ignoring-files#default-ignored-files). + The Files page doesn't display [ignored files](../repositories-configure/ignoring-files) that aren't meant to be analyzed, including the [files that Codacy ignores by default](../repositories-configure/ignoring-files.mdx#default-ignored-files). - **The file has an extension that is not on the list of supported extensions** - Codacy supports a [list of file extensions](../repositories-configure/languages#configuring-file-extensions) associated with each language. Codacy doesn't analyze or display files with extensions that aren't associated with a language. + Codacy supports a [list of file extensions](../repositories-configure/languages.mdx#configuring-file-extensions) associated with each language. Codacy doesn't analyze or display files with extensions that aren't associated with a language. - **The file might be too big** diff --git a/docusaurus/docs/repositories/issues.mdx b/docusaurus/docs/repositories/issues.mdx index 987ab20cc4..8fcedc387a 100644 --- a/docusaurus/docs/repositories/issues.mdx +++ b/docusaurus/docs/repositories/issues.mdx @@ -74,7 +74,7 @@ Use the options in the menu of each issue to: See [how to restore ignored issues](#restoring-ignored-issues). :::tip - Organization admins can [configure who is allowed to ignore issues](../organizations/roles-and-permissions-for-organizations#change-analysis-configuration). + Organization admins can [configure who is allowed to ignore issues](../organizations/roles-and-permissions-for-organizations.mdx#change-analysis-configuration). ::: - **Disable the code pattern** that detected the issue. @@ -82,7 +82,7 @@ Use the options in the menu of each issue to: Codacy will stop using that pattern after the next analysis of your repository, so be sure that you're no longer interested in identifying similar issues. To re-enable patterns use the [Code patterns page](../repositories-configure/configuring-code-patterns). :::note - - If you're using a [custom configuration file](../repositories-configure/configuring-code-patterns#using-your-own-tool-configuration-files), you must manage patterns manually on your configuration file. + - If you're using a [custom configuration file](../repositories-configure/configuring-code-patterns.mdx#using-your-own-tool-configuration-files), you must manage patterns manually on your configuration file. - If your repository is following an [organization coding standard](../organizations/using-coding-standards), disabling the code pattern causes the repository to stop following the coding standard. In this case, Codacy asks for your confirmation before accepting the changes and then copies the coding standard configurations to your repository, so you can customize them. ::: From e0a75d536ad3358c2fad3180cbd153df49b21bb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A1udia?= Date: Fri, 2 Jan 2026 16:21:33 +0000 Subject: [PATCH 19/19] url fixes --- docusaurus/docs/chart/index.mdx | 4 +++- docusaurus/docs/chart/requirements.mdx | 4 ++-- docusaurus/docs/coverage-reporter/index.mdx | 2 ++ .../which-metrics-does-codacy-calculate.mdx | 2 +- .../getting-started/adding-a-codacy-badge.mdx | 4 ++-- .../docs/getting-started/codacy-quickstart.mdx | 2 +- .../configuring-your-repository.mdx | 2 ++ .../integrating-codacy-with-your-git-workflow.mdx | 2 ++ .../integrations/github-integration.mdx | 2 +- docusaurus/src/pages/index.tsx | 15 ++++++++++----- docusaurus/static/feed_rss_created.xml | 8 ++++++++ 11 files changed, 34 insertions(+), 13 deletions(-) create mode 100644 docusaurus/static/feed_rss_created.xml diff --git a/docusaurus/docs/chart/index.mdx b/docusaurus/docs/chart/index.mdx index 4bbdde2e3b..1cc254ea98 100644 --- a/docusaurus/docs/chart/index.mdx +++ b/docusaurus/docs/chart/index.mdx @@ -77,7 +77,9 @@ Install Codacy on an existing cluster using our Helm chart: **If you're using MicroK8s** you must map the hostname to the public IP address of the machine running MicroK8s. ::: -6. Add Codacy's chart repository to your Helm client and install the Codacy chart using the file `values-production.yaml` created previously. +### Helm upgrade \{#helm-upgrade\} + +6. Add Codacy's chart repository to your Helm client and install the Codacy chart using the file `values-production.yaml` created previously. :::caution **If you're using MicroK8s** you must download and use the file [`values-microk8s.yaml`](./values-files/values-microk8s.yaml) together with the file `values-production.yaml` by uncommenting the last line in the `helm upgrade` command below. diff --git a/docusaurus/docs/chart/requirements.mdx b/docusaurus/docs/chart/requirements.mdx index 6c21b1a6d7..0608ff8892 100644 --- a/docusaurus/docs/chart/requirements.mdx +++ b/docusaurus/docs/chart/requirements.mdx @@ -13,7 +13,7 @@ The next sections describe in detail how to set up these prerequisites. ## Git provider \{#git-provider\} -To use Codacy Self-hosted, you must use one or more of our [supported Git providers](../../faq/general/which-version-control-systems-do-you-support). In particular, if you're using a self-hosted Git provider, make sure that your version is supported by Codacy. +To use Codacy Self-hosted, you must use one or more of our [supported Git providers](../faq/general/which-platforms-and-technologies-does-codacy-support). In particular, if you're using a self-hosted Git provider, make sure that your version is supported by Codacy. ## Kubernetes or MicroK8s cluster setup \{#kubernetes-or-microk8s-cluster-setup\} @@ -44,7 +44,7 @@ The cluster must be configured to accept and establish connections on the follow The high-level architecture described in the next section is important in understanding how Codacy uses and allocates hardware resources. Below we also provide guidance on [resource provisioning for typical scenarios](#standard-cluster-provisioning). -For a custom hardware resource recommendation, please contact us at [support@codacy.com](support@codacy.com). +For a custom hardware resource recommendation, please contact us at [support@codacy.com](mailto:support@codacy.com). #### Codacy architecture diff --git a/docusaurus/docs/coverage-reporter/index.mdx b/docusaurus/docs/coverage-reporter/index.mdx index 15530a5b87..e606b6a415 100644 --- a/docusaurus/docs/coverage-reporter/index.mdx +++ b/docusaurus/docs/coverage-reporter/index.mdx @@ -155,6 +155,8 @@ However, the instructions on this page assume that you'll run the recommended [s ::: +### Authenticate with an API token \{#authenticate\} + 1. Set up an API token to allow Codacy Coverage Reporter to authenticate on Codacy: - **If you're setting up coverage for one repository**, [obtain a repository API token](../codacy-api/api-tokens.mdx#repository-api-tokens) and set the following environment variable to specify your repository API token: diff --git a/docusaurus/docs/faq/code-analysis/which-metrics-does-codacy-calculate.mdx b/docusaurus/docs/faq/code-analysis/which-metrics-does-codacy-calculate.mdx index c520f3ff54..af9fbbfa73 100644 --- a/docusaurus/docs/faq/code-analysis/which-metrics-does-codacy-calculate.mdx +++ b/docusaurus/docs/faq/code-analysis/which-metrics-does-codacy-calculate.mdx @@ -7,7 +7,7 @@ Codacy performs static code analysis and calculates code duplication, code compl The following sections describe how Codacy calculates each supported metric and where you can see each metric on the Codacy UI: -- [Which metrics does Codacy calculate?](#which-metrics-does-codacy-calculate) +- Which metrics does Codacy calculate? - [Grade](#grade) - [Issues](#issues) - [Complexity](#complexity) diff --git a/docusaurus/docs/getting-started/adding-a-codacy-badge.mdx b/docusaurus/docs/getting-started/adding-a-codacy-badge.mdx index bd7bf0006d..a2b62e9b8b 100644 --- a/docusaurus/docs/getting-started/adding-a-codacy-badge.mdx +++ b/docusaurus/docs/getting-started/adding-a-codacy-badge.mdx @@ -9,7 +9,7 @@ Add a Codacy badge to the README of your repository to display the current [code ![Codacy badge on the codacy/docs README](images/codacy-badge-example.png) {/**/} -To obtain your Codacy badge, open your repository **Settings**, tab **General**, select the markup language, and copy the generated code to your README file. You can also add a badge for your coverage if you have [set up code coverage](../coverage-reporter/index.mdx) for your repository. +To obtain your Codacy badge, open your repository **Settings**, tab **General**, select the markup language, and copy the generated code to your README file. You can also add a badge for your coverage if you have [set up code coverage](../coverage-reporter/) for your repository. ![Codacy badge](images/codacy-badge.png) @@ -28,6 +28,6 @@ The Codacy badges for your repository may become unavailable or grayed out if th To fix each badge: - [Reanalyze the branch](../faq/repositories/how-do-i-reanalyze-my-repository.mdx#reanalyzing-a-branch) associated with the **code quality badge** -- Make sure that you're [generating and uploading code coverage reports](../../coverage-reporter/) for all the commits in the branch associated with the **coverage badge** +- Make sure that you're [generating and uploading code coverage reports](../coverage-reporter/) for all the commits in the branch associated with the **coverage badge** If these steps don't fix your Codacy badges it can mean that the badges are no longer valid. In this case, repeat the steps above to replace the existing badges with new ones. diff --git a/docusaurus/docs/getting-started/codacy-quickstart.mdx b/docusaurus/docs/getting-started/codacy-quickstart.mdx index 04a002c50b..bf871ba60a 100644 --- a/docusaurus/docs/getting-started/codacy-quickstart.mdx +++ b/docusaurus/docs/getting-started/codacy-quickstart.mdx @@ -45,7 +45,7 @@ Codacy will request access to your Git provider during the authorization flow. [ ## 2. Choosing an organization \{#choosing-organization\} -Now, you'll need to add or join the organizations that contain your repositories. The organization with the same name as your Git provider username contains your personal repositories. Read more about [organizations on Codacy](../../organizations/what-are-organizations). +Now, you'll need to add or join the organizations that contain your repositories. The organization with the same name as your Git provider username contains your personal repositories. Read more about [organizations on Codacy](../organizations/what-are-organizations). To start adding your repositories, select one of the organizations. diff --git a/docusaurus/docs/getting-started/configuring-your-repository.mdx b/docusaurus/docs/getting-started/configuring-your-repository.mdx index 95bb1944b3..142ead8530 100644 --- a/docusaurus/docs/getting-started/configuring-your-repository.mdx +++ b/docusaurus/docs/getting-started/configuring-your-repository.mdx @@ -7,6 +7,8 @@ import NavMultistep from './../_includes/NavMultistep.mdx' +## Configuring your repository \{#configuring-your-repository\} + Once you've added your first repository, it's important that you configure Codacy's analysis tools to match the use cases of your team, such as configuring any coding conventions and best practices that your team may already be following or that you want to promote. It's also critical to review the configurations to avoid reporting false positives or any other issues that don't bring value to your team, which can introduce unwanted delays to the development process. You can optionally add coverage reports to detail how much of your code is covered by tests and unify your quality and coverage pipelines. You can generate coverage reports and upload them to Codacy using a range of options, such as CI/CD integration, CLI, Docker, GitHub action, and more. diff --git a/docusaurus/docs/getting-started/integrating-codacy-with-your-git-workflow.mdx b/docusaurus/docs/getting-started/integrating-codacy-with-your-git-workflow.mdx index 6fcc14d894..1be24b454f 100644 --- a/docusaurus/docs/getting-started/integrating-codacy-with-your-git-workflow.mdx +++ b/docusaurus/docs/getting-started/integrating-codacy-with-your-git-workflow.mdx @@ -8,6 +8,8 @@ import DefaultGitProviderSettingsTip from './../_includes/DefaultGitProviderSett +## Integrating Codacy with your Git workflow \{#integrating-codacy-with-your-git-workflow\} + Once you've configured your repository to best match your use case, integrate Codacy with your Git workflow to display analysis results and code coverage as status checks on your pull requests. In particular, you can configure quality gates to block merging pull requests that don't meet the quality standards of your team. This ensures the quality of the changes to your codebase, preventing the introduction of security issues and untested code. diff --git a/docusaurus/docs/repositories-configure/integrations/github-integration.mdx b/docusaurus/docs/repositories-configure/integrations/github-integration.mdx index 2ed2676834..d4b13eed58 100644 --- a/docusaurus/docs/repositories-configure/integrations/github-integration.mdx +++ b/docusaurus/docs/repositories-configure/integrations/github-integration.mdx @@ -67,7 +67,7 @@ Adds a pull request comment showing an overall view of the coverage metrics for When there are new coverage results, Codacy updates the last coverage summary comment if it's included in the last 5 comments of the pull request. Otherwise, Codacy creates a new comment. :::caution -**To get coverage summaries** you must also [add coverage to your repository](../../coverage-reporter/index). +**To get coverage summaries** you must also [add coverage to your repository](../../coverage-reporter/). ::: ![Coverage summary on GitHub](images/github-integration-coverage-summary.png) diff --git a/docusaurus/src/pages/index.tsx b/docusaurus/src/pages/index.tsx index 685d069647..d72330ae1d 100644 --- a/docusaurus/src/pages/index.tsx +++ b/docusaurus/src/pages/index.tsx @@ -16,10 +16,13 @@ export default function Home(): React.JSX.Element { Practical guides, API references, and release notes for Codacy.

- + Explore docs - + Release notes
@@ -30,17 +33,19 @@ export default function Home(): React.JSX.Element {

Get started

Install, configure, and ship with confidence.

- Start here + Start here

API guides

Automate workflows with Codacy APIs.

- Browse API docs + Browse API docs

Integrations

Connect Codacy with your CI and SCM tools.

- See integrations + + See integrations +
diff --git a/docusaurus/static/feed_rss_created.xml b/docusaurus/static/feed_rss_created.xml new file mode 100644 index 0000000000..8266c253e6 --- /dev/null +++ b/docusaurus/static/feed_rss_created.xml @@ -0,0 +1,8 @@ + + + + Codacy Release Notes + https://www.codacy.com/ + Release notes feed placeholder. + +

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 literal 0 HcmV?d00001 diff --git a/docusaurus/docs/chart/configuration/logging.mdx b/docusaurus/docs/chart/configuration/logging.mdx new file mode 100644 index 0000000000..5a5c9b45be --- /dev/null +++ b/docusaurus/docs/chart/configuration/logging.mdx @@ -0,0 +1,95 @@ +--- +description: Configure log levels and log retention periods for your Codacy Self-hosted instance. +--- + +# Logging + +Currently, Codacy Self-hosted supports two types of log configurations: + +- **[Log level](#configuring-the-log-level):** The severity of the messages that will be shown in logs. +- **[Log retention period](#configuring-the-log-retention-period):** The period during which logs will be stored, before being removed by the cleanup job specified in the configuration. + +The sections below provide instructions on how to configure each logging configuration. + +## Configuring the log level {#configuring-the-log-level} + +The log level defines the minimum severity of the events contained in the logs, and affects the necessary storage space in MinIO. + +!!! important + We recommend that you don't use a log level lower than WARN, as the logs are useful to troubleshoot any issues in your Codacy Self-hosted instance. + +Codacy supports configuring the log level of the following components: + +- `codacy-api` +- `engine` +- `listener` +- `worker-manager` + +Follow these instructions to configure the log level: + +1. Edit the value of `.config.logLevel` in the `values-production.yaml` file that is used to install Codacy, as shown in the example below. + + ```yaml + worker-manager: + replicaCount: 2 + config: + logLevel: WARN + resources: + limits: + cpu: 500m + memory: 1000Mi + requests: + cpu: 200m + memory: 200Mi + ``` + + The list of supported values for `logLevel` is shown below. Note that each level also prints the information of the levels higher than it: + + - **DEBUG (default):** Logs detailed information on the flow through the system. **This is the most verbose level**. + - **INFO:** Logs interesting events such as application startup and shutdown, important events on the flow of the system, or behavior that is skipped for expected reasons. + - **WARN:** Logs runtime events that are unexpected, or undesirable, but not necessarily wrong such as the use of deprecated APIs. + - **ERROR:** Only logs runtime errors, or unexpected conditions that prevent the expected behavior from happening. **This is the least verbose level**. + +1. Apply the new configuration by performing a Helm upgrade. To do so execute the command [used to install Codacy](../index.mdx#helm-upgrade): + + !!! important + **If you're using MicroK8s** you must use the file `values-microk8s.yaml` together with the file `values-production.yaml`. + + To do this, uncomment the last line before running the `helm upgrade` command below. + + ```bash + helm upgrade (...options used to install Codacy...) \ + --version {{ extra.codacy_self_hosted_version }} \ + --values values-production.yaml \ + # --values values-microk8s.yaml + ``` + +## Configuring the log retention period {#configuring-the-log-retention-period} + +The log retention period is the number of days during which logs will be stored before being removed by the [MinIO bucket lifecycle configuration policy](https://docs.min.io/docs/minio-bucket-lifecycle-guide.html) that we provide in the template [lifecycle-police-job.yaml](https://github.com/codacy/chart/blob/master/codacy/templates/fluentd/lifecycle-police-job.yaml). + +Follow these instructions to configure the log retention period: + +1. Adjust the retention period of your logs by editing the value of `fluentdoperator.expirationDays` in the `values.yaml` file, as shown in the example below. + + ```yaml + fluentdoperator: + enabled: true + defaultConfigmap: codacy-fluentd-config + bucketName: logs + expirationDays: 7 + ``` + +1. Apply the new configuration by performing a Helm upgrade. To do so execute the command [used to install Codacy](../index.mdx#helm-upgrade): + + !!! important + **If you're using MicroK8s** you must use the file `values-microk8s.yaml` together with the file `values-production.yaml`. + + To do this, uncomment the last line before running the `helm upgrade` command below. + + ```bash + helm upgrade (...options used to install Codacy...) \ + --version {{ extra.codacy_self_hosted_version }} \ + --values values-production.yaml \ + # --values values-microk8s.yaml + ``` diff --git a/docusaurus/docs/chart/configuration/monitoring.mdx b/docusaurus/docs/chart/configuration/monitoring.mdx new file mode 100644 index 0000000000..8eac94761e --- /dev/null +++ b/docusaurus/docs/chart/configuration/monitoring.mdx @@ -0,0 +1,144 @@ +--- +description: Instructions on how to set up monitoring for your Codacy Self-hosted instance. +--- + +# Monitoring + +Currently, Codacy Self-hosted supports two monitoring solutions: + +- **[Crow](#setting-up-monitoring-using-crow):** A simple, lightweight, and built-in monitoring solution, enabled by default when you install Codacy. +- **[Prometheus + Grafana + Loki](#setting-up-monitoring-using-grafana-prometheus-and-loki):** A comprehensive third-party monitoring solution, recommended for more advanced usage. + +The sections below provide instructions on how to set up each monitoring solution. + +## Setting up monitoring using Crow {#setting-up-monitoring-using-crow} + +Crow displays information about the projects that are pending analysis and the jobs currently running on Codacy. + +Crow is installed alongside Codacy when the Helm chart is deployed to the cluster. By default, you can access Crow as follows: + +- **URL:** `http:///monitoring`, where `` is the hostname of your Codacy instance +- **Username:** `codacy` +- **Password:** `C0dacy123` + +We highly recommend that you define a custom password for Crow, if you haven't already done it when installing Codacy: + +1. Edit the value of `global.crow.config.passwordAuth.password` in the `values-production.yaml` file that you used to install Codacy: + + ```yaml + global: + crow: + config: + passwordAuth: + password: C0dacy123 + ``` + +2. Apply the new configuration by performing a Helm upgrade. To do so execute the command [used to install Codacy](../index.mdx#helm-upgrade): + + !!! important + **If you're using MicroK8s** you must use the file `values-microk8s.yaml` together with the file `values-production.yaml`. + + To do this, uncomment the last line before running the `helm upgrade` command below. + + ```bash + helm upgrade (...options used to install Codacy...) \ + --version {{ extra.codacy_self_hosted_version }} \ + --values values-production.yaml \ + # --values values-microk8s.yaml + ``` + +## Setting up monitoring using Grafana, Prometheus, and Loki {#setting-up-monitoring-using-grafana-prometheus-and-loki} + +[Prometheus](https://prometheus.io) is an open-source systems monitoring and alerting toolkit. Logs can be collected using [Loki](https://grafana.com/oss/loki/), which is a horizontally-scalable, highly-available, multi-tenant log aggregation system. Its data can be visualized with [Grafana](https://grafana.com), a widely used open source analytics and monitoring solution. + +This solution is considerably more resource demanding than Crow, and is recommended only for more advanced usage. Furthermore, its installation, configuration, and management require a deeper knowledge of Kubernetes as each component must be carefully tweaked to match your specific use case, using as starting point the `.yaml` values files provided by us. + +The instructions below cover the basic installation of these monitoring services using the [Kube Prometheus Stack](https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack). + +!!! important + **If you're using MicroK8s** run `alias kubectl=microk8s.kubectl`. + +### 1. Install custom resources + +Add the custom resources required for installing the monitoring bundle in your cluster: + +```bash +kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.58.0/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagerconfigs.yaml +kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.58.0/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagers.yaml +kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.58.0/example/prometheus-operator-crd/monitoring.coreos.com_podmonitors.yaml +kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.58.0/example/prometheus-operator-crd/monitoring.coreos.com_probes.yaml +kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.58.0/example/prometheus-operator-crd/monitoring.coreos.com_prometheuses.yaml +kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.58.0/example/prometheus-operator-crd/monitoring.coreos.com_prometheusrules.yaml +kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.58.0/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml +kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.58.0/example/prometheus-operator-crd/monitoring.coreos.com_thanosrulers.yaml +``` + +### 2. Installing Loki + +Obtain the configuration file for Loki, [`values-loki.yaml`](../values-files/values-loki.yaml), and install it by running the command below. While the default storage class setting for Loki persistence should suit most use cases, you may need to adjust it to your specific Kubernetes installation. For instance, for MicroK8s use `storageClassName: microk8s-hostpath`. + +```bash +helm repo add grafana https://grafana.github.io/helm-charts + +kubectl create namespace monitoring + +helm upgrade --install --atomic --timeout 600s loki grafana/loki \ + --version 2.14.1 --namespace monitoring --values values-loki.yaml +``` + +### 3. Installing Promtail + +Promtail is an agent that ships the contents of local logs to a Loki instance. + +Obtain the configuration file for Promtail, [`values-promtail.yaml`](../values-files/values-promtail.yaml), and install it by running the command below. + +```bash +helm upgrade --install --atomic --timeout 600s promtail grafana/promtail \ + --version 2.2.0 --namespace monitoring --values values-promtail.yaml + +``` + +### 4. Installing Prometheus and Grafana + +Obtain the configuration file for the [Kube Prometheus Stack](https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack), [`values-prometheus-operator.yaml`](../values-files/values-prometheus-operator.yaml). Then: + +1. Edit the Grafana password for the `admin` user and the hostname for Grafana in the `values-prometheus-operator.yaml` file. + +2. Install the bundle on your cluster by running the command below. + +```bash +helm repo add prometheus-community https://prometheus-community.github.io/helm-charts +helm repo update + +helm upgrade --install --atomic --timeout 600s monitoring prometheus-community/kube-prometheus-stack \ + --version 39.9.0 --namespace monitoring --values values-prometheus-operator.yaml +``` + +Grafana will be available on the domain you configured in your `values-prometheus-operator.yaml` file, with Prometheus and Loki configured as datasources. Follow the [Kubernetes documentation](https://kubernetes.io/docs/tasks/administer-cluster/access-cluster-services/#accessing-services-running-on-the-cluster) if you need to access other monitoring services that are now running on your cluster, using the method that best suits your use case. + +### 5. Enable service dashboards + +Now that you have Prometheus and Grafana installed you can enable metrics reporting for Codacy components. + +1. Create a file named `values-monitoring.yaml` with the following content: + + ```yaml + global: + metrics: + kamon: + enabled: true + prometheusReporter: + enabled: true + serviceMonitor: + enabled: true + grafana: + enabled: true + ``` + +2. Apply this configuration by performing a Helm upgrade. To do so append `--values values-monitoring.yaml` to the command [used to install Codacy](../index.mdx#helm-upgrade): + + ```bash + helm upgrade (...options used to install Codacy...) \ + --version {{ extra.codacy_self_hosted_version }} \ + --values values-monitoring.yaml + ``` diff --git a/docusaurus/docs/chart/images/charts.png b/docusaurus/docs/chart/images/charts.png new file mode 100644 index 0000000000000000000000000000000000000000..95a4d41fcad3c46aeaf18f6cae70b57d397b9598 GIT binary patch literal 51820 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 \ No newline at end of file diff --git a/docusaurus/docs/chart/images/k8s-love.png b/docusaurus/docs/chart/images/k8s-love.png new file mode 100644 index 0000000000000000000000000000000000000000..b5482ed039da429978c0a1d3e460d7aaa0091036 GIT binary patch literal 35426 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 U(zxfRL6ro9r>mdKI;Vst0Fhl0%K!iX literal 0 HcmV?d00001 diff --git a/docusaurus/docs/chart/index.mdx b/docusaurus/docs/chart/index.mdx new file mode 100644 index 0000000000..d428ca6bc0 --- /dev/null +++ b/docusaurus/docs/chart/index.mdx @@ -0,0 +1,139 @@ +--- +description: Install and configure Codacy Self-hosted on Kubernetes or MicroK8s. +--- + +# Installing Codacy Self-hosted + +This documentation guides you on how to install Codacy Self-hosted on Kubernetes or MicroK8s. + +!!! important + **If you're running the legacy Codacy Self-hosted solution running on Docker** please contact so that we can assist you with the migration to Codacy Self-hosted running on Kubernetes or MicroK8s. + +To install Codacy you must complete these main steps: + +1. **Setting up the system requirements** + + Ensure that your infrastructure meets the hardware and system requirements to run Codacy. + +2. **Installing Codacy** + + Install Codacy on the cluster using our [Helm chart](https://github.com/codacy/chart/) that includes all the necessary components and dependencies. + +3. **Configuring Codacy** + + Configure integrations with Git providers and set up monitoring. + +The next sections include detailed instructions on how to complete each step of the installation process. Make sure that you complete each step before advancing to the next one. + +## 1. Setting up the system requirements + +Before you start, you must prepare and provision the database server and Kubernetes or MicroK8s cluster that will host Codacy. + +Carefully review and set up the system requirements to run Codacy by following the instructions on the page below: + +- [System requirements](requirements.mdx) + +Optionally, you can follow one of the guides below to quickly create a new Kubernetes or MicroK8s cluster that satisfies the characteristics described in the system requirements: + +- [Creating an Amazon EKS cluster](infrastructure/eks-quickstart.mdx) +- [Creating a MicroK8s cluster](infrastructure/microk8s-quickstart.mdx) + +## 2. Installing Codacy + +Install Codacy on an existing cluster using our Helm chart: + +1. Make sure that you have the following tools installed on your machine: + + - [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) within one minor version difference of your cluster + + !!! important + **If you're using MicroK8s** you don't need to install kubectl because you will execute all `kubectl` commands as `microk8s.kubectl` commands instead. To simplify this, [check how to create an alias](infrastructure/microk8s-quickstart.mdx#notes-on-installing-codacy) for `kubectl`. + + - [Helm](https://helm.sh/docs/intro/install/) version >= 3.9 + +2. Create a cluster namespace called `codacy` that will group all resources related to Codacy. + + ```bash + kubectl create namespace codacy + ``` + +3. Add the Docker registry credentials provided by Codacy together with your license to a cluster Secret. This is necessary because some Codacy Docker images are currently private. + + Substitute `` and `` with the Docker registry username and password and run the following command: + + ```bash + kubectl create secret docker-registry docker-credentials \ + --docker-username= \ + --docker-password= \ + --namespace codacy + ``` + +4. Download the template file [`values-production.yaml`](./values-files/values-production.yaml) and use a text editor of your choice to edit the value placeholders as described in the comments. + +5. Create an address record on your DNS provider mapping the hostname you used in the previous step to the IP address of your Ingress controller. + + !!! important + **If you're using MicroK8s** you must map the hostname to the public IP address of the machine running MicroK8s. + +6. Add Codacy's chart repository to your Helm client and install the Codacy chart using the file `values-production.yaml` created previously. {#helm-upgrade} + + !!! important + **If you're using MicroK8s** you must download and use the file [`values-microk8s.yaml`](./values-files/values-microk8s.yaml) together with the file `values-production.yaml` by uncommenting the last line in the `helm upgrade` command below. + + ```bash + helm repo add codacy-stable https://charts.codacy.com/stable/ + helm repo update + helm upgrade --install codacy codacy-stable/codacy \ + --namespace codacy \ + --version {{ extra.codacy_self_hosted_version }} \ + --values values-production.yaml + # --values values-microk8s.yaml + ``` + +7. By now all the Codacy pods should be starting in the cluster. Run the following command **and wait for all the pods to have the status Running**, which can take several minutes: + + ```bash + $ kubectl get pods -n codacy + NAME READY STATUS RESTARTS AGE + codacy-api-f7897b965-fgn67 1/1 Running 0 8m57s + codacy-api-f7897b965-kkqsx 1/1 Running 0 8m57s + codacy-crow-7c957d45f6-b8zp2 1/1 Running 2 8m57s + codacy-crowdb-0 1/1 Running 0 8m57s + codacy-engine-549bcb69d9-cgrqf 1/1 Running 1 8m57s + codacy-engine-549bcb69d9-sh5f4 1/1 Running 1 8m57s + codacy-fluentdoperator-x5vr2 2/2 Running 0 8m57s + codacy-listener-868b784dcf-npdfh 1/1 Running 0 8m57s + codacy-listenerdb-0 1/1 Running 0 8m57s + codacy-minio-7cfdc7b4f4-254gz 1/1 Running 0 8m57s + codacy-nfsserverprovisioner-0 1/1 Running 0 8m57s + codacy-portal-774d9fc596-rwqj5 1/1 Running 2 8m56s + codacy-rabbitmq-ha-0 1/1 Running 0 8m57s + codacy-ragnaros-69459775b5-hmj4d 1/1 Running 3 8m57s + codacy-remote-provider-service-8fb8556b-rr4ws 1/1 Running 0 8m56s + codacy-worker-manager-656dbf8d6d-n4j7c 1/1 Running 0 8m57s + ``` + +## 3. Configuring Codacy + +After successfully installing Codacy on your cluster, you're now ready to perform the post-install configuration steps: + +1. Use a browser to navigate to the Codacy hostname previously configured on the file `values-production.yaml`. + +2. Log in using your Git provider account. This automatically creates a Codacy administrator account with your credentials. + +3. Follow Codacy's onboarding process, which will guide you through the following steps: + + - Configuring one or more of the following supported integrations: + - [GitHub Cloud](configuration/integrations/github-cloud.mdx) + - [GitHub Enterprise](configuration/integrations/github-enterprise.mdx) + - [GitLab Cloud](configuration/integrations/gitlab-cloud.mdx) + - [GitLab Enterprise](configuration/integrations/gitlab-enterprise.mdx) + - [Bitbucket Cloud](configuration/integrations/bitbucket-cloud.mdx) + - [Bitbucket Server](configuration/integrations/bitbucket-server.mdx) + - [Email](configuration/integrations/email.mdx) + - Creating an initial organization + - Inviting users to Codacy + +4. As a last step we recommend that you [set up monitoring](configuration/monitoring.mdx) on your Codacy instance. + +If you run into any issues while configuring Codacy, be sure to [check our troubleshooting guide](troubleshoot/troubleshoot.mdx) for more help. diff --git a/docusaurus/docs/chart/infrastructure/EKS/aws-terraform-minimum-admin-policy.json b/docusaurus/docs/chart/infrastructure/EKS/aws-terraform-minimum-admin-policy.json new file mode 100644 index 0000000000..33154abebb --- /dev/null +++ b/docusaurus/docs/chart/infrastructure/EKS/aws-terraform-minimum-admin-policy.json @@ -0,0 +1,132 @@ +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "iam:CreateRole", + "iam:DeleteRole", + "iam:GetRole", + "iam:TagRole", + "iam:PassRole", + "iam:CreateInstanceProfile", + "iam:DeleteInstanceProfile", + "iam:GetInstanceProfile", + "iam:ListInstanceProfiles", + "iam:AddRoleToInstanceProfile", + "iam:RemoveRoleFromInstanceProfile", + "iam:ListInstanceProfilesForRole", + "iam:AttachRolePolicy", + "iam:DetachRolePolicy", + "iam:ListAttachedRolePolicies" + ], + "Resource": [ + "arn:aws:iam::*:role/codacy-*", + "arn:aws:iam::*:instance-profile/codacy-*" + ] + }, + { + "Effect": "Allow", + "Action": [ + "ec2:*Tags", + "ec2:Describe*", + "ec2:CreateVpc", + "ec2:CreateSubnet", + "ec2:CreateRouteTable", + "ec2:CreateRoute", + "ec2:CreateInternetGateway", + "ec2:AttachInternetGateway", + "ec2:AssociateRouteTable", + "ec2:ModifyVpcAttribute", + "ec2:DeleteVpc", + "ec2:DeleteSubnet", + "ec2:DeleteRouteTable", + "ec2:DeleteRoute", + "ec2:ModifyRoute", + "ec2:DeleteInternetGateway", + "ec2:CreateSecurityGroup", + "ec2:DeleteSecurityGroup", + "ec2:ModifySubnetAttribute", + "ec2:DisassociateRouteTable", + "ec2:DetachInternetGateway", + "ec2:AllocateAddress", + "ec2:ReleaseAddress", + "ec2:RevokeSecurityGroupEgress", + "ec2:RevokeSecurityGroupIngress", + "ec2:AuthorizeSecurityGroupEgress", + "ec2:AuthorizeSecurityGroupIngress", + "ec2:CreateNatGateway", + "ec2:DeleteNatGateway", + "ec2:CreateLaunchConfiguration", + "ec2:DeleteLaunchConfiguration" + ], + "Resource": "*" + }, + { + "Effect": "Allow", + "Action": "dynamodb:*", + "Resource": "arn:aws:dynamodb:*:*:table/codacy-*" + }, + { + "Effect": "Allow", + "Action": "s3:*", + "Resource": [ + "arn:aws:s3:::codacy*", + "arn:aws:s3:::codacy*/*" + ] + }, + { + "Effect": "Allow", + "Action": [ + "s3:ListAllMyBuckets", + "s3:CreateBucket", + "s3:GetBucketLocation" + ], + "Resource": "arn:aws:s3:::*" + }, + { + "Effect": "Allow", + "Action": [ + "ssm:GetParameters", + "ssm:GetParameter" + ], + "Resource": "arn:aws:ssm:*:*:parameter/aws/service/*" + }, + { + "Effect": "Allow", + "Action": "ssm:DescribeParameters", + "Resource": "arn:aws:ssm:*:*:*" + }, + { + "Effect": "Allow", + "Action": "ssm:*", + "Resource": "arn:aws:ssm:*:*:parameter/codacy*" + }, + { + "Effect": "Allow", + "Action": "logs:*", + "Resource": "arn:aws:logs:*:*:log-group:/aws/eks/codacy*" + }, + { + "Effect": "Allow", + "Action": "logs:DescribeLogGroups", + "Resource": "arn:aws:logs:*:*:log-group::log-stream:" + }, + { + "Effect": "Allow", + "Action": "eks:*", + "Resource": "arn:aws:eks:*:*:cluster/codacy*" + }, + { + "Effect": "Allow", + "Action": "autoscaling:Describe*", + "Resource": "*" + }, + { + "Effect": "Allow", + "Action": "autoscaling:*", + "Resource": "arn:aws:autoscaling:*:*:*codacy*" + } + ] +} + diff --git a/docusaurus/docs/chart/infrastructure/EKS/backend/config.tf b/docusaurus/docs/chart/infrastructure/EKS/backend/config.tf new file mode 100644 index 0000000000..fdfeca1014 --- /dev/null +++ b/docusaurus/docs/chart/infrastructure/EKS/backend/config.tf @@ -0,0 +1,17 @@ +# config.tf - terraform and providers configuration + +terraform { + required_version = "~> 0.12" +} + +provider "aws" { + # Set your AWS configuration here. For more information see the terraform + # provider information: https://www.terraform.io/docs/providers/aws/index.html + # You might need to set AWS_SDK_LOAD_CONFIG=1 to use your aws credentials file + region = var.aws_region + version = "~> 2.33" +} + +provider "random" { + version = "~> 2.2" +} diff --git a/docusaurus/docs/chart/infrastructure/EKS/backend/outputs.tf b/docusaurus/docs/chart/infrastructure/EKS/backend/outputs.tf new file mode 100644 index 0000000000..9c31814976 --- /dev/null +++ b/docusaurus/docs/chart/infrastructure/EKS/backend/outputs.tf @@ -0,0 +1,7 @@ +output "state_bucket_name" { + value = aws_s3_bucket.state.id +} + +output "lock_table_name" { + value = aws_dynamodb_table.lock.name +} diff --git a/docusaurus/docs/chart/infrastructure/EKS/backend/state_and_lock.tf b/docusaurus/docs/chart/infrastructure/EKS/backend/state_and_lock.tf new file mode 100644 index 0000000000..41369ec7f5 --- /dev/null +++ b/docusaurus/docs/chart/infrastructure/EKS/backend/state_and_lock.tf @@ -0,0 +1,50 @@ +# state_and_lock.tf - setup s3 state storage and dynamodb lock table +# For more info see https://www.terraform.io/docs/backends/types/s3.html + +resource "aws_s3_bucket" "state" { + bucket = "${var.project_tag}-terraform-state-${random_string.rand.result}" + acl = "private" + + ### To destroy uncomment this: + #force_destroy = true + ############################## + + ### To destroy comment this: + versioning { + enabled = true + } + + lifecycle { + prevent_destroy = true + } + ########################### + + tags = var.custom_tags +} + +resource "aws_dynamodb_table" "lock" { + name = "${var.project_tag}-terraform-lock" + hash_key = "LockID" + read_capacity = 20 + write_capacity = 20 + + attribute { + name = "LockID" + type = "S" + } + + ### To destroy comment this: + lifecycle { + prevent_destroy = true + } + ########################### + + tags = var.custom_tags +} + +resource "random_string" "rand" { + length = 22 + special = false + upper = false + number = false +} diff --git a/docusaurus/docs/chart/infrastructure/EKS/backend/variables.tf b/docusaurus/docs/chart/infrastructure/EKS/backend/variables.tf new file mode 100644 index 0000000000..07c9d01b68 --- /dev/null +++ b/docusaurus/docs/chart/infrastructure/EKS/backend/variables.tf @@ -0,0 +1,19 @@ +# variables.tf - user settings. For provider settings see config.tf + +variable "project_tag" { + description = "Project tag to add to s3 and dynamodb names" + type = string + default = "codacy" +} + +variable "custom_tags" { + description = "Map of custom tags to apply to every resource" + type = map(string) + default = {} +} + +variable "aws_region" { + description = "AWS region where to deploy the infrastructure" + type = string + default = "eu-west-1" +} \ No newline at end of file diff --git a/docusaurus/docs/chart/infrastructure/EKS/main/cluster_masters.tf b/docusaurus/docs/chart/infrastructure/EKS/main/cluster_masters.tf new file mode 100644 index 0000000000..f966d49399 --- /dev/null +++ b/docusaurus/docs/chart/infrastructure/EKS/main/cluster_masters.tf @@ -0,0 +1,84 @@ +# cluster_masters.tf - this creates the kubernetes cluster masters + +resource "aws_eks_cluster" "main" { + name = "${var.project_slug}-cluster" + version = var.k8s_version + + role_arn = aws_iam_role.eks_master.arn + + vpc_config { + security_group_ids = [aws_security_group.eks_master.id] + subnet_ids = var.create_network_stack ? [aws_subnet.private1[0].id, aws_subnet.private2[0].id] : var.subnet_ids + } + + # for more info see: https://docs.aws.amazon.com/eks/latest/userguide/control-plane-logs.html + enabled_cluster_log_types = [ + "api", + "audit", + "authenticator", + "controllerManager", + "scheduler", + ] + + depends_on = [ + aws_cloudwatch_log_group.eks, + aws_iam_role.eks_master, + aws_security_group.eks_master + ] + + tags = var.custom_tags + +} + +### security group +resource "aws_security_group" "eks_master" { + name = "${var.project_slug}-cluster-master" + description = "${var.project_name} master SG" + vpc_id = var.create_network_stack ? aws_vpc.main[0].id : var.vpc_id + + egress { + from_port = 0 + to_port = 0 + protocol = "-1" + cidr_blocks = ["0.0.0.0/0"] + } + + tags = merge( + map("Name", "${var.project_name} cluster master"), + var.custom_tags + ) +} + +### cluster masters role +resource "aws_iam_role" "eks_master" { + name = "${var.project_slug}-master-role" + assume_role_policy = data.aws_iam_policy_document.eks_master.json + tags = var.custom_tags +} + +data "aws_iam_policy_document" "eks_master" { + statement { + principals { + identifiers = ["eks.amazonaws.com"] + type = "Service" + } + actions = ["sts:AssumeRole"] + } +} + +### managed polices for EKS. See https://docs.aws.amazon.com/eks/latest/userguide/service_IAM_role.html +resource "aws_iam_role_policy_attachment" "eks_service" { + policy_arn = "arn:aws:iam::aws:policy/AmazonEKSServicePolicy" + role = aws_iam_role.eks_master.name +} +resource "aws_iam_role_policy_attachment" "eks_cluster" { + policy_arn = "arn:aws:iam::aws:policy/AmazonEKSClusterPolicy" + role = aws_iam_role.eks_master.name +} + +### cloudwatch control plane logs +resource "aws_cloudwatch_log_group" "eks" { + name = "/aws/eks/${var.project_slug}-cluster/cluster" + retention_in_days = 7 + tags = var.custom_tags +} diff --git a/docusaurus/docs/chart/infrastructure/EKS/main/cluster_workers.tf b/docusaurus/docs/chart/infrastructure/EKS/main/cluster_workers.tf new file mode 100644 index 0000000000..4741a6eba9 --- /dev/null +++ b/docusaurus/docs/chart/infrastructure/EKS/main/cluster_workers.tf @@ -0,0 +1,196 @@ +# cluster_workers.tf - this creates the workers autoscaling groups and launch configs, make the security group setups, +# and joins the worker nodes to the cluster. + +resource "aws_autoscaling_group" "workers" { + name = "${var.project_slug}-asg" + launch_configuration = aws_launch_configuration.workers.id + min_size = var.k8s_worker_min + max_size = var.k8s_worker_max + desired_capacity = var.k8s_worker_desired + vpc_zone_identifier = var.create_network_stack ? [aws_subnet.private1[0].id, aws_subnet.private2[0].id] : var.subnet_ids + + tag { + key = "Name" + value = "${var.project_slug}-worker" + propagate_at_launch = true + } + tag { + key = "kubernetes.io/cluster/${var.project_slug}-cluster" + value = "owned" + propagate_at_launch = true + } + tag { + key = "k8s.io/cluster-autoscaler/enabled" + value = "owned" + propagate_at_launch = false + } + + dynamic "tag" { + for_each = var.custom_tags + + content { + key = tag.key + value = tag.value + propagate_at_launch = true + } + } + + lifecycle { + create_before_destroy = true + } + +} + +resource "aws_launch_configuration" "workers" { + image_id = data.aws_ssm_parameter.eks_worker_ami.value + instance_type = var.k8s_worker_type + iam_instance_profile = aws_iam_instance_profile.eks_worker.name + name_prefix = var.project_slug + + user_data_base64 = base64encode(local.k8s_worker_userdata) + + security_groups = [ + aws_security_group.eks_worker.id + ] + + root_block_device { + volume_type = "gp2" + volume_size = var.k8s_worker_disk_size + delete_on_termination = true + } + + lifecycle { + create_before_destroy = true + } + + depends_on = [ + aws_iam_instance_profile.eks_worker + ] +} + +# Get an authentication token to communicate with an EKS cluster, using the "kubernetes" provider. +resource "kubernetes_config_map" "aws_auth" { + metadata { + name = "aws-auth" + namespace = "kube-system" + } + + data = { + mapRoles = <<-YAML + - rolearn: ${aws_iam_role.eks_worker.arn} + username: system:node:{{EC2PrivateDNSName}} + groups: + - system:bootstrappers + - system:nodes + YAML + } + depends_on = [ + aws_eks_cluster.main, + aws_autoscaling_group.workers + ] +} + +### join nodes to the cluster +locals { + k8s_worker_userdata = <<-END_USERDATA + #!/bin/bash + set -o xtrace + sudo yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm + sudo systemctl start amazon-ssm-agent + sudo systemctl enable amazon-ssm-agent + /etc/eks/bootstrap.sh --apiserver-endpoint '${aws_eks_cluster.main.endpoint}' --b64-cluster-ca '${aws_eks_cluster.main.certificate_authority.0.data}' '${var.project_slug}-cluster' ${var.k8s_worker_bootstrap_extra_flags} + END_USERDATA +} + + +### worker nodes instance profile +resource "aws_iam_instance_profile" "eks_worker" { + name = "${var.project_slug}-worker" + role = aws_iam_role.eks_worker.name +} + +resource "aws_iam_role" "eks_worker" { + name = "${var.project_slug}-worker-role" + assume_role_policy = data.aws_iam_policy_document.eks_worker.json + tags = var.custom_tags +} + +data "aws_iam_policy_document" "eks_worker" { + statement { + principals { + identifiers = ["ec2.amazonaws.com"] + type = "Service" + } + actions = ["sts:AssumeRole"] + } +} + +### managed policies for worker nodes. See: https://docs.aws.amazon.com/eks/latest/userguide/worker_node_IAM_role.html +resource "aws_iam_role_policy_attachment" "eks_worker" { + policy_arn = "arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy" + role = aws_iam_role.eks_worker.name +} +resource "aws_iam_role_policy_attachment" "eks_cni" { + policy_arn = "arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy" + role = aws_iam_role.eks_worker.name +} +resource "aws_iam_role_policy_attachment" "ecr_read_only" { + policy_arn = "arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly" + role = aws_iam_role.eks_worker.name +} +### managed policy for systems manager +resource "aws_iam_role_policy_attachment" "ssm" { + count = var.enable_ssm ? 1 : 0 + policy_arn = "arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore" + role = aws_iam_role.eks_worker.name +} + +### security groups setup +resource "aws_security_group" "eks_worker" { + name = "${var.project_slug}-cluster-worker" + description = "${var.project_name} worker SG" + vpc_id = var.create_network_stack ? aws_vpc.main[0].id : var.vpc_id + + egress { + from_port = 0 + to_port = 0 + protocol = "-1" + cidr_blocks = ["0.0.0.0/0"] + } + + tags = merge( + map( + "Name", "${var.project_slug}-worker-sg", + "kubernetes.io/cluster/${var.project_slug}-cluster", "owned" + ), + var.custom_tags + ) +} + +resource "aws_security_group_rule" "allow_worker_worker" { + description = "Allow worker-worker connections" + security_group_id = aws_security_group.eks_worker.id + source_security_group_id = aws_security_group.eks_worker.id + type = "ingress" + protocol = "-1" + from_port = 0 + to_port = 65535 +} +resource "aws_security_group_rule" "allow_master_worker" { + description = "Allow worker connections from masters" + security_group_id = aws_security_group.eks_worker.id + source_security_group_id = aws_security_group.eks_master.id + type = "ingress" + protocol = "tcp" + from_port = 1025 + to_port = 65535 +} +resource "aws_security_group_rule" "allow_worker_master" { + description = "Allow connections from worker nodes" + security_group_id = aws_security_group.eks_master.id + source_security_group_id = aws_security_group.eks_worker.id + type = "ingress" + protocol = "tcp" + from_port = 443 + to_port = 443 +} diff --git a/docusaurus/docs/chart/infrastructure/EKS/main/config.tf b/docusaurus/docs/chart/infrastructure/EKS/main/config.tf new file mode 100644 index 0000000000..295d1142cc --- /dev/null +++ b/docusaurus/docs/chart/infrastructure/EKS/main/config.tf @@ -0,0 +1,39 @@ +# config.tf - terraform and providers configuration + +terraform { + required_version = "~> 0.12" + # Using a backend is recommended. See https://www.terraform.io/docs/backends/index.html + # You may use the provided S3 backend configuration by + # 1. first running `terraform apply` on the `backend/` directory, + # 2. getting the state bucket name with `terraform output state_bucket_name` + # 3. uncommenting the following lines, filling in the required infomation (bucket name and region) + # and (re)initializing terraform with `terraform init -reconfigure -backend=true` + + #backend "s3" { + # encrypt = true + # bucket = "YOUR_S3_BUCKET_NAME_HERE" + # dynamodb_table = "codacy-terraform-lock" + # region = "YOUR_REGION_HERE" + # key = "codacy/cluster.tfstate" + #} +} + +provider "aws" { + # Set your AWS configuration here. For more information see the terraform + # provider information: https://www.terraform.io/docs/providers/aws/index.html + # You might need to set AWS_SDK_LOAD_CONFIG=1 to use your aws credentials file + region = var.aws_region + version = "~> 2.33" +} + +provider "kubernetes" { + host = aws_eks_cluster.main.endpoint + cluster_ca_certificate = base64decode(aws_eks_cluster.main.certificate_authority.0.data) + token = data.aws_eks_cluster_auth.eks_cluster_auth.token + # Change `load_config_file` to `true` if, when reapplying, you obtain an error with content similar to: + # + # Error: configmaps "aws-auth" is forbidden: User "system:anonymous" cannot get resource "configmaps" in API group "" in the namespace "kube-system" + # + load_config_file = false + version = "~> 1.5" +} diff --git a/docusaurus/docs/chart/infrastructure/EKS/main/constants.tf b/docusaurus/docs/chart/infrastructure/EKS/main/constants.tf new file mode 100644 index 0000000000..62094e74b5 --- /dev/null +++ b/docusaurus/docs/chart/infrastructure/EKS/main/constants.tf @@ -0,0 +1,15 @@ +# constants.tf - AWS constants + +data "aws_availability_zones" "AZs" { + state = "available" +} + +data "aws_region" "current" {} + +data "aws_ssm_parameter" "eks_worker_ami" { + name = "/aws/service/eks/optimized-ami/${var.k8s_version}/amazon-linux-2/recommended/image_id" +} + +data "aws_eks_cluster_auth" "eks_cluster_auth" { + name = aws_eks_cluster.main.name +} diff --git a/docusaurus/docs/chart/infrastructure/EKS/main/network.tf b/docusaurus/docs/chart/infrastructure/EKS/main/network.tf new file mode 100644 index 0000000000..3b7301477a --- /dev/null +++ b/docusaurus/docs/chart/infrastructure/EKS/main/network.tf @@ -0,0 +1,250 @@ +# network.tf - this creates the base network infrastructure required for the EKS cluster. +# Four subnets (two private and two public) are included in the main VPC, +# split over two availability zones. A NAT gateway is placed in each public +# subnet to allow egress internet access for instances located on private +# subnets. This traffic is sent via the also provided internet gateway. + + +resource "aws_vpc" "main" { + count = var.create_network_stack ? 1 : 0 + + cidr_block = var.vpc_cidr + + tags = merge( + map( + "Name", var.project_name, + "kubernetes.io/cluster/${var.project_slug}-cluster", "shared" + ), + var.custom_tags + ) +} + +### public route table +resource "aws_internet_gateway" "main" { + count = var.create_network_stack ? 1 : 0 + + vpc_id = aws_vpc.main[0].id + + tags = merge( + map("Name", var.project_name), + var.custom_tags + ) +} +resource "aws_route_table" "public" { + count = var.create_network_stack ? 1 : 0 + + vpc_id = aws_vpc.main[0].id + + tags = merge( + map("Name", "${var.project_name} public route table"), + var.custom_tags + ) +} +resource "aws_route" "public" { + count = var.create_network_stack ? 1 : 0 + + route_table_id = aws_route_table.public[0].id + gateway_id = aws_internet_gateway.main[0].id + destination_cidr_block = "0.0.0.0/0" +} + +### public subnet 1 +resource "aws_subnet" "public1" { + count = var.create_network_stack ? 1 : 0 + + vpc_id = aws_vpc.main[0].id + cidr_block = var.public_subnet1_cidr + availability_zone = data.aws_availability_zones.AZs.names[0] + + map_public_ip_on_launch = true + + tags = merge( + map( + "Name", "${var.project_name} public subnet 1", + "kubernetes.io/cluster/${var.project_slug}-cluster", "shared" + ), + var.custom_tags + ) +} +resource "aws_route_table_association" "public1" { + count = var.create_network_stack ? 1 : 0 + + route_table_id = aws_route_table.public[0].id + subnet_id = aws_subnet.public1[0].id +} + + +### public subnet 2 +resource "aws_subnet" "public2" { + count = var.create_network_stack ? 1 : 0 + + vpc_id = aws_vpc.main[0].id + cidr_block = var.public_subnet2_cidr + availability_zone = data.aws_availability_zones.AZs.names[1] + + map_public_ip_on_launch = true + + tags = merge( + map( + "Name", "${var.project_name} public subnet 2", + "kubernetes.io/cluster/${var.project_slug}-cluster", "shared" + ), + var.custom_tags + ) +} +resource "aws_route_table_association" "public2" { + count = var.create_network_stack ? 1 : 0 + + route_table_id = aws_route_table.public[0].id + subnet_id = aws_subnet.public2[0].id +} + +### private subnet 1 +resource "aws_subnet" "private1" { + count = var.create_network_stack ? 1 : 0 + + vpc_id = aws_vpc.main[0].id + cidr_block = var.private_subnet1_cidr + availability_zone = data.aws_availability_zones.AZs.names[0] + + tags = merge( + map( + "Name", "${var.project_name} private subnet 1", + "kubernetes.io/cluster/${var.project_slug}-cluster", "shared" + ), + var.custom_tags + ) +} + +### private subnet 1 route table +resource "aws_eip" "public1" { + count = var.create_network_stack ? 1 : 0 + + depends_on = [aws_internet_gateway.main[0]] + vpc = true + + tags = var.custom_tags +} +resource "aws_nat_gateway" "public1" { + count = var.create_network_stack ? 1 : 0 + + allocation_id = aws_eip.public1[0].id + subnet_id = aws_subnet.public1[0].id + + tags = var.custom_tags +} +resource "aws_route_table" "private1" { + count = var.create_network_stack ? 1 : 0 + + vpc_id = aws_vpc.main[0].id + + tags = var.custom_tags +} +resource "aws_route" "private1" { + count = var.create_network_stack ? 1 : 0 + + route_table_id = aws_route_table.private1[0].id + destination_cidr_block = "0.0.0.0/0" + nat_gateway_id = aws_nat_gateway.public1[0].id +} +resource "aws_route_table_association" "private1" { + count = var.create_network_stack ? 1 : 0 + + route_table_id = aws_route_table.private1[0].id + subnet_id = aws_subnet.private1[0].id +} + +### private subnet 2 +resource "aws_subnet" "private2" { + count = var.create_network_stack ? 1 : 0 + + vpc_id = aws_vpc.main[0].id + cidr_block = var.private_subnet2_cidr + availability_zone = data.aws_availability_zones.AZs.names[1] + + tags = merge( + map( + "Name", "${var.project_name} private subnet 2", + "kubernetes.io/cluster/${var.project_slug}-cluster", "shared" + ), + var.custom_tags + ) +} + +### private subnet 2 route table +resource "aws_eip" "public2" { + count = var.create_network_stack ? 1 : 0 + + depends_on = [aws_internet_gateway.main[0]] + vpc = true + + tags = var.custom_tags +} +resource "aws_nat_gateway" "public2" { + count = var.create_network_stack ? 1 : 0 + + allocation_id = aws_eip.public2[0].id + subnet_id = aws_subnet.public2[0].id + + tags = var.custom_tags +} +resource "aws_route_table" "private2" { + count = var.create_network_stack ? 1 : 0 + + vpc_id = aws_vpc.main[0].id + + tags = var.custom_tags +} +resource "aws_route" "private2" { + count = var.create_network_stack ? 1 : 0 + + route_table_id = aws_route_table.private2[0].id + destination_cidr_block = "0.0.0.0/0" + nat_gateway_id = aws_nat_gateway.public2[0].id +} +resource "aws_route_table_association" "private2" { + count = var.create_network_stack ? 1 : 0 + + route_table_id = aws_route_table.private2[0].id + subnet_id = aws_subnet.private2[0].id +} + +### vpc endpoints +data aws_iam_policy_document "allow_all" { + statement { + actions = ["*"] + principals { + identifiers = ["*"] + type = "AWS" + } + resources = ["*"] + } +} + +resource "aws_vpc_endpoint" "s3" { + count = var.create_vpc_endpoints && var.create_network_stack ? 1 : 0 + + service_name = "com.amazonaws.${data.aws_region.current.name}.s3" + vpc_id = aws_vpc.main[0].id + route_table_ids = [ + aws_route_table.private1[0].id, + aws_route_table.private2[0].id + ] + policy = data.aws_iam_policy_document.allow_all.json + + tags = var.custom_tags +} + +resource "aws_vpc_endpoint" "dynamodb" { + count = var.create_vpc_endpoints && var.create_network_stack ? 1 : 0 + + service_name = "com.amazonaws.${data.aws_region.current.name}.dynamodb" + vpc_id = aws_vpc.main[0].id + route_table_ids = [ + aws_route_table.private1[0].id, + aws_route_table.private2[0].id + ] + policy = data.aws_iam_policy_document.allow_all.json + + tags = var.custom_tags +} diff --git a/docusaurus/docs/chart/infrastructure/EKS/main/outputs.tf b/docusaurus/docs/chart/infrastructure/EKS/main/outputs.tf new file mode 100644 index 0000000000..e43cdf266d --- /dev/null +++ b/docusaurus/docs/chart/infrastructure/EKS/main/outputs.tf @@ -0,0 +1,29 @@ +output "cluster_endpoint" { + value = aws_eks_cluster.main.endpoint +} + +locals { + aws_auth_configmap = <<-EOF + + + apiVersion: v1 + kind: ConfigMap + metadata: + name: aws-auth + namespace: kube-system + data: + mapRoles: | + - rolearn: ${aws_iam_role.eks_worker.arn} + username: system:node:{{EC2PrivateDNSName}} + groups: + - system:bootstrappers + - system:nodes + EOF +} + +output "aws_auth_configmap" { + # Add this to your cluster by running: + # terraform output aws_auth_configmap | kubectl apply -f - + # + value = local.aws_auth_configmap +} diff --git a/docusaurus/docs/chart/infrastructure/EKS/main/variables.tf b/docusaurus/docs/chart/infrastructure/EKS/main/variables.tf new file mode 100644 index 0000000000..b4aea8c20c --- /dev/null +++ b/docusaurus/docs/chart/infrastructure/EKS/main/variables.tf @@ -0,0 +1,140 @@ +# variables.tf - user settings. For terraform settings see config.tf + +### project +variable "aws_region" { + description = "AWS region where to deploy the infrastructure" + type = string + default = "eu-west-1" +} + +variable "project_name" { + description = "Base project name, used to tag resources" + type = string + default = "Codacy" +} + +variable "project_slug" { + description = "Base project slug, used to name resources" + type = string + default = "codacy" +} + +variable "custom_tags" { + description = "Map of custom tags to apply to every resource" + type = map(string) + default = {} +} + +### kubernetes +variable "k8s_version" { + description = "Kubernetes version to use in the cluster" + type = string + default = "1.16" +} + +variable "k8s_worker_type" { + description = "Instance type used for kubernetes worker nodes" + type = string + default = "m5.2xlarge" +} + +variable "k8s_worker_bootstrap_extra_flags" { + description = "Additional flags to pass to the kubernetes worker node bootstrap script" + type = string + default = "" +} + +variable "k8s_worker_disk_size" { + description = "Size (in GB) of the disk used for kubernetes worker nodes" + type = number + default = 100 +} + +variable "k8s_worker_min" { + description = "Minimimum number of kubernetes worker nodes" + type = number + default = 2 +} + +variable "k8s_worker_max" { + description = "Maximum number of kubernetes worker nodes" + type = number + default = 8 +} + +variable "k8s_worker_desired" { + description = "Desired number of kubernetes worker nodes" + type = number + default = 4 +} + +### network +variable "create_network_stack" { + description = "If true then create the network stack (set to false to use preexisting VPC / networks)" + type = bool + default = true +} + +### create everything +variable "vpc_cidr" { + description = "CIDR of the VPC wich house the EKS cluster" + type = string + default = "10.8.0.0/16" +} + +variable "private_subnet1_cidr" { + description = "CIDR of private subnet 1 (this should be large)" + type = string + default = "10.8.0.0/18" +} + +variable "private_subnet2_cidr" { + description = "CIDR of private subnet 2 (this should be large)" + type = string + default = "10.8.64.0/18" +} + +variable "public_subnet1_cidr" { + description = "CIDR of public subnet 1" + type = string + default = "10.8.128.0/19" +} + +variable "public_subnet2_cidr" { + description = "CIDR of public subnet 2" + type = string + default = "10.8.160.0/19" +} + +variable "create_vpc_endpoints" { + description = "If true then vpc endpoints for DynamoDB and S3" + # This allows direct access to these resources from the private subnet, thus reducing nat gateway trafic. + type = bool + default = false +} + +### use existing vpc and subnets (create_network_stack == false) +variable "vpc_id" { + description = "ID of the vpc where to deploy (only used if create_network_stack == false)" + type = string + default = null +} + +variable "subnet_ids" { + description = "List of subnet IDs to use for the cluster (only used if create_network_stack == false)" + type = list(string) + default = [] +} + +### general +variable "ssm_prefix" { + description = "Prefix used for the SSM parameters" + type = string + default = "/codacy/enterprise" +} + +variable "enable_ssm" { + description = "If true then add systems manager policy to nodes (this allows remote access for authorized users)" + type = bool + default = false +} diff --git a/docusaurus/docs/chart/infrastructure/eks-quickstart.mdx b/docusaurus/docs/chart/infrastructure/eks-quickstart.mdx new file mode 100644 index 0000000000..acc8d48070 --- /dev/null +++ b/docusaurus/docs/chart/infrastructure/eks-quickstart.mdx @@ -0,0 +1,183 @@ +--- +descriptions: Set up an Amazon EKS cluster to run Codacy Self-hosted, including the necessary underlying infrastructure, using Terraform. +--- + +# Creating an Amazon EKS cluster + +Follow the instructions below to set up an Amazon EKS cluster from scratch, including the necessary underlying infrastructure, using Terraform. + +The following diagram is a non-exhaustive overview of what you can expect to have deployed in your AWS account by using this quickstart guide. + +![Codacy Amazon EKS quickstart](images/codacy-chart-eks-quickstart.jpg){: width="1024"} + +## 1. Prepare your environment + +Prepare your environment to set up the Amazon EKS cluster: + +1. Make sure that you have the following tools installed on your machine: + + - [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) version >= 2.0.0 + - [AWS CLI](https://docs.aws.amazon.com/cli/v1/userguide/cli-chap-install.html) version 1 + - [Terraform](https://learn.hashicorp.com/tutorials/terraform/install-cli) version >= 0.12 + - [Kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) version >= 1.14 + +2. Set up the AWS CLI credentials for your AWS account using the [AWS CLI](https://docs.aws.amazon.com/polly/latest/dg/setup-aws-cli.html) and [Terraform](https://www.terraform.io/docs/providers/aws/index.html) documentation as reference. + + Note that, as stated on the [Terraform documentation](https://registry.terraform.io/providers/hashicorp/aws/2.70.1/docs#shared-credentials-file), if your `.aws/credentials` are more complex you might need to set `AWS_SDK_LOAD_CONFIG=1` for Terraform to work correctly: + + ```bash + export AWS_SDK_LOAD_CONFIG=1 + ``` + +3. Clone the Codacy chart repository and change to the directory that includes the provided Terraform configuration files: + + ```bash + git clone https://github.com/codacy/chart.git + cd chart/docs/infrastructure/EKS/ + ``` + + This folder includes the following infrastructure stacks: + + - **backend:** Optional S3 bucket for storing the Terraform state and a DynamoDB table for state locking + - **main:** Amazon EKS cluster, including the setup of all network and node infrastructure to go from zero to a fully functional cluster + + You must have administration privileges on AWS to deploy (and eventually destroy) this infrastructure. The policy file [aws-terraform-minimum-admin-policy.json](./EKS/aws-terraform-minimum-admin-policy.json) lists the minimum privileges that are required. + +## 2. Set up the Terraform state storage backend + +The [backend](https://www.terraform.io/docs/backends/index.html) stores the current and historical state of your infrastructure. + +Although using the backend is optional, we recommend that you deploy it, particularly if you're planning to use these Terraform templates to make modifications to the cluster in the future: + +1. Initialize Terraform and deploy the infrastructure described in the `backend/` directory, then follow Terraform's instructions: + + ```bash + cd backend/ + terraform init && terraform apply + ``` + + This creates an Amazon S3 bucket with a unique name to save the infrastructure state. + +2. Take note of the value of `state_bucket_name` in the output of the command. + +3. Edit the `main/config.tf` file and follow the instructions included in the comments to set the name of the Amazon S3 bucket created above and enable the use of the backend in those infrastructure stacks. + +## 3. Create a vanilla Amazon EKS cluster + +Create a cluster that includes all the required network and node setup: + +1. Initialize Terraform and deploy the infrastructure described in the `main/` directory, then follow Terraform's instructions: + + ```bash + cd ../main/ + terraform init && terraform apply + ``` + + This process takes around 10 minutes. + +2. Consider if you want to tailor the cluster to your needs by customizing the cluster configuration. + + The cluster configuration (such as the type and number of nodes, network CIDRs, etc.) is exposed as variables in the `main/variables.tf` file. + + To customize the defaults of that file we recommend that you use a [variable definitions file](https://www.terraform.io/docs/configuration/variables.html#variable-definitions-tfvars-files) and set the variables in a file named `terraform.tfvars` in the directory `main/`. The following is an example `terraform.tfvars`: + + ```text + some_key = "a_string_value" + another_key = 3 + someting_else = true + ``` + + Subsequently running `terraform apply` loads the variables in the `terraform.tfvars` file by default: + + ```bash + terraform apply + ``` + +3. Set up the kubeconfig file that stores the information needed by `kubectl` to connect to the new cluster by default: + + ```bash + aws eks update-kubeconfig --name codacy-cluster --alias codacy-cluster + ``` + +4. Get information about the pods in the cluster to test that the cluster was created and that `kubectl` can successfully connect to the cluster: + + ```bash + kubectl get pods -A + ``` + +## 4. Prepare to set up the Ingress Controller + +Prepare your infrastructure for the Ingress Controller setup, which is performed later during the installation process: + +1. Make sure that your network resources are correctly tagged, and create the following required tags if they are missing: + + | Resource Type | Key = Value | + | ---------------- | --------------------------------------------------------------------------------------------- | + | VPC | `kubernetes.io/cluster/codacy-cluster` = `shared` | + | Subnet (public) | `kubernetes.io/cluster/codacy-cluster` = `shared`
`kubernetes.io/role/elb` = `1` | + | Subnet (private) | `kubernetes.io/cluster/codacy-cluster` = `shared`
`kubernetes.io/role/internal-elb` = `1` | + + For more information refer to the [AWS documentation](https://docs.aws.amazon.com/eks/latest/userguide/network_reqs.html). + +2. Add the following chart repositories to Helm: + + ```bash + helm repo add stable https://charts.helm.sh/stable + helm repo update + ``` + +## 5. Install the NGINX Ingress Controller + +Install the NGINX Ingress Controller: + +1. Download the configuration file [`values-nginx.yaml`](../values-files/values-nginx.yaml) for the NGINX Ingress Controller. + + If you wish to use a private load balancer or restrict the IP range for the provisioned load balancer edit the file and enable the required annotation and/or the corresponding setting where indicated. + +2. Install the NGINX Ingress Controller. + + **If you're using Kubernetes version <=1.21**, run: + + ```bash + kubectl create namespace codacy + helm upgrade --install --namespace codacy --version 1.39.0 codacy-nginx-ingress stable/nginx-ingress -f values-nginx.yaml + ``` + + **If you're using Kubernetes version 1.22 or later**, run: + + ``` + kubectl create namespace codacy + helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx + helm repo update + helm upgrade --install --namespace codacy --version 4.8.3 nginx-ingress ingress-nginx/ingress-nginx -f values-nginx.yaml + ``` + +## Uninstalling the Amazon EKS cluster + +!!! warning + If you proceed beyond this point you'll permanently delete and break things. + +1. Delete the Kubernetes cluster. + + Run the following command in the `main/` directory: + + ```bash + terraform destroy + ``` + + This process takes around 10 minutes. + +2. Remove the Terraform backend. + + If you created the Terraform backend with the provided stack you can now safely delete it. + + The backend is purposely created with extra settings to prevent its accidental destruction. To destroy it cleanly you must first disable these settings by editing the file `backend/state_and_lock.tf` and following the instructions included in the comments. + + Afterwards, run the following command in the `backend/` directory: + + ```bash + terraform apply && terraform destroy + ``` + + Note that you first have to run `terraform apply` to update the settings, and only + then will `terraform destroy` be able to destroy the backend. diff --git a/docusaurus/docs/chart/infrastructure/images/codacy-chart-eks-quickstart.jpg b/docusaurus/docs/chart/infrastructure/images/codacy-chart-eks-quickstart.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c30168af33bc9a34acfd182c5695a43dd36650a0 GIT binary patch literal 355990 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
t0)u|_#@*PyoXm{DJJx-Q>%8TPc!jxU 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 Yl7~7j>?~wvza|siX^_{tir60hKd7+>!2kdN literal 0 HcmV?d00001 diff --git a/docusaurus/docs/chart/infrastructure/microk8s-quickstart.mdx b/docusaurus/docs/chart/infrastructure/microk8s-quickstart.mdx new file mode 100644 index 0000000000..7be89e56c6 --- /dev/null +++ b/docusaurus/docs/chart/infrastructure/microk8s-quickstart.mdx @@ -0,0 +1,147 @@ +--- +descriptions: Set up a MicroK8s instance to run Codacy Self-hosted, including all the necessary dependencies and configurations. +--- + +# Creating a MicroK8s cluster + +Follow the instructions below to set up a MicroK8s instance from scratch, including all the necessary dependencies and configurations. + +[MicroK8s](https://microk8s.io/) is a lightweight, fully conformant, single-package Kubernetes developed by Canonical. The project is [publicly available on GitHub](https://github.com/ubuntu/microk8s). + +## 1. Prepare your environment + +Prepare your environment to set up the MicroK8s instance. + +- You will need a machine running [Ubuntu Server 20.04 LTS](https://ubuntu.com/download/server) that: + + - Is correctly provisioned with the resources described for MicroK8s in the [system requirements](../requirements.mdx#kubernetes-or-microk8s-cluster-setup) + - Is able to establish a connection to the PostgreSQL instance described in the [system requirements](../requirements.mdx#postgresql-server-setup) + +- Make sure that you have [Helm](https://helm.sh/docs/intro/install/) version 3.8.1 installed. + +The next steps assume that you're starting from a clean install of Ubuntu Server and require that you run commands on a local or remote command line session on the machine. + +## 2. Installing MicroK8s + +Install MicroK8s on the machine: + +1. Make sure that the package `nfs-common` is installed: + + ```bash + sudo apt update && sudo apt install nfs-common -y + ``` + +2. Install MicroK8s from the `1.19/stable` channel: + + ```bash + sudo snap install microk8s --classic --channel=1.19/stable + sudo usermod -a -G microk8s $USER + sudo su - $USER + ``` + +3. Check that MicroK8s is running: + + ```bash + microk8s.status --wait-ready + ``` + +4. If you're running MicroK8s using a single node, disable high-availability clustering for improved performance: + + ```bash + microk8s.disable ha-cluster + ``` + +## 3. Configuring MicroK8s + +Now that MicroK8s is running on the machine we can proceed to enabling the necessary addons: + +1. Configure MicroK8s to allow privileged containers: + + ```bash + sudo mkdir -p /var/snap/microk8s/current/args + sudo echo "--allow-privileged=true" >> /var/snap/microk8s/current/args/kube-apiserver + microk8s.status --wait-ready + ``` + +2. Enable the following MicroK8s addons: + + ```bash + microk8s.enable dns + microk8s.status --wait-ready + microk8s.enable storage + microk8s.status --wait-ready + microk8s.enable ingress + microk8s.status --wait-ready + ``` + + !!! important + Check the output of the commands to make sure that all the addons are enabled correctly. + + If by chance any of the addons fails to be enabled, re-execute the `microk8s.enable` command for that addon. + +3. Restart MicroK8s and its services to make sure that all configurations are working: + + ```bash + microk8s.stop + microk8s.start + microk8s.status --wait-ready + ``` + +4. Export your kubeconfig so that Helm knows on which cluster to install the charts: + + ```bash + microk8s.config > ~/.kube/config + ``` + +5. The addons are now enabled and the MicroK8s instance bootstrapped. However, we must wait for some MicroK8s pods to be ready, as failing to do so can result in the pods entering a `CrashLoopBackoff` state: + + ```bash + microk8s.kubectl wait -n kube-system --for=condition=Ready pod -l k8s-app=kube-dns + microk8s.kubectl wait -n kube-system --for=condition=Ready pod -l k8s-app=hostpath-provisioner + # If the following command fails, you probably installed the wrong MicroK8s version + microk8s.kubectl wait --all-namespaces --for=condition=Ready pod -l name=nginx-ingress-microk8s + ``` + +6. Verify that the MicroK8s configuration was successful: + + ```bash + microk8s.status --wait-ready + ``` + + The output of the command should be the following: + + ```text + microk8s is running + addons: + knative: disabled + jaeger: disabled + fluentd: disabled + gpu: disabled + cilium: disabled + storage: enabled + registry: disabled + rbac: disabled + ingress: enabled + dns: enabled + metrics-server: disabled + linkerd: disabled + prometheus: disabled + istio: disabled + dashboard: disabled + ``` + +After these steps you have ensured that DNS, HTTP, and NGINX Ingress are enabled and working properly inside the MicroK8s instance. + +## Notes on installing Codacy {#notes-on-installing-codacy} + +You can now follow the generic [Codacy installation instructions](../index.mdx#2-installing-codacy) but please note the following: + +- You must execute all `kubectl` commands as `microk8s.kubectl` commands instead. + + To simplify this, we suggest that you create an alias so that you can run the commands directly as provided on the instructions: + + ```bash + alias kubectl=microk8s.kubectl + ``` + +- When running the `helm upgrade` command that installs the Codacy chart, you will be instructed to also use the file [`values-microk8s.yaml`](../values-files/values-microk8s.yaml) that downsizes some component limits, making it easier to fit Codacy in the lightweight MicroK8s solution. diff --git a/docusaurus/docs/chart/maintenance/database.mdx b/docusaurus/docs/chart/maintenance/database.mdx new file mode 100644 index 0000000000..73d3c8505e --- /dev/null +++ b/docusaurus/docs/chart/maintenance/database.mdx @@ -0,0 +1,86 @@ +--- +description: Instructions on how to migrate your Codacy Self-hosted database. +--- + +# Database migration guide + +Migrating databases between pods is a straightforward process with 3 steps: + +1. Dump the databases to a dump file. +2. Apply the dump file. +3. Delete the dump file. + +You will have to dump all the following databases: + +1. accounts +2. analysis +3. filestore +4. jobs +5. metrics +6. results + +## Requirements + +The following operations must be executed by a user which has elevated access (`SUPERUSER`) in the Postgres databases. + +## Dumping your current data out of a running Postgres + +You will need to know the following: + +- `$HOSTNAME` - the hostname where the database is located. +- `$DB_USER` - the username with privileged access to the database that will perform the dump. +- `$DB` - the database that you would like to export. +- `$DB_PASSWORD` - the database password. + +### pg_dump + +The following command lets you extract a given database into a dump file: + +```bash +PGPASSWORD=$DB_PASSWORD pg_dump -h $SRC_HOSTNAME -p $SRC_HOSTPORT -U $DB_USER --clean -Fc $db > /tmp/$db.dump +``` + +This will dump the file with the `.dump` extension into the `/tmp` folder. + +[For more information and additional options, please check the official documentation.](https://www.postgresql.org/docs/12/app-pgdump.html) + +### pg_restore + +To restore a database, you can run a `pg_restore` command to consume the dump file and replicate the data onto Postgres: + +```bash +PGPASSWORD=$DB_PASSWORD pg_restore -h $DEST_HOSTNAME -p $DEST_HOSTPORT -U $DB_USER -j 8 -d $db -n public --clean $db.dump +``` + +With the custom format from `pg_dump` (by using `-Fc`) we can now invoke `pg_restore` with multiple parallel jobs. This should make the restoration of the databases quicker, depending on which value you provide for the number of parallel jobs to execute. We provide a value of 8 parallel jobs in the example above (`-j 8`). + +!!! note + If you run into any problems while restoring, make sure that you have the database created in that Postgres instance (e.g. before restoring the jobs database the Postgres instance should have an empty database called `jobs` created there). + +For more information and additional options, please check the [official documentation](https://www.postgresql.org/docs/12/app-pgrestore.html). + +## Sample script + +Assuming you have the same `$DB_USER` and `$DB_PASSWORD`, and that you want to migrate all the databases from the same hostname to the same destination hostname, you could migrate your databases with the following sample script: + +```bash +SRC_HOSTNAME=$1 +SRC_HOSTPORT=$2 +DEST_HOSTNAME=$3 +DEST_HOSTPORT=$4 +DB_USER=$5 +DB_PASSWORD=$6 + +declare -a dbs=(accounts analysis filestore jobs metrics results) +for db in ${dbs[@]} +do + PGPASSWORD=$DB_PASSWORD pg_dump -h $SRC_HOSTNAME -p $SRC_HOSTPORT -U $DB_USER --clean -Fc $db > /tmp/$db.dump + PGPASSWORD=$DB_PASSWORD pg_restore -h $DEST_HOSTNAME -p $DEST_HOSTPORT -U $DB_USER -d $db -n public --clean $db.dump +done +``` + +As an example, you could run the script as follows: + +```bash +migrateDBs.sh postgres–instance1.us-east-1.rds.amazonaws.com 25060 postgres–instance1.eu-west-1.rds.amazonaws.com 25060 super_user secret_password +``` diff --git a/docusaurus/docs/chart/maintenance/license.mdx b/docusaurus/docs/chart/maintenance/license.mdx new file mode 100644 index 0000000000..c5dd756567 --- /dev/null +++ b/docusaurus/docs/chart/maintenance/license.mdx @@ -0,0 +1,39 @@ +--- +description: Some changes to your Codacy plan require that you update your Codacy Self-hosted license with a new one provided by a Codacy representative. +--- + +# Updating your Codacy license + +Some changes to your Codacy plan require that you update your Codacy Self-hosted license with a new one provided by a Codacy representative: + +1. Edit the value of `codacy-api.config.license` in the `values-production.yaml` file that you used to install Codacy: + + ```yaml + codacy-api: + config: + license: <--- insert your Codacy license here ---> + ``` + +2. Apply the new configuration by performing a Helm upgrade. To do so execute the command [used to install Codacy](../index.mdx#helm-upgrade): + + !!! important + **If you're using MicroK8s** you must use the file `values-microk8s.yaml` together with the file `values-production.yaml`. + + To do this, uncomment the last line before running the `helm upgrade` command below. + + ```bash + helm upgrade (...options used to install Codacy...) \ + --version {{ extra.codacy_self_hosted_version }} \ + --values values-production.yaml \ + # --values values-microk8s.yaml + ``` + +## Checking the expiration date of your Codacy license + +To check the expiration date of your Codacy license, do the following: + +1. Click the **Admin** link in the top right-hand corner. + +1. On the **Dashboard** page, search for your organization and click the organization identifier to navigate to its details. + +1. On the **Organization details**, check your **Plan expiry date**. diff --git a/docusaurus/docs/chart/maintenance/uninstall.mdx b/docusaurus/docs/chart/maintenance/uninstall.mdx new file mode 100644 index 0000000000..78791ca45a --- /dev/null +++ b/docusaurus/docs/chart/maintenance/uninstall.mdx @@ -0,0 +1,28 @@ +# Uninstalling Codacy + +To ensure a clean removal you should uninstall Codacy Self-hosted before destroying the cluster. + +To do so run: + +```bash +helm -n codacy uninstall codacy +kubectl -n codacy delete --all pod & +kubectl -n codacy delete --all pvc & +kubectl -n codacy delete --all job & +sleep 5 +kubectl -n codacy patch pvc -p '{"metadata":{"finalizers":null}}' $(kubectl -n codacy get pvc -o jsonpath='{.items[*].metadata.name}') +sleep 5 +kubectl -n codacy delete pod $(kubectl -n codacy get pod -o jsonpath='{.items[*].metadata.name}') --force --grace-period=0 +kubectl -n codacy get pod & +kubectl -n codacy get pvc & +kubectl -n codacy get job & +``` + +Note that the deletion of `pvc`s in the above command has to run in the background due to a cyclic dependency in one of the components. If you're unsure of the effects of these commands please run each of the `bash` subcommands and validate their output: + +```bash +echo "PVCs to delete:" +kubectl get pvc -n codacy -o jsonpath='{.items[*].metadata.name}' +echo "PODS to delete:" +kubectl get pods -n codacy -o jsonpath='{.items[*].metadata.name}' +``` diff --git a/docusaurus/docs/chart/maintenance/upgrade.mdx b/docusaurus/docs/chart/maintenance/upgrade.mdx new file mode 100644 index 0000000000..94e1203940 --- /dev/null +++ b/docusaurus/docs/chart/maintenance/upgrade.mdx @@ -0,0 +1,47 @@ +--- +description: Instructions on how to upgrade Codacy Self-hosted to the latest stable version. +--- + +# Upgrading Codacy + +To upgrade Codacy Self-hosted to the latest stable version: + +1. [Check the release notes](https://docs.codacy.com/release-notes/#self-hosted) for all Codacy Self-hosted versions between your current version and the most recent version for breaking changes and follow the instructions provided carefully. + + !!! warning + Failing to follow the steps to deal with breaking changes can cause the upgrade to fail or cause problems while Codacy is running. + + **In particular, [Codacy Self-hosted v5.0.0](https://docs.codacy.com/release-notes/self-hosted/self-hosted-v5.0.0/) drops the support for legacy manual organizations**. + + {% + include-markdown "../assets/includes/self-hosted-version.txt" + %} + +1. Store all your currently defined configuration values in a file: + + ```bash + helm get values codacy \ + --namespace codacy \ + --output yaml > codacy.yaml + + ``` + + !!! note + If you installed Codacy on a Kubernetes namespace different from `codacy`, make sure that you adjust the namespace when executing the commands in this page. + +1. Review the values stored in the file `codacy.yaml`, making any changes if necessary. + +1. Perform the upgrade using the values stored in the file: + + ```bash + helm repo update + helm upgrade codacy codacy-stable/codacy \ + --version {{ extra.codacy_self_hosted_version }} \ + --namespace codacy \ + --values codacy.yaml + ``` + +1. Update your Codacy command-line tools to the versions with the Git tag `self-hosted-{{ extra.codacy_self_hosted_version }}`: + + - [Codacy Analysis CLI](https://github.com/codacy/codacy-analysis-cli/releases/tag/self-hosted-{{ extra.codacy_self_hosted_version }}) + - [Codacy Coverage Reporter](https://github.com/codacy/codacy-coverage-reporter/releases/tag/self-hosted-{{ extra.codacy_self_hosted_version }}) diff --git a/docusaurus/docs/chart/requirements.mdx b/docusaurus/docs/chart/requirements.mdx new file mode 100644 index 0000000000..380e6383fb --- /dev/null +++ b/docusaurus/docs/chart/requirements.mdx @@ -0,0 +1,162 @@ +--- +description: Before installing Codacy Self-hosted you must ensure that you have your infrastructure correctly provisioned and configured. +--- + +# System requirements + +Before installing Codacy Self-hosted you must ensure that you have the following infrastructure correctly provisioned and configured: + +- [Git provider](#git-provider) +- [Kubernetes or MicroK8s cluster](#kubernetes-or-microk8s-cluster-setup) +- [PostgreSQL server](#postgresql-server-setup) + +The next sections describe in detail how to set up these prerequisites. + +## Git provider {#git-provider} + +To use Codacy Self-hosted, you must use one or more of our [supported Git providers](../../faq/general/which-version-control-systems-do-you-support/). In particular, if you're using a self-hosted Git provider, make sure that your version is supported by Codacy. + +## Kubernetes or MicroK8s cluster setup {#kubernetes-or-microk8s-cluster-setup} + +The cluster running Codacy must satisfy the following requirements: + +- The infrastructure hosting the cluster must be provisioned with the hardware and networking requirements described below +- The orchestration platform managing the cluster must be one of: + - [Kubernetes](https://kubernetes.io/) **version 1.22.\*** to **1.26.\*** (1.23 recommended) + - [MicroK8s](https://microk8s.io/) **version 1.19.\*** +- The [NGINX Ingress controller](https://github.com/kubernetes/ingress-nginx) must be installed and correctly set up in the cluster + +### Cluster networking requirements + +The cluster must be configured to accept and establish connections on the following ports: + +| | Service | Protocol/Port | Notes | +| -------- | ------------ | ------------- | ------------------------------------------------------------------ | +| Inbound | SSH | TCP/22 | **MicroK8s only**, to access the infrastructure remotely. | +| Inbound | HTTP | TCP/80 | Allow access to the Codacy website and API endpoints | +| Inbound | HTTPS | TCP/443 | Allow access to the Codacy website and API endpoints | +| Outbound | PostgreSQL | TCP/5432 | Connection to the PostgreSQL DBMS | +| Outbound | SMTP | TCP/25 | Connection to your SMTP server | +| Outbound | SMTPS | TCP/465 | Connection to your SMTP server over TLS/SSL | +| Outbound | Docker Hub | \* | Connection to Docker Hub to download the required container images | +| Outbound | Git provider | \* | Connection to the ports required by your remote Git provider | + +### Cluster hardware requirements + +The high-level architecture described in the next section is important in understanding how Codacy uses and allocates hardware resources. Below we also provide guidance on [resource provisioning for typical scenarios](#standard-cluster-provisioning). + +For a custom hardware resource recommendation, please contact us at . + +#### Codacy architecture + +You can look at Codacy separately as two groups of components: + +- The **"Platform"** contains the UI and other components important to treat and show results +- The **"Analysis"** is the swarm of workers that run **between one and four** linters simultaneously, depending on factors such as the number of files or the programming languages used in your projects + +![High-level Codacy architecture](images/codacy-architecture.svg) + +Since all components are running on a cluster, you can increase the number of pod replicas in every deployment to give you more resilience and throughput, at a cost of increased resource usage. + +The following is a simplified overview of how to calculate resource allocation for the group of components "Platform" and "Analysis": + +| Group of components | vCPU | Memory | +| ------------------------------------------------------------- | --------------------------- | ------------------------------- | +| Platform
(1 pod replica per component) | 4 | 8 GB | +| Analysis
(1 Analysis Worker pod with **up to** 4 linters) | 5
(per Analysis Worker) | 10 GB
(per Analysis Worker) | + +#### Standard cluster provisioning {#standard-cluster-provisioning} + +As described in the section above, Codacy's architecture allows scaling the "Analysis" group of components, meaning that the resources needed for Codacy **depend mainly on the rate of commits** done by your team that Codacy will be analyzing. + +The resources recommended on the following table are based on our experience and are also the defaults in the [`values-production.yaml`](./values-files/values-production.yaml) file. You might need to adapt these defaults taking into account your use case. In particular, you should set the value of `global.workerManager.workers.config.dedicatedMax` to the maximum number of concurrent analysis depending on the available resources and number of replicas per component. + +!!! note + For MicroK8s clusters we added an extra 1.5 vCPU and 1.5 GB memory to the "Platform" to account for the MicroK8s platform itself running on the same machine. + +| Installation type | Pod replicas per component | Max. concurrent analysis | Platform resources | Analysis resources | **~ Total resources** | +| -------------------------------------------- | -------------------------- | ------------------------ | --------------------------- | ------------------------- | ----------------------------- | +| Kubernetes
Small Installation | 1 | 2 | 4 vCPUs
8 GB RAM | 10 vCPUs
20 GB RAM | **16 vCPUs
32 GB RAM** | +| Kubernetes
Medium Installation (default) | 2 | 4 | 8 vCPUs
16 GB RAM | 20 vCPUs
40 GB RAM | **32 vCPUs
64 GB RAM** | +| Kubernetes
Big Installation | 2+ | 10+ | 8+ vCPUs
16+ GB RAM | 50+ vCPUs
100+ GB RAM | **60+ vCPUs
110+ GB RAM** | +| MicroK8s
Minimum | 1 | 2 | 5.5 vCPUs
9.5 GB RAM | 10 vCPUs
20 GB RAM | **16 vCPUs
32 GB RAM** | +| MicroK8s
Recommended (default) | 1+ | 2 | 9.5+ vCPUs
17.5+ GB RAM | 10 vCPUs
20 GB RAM | **21+ vCPUs
40+ GB RAM** | + +The storage requirements recommended on the following table **depend mainly on the number of repositories** that Codacy will be analyzing and should be used as a guideline to determine your installation requirements. + +| Component | Bundled in the chart? | **Minimum recommended** | +| ---------- | ---------------------------- | ----------------------- | +| NFS | Yes | **200 GB** | +| RabbitMQ | Yes | **8 GB** | +| Minio | Yes | **20 GB** | +| PostgreSQL | No (external DB recommended) | **500 GB+** | + +!!! note + Please note that due to the way Codacy works, a small number of pods will run in privileged mode with the `CAP_SYS_ADMIN` capability. This is required to allow the Worker pods to serve NFS shares to be mounted by the pods running the static code analysis tools. + +## PostgreSQL server setup {#postgresql-server-setup} + +Codacy requires a database server to persist data that must satisfy the following requirements: + +- The infrastructure hosting the database server must be provisioned with the hardware requirements described below +- The DBMS server must be [PostgreSQL](https://www.postgresql.org/) **version 11.20** or **version 12.\*** (12.* recommended) +- The PostgreSQL server must be configured to accept connections from the cluster +- The Codacy databases and a dedicated user must be created using the instructions below + +!!! important + Google, the developer of Kubernetes, [doesn't recommend running database servers on your cluster](https://cloud.google.com/blog/products/databases/to-run-or-not-to-run-a-database-on-kubernetes-what-to-consider). As such, consider using a managed solution like Amazon RDS or Google Cloud SQL, or running the PostgreSQL server on a dedicated virtual machine. + + We recommend that you use a managed solution to reduce maintenance and configuration costs of the PostgreSQL server. The main cloud providers all have this service that you can use, for example: + + - [Amazon RDS for PostgreSQL](https://aws.amazon.com/rds/postgresql/resources/) or [Amazon Aurora PostgreSQL-Compatible Edition](https://aws.amazon.com/rds/aurora/postgresql-features/) + - [Azure Database for PostgreSQL](https://docs.microsoft.com/en-us/azure/postgresql/) + - [Google Cloud SQL for PostgreSQL](https://cloud.google.com/sql/docs/postgres) + - [Digital Ocean Managed Databases](https://www.digitalocean.com/products/managed-databases-postgresql/) + + + +### PostgreSQL hardware requirements + +The following are the minimum specifications recommended for provisioning the PostgreSQL server: + +| vCPUs | Memory | Storage | Max. concurrent connections | +| ----- | ------ | ------- | --------------------------- | +| 4 | 8 GB | 500 GB+ | 300 | + +### Preparing PostgreSQL for Codacy + +Before installing Codacy you must create a set of databases that will be used by Codacy to persist data. We also recommend that you create a dedicated user for Codacy, with access permissions only to the databases that are specific to Codacy: + +1. Connect to the PostgreSQL server as a database admin user. For example, using the `psql` command line client: + + ```bash + psql -U postgres -h + ``` + +2. Create the dedicated user that Codacy will use to connect to PostgreSQL. Make sure that you change the username and password to suit your security needs: + + ```sql + CREATE USER codacy WITH PASSWORD 'codacy'; + ALTER ROLE codacy WITH CREATEDB; + ``` + + Take note of the username and password you define, as you will require them later to configure the connection from Codacy to the PostgreSQL server. + +3. Make sure that you can connect to the PostgreSQL database using the newly created user. For example, using the `psql` command line client: + + ```bash + psql -U codacy -d postgres -h + ``` + +4. Create the databases required by Codacy: + + ```sql + CREATE DATABASE accounts WITH OWNER=codacy; + CREATE DATABASE analysis WITH OWNER=codacy; + CREATE DATABASE results WITH OWNER=codacy; + CREATE DATABASE metrics WITH OWNER=codacy; + CREATE DATABASE filestore WITH OWNER=codacy; + CREATE DATABASE jobs WITH OWNER=codacy; + CREATE DATABASE listener WITH OWNER=codacy; + CREATE DATABASE crow WITH OWNER=codacy; + ``` diff --git a/docusaurus/docs/chart/troubleshoot/extract-codacy-logs.sh b/docusaurus/docs/chart/troubleshoot/extract-codacy-logs.sh new file mode 100755 index 0000000000..adc12ac203 --- /dev/null +++ b/docusaurus/docs/chart/troubleshoot/extract-codacy-logs.sh @@ -0,0 +1,155 @@ +#!/usr/bin/env bash + +#### Helper functions #### + +usage() +{ + echo "Usage: $0 -n [-d ]" + echo "When using the -d flag, must be between 1 and 7" + echo "Example: '$0 -n codacy -d 3' would retrieve the last 3 days of logs from the 'codacy' namespace of the kubernetes cluster" + exit 3 +} + +date_days_ago() { + OS=$(uname) + if [[ "$OS" == "Darwin" ]]; then + date -v -$1\d "+%Y-%m-%d" + elif [[ "$OS" == "Linux" ]]; then + date -d '-$1 day' "+%Y-%m-%d" + else + echo "Unsupported operating system '$OS'" + exit 11 + fi +} + +cleanup() +{ + echo "Cleaning temporary files, exiting..." + if [ -d "$LOGS_DIR" ]; then + rm -r $LOGS_DIR &>/dev/null + fi +} +trap cleanup EXIT + +#### Log extraction script #### + +while getopts "n:d:" option; do + case ${option} in + n ) + NAMESPACE=${OPTARG} + ;; + d ) + if [ $OPTARG -le 0 ] || [ $OPTARG -ge 8 ]; then + usage + else + DAYS=$((${OPTARG}-1)) # Day 0 is today + fi + ;; + \? ) + usage + ;; + esac +done + +[ -z "$NAMESPACE" ] && usage + +CURRENT_DATE_TIME=$(date "+%Y%m%d-%H%M%S") +LOGS_DIR="$(mktemp -d)/codacy_logs_$CURRENT_DATE_TIME" + +echo "Starting log files extraction" + +# Check if zip is available +echo "Checking if zip is installed..." +if ! zip --version &>/dev/null; then + echo "zip not installed" + echo "Please install zip" + exit 4 +fi + + +# Check if kubectl or microk8s.kubectl is available +echo "Checking if kubectl is installed..." +KUBECTL=$(which kubectl || which microk8s.kubectl) +if [ $? -ne 0 ]; then + echo "kubectl not installed" + echo "Please install kubectl version specified in Codacy's documentation (see here - https://docs.codacy.com/chart/#2-installing-codacy) or the version used when installing your cluster" + echo "To install kubectl see https://kubernetes.io/docs/tasks/tools/install-kubectl/ (or https://microk8s.io/docs/ if you are running a microk8s kubernetes cluster)" + exit 4 +fi + +# Check current cluster context +echo "Checking access to kubernetes cluster..." +KUBE_CTX=$($KUBECTL config current-context) +if [ $? -ne 0 ]; then + echo "No kubernetes cluster context configured" + exit 5 +fi + +read -p "Is '$KUBE_CTX' the correct kubernetes cluster for log extraction? (yes/[no]): " ANSWER +if [[ ! "$ANSWER" =~ ^y(es)?$ ]]; then + echo "Please configure correctly your current kubernetes cluster" + exit 6 +fi + +# Create temporary directory for copying logs +if ! mkdir -p $LOGS_DIR; then + echo "Failed to create temporary directory $LOGS_DIR , for log files extraction" + exit 7 +fi + +# Get pod name for the logs pod +echo "Checking if the logs kubernetes pod exists..." +LOGS_POD_NAME=$($KUBECTL get pods -n $NAMESPACE -l app=minio -o jsonpath='{.items[*].metadata.name}') +if [ $? -ne 0 ]; then + echo "Failed to get the name of the logs kubernetes pod, for namespace $NAMESPACE" + echo "Are you sure you are in the right kubernetes cluster context?" + exit 8 +fi + +# Copy logs to local filesystem +echo "Extracting log files..." +if ! $KUBECTL cp $NAMESPACE/$LOGS_POD_NAME:/export/logs $LOGS_DIR; then + echo "Failed to extract log files from kubernetes pod $LOGS_POD_NAME to local directory $LOGS_DIR" + echo "Are you sure you are in the right kubernetes cluster context?" + exit 9 +fi + +# Get descriptions for all the pods +KUBECTL_DESCRIBE_FILE_NAME="describe_pods.txt" +echo "Getting kubectl describe for all codacy pods..." +if ! $KUBECTL describe pods -n $NAMESPACE > $LOGS_DIR/$KUBECTL_DESCRIBE_FILE_NAME; then + echo "Failed to save the codacy pods description to local directory $LOGS_DIR" + echo "Are you sure you are in the right kubernetes cluster context?" + exit 10 +fi + +echo "Compressing extracted log files..." +if [ -n "$DAYS" ]; then + + # Incrementally generate dates with the format specified below, for each day of logs, to make pattern matching easier + while [ $DAYS -ge 0 ]; do + LOGS_DATE=$(date_days_ago $DAYS) + + # Find all log files that match the pattern and add them to the ZIP archive (-9 is maximum, slowest, compression) + find $LOGS_DIR -iname $LOGS_DATE\* -o -iname $KUBECTL_DESCRIBE_FILE_NAME -type f | xargs -L 10 zip -ur9 codacy_logs_$CURRENT_DATE_TIME.zip + + # Incremental zipping might fail + if [ $? -ne 0 ]; then + echo "Failed to compress logs (located in $LOGS_DIR) to a ZIP file" + echo "If this step continues to fail, you can compress the files manually" + exit 11 + fi + + DAYS=$(($DAYS - 1)) + done + +else + # Compress logs in ZIP file (-9 is maximum, slowest, compression) + if ! zip -r9 codacy_logs_$CURRENT_DATE_TIME.zip $LOGS_DIR; then + echo "Failed to compress logs (located in $LOGS_DIR) to a ZIP file" + echo "If this step continues to fail, you can compress the files manually" + exit 11 + fi +fi + +echo "Log file extraction completed" diff --git a/docusaurus/docs/chart/troubleshoot/images/bitbucket-invalid-client-id.png b/docusaurus/docs/chart/troubleshoot/images/bitbucket-invalid-client-id.png new file mode 100644 index 0000000000000000000000000000000000000000..b998841926bb90330b9609a0e8c82c011e4b5c0f GIT binary patch literal 22104 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