diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 6658b8560c8a4..ed89df04060db 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -99,8 +99,11 @@ content/en/synthetics/*.md @Datadog/synthet
content/en/continuous_testing/*.md @Datadog/synthetics-ct @Datadog/documentation
content/en/mobile_app_testing/*.md @Datadog/synthetics-mobile @Datadog/documentation
-# CI Visibility
+# Software Delivery
content/en/continuous_integration/tests/*.md @Datadog/ci-app-libraries @Datadog/documentation
content/en/continuous_integration/pipelines/*.md @Datadog/ci-app-backend @Datadog/documentation
-content/en/continuous_integration/static_analysis/rules/_index.md @Datadog/static-analysis @Datadog/documentation
+content/en/static_analysis/*.md @Datadog/static-analysis @Datadog/documentation
+content/en/static_analysis/rules/_index.md @Datadog/static-analysis @Datadog/documentation
+content/en/quality_gates/_index.md @Datadog/ci-app-backend @Datadog/documentation
+content/en/dora_metrics/_index.md @Datadog/ci-app-backend @Datadog/documentation
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 0225eda8b1fd4..2b7c643a61bf8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -101,10 +101,10 @@ content/en/continuous_testing/cicd_integrations/circleci_orb.md
content/en/continuous_testing/cicd_integrations/azure_devops_extension.md
# Static Analysis
-content/en/continuous_integration/static_analysis/github_actions.md
-content/en/continuous_integration/static_analysis/circleci_orbs.md
-content/en/continuous_integration/static_analysis/rules/
-!content/en/continuous_integration/static_analysis/rules/_index.md
+content/en/static_analysis/github_actions.md
+content/en/static_analysis/circleci_orbs.md
+content/en/static_analysis/rules/*
+!content/en/static_analysis/rules/_index.md
# serverless
content/en/serverless/libraries_integrations/plugin.md
diff --git a/config/_default/menus/menus.en.yaml b/config/_default/menus/menus.en.yaml
index 42897688917c4..9c7b4c6160e35 100644
--- a/config/_default/menus/menus.en.yaml
+++ b/config/_default/menus/menus.en.yaml
@@ -14,8 +14,8 @@ main:
- name: Application Performance
identifier: apm_heading
weight: 5000000
- - name: Continuous Integration
- identifier: ci_visibility_heading
+ - name: Software Delivery
+ identifier: software_delivery_heading
weight: 6000000
- name: Log Management
identifier: log_management_heading
@@ -2373,244 +2373,241 @@ main:
url: continuous_integration/
pre: ci
identifier: ci
- parent: ci_visibility_heading
+ parent: software_delivery_heading
weight: 150000
- - name: Test Visibility
- url: continuous_integration/tests/
- parent: ci
- identifier: ci_tests
- weight: 1
- - name: Setup
- url: continuous_integration/tests/setup/
- parent: ci_tests
- identifier: ci_tests_setup
- weight: 101
- - name: .NET
- url: continuous_integration/tests/setup/dotnet/
- parent: ci_tests_setup
- identifier: ci_tests_setup_dotnet
- weight: 101
- - name: Java
- url: continuous_integration/tests/setup/java/
- parent: ci_tests_setup
- identifier: ci_tests_setup_java
- weight: 102
- - name: JavaScript and TypeScript
- url: continuous_integration/tests/setup/javascript/
- parent: ci_tests_setup
- identifier: ci_tests_setup_javascript
- weight: 103
- - name: Python
- url: continuous_integration/tests/setup/python/
- parent: ci_tests_setup
- identifier: ci_tests_setup_python
- weight: 104
- - name: Ruby
- url: continuous_integration/tests/setup/ruby/
- parent: ci_tests_setup
- identifier: ci_tests_setup_ruby
- weight: 105
- - name: Swift
- url: continuous_integration/tests/setup/swift/
- parent: ci_tests_setup
- identifier: ci_tests_setup_swift
- weight: 106
- - name: JUnit Report Uploads
- url: continuous_integration/tests/setup/junit_xml/
- parent: ci_tests_setup
- identifier: ci_tests_setup_junit_xml
- weight: 107
- - name: Tests in Containers
- url: continuous_integration/tests/containers/
- parent: ci_tests
- identifier: ci_tests_containers
- weight: 103
- - name: Developer Workflows
- url: continuous_integration/tests/developer_workflows
- parent: ci_tests
- identifier: ci_tests_developer_workflows
- weight: 104
- - name: Code Coverage
- url: continuous_integration/tests/code_coverage
- parent: ci_tests
- identifier: ci_tests_code_coverage
- weight: 105
- - name: Instrument Browser Tests with RUM
- url: continuous_integration/tests/browser_tests
- parent: ci_tests
- identifier: ci_tests_browser_tests
- weight: 106
- - name: Instrument Swift Tests with RUM
- url: continuous_integration/tests/swift_tests
- parent: ci_tests
- identifier: ci_tests_swift_tests
- weight: 107
- name: Pipeline Visibility
url: continuous_integration/pipelines/
parent: ci
identifier: pipeline_visibility
- weight: 2
+ weight: 1
- name: AWS CodePipeline
url: continuous_integration/pipelines/awscodepipeline/
parent: pipeline_visibility
identifier: ci_awscodepipeline
- weight: 201
+ weight: 101
- name: Azure
url: continuous_integration/pipelines/azure/
parent: pipeline_visibility
identifier: ci_azure
- weight: 202
+ weight: 102
- name: Buildkite
url: continuous_integration/pipelines/buildkite/
parent: pipeline_visibility
identifier: ci_buildkite
- weight: 203
+ weight: 103
- name: CircleCI
url: continuous_integration/pipelines/circleci/
parent: pipeline_visibility
identifier: ci_circleci
- weight: 204
+ weight: 104
- name: Codefresh
url: continuous_integration/pipelines/codefresh/
parent: pipeline_visibility
identifier: ci_codefresh
- weight: 205
+ weight: 105
- name: GitHub Actions
url: continuous_integration/pipelines/github/
parent: pipeline_visibility
identifier: ci_github
- weight: 206
+ weight: 106
- name: GitLab
url: continuous_integration/pipelines/gitlab/
parent: pipeline_visibility
identifier: ci_gitlab
- weight: 207
+ weight: 107
- name: Jenkins
url: continuous_integration/pipelines/jenkins/
parent: pipeline_visibility
identifier: ci_jenkins
- weight: 208
+ weight: 108
- name: TeamCity
url: continuous_integration/pipelines/teamcity/
parent: pipeline_visibility
identifier: ci_teamcity
- weight: 209
+ weight: 109
- name: Custom Commands
url: continuous_integration/pipelines/custom_commands/
parent: pipeline_visibility
identifier: ci_custom_commands
- weight: 210
+ weight: 110
- name: Custom Tags and Metrics
url: continuous_integration/pipelines/custom_tags_and_metrics/
parent: pipeline_visibility
identifier: ci_custom_tags_and_metrics
- weight: 211
+ weight: 111
- name: Search and Manage
url: continuous_integration/search/
parent: ci
identifier: ci_search
- weight: 3
+ weight: 2
- name: Explorer
- url: continuous_integration/explorer/
+ url: continuous_integration/explorer
parent: ci
identifier: ci_explorer
- weight: 4
+ weight: 3
- name: Search Syntax
url: continuous_integration/explorer/search_syntax/
parent: ci_explorer
identifier: ci_explorer_search_syntax
- weight: 401
+ weight: 301
- name: Facets
url: continuous_integration/explorer/facets/
parent: ci_explorer
identifier: ci_explorer_facets
- weight: 402
+ weight: 302
- name: Saved Views
url: continuous_integration/explorer/saved_views/
parent: ci_explorer
identifier: ci_explorer_saved_views
- weight: 402
- - name: DORA Metrics
- url: continuous_integration/dora_metrics/
+ weight: 302
+ - name: Guides
+ url: continuous_integration/guides/
parent: ci
- identifier: ci_explorer_dora_metrics
- weight: 5
- - name: Intelligent Test Runner
- url: continuous_integration/intelligent_test_runner/
+ identifier: ci_guides
+ weight: 4
+ - name: Troubleshooting
+ url: continuous_integration/troubleshooting/
parent: ci
- identifier: ci_intelligent_test_runner
- weight: 6
+ identifier: ci_troubleshooting
+ weight: 5
+ - name: Test Visibility
+ url: tests/
+ pre: ci
+ parent: software_delivery_heading
+ identifier: tests
+ weight: 160000
- name: Setup
- url: continuous_integration/intelligent_test_runner/setup/
- parent: ci_intelligent_test_runner
- identifier: ci_intelligent_test_runner_setup
- weight: 601
+ url: tests/setup/
+ parent: tests
+ identifier: tests_setup
+ weight: 1
- name: .NET
- url: continuous_integration/intelligent_test_runner/setup/dotnet/
- parent: ci_intelligent_test_runner_setup
- identifier: ci_itr_dotnet
- weight: 601
+ url: tests/setup/dotnet/
+ parent: tests_setup
+ identifier: tests_setup_dotnet
+ weight: 101
- name: Java
- url: continuous_integration/intelligent_test_runner/setup/java/
- parent: ci_intelligent_test_runner_setup
- identifier: ci_itr_java
- weight: 602
+ url: tests/setup/java/
+ parent: tests_setup
+ identifier: tests_setup_java
+ weight: 102
- name: JavaScript and TypeScript
- url: continuous_integration/intelligent_test_runner/setup/javascript/
- parent: ci_intelligent_test_runner_setup
- identifier: ci_itr_javascript
- weight: 603
+ url: tests/setup/javascript/
+ parent: tests_setup
+ identifier: tests_setup_javascript
+ weight: 103
- name: Python
- url: continuous_integration/intelligent_test_runner/setup/python/
- parent: ci_intelligent_test_runner_setup
- identifier: ci_itr_python
- weight: 604
+ url: tests/setup/python/
+ parent: tests_setup
+ identifier: tests_setup_python
+ weight: 104
+ - name: Ruby
+ url: tests/setup/ruby/
+ parent: tests_setup
+ identifier: tests_setup_ruby
+ weight: 105
- name: Swift
- url: continuous_integration/intelligent_test_runner/setup/swift/
- parent: ci_intelligent_test_runner_setup
- identifier: ci_itr_swift
- weight: 605
- - name: Static Analysis
- url: continuous_integration/static_analysis/
- parent: ci
- identifier: ci_static_analysis
+ url: tests/setup/swift/
+ parent: tests_setup
+ identifier: tests_setup_swift
+ weight: 106
+ - name: JUnit Report Uploads
+ url: tests/setup/junit_xml/
+ parent: tests_setup
+ identifier: tests_setup_junit_xml
+ weight: 107
+ - name: Tests in Containers
+ url: tests/containers/
+ parent: tests
+ identifier: tests_containers
+ weight: 2
+ - name: Search and Manage
+ url: tests/search/
+ parent: tests
+ identifier: tests_search
+ weight: 3
+ - name: Explorer
+ url: continuous_integration/explorer
+ parent: tests
+ identifier: tests_explorer
+ weight: 4
+ - name: Developer Workflows
+ url: tests/developer_workflows
+ parent: tests
+ identifier: tests_developer_workflows
+ weight: 5
+ - name: Code Coverage
+ url: tests/code_coverage
+ parent: tests
+ identifier: tests_code_coverage
+ weight: 6
+ - name: Instrument Browser Tests with RUM
+ url: tests/browser_tests
+ parent: tests
+ identifier: tests_browser_tests
weight: 7
- - name: Rules
- url: continuous_integration/static_analysis/rules
- parent: ci_static_analysis
- identifier: ci_static_analysis_rules
- weight: 701
- - name: CircleCI Orbs
- url: continuous_integration/static_analysis/circleci_orbs
- parent: ci_static_analysis
- identifier: ci_static_analysis_circleci_orbs
- weight: 702
- - name: GitHub Actions
- url: continuous_integration/static_analysis/github_actions
- parent: ci_static_analysis
- identifier: ci_static_analysis_github_actions
- weight: 703
- - name: Quality Gates
- url: continuous_integration/quality_gates/
- parent: ci
- identifier: ci_quality_gates
+ - name: Instrument Swift Tests with RUM
+ url: tests/swift_tests
+ parent: tests
+ identifier: tests_swift_tests
weight: 8
- name: Guides
- url: continuous_integration/guides/
- parent: ci
- identifier: ci_guides
+ url: tests/guides/
+ parent: tests
+ identifier: tests_guides
weight: 9
- name: Troubleshooting
- url: continuous_integration/troubleshooting/
- parent: ci
- identifier: ci_troubleshooting
+ url: tests/troubleshooting/
+ parent: tests
+ identifier: tests_troubleshooting
weight: 10
+ - name: Intelligent Test Runner
+ url: intelligent_test_runner/
+ pre: ci
+ parent: software_delivery_heading
+ identifier: intelligent_test_runner
+ weight: 170000
+ - name: Setup
+ url: intelligent_test_runner/setup/
+ parent: intelligent_test_runner
+ identifier: intelligent_test_runner_setup
+ weight: 1
+ - name: .NET
+ url: intelligent_test_runner/setup/dotnet/
+ parent: intelligent_test_runner_setup
+ identifier: intelligent_test_runner_setup_dotnet
+ weight: 101
+ - name: Java
+ url: intelligent_test_runner/setup/java/
+ parent: intelligent_test_runner_setup
+ identifier: intelligent_test_runner_setup_java
+ weight: 202
+ - name: JavaScript and TypeScript
+ url: intelligent_test_runner/setup/javascript/
+ parent: intelligent_test_runner_setup
+ identifier: intelligent_test_runner_setup_javascript
+ weight: 103
+ - name: Python
+ url: intelligent_test_runner/setup/python/
+ parent: intelligent_test_runner_setup
+ identifier: intelligent_test_runner_setup_python
+ weight: 104
+ - name: Swift
+ url: intelligent_test_runner/setup/swift/
+ parent: intelligent_test_runner_setup
+ identifier: intelligent_test_runner_setup_swift
+ weight: 105
+ - name: Troubleshooting
+ url: intelligent_test_runner/troubleshooting/
+ parent: intelligent_test_runner
+ identifier: intelligent_test_runner_troubleshooting
+ weight: 2
- name: CD Visibility
url: continuous_delivery/
pre: ci
identifier: cd
- parent: ci_visibility_heading
- weight: 160000
+ parent: software_delivery_heading
+ weight: 180000
- name: Deployment Visibility
url: continuous_delivery/deployments
identifier: cd_deployments
@@ -2646,6 +2643,39 @@ main:
identifier: cd_explorer_saved_views
parent: cd_explorer
weight: 303
+ - name: DORA Metrics
+ url: dora_metrics/
+ pre: ci
+ parent: software_delivery_heading
+ identifier: dora_metrics
+ weight: 190000
+ - name: Static Analysis
+ url: static_analysis/
+ pre: ci
+ parent: software_delivery_heading
+ identifier: static_analysis
+ weight: 200000
+ - name: Rules
+ url: static_analysis/rules
+ parent: static_analysis
+ identifier: static_analysis_rules
+ weight: 101
+ - name: CircleCI Orbs
+ url: static_analysis/circleci_orbs
+ parent: static_analysis
+ identifier: static_analysis_circleci_orbs
+ weight: 102
+ - name: GitHub Actions
+ url: static_analysis/github_actions
+ parent: static_analysis
+ identifier: static_analysis_github_actions
+ weight: 103
+ - name: Quality Gates
+ url: quality_gates/
+ pre: ci
+ parent: software_delivery_heading
+ identifier: quality_gates
+ weight: 210000
- name: Database Monitoring
url: database_monitoring/
pre: database-2
diff --git a/content/en/continuous_integration/guides/_index.md b/content/en/continuous_integration/guides/_index.md
index 9cc7f12f151b0..d28751f7775bd 100644
--- a/content/en/continuous_integration/guides/_index.md
+++ b/content/en/continuous_integration/guides/_index.md
@@ -10,11 +10,6 @@ cascade:
subcategory: CI Visibility Guides
---
-{{< whatsnext desc="Test Visibility Guides:" >}}
- {{< nextlink href="/continuous_integration/guides/flaky_test_management" >}}Flaky Test Management{{< /nextlink >}}
- {{< nextlink href="/continuous_integration/guides/add_custom_metrics" >}}Add Custom Metrics to Your Tests{{< /nextlink >}}
-{{< /whatsnext >}}
-
{{< whatsnext desc="Pipeline Visibility Guides:" >}}
{{< nextlink href="/continuous_integration/guides/ingestion_control" >}}Creating Exclusion Filters for Ingestion Control{{< /nextlink >}}
{{< nextlink href="/continuous_integration/guides/pipeline_data_model" >}}Understanding the Pipeline Data Model and Execution Types{{< /nextlink >}}
diff --git a/content/en/continuous_integration/search/_index.md b/content/en/continuous_integration/search/_index.md
index f8c587cef7541..fe7f442a71454 100644
--- a/content/en/continuous_integration/search/_index.md
+++ b/content/en/continuous_integration/search/_index.md
@@ -1,18 +1,10 @@
---
-title: Search and Manage CI Pipelines and Tests
-description: Learn how to search for your CI pipelines and tests.
-aliases:
-- /continuous_integration/guides/find_flaky_tests/
-algolia:
- rank: 70
- tags: ['flaky test', 'flaky tests', 'test regression', 'test regressions', 'test service', 'test services']
+title: Search and Manage CI Pipelines
+description: Learn how to search for your CI pipelines.
further_reading:
- link: "/continuous_integration/explorer"
tag: "Documentation"
- text: "Search and filter test runs or pipeline executions"
-- link: "/continuous_integration/guides/flaky_test_management"
- tag: "Documentation"
- text: "Learn how to manage flaky tests"
+ text: "Search and filter pipeline executions"
---
{{< site-region region="gov" >}}
@@ -21,10 +13,7 @@ further_reading:
## Overview
-{{< tabs >}}
-{{% tab "Pipelines" %}}
-
-The [Pipelines page][101] is useful for developers who want to keep an eye on the build pipeline for their service.
+The [Pipelines page][1] is useful for developers who want to keep an eye on the build pipeline for their service.
{{< img src="/continuous_integration/pipelines.png" text="CI Pipelines page" style="width:100%" >}}
@@ -42,13 +31,13 @@ You can access high-level accumulation and trends, including:
## Search for pipelines
-To see your pipelines, navigate to [**CI** > **Pipelines**][101].
+To see your pipelines, navigate to [**CI** > **Pipelines**][1].
-The [Pipelines page][101] shows aggregate stats for the default branch of each pipeline over the selected time frame, as well as the status of the latest pipeline execution. Use this page to see all your pipelines and get a quick view of their health. Only pipelines with Git information associated to the default branch (usually named `main` or `prod`), as well as pipelines without any Git information, are displayed on this page.
+The [Pipelines page][1] shows aggregate stats for the default branch of each pipeline over the selected time frame, as well as the status of the latest pipeline execution. Use this page to see all your pipelines and get a quick view of their health. Only pipelines with Git information associated to the default branch (usually named `main` or `prod`), as well as pipelines without any Git information, are displayed on this page.
The metrics shown include build frequency, failure rate, median duration, and change in median duration on both an absolute and relative basis. This information reveals which pipelines are high-usage and potentially high-resource consumers, or are experiencing regressions. The last build result, duration, and last runtime shows you the effect of the last commit.
-You can filter the page by pipeline name to see the pipelines you're most concerned with. Click on a pipeline that is slow or failing to dig into details that show what commit might have introduced the performance regression or build error. If you are using [Datadog Teams][106], you can filter for specific pipelines associated to your team using [custom tags][107] that match team handles.
+You can filter the page by pipeline name to see the pipelines you're most concerned with. Click on a pipeline that is slow or failing to dig into details that show what commit might have introduced the performance regression or build error. If you are using [Datadog Teams][6], you can filter for specific pipelines associated to your team using [custom tags][7] that match team handles.
## Pipeline details and executions
@@ -74,9 +63,9 @@ If job log collection is supported and enabled for the CI provider, related log
Job log collection is supported for the following providers:
-- [GitHub Actions][103]
-- [GitLab][104]
-- [Jenkins][105]
+- [GitHub Actions][3]
+- [GitLab][4]
+- [Jenkins][5]
#### AI-generated log summaries
@@ -84,88 +73,13 @@ Job log collection is supported for the following providers:
Pipeline Visibility provides AI-generated explanations for pipeline errors based on your CI job logs. These explanations can be found on the **Failed Jobs** tab for each pipeline execution. You can use these summaries to determine whether an error in CI is associated with developer-written code or the CI pipeline itself, as well as troubleshoot execution failures.
-[101]: https://app.datadoghq.com/ci/pipelines
-[103]: /continuous_integration/pipelines/github/#enable-log-collection
-[104]: /continuous_integration/pipelines/gitlab/#enable-job-log-collection-beta
-[105]: /continuous_integration/pipelines/jenkins#enable-job-log-collection
-[106]: /account_management/teams/
-[107]: /continuous_integration/pipelines/custom_tags_and_metrics/?tab=linux
-
-{{% /tab %}}
-{{% tab "Tests" %}}
-
-The [Tests page][101] is useful for developers who want to keep an eye on their test results.
-
-{{< img src="/continuous_integration/tests.png" text="CI Tests page" style="width:100%" >}}
-
-You can access low-level and immediate insights:
-
-- See what tests are failing and why.
-- See your last commit's test results.
-- View the wall time of your tests in your feature branch and compare it to the default branch, to identify if you're about to introduce a performance regression.
-- Find out if your commit introduces a new [flaky test][105] that wasn't flaky before, indicating that your code change is what's making it flaky. This gives you the opportunity to fix the problem before proceeding rather than contributing to the number of flaky tests in your CI.
-
-You can also access high-level accumulation and trends:
-
-- See the effects that changed code, added tests, and increased complexity have on your test suite performance over time.
-- See which tests have become slower over time and identify the commit that introduced the regression.
-- Take advantage of Datadog's automatic test flakiness detection and tracking, which shows you which tests are becoming more or less unreliable over time.
-
-## Search for tests
-
-To see your tests, navigate to [**CI** > **Tests**][101] and select between the [**Branches**](#branches-view) or [**Default Branches** view](#default-branches-view).
-
-### Branches view
-
-The [Branches][102] view of the Tests page lists all branches from all [test services][103] that have reported test results. This tab is useful for individual developers to quickly see the status of tests that run on their code branches and troubleshoot test failures.
-
-In this page, you can filter the list by name, test service, or commit SHA, or to show only your branches (branches that contain at least one commit authored by you), enable the **My branches** toggle and add the email addresses you use in your Git configuration.
-
-#### Test results
-
-For each branch, you can see the test service, the number of failed, passed, and skipped tests, test regressions, wall time, the percentage of change compared to the default branch, when the commit was last updated, and the avatar of the author of the commit.
-
-Click on a branch to explore the test details page, which includes information about the branch's latest commits, flaky tests, test performance, common error types, and all test runs.
-
-{{< img src="continuous_integration/test_details.png" alt="Test Details page for a single branch" style="width:100%;">}}
-
-#### Test suite performance
-
-There is also information about the [wall time][104] of the most recent test suite run, and a comparison to the average wall time of the default branch. The comparison of your branch's wall time to the default branch's wall time can help you determine if your commit is introducing performance [regressions][106] to your test suite.
-
-Hovering over the commit author avatar shows detailed information about the latest commit.
-
-#### Test regressions
-
-[Test regressions][106] are evaluated per commit in an effort to tie performance regressions to specific code changes.
-
-#### Investigate for more details
-
-Click on the row to see test suite run details such as test results for the last commit on this branch (or you can switch branches), failing tests and the most common errors, slow tests, flaky tests, and a complete list of test runs over the time frame selected. You can filter this list of test runs by facet to get to the information you want to see most.
-
-Click into one of the test runs to see the test trace as a flame graph or a span list. The _Runs (n)_ list on the left lets you quickly access traces for each retry of the test for the same commit.
-
-#### Explore connections to services, resources, logs, and network events
-
-Click the CI provider link to examine the Resource, Service, or Analytics page for the test. You can also find complete tags information and links to related log events and network monitoring events.
-
-### Default Branches view
-
-The [Default Branches][107] view of the Tests page shows aggregated health metrics for the _default_ branch of each test service. This view is useful for teams to understand the overall health of the service over time.
-
-The Default Branches view shows similar information to the Branches view, but applied to the default branch. It compares the current wall time with the average default branch wall time to give you an indication of how your test suite performance is trending over time.
-
-[101]: https://app.datadoghq.com/ci/test-services
-[102]: https://app.datadoghq.com/ci/test-services?view=branches
-[103]: /glossary/#test-service
-[104]: /glossary/#wall-time
-[105]: /glossary/#flaky-test
-[106]: /glossary/#test-regression
-[107]: https://app.datadoghq.com/ci/test-services?view=default-branches
-
-{{% /tab %}}
-{{< /tabs >}}
-
## Further reading
{{< partial name="whats-next/whats-next.html" >}}
+
+[1]: https://app.datadoghq.com/ci/pipelines
+[3]: /continuous_integration/pipelines/github/#enable-log-collection
+[4]: /continuous_integration/pipelines/gitlab/#enable-job-log-collection-beta
+[5]: /continuous_integration/pipelines/jenkins#enable-job-log-collection
+[6]: /account_management/teams/
+[7]: /continuous_integration/pipelines/custom_tags_and_metrics/?tab=linux
\ No newline at end of file
diff --git a/content/en/continuous_integration/troubleshooting.md b/content/en/continuous_integration/troubleshooting.md
index fb3d9280f8abf..62c37fef52b9b 100644
--- a/content/en/continuous_integration/troubleshooting.md
+++ b/content/en/continuous_integration/troubleshooting.md
@@ -21,195 +21,24 @@ further_reading:
This page provides information to help you troubleshot issues with CI Visibility. If you need additional help, contact [Datadog Support][2].
-## CI tests
-
-### Your tests are instrumented, but Datadog isn't showing any data
-
-1. Go to the [**Tests**][3] page for the language you're instrumenting and check that the testing framework you are using is supported in the **Compatibility** section.
-2. Check if you see any test results in the [**Test Runs**][4] section. If you do see results there, but not in the [**Tests**][5] section, Git information is missing. See [Data appears in Test Runs but not Tests](#data-appears-in-test-runs-but-not-tests) to troubleshoot it.
-3. If you are reporting the data through the Datadog Agent, make sure it is running on the host where tests are run (accessible at `localhost:8126`), or if accessible on another hostname or port, make sure you run your tests with the appropriate Agent hostname set in the `DD_AGENT_HOST` and the appropriate port in `DD_TRACE_AGENT_PORT` environment variables. You can activate [debug mode][6] in the tracer to check if it's able to connect to the Agent.
-4. If you still don't see any results, [contact Support][2] for troubleshooting help.
-
-### You are uploading JUnit test reports with `datadog-ci` but some or all tests are missing
-If you are uploading JUnit test report files with `datadog-ci` CLI and you do not see the tests, it is likely the tests are being discarded because the report is considered incorrect.
-
-The following aspects make a JUnit test report incorrect:
-* A timestamp of the reported tests that is older than **71 hours** before the moment the report is uploaded.
-* A testsuite without a name.
-
-### Data appears in test runs but not tests
-
-If you can see test results data in the **Test Runs** tab, but not the **Tests** tab, Git metadata (repository, commit, or branch) is probably missing. To confirm this is the case, open a test execution in the [**Test Runs**][4] section, and check that there is no `git.repository_url`, `git.commit.sha`, or `git.branch`. If these tags are not populated, nothing shows in the [**Tests**][5] section.
-
-1. Tracers first use the environment variables, if any, set by the CI provider to collect Git information. See [Running tests inside a container][7] for a list of environment variables that the tracer attempts to read for each supported CI provider. At a minimum, this populates the repository, commit hash, and branch information.
-2. Next, tracers fetch Git metadata using the local `.git` folder, if present, by executing `git` commands. This populates all Git metadata fields, including commit message, author, and committer information. Ensure the `.git` folder is present and the `git` binary is installed and in `$PATH`. This information is used to populate attributes not detected in the previous step.
-3. You can also provide Git information manually using environment variables, which override information detected by any of the previous steps.
-
- The supported environment variables for providing Git information are:
-
- `DD_GIT_REPOSITORY_URL` **(required)**
- : URL of the repository where the code is stored. Both HTTP and SSH URLs are supported.
- **Example**: `git@github.com:MyCompany/MyApp.git`, `https://github.com/MyCompany/MyApp.git`
-
- `DD_GIT_COMMIT_SHA` **(required)**
- : Full (40-character long SHA1) commit hash.
- **Example**: `a18ebf361cc831f5535e58ec4fae04ffd98d8152`
-
- `DD_GIT_BRANCH`
- : Git branch being tested. Leave empty if providing tag information instead.
- **Example**: `develop`
-
- `DD_GIT_TAG`
- : Git tag being tested (if applicable). Leave empty if providing branch information instead.
- **Example**: `1.0.1`
-
- `DD_GIT_COMMIT_MESSAGE`
- : Commit message.
- **Example**: `Set release number`
-
- `DD_GIT_COMMIT_AUTHOR_NAME`
- : Commit author name.
- **Example**: `John Smith`
-
- `DD_GIT_COMMIT_AUTHOR_EMAIL`
- : Commit author email.
- **Example**: `john@example.com`
-
- `DD_GIT_COMMIT_AUTHOR_DATE`
- : Commit author date in ISO 8601 format.
- **Example**: `2021-03-12T16:00:28Z`
-
- `DD_GIT_COMMIT_COMMITTER_NAME`
- : Commit committer name.
- **Example**: `Jane Smith`
-
- `DD_GIT_COMMIT_COMMITTER_EMAIL`
- : Commit committer email.
- **Example**: `jane@example.com`
-
- `DD_GIT_COMMIT_COMMITTER_DATE`
- : Commit committer date in ISO 8601 format.
- **Example**: `2021-03-12T16:00:28Z`
-
-4. If no CI provider environment variables are found, tests results are sent with no Git metadata.
-
-### The tests wall time is empty
-
-If you cannot see the tests wall time it is likely that the CI provider metadata is missing. To confirm this is the case, open a test execution in the [**Test Runs**][4] section, and check if the `ci.pipeline.id`, `ci.pipeline.name`, `ci.pipeline.number`, or `ci.job.url` tags are missing. If these tags are not populated, then nothing shows in the wall time column.
-
-1. Tracers use the environment variables set by the CI provider to collect this information. See [Running tests inside a container][7] for a list of environment variables that the tracer attempts to read for each supported CI provider. Make sure that the environment variables have the expected values set.
-2. Check that you are running your tests in a supported CI provider. For a list of supported CI providers, see [Running tests inside a container][7]. Only these CI providers can extract the information to enrich the test metadata with CI information.
-3. If you still don't see the wall time, contact [Datadog support][2] for help.
-
-### The tests wall time is not what is expected
-
-#### How wall time is calculated
-The wall time is defined as the time difference between the start time of the first test and the end time of the last test for the given pipeline.
-
-This is done using the following algorithm:
-
-1. Compute a hash based on CI information to group the tests.
- 1. If the tests include `ci.job.url`, use this tag to calculate the hash.
- 2. If the tests don't include `ci.job.url`, use `ci.pipeline.id` + `ci.pipeline.name` + `ci.pipeline.number` to calculate the hash.
-2. The calculated wall time is associated to a given hash. **Note**: If there are multiple jobs that execute tests, the wall time is calculated for each job, and the maximum from all calculated wall times is shown.
-
-#### Possible issues with wall time calculation
-If you're using a library for testing time-dependent code, like [timecop][8] for Ruby or [FreezeGun][9] for Python, it is possible that test timestamps are wrong, and therefore calculated wall times. If this is the case, make sure that modifications to time are rolled back before finishing your tests.
-
-### The test status numbers are not what is expected
-
-The test status numbers are calculated based on the unique tests that were collected. The uniqueness of a test is defined not only by its suite and name, but by its test parameters and test configurations as well.
-
-#### The numbers are lower than expected
-
-If the numbers are lower than expected, it is likely that either the library or the tool you are using to collect test data cannot collect test parameters and/or some test configurations.
-
-1. If you are uploading JUnit test report files:
- 1. If you are running the same tests in different environment configurations, [make sure you are setting those configuration tags during the upload][10].
- 2. If you are running parameterized tests, it's very likely that the JUnit report does not have that information. [Try using a native library to report test data][3].
-2. If you still don't see the expected results, [contact Datadog support][2] for troubleshooting help.
-
-#### The passed/failed/skipped numbers are different than expected
-
-If the same test is collected several times for the same commit but with different status, the aggregated result follows the algorithm in the table below:
-
-| **Test Status - First Try** | **Test Status - Retry #1** | **Result** |
-|-----------------------------|----------------------------|------------|
-| `Passed` | `Passed` | `Passed` |
-| `Passed` | `Failed` | `Passed` |
-| `Passed` | `Skipped` | `Passed` |
-| `Failed` | `Passed` | `Passed` |
-| `Failed` | `Failed` | `Failed` |
-| `Failed` | `Skipped` | `Failed` |
-| `Skipped` | `Passed` | `Passed` |
-| `Skipped` | `Failed` | `Failed` |
-| `Skipped` | `Skipped` | `Skipped` |
-
-### The default branch is not correct
-
-#### How it impacts the product
-
-The default branch is used to power some features of the products, namely:
-
-- Default branches list on the Tests page: This list only displays default branches. Setting the wrong default branch can result in missing or incorrect data in the default branches list.
-
-- Wall time comparison for non-default branches: On the Tests page, in the Branches view, the **VS Default** column is calculated by comparing wall time for the current branch against wall time for the default branch.
-
-- New flaky tests: Tests that are not currently classified as flaky in the default branch. If the default branch is not properly set, this could lead to a wrong number of detected new flaky tests.
-
-- Pipelines list: The pipelines list only displays default branches. Setting the wrong default branch can result in missing or incorrect data in the pipelines list.
-
-#### How to fix the default branch
-
-If you have admin access, you can update it from the [Repository Settings Page][11].
-
-## CI pipelines
-
-### Your Jenkins instance is instrumented, but Datadog isn't showing any data
+## Your Jenkins instance is instrumented, but Datadog isn't showing any data
1. Make sure that at least one pipeline has finished executing. Pipeline execution information is only sent after the pipeline has finished.
2. Make sure the Datadog Agent host is properly configured and is reachable by the Datadog Plugin. You can test connectivity by clicking on the **Check connectivity with the Datadog Agent** button on the Jenkins plugin configuration UI.
3. Check for any errors in the Jenkins logs. You can enable debug-level logs for the Datadog plugin by [creating a `logging.properties` file][1] and adding the line: `org.datadog.level = ALL`.
-### Pipeline not found
+## Pipeline not found
A "Pipeline not found" message is shown when you click on incomplete data coming from an in-progress pipeline. Data is received progressively for stages, jobs, or custom commands. Wait until the pipeline has finished and try again.
-### Missing pipelines on the Pipelines page
+## Missing pipelines on the Pipelines page
The pipeline page only displays pipelines with no Git information, or pipelines with Git information which belong to the default branch of the Git repository.
-### Missing stages or jobs in summary tables
+## Missing stages or jobs in summary tables
Missing stages or jobs in the _Pipeline Details_ page might be due to a wrong configuration. Make sure that the pipeline name stored in the stage or job executions matches the **same** name of their parent pipeline. If you are using custom pipelines, refer to the [public API endpoint specification][15].
-## Intelligent Test Runner
-
-### Intelligent Test Runner is not working
-
-[Intelligent Test Runner][12] works by analyzing your commit history along with code coverage information about past test runs to determine which tests need to be run and which ones can be safely skipped. A minimum amount of information needs to exist in order for the Intelligent Test Runner to work correctly:
-
-- Your repository needs to have a commit history of at least two commits in the past month.
-- You need to have collected test code coverage in past commits, which happens on test runs where Intelligent Test Runner was enabled.
-- Your git clone must contain commit and tree history. Intelligent Test Runner tries to unshallow git clones that do not contain history (`git clone --depth=1`), but that might not work on older versions of git. Automatic unshallowing might require additional set up in some CI providers (Harness CI, for example, requires [extra configuration][13] to make sure your pipeline can execute git commands). If your CI job is using shallow git clones, you can change it to use partial git clones by using the following command: `git clone --filter=blob:none`.
-
-Due to these restrictions, the first time you enable Intelligent Test Runner, you cannot see any tests skipped and the test execution time may be slower than usual because the code coverage is collected automatically.
-
-Intelligent Test Runner only takes into account the commit history and test code coverage information for the past month. Additionally, it does not take into account code coverage information that is generated more than one week after a commit was made.
-
-There is a limitation when [synchronizing a fork through GitHub's UI][14] which causes all tests to be run for the generated synchronization commit.
-
-### Intelligent Test Runner incorrectly skipped a test
-
-Intelligent Test Runner performs test impact analysis based on code coverage to determine which tests are impacted by a given commit or set of commits. While this strategy works for the majority of tests, there are known scenarios where Intelligent Test Runner could skip a test that should have been run:
-
-- Changes in library dependencies.
-- Changes in compiler options.
-- Changes in external services.
-- Changes to data files in data-driven tests.
-
-If you are authoring a commit that includes any of those cases, you can force-disable test skipping in Intelligent Test Runner by adding `ITR:NoSkip` (case insensitive) anywhere in your Git commit message.
-
## Further reading
{{< partial name="whats-next/whats-next.html" >}}
diff --git a/content/en/developers/ide_integrations/idea/_index.md b/content/en/developers/ide_integrations/idea/_index.md
index 5b7adc9cbf49f..65789fd2b9e94 100644
--- a/content/en/developers/ide_integrations/idea/_index.md
+++ b/content/en/developers/ide_integrations/idea/_index.md
@@ -10,7 +10,7 @@ further_reading:
- link: "/integrations/guide/source-code-integration/"
tag: "Documentation"
text: "Learn about Source Code Integration."
-- link: "/continuous_integration/static_analysis/?tab=githubactions"
+- link: "/static_analysis/?tab=githubactions"
tag: "Documentation"
text: "Learn about Static Analysis."
- link: "https://www.jetbrains.com/lp/toolbox/"
@@ -223,6 +223,6 @@ You can give feedback in the [discussion forum][1], or send an e-mail to [team-i
[10]: /watchdog/insights
[11]: mailto:team-ide-integration@datadoghq.com
[12]: /continuous_integration/explorer/?tab=testruns
-[13]: /continuous_integration/static_analysis/?tab=githubactions
-[14]: /continuous_integration/static_analysis/rules/#python-rules
-[15]: /continuous_integration/static_analysis/rules/#docker-rules
+[13]: /static_analysis/?tab=githubactions
+[14]: /static_analysis/rules/#python-rules
+[15]: /static_analysis/rules/#docker-rules
diff --git a/content/en/continuous_integration/dora_metrics/_index.md b/content/en/dora_metrics/_index.md
similarity index 99%
rename from content/en/continuous_integration/dora_metrics/_index.md
rename to content/en/dora_metrics/_index.md
index f42d07df804a8..8d4db4b31acd8 100644
--- a/content/en/continuous_integration/dora_metrics/_index.md
+++ b/content/en/dora_metrics/_index.md
@@ -2,6 +2,8 @@
title: DORA Metrics
kind: documentation
description: Learn how to use DORA metrics to improve and measure software development.
+aliases:
+- /continuous_integration/dora_metrics
is_beta: true
further_reading:
- link: "/continuous_integration/tests"
@@ -10,7 +12,7 @@ further_reading:
- link: "/continuous_integration/pipelines"
tag: "Documentation"
text: "Learn about Pipeline Visibility"
-- link: "/continuous_integration/static_analysis"
+- link: "/static_analysis"
tag: "Documentation"
text: "Learn about Static Analysis"
- link: "/tracing/service_catalog"
diff --git a/content/en/integrations/guide/source-code-integration.md b/content/en/integrations/guide/source-code-integration.md
index 0ae6400428115..85a4b6869d03e 100644
--- a/content/en/integrations/guide/source-code-integration.md
+++ b/content/en/integrations/guide/source-code-integration.md
@@ -15,7 +15,7 @@ further_reading:
- link: "/serverless/aws_lambda/configuration/?tab=datadogcli#link-errors-to-your-source-code"
tag: "Documentation"
text: "Learn about Serverless Monitoring"
-- link: "/continuous_integration/tests/developer_workflows/"
+- link: "/tests/developer_workflows/"
tag: "Documentation"
text: "Learn about CI Visibility"
- link: "/security/application_security/"
@@ -363,7 +363,7 @@ Setting up the GitHub integration also allows you to see inline code snippets in
[103]: /logs/error_tracking/backend/?tab=serilog#setup
[104]: /integrations/guide/source-code-integration/?tab=continuousprofiler#links-to-git-providers
[105]: /serverless/aws_lambda/configuration/?tab=datadogcli#link-errors-to-your-source-code
-[106]: /continuous_integration/tests/developer_workflows/#open-tests-in-github-and-your-ide
+[106]: /tests/developer_workflows/#open-tests-in-github-and-your-ide
[107]: /security/application_security/
{{% /tab %}}
@@ -463,7 +463,7 @@ You can see links from failed test runs to their source repository in **CI Visib
For more information, see [Enhancing Developer Workflows with Datadog][102].
[101]: https://app.datadoghq.com/ci/test-runs
-[102]: /continuous_integration/tests/developer_workflows#open-tests-in-github-and-your-ide
+[102]: /tests/developer_workflows/#open-tests-in-github-and-your-ide
{{% /tab %}}
{{% tab "Application Security Monitoring" %}}
diff --git a/content/en/continuous_integration/intelligent_test_runner/_index.md b/content/en/intelligent_test_runner/_index.md
similarity index 99%
rename from content/en/continuous_integration/intelligent_test_runner/_index.md
rename to content/en/intelligent_test_runner/_index.md
index 9face6f8b99dc..fd7767524f6b1 100644
--- a/content/en/continuous_integration/intelligent_test_runner/_index.md
+++ b/content/en/intelligent_test_runner/_index.md
@@ -1,6 +1,8 @@
---
title: Intelligent Test Runner
kind: documentation
+aliases:
+- /continuous_integration/intelligent_test_runner/
further_reading:
- link: "https://www.datadoghq.com/blog/streamline-ci-testing-with-datadog-intelligent-test-runner/"
tag: "Blog"
diff --git a/content/en/continuous_integration/intelligent_test_runner/setup/_index.md b/content/en/intelligent_test_runner/setup/_index.md
similarity index 82%
rename from content/en/continuous_integration/intelligent_test_runner/setup/_index.md
rename to content/en/intelligent_test_runner/setup/_index.md
index 29ea74017e567..be238e0c9fbd0 100644
--- a/content/en/continuous_integration/intelligent_test_runner/setup/_index.md
+++ b/content/en/intelligent_test_runner/setup/_index.md
@@ -1,6 +1,8 @@
---
title: Configure the Intelligent Test Runner
kind: documentation
+aliases:
+- /continuous_integration/intelligent_test_runner/setup/
type: multi-code-lang
---
diff --git a/content/en/continuous_integration/intelligent_test_runner/setup/dotnet.md b/content/en/intelligent_test_runner/setup/dotnet.md
similarity index 98%
rename from content/en/continuous_integration/intelligent_test_runner/setup/dotnet.md
rename to content/en/intelligent_test_runner/setup/dotnet.md
index 0e89b5450edea..580fedee6b21c 100644
--- a/content/en/continuous_integration/intelligent_test_runner/setup/dotnet.md
+++ b/content/en/intelligent_test_runner/setup/dotnet.md
@@ -6,6 +6,7 @@ type: multi-code-lang
code_lang_weight: 0
aliases:
- continuous_integration/intelligent_test_runner/dotnet/
+ - continuous_integration/intelligent_test_runner/setup/dotnet/
further_reading:
- link: "/continuous_integration/tests"
tag: "Documentation"
diff --git a/content/en/continuous_integration/intelligent_test_runner/setup/java.md b/content/en/intelligent_test_runner/setup/java.md
similarity index 99%
rename from content/en/continuous_integration/intelligent_test_runner/setup/java.md
rename to content/en/intelligent_test_runner/setup/java.md
index 58c663b3ef5c9..163108bbec05c 100644
--- a/content/en/continuous_integration/intelligent_test_runner/setup/java.md
+++ b/content/en/intelligent_test_runner/setup/java.md
@@ -7,6 +7,8 @@ type: multi-code-lang
code_lang_weight: 10
aliases:
- continuous_integration/intelligent_test_runner/java/
+ - continuous_integration/intelligent_test_runner/setup/java/
+
further_reading:
- link: "/continuous_integration/tests"
tag: "Documentation"
diff --git a/content/en/continuous_integration/intelligent_test_runner/setup/javascript.md b/content/en/intelligent_test_runner/setup/javascript.md
similarity index 98%
rename from content/en/continuous_integration/intelligent_test_runner/setup/javascript.md
rename to content/en/intelligent_test_runner/setup/javascript.md
index 5f362c65a294f..1a220088d56c7 100644
--- a/content/en/continuous_integration/intelligent_test_runner/setup/javascript.md
+++ b/content/en/intelligent_test_runner/setup/javascript.md
@@ -6,6 +6,7 @@ type: multi-code-lang
code_lang_weight: 20
aliases:
- continuous_integration/intelligent_test_runner/javascript/
+ - continuous_integration/intelligent_test_runner/setup/javascript/
further_reading:
- link: "/continuous_integration/tests"
tag: "Documentation"
diff --git a/content/en/continuous_integration/intelligent_test_runner/setup/python.md b/content/en/intelligent_test_runner/setup/python.md
similarity index 98%
rename from content/en/continuous_integration/intelligent_test_runner/setup/python.md
rename to content/en/intelligent_test_runner/setup/python.md
index b264211e64e0f..83c9faad733ec 100644
--- a/content/en/continuous_integration/intelligent_test_runner/setup/python.md
+++ b/content/en/intelligent_test_runner/setup/python.md
@@ -6,6 +6,7 @@ type: multi-code-lang
code_lang_weight: 30
aliases:
- continuous_integration/intelligent_test_runner/python/
+ - continuous_integration/intelligent_test_runner/setup/python/
further_reading:
- link: "/continuous_integration/tests"
tag: "Documentation"
diff --git a/content/en/continuous_integration/intelligent_test_runner/setup/swift.md b/content/en/intelligent_test_runner/setup/swift.md
similarity index 96%
rename from content/en/continuous_integration/intelligent_test_runner/setup/swift.md
rename to content/en/intelligent_test_runner/setup/swift.md
index b1388684eff80..1dbe5b11c5953 100644
--- a/content/en/continuous_integration/intelligent_test_runner/setup/swift.md
+++ b/content/en/intelligent_test_runner/setup/swift.md
@@ -7,6 +7,7 @@ type: multi-code-lang
code_lang_weight: 40
aliases:
- continuous_integration/intelligent_test_runner/swift/
+ - continuous_integration/intelligent_test_runner/setup/swift/
further_reading:
- link: "/continuous_integration/tests"
tag: "Documentation"
diff --git a/content/en/intelligent_test_runner/troubleshooting/_index.md b/content/en/intelligent_test_runner/troubleshooting/_index.md
new file mode 100644
index 0000000000000..575933a0bd7e6
--- /dev/null
+++ b/content/en/intelligent_test_runner/troubleshooting/_index.md
@@ -0,0 +1,61 @@
+---
+title: Intelligent Test Runner Troubleshooting
+kind: documentation
+further_reading:
+- link: "/intelligent_test_runner"
+ tag: "Documentation"
+ text: "Learn about the Intelligent Test Runner"
+---
+
+{{< site-region region="gov" >}}
+
Intelligent Test Runner is not available in the selected site ({{< region-param key="dd_site_name" >}}) at this time.
+{{< /site-region >}}
+
+## Overview
+
+This page provides information to help you troubleshot issues with Intelligent Test Runner. If you need additional help, contact [Datadog Support][2].
+
+## Intelligent Test Runner is not working
+
+[Intelligent Test Runner][12] works by analyzing your commit history along with code coverage information about past test runs to determine which tests need to be run and which ones can be safely skipped. A minimum amount of information needs to exist in order for Intelligent Test Runner to work correctly:
+
+- Your repository needs to have a commit history of at least two commits in the past month.
+- You need to have collected test code coverage in past commits, which happens on test runs where Intelligent Test Runner was enabled.
+- Your git clone must contain commit and tree history. Intelligent Test Runner tries to unshallow git clones that do not contain history (`git clone --depth=1`), but that might not work on older versions of git. Automatic unshallowing might require additional set up in some CI providers (Harness CI, for example, requires [extra configuration][13] to make sure your pipeline can execute git commands). If your CI job is using shallow git clones, you can change it to use partial git clones by using the following command: `git clone --filter=blob:none`.
+
+Due to these restrictions, the first time you enable Intelligent Test Runner, you cannot see any tests skipped and the test execution time may be slower than usual because the code coverage is collected automatically.
+
+Intelligent Test Runner only takes into account the commit history and test code coverage information for the past month. Additionally, it does not take into account code coverage information that is generated more than one week after a commit was made.
+
+There is a limitation when [synchronizing a fork through GitHub's UI][14] which causes all tests to be run for the generated synchronization commit.
+
+## Intelligent Test Runner incorrectly skipped a test
+
+Intelligent Test Runner performs test impact analysis based on code coverage to determine which tests are impacted by a given commit or set of commits. While this strategy works for the majority of tests, there are known scenarios where Intelligent Test Runner could skip a test that should have been run:
+
+- Changes in library dependencies.
+- Changes in compiler options.
+- Changes in external services.
+- Changes to data files in data-driven tests.
+
+If you are authoring a commit that includes any of those cases, you can force-disable test skipping in Intelligent Test Runner by adding `ITR:NoSkip` (case insensitive) anywhere in your Git commit message.
+
+## Further reading
+
+{{< partial name="whats-next/whats-next.html" >}}
+
+[1]: https://www.jenkins.io/doc/book/system-administration/viewing-logs/
+[2]: /help/
+[3]: /continuous_integration/tests/
+[4]: https://app.datadoghq.com/ci/test-runs
+[5]: https://app.datadoghq.com/ci/test-services
+[6]: /tracing/troubleshooting/tracer_debug_logs
+[7]: /continuous_integration/tests/containers/
+[8]: https://github.com/travisjeffery/timecop
+[9]: https://github.com/spulec/freezegun
+[10]: /continuous_integration/tests/junit_upload/?tabs=linux#collecting-environment-configuration-metadata
+[11]: https://app.datadoghq.com/ci/settings/repository
+[12]: /continuous_integration/intelligent_test_runner/
+[13]: https://developer.harness.io/kb/continuous-integration/articles/using_git_credentials_from_codebase_connector_in_ci_pipelines_run_step/
+[14]: https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork#syncing-a-fork-branch-from-the-web-ui
+[15]: /api/latest/ci-visibility-pipelines/#send-pipeline-event
diff --git a/content/en/continuous_integration/quality_gates/_index.md b/content/en/quality_gates/_index.md
similarity index 99%
rename from content/en/continuous_integration/quality_gates/_index.md
rename to content/en/quality_gates/_index.md
index 38565d8a82fd4..abbda65727bfe 100644
--- a/content/en/continuous_integration/quality_gates/_index.md
+++ b/content/en/quality_gates/_index.md
@@ -2,6 +2,8 @@
title: Quality Gates
kind: documentation
description: Learn how to use Quality Gates in your pipeline.
+aliases:
+- /continuous_integration/quality_gates
is_beta: true
further_reading:
- link: "/continuous_integration/tests"
diff --git a/content/en/continuous_integration/static_analysis/_index.md b/content/en/static_analysis/_index.md
similarity index 98%
rename from content/en/continuous_integration/static_analysis/_index.md
rename to content/en/static_analysis/_index.md
index 0450f4664144e..ccb1b7e3cc063 100644
--- a/content/en/continuous_integration/static_analysis/_index.md
+++ b/content/en/static_analysis/_index.md
@@ -2,6 +2,8 @@
title: Static Analysis
kind: documentation
description: Learn about Datadog Static Analysis to scan code for quality issues and security vulnerabilities before your code reaches production.
+aliases:
+- /continuous_integration/static_analysis
is_beta: true
further_reading:
- link: "https://www.datadoghq.com/blog/monitor-ci-pipelines/"
@@ -74,14 +76,14 @@ Configure your [Datadog API and application keys][4] and run Static Analysis in
To run Static Analysis with CircleCI, [follow these instructions for setting up a CircleCI Orb][101].
-[101]: /continuous_integration/static_analysis/circleci_orbs
+[101]: /static_analysis/circleci_orbs
{{% /tab %}}
{{% tab "GitHub Actions" %}}
To run Static Analysis with GitHub, [follow these instructions for setting up a GitHub Action][101].
-[101]: /continuous_integration/static_analysis/github_actions/
+[101]: /static_analysis/github_actions/
{{% /tab %}}
{{% tab "Other" %}}
@@ -233,5 +235,5 @@ bar = 2
[3]: /integrations/github/
[4]: /account_management/api-app-keys/
[5]: https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=sarif
-[6]: /continuous_integration/static_analysis/rules
+[6]: /static_analysis/rules
[103]: /getting_started/site/
diff --git a/content/en/continuous_integration/static_analysis/rules/_index.md b/content/en/static_analysis/rules/_index.md
similarity index 50%
rename from content/en/continuous_integration/static_analysis/rules/_index.md
rename to content/en/static_analysis/rules/_index.md
index ccfc294a23faa..28a9254cd350c 100644
--- a/content/en/continuous_integration/static_analysis/rules/_index.md
+++ b/content/en/static_analysis/rules/_index.md
@@ -2,1228 +2,1230 @@
title: Static Analysis Rules
kind: documentation
description: View rules for multiple languages for Static Analysis.
+aliases:
+- /continuous_integration/static_analysis/rules
is_beta: true
docker_best_practices_data:
- - link: "/continuous_integration/static_analysis/rules/docker-best-practices/absolute-workdir"
+ - link: "/static_analysis/rules/docker-best-practices/absolute-workdir"
tag: "absolute-workdir"
text: "Use absolute workdir"
- - link: "/continuous_integration/static_analysis/rules/docker-best-practices/alias-must-be-unique"
+ - link: "/static_analysis/rules/docker-best-practices/alias-must-be-unique"
tag: "alias-must-be-unique"
text: "FROM aliases must be unique"
- - link: "/continuous_integration/static_analysis/rules/docker-best-practices/apt-get-yes"
+ - link: "/static_analysis/rules/docker-best-practices/apt-get-yes"
tag: "apt-get-yes"
text: "Always use -y with apt-get install"
- - link: "/continuous_integration/static_analysis/rules/docker-best-practices/apt-pin-version"
+ - link: "/static_analysis/rules/docker-best-practices/apt-pin-version"
tag: "apt-pin-version"
text: "Always pin versions in apt-get install"
- - link: "/continuous_integration/static_analysis/rules/docker-best-practices/avoid-chmod-777"
+ - link: "/static_analysis/rules/docker-best-practices/avoid-chmod-777"
tag: "avoid-chmod-777"
text: "Do not give wide permissions on files"
- - link: "/continuous_integration/static_analysis/rules/docker-best-practices/avoid-commands-not-relevant"
+ - link: "/static_analysis/rules/docker-best-practices/avoid-commands-not-relevant"
tag: "avoid-commands-not-relevant"
text: "Avoid commands not made for containers"
- - link: "/continuous_integration/static_analysis/rules/docker-best-practices/avoid-http"
+ - link: "/static_analysis/rules/docker-best-practices/avoid-http"
tag: "avoid-http"
text: "Avoid fetching data from HTTP endpoint"
- - link: "/continuous_integration/static_analysis/rules/docker-best-practices/dnf-use-y"
+ - link: "/static_analysis/rules/docker-best-practices/dnf-use-y"
tag: "dnf-use-y"
text: "Always use -y with dnf install"
- - link: "/continuous_integration/static_analysis/rules/docker-best-practices/expose-admin-ports"
+ - link: "/static_analysis/rules/docker-best-practices/expose-admin-ports"
tag: "expose-admin-ports"
text: "Do not expose sensitive ports"
- - link: "/continuous_integration/static_analysis/rules/docker-best-practices/expose-valid-port"
+ - link: "/static_analysis/rules/docker-best-practices/expose-valid-port"
tag: "expose-valid-port"
text: "Expose a valid UNIX port number"
- - link: "/continuous_integration/static_analysis/rules/docker-best-practices/image-avoid-digest"
+ - link: "/static_analysis/rules/docker-best-practices/image-avoid-digest"
tag: "image-avoid-digest"
text: "Do not use the digest to pull an image"
- - link: "/continuous_integration/static_analysis/rules/docker-best-practices/maintainer-deprecated"
+ - link: "/static_analysis/rules/docker-best-practices/maintainer-deprecated"
tag: "maintainer-deprecated"
text: "The maintainer entry is deprecated"
- - link: "/continuous_integration/static_analysis/rules/docker-best-practices/multiple-cmd"
+ - link: "/static_analysis/rules/docker-best-practices/multiple-cmd"
tag: "multiple-cmd"
text: "Do not use multiple CMD"
- - link: "/continuous_integration/static_analysis/rules/docker-best-practices/multiple-entrypoint"
+ - link: "/static_analysis/rules/docker-best-practices/multiple-entrypoint"
tag: "multiple-entrypoint"
text: "Do not use multiple CMD"
- - link: "/continuous_integration/static_analysis/rules/docker-best-practices/multiple-healthcheck"
+ - link: "/static_analysis/rules/docker-best-practices/multiple-healthcheck"
tag: "multiple-healthcheck"
text: "Do not use multiple HEALTHCHECK"
- - link: "/continuous_integration/static_analysis/rules/docker-best-practices/no-root-user"
+ - link: "/static_analysis/rules/docker-best-practices/no-root-user"
tag: "no-root-user"
text: "Last user should not be root"
- - link: "/continuous_integration/static_analysis/rules/docker-best-practices/pip-no-cache"
+ - link: "/static_analysis/rules/docker-best-practices/pip-no-cache"
tag: "pip-no-cache"
text: "Do not use cache when installing packages"
- - link: "/continuous_integration/static_analysis/rules/docker-best-practices/pip-pin-versions"
+ - link: "/static_analysis/rules/docker-best-practices/pip-pin-versions"
tag: "pip-pin-versions"
text: "Always pin versions with pip"
- - link: "/continuous_integration/static_analysis/rules/docker-best-practices/tag-image-version"
+ - link: "/static_analysis/rules/docker-best-practices/tag-image-version"
tag: "tag-image-version"
text: "Always tag the version of an image"
- - link: "/continuous_integration/static_analysis/rules/docker-best-practices/yum-use-y"
+ - link: "/static_analysis/rules/docker-best-practices/yum-use-y"
tag: "yum-use-y"
text: "Always use -y with yum install"
- - link: "/continuous_integration/static_analysis/rules/docker-best-practices/zypper-use-y"
+ - link: "/static_analysis/rules/docker-best-practices/zypper-use-y"
tag: "zypper-use-y"
text: "Always use -y with zypper install"
javascript_best_practices_data:
- - link: "/continuous_integration/static_analysis/rules/javascript-best-practices/for-direction"
+ - link: "/static_analysis/rules/javascript-best-practices/for-direction"
tag: "for-direction"
text: "Check for loop is moving in the right direction"
- - link: "/continuous_integration/static_analysis/rules/javascript-best-practices/new-parens"
+ - link: "/static_analysis/rules/javascript-best-practices/new-parens"
tag: "new-parens"
text: "Invoking a constructor must use parentheses"
- - link: "/continuous_integration/static_analysis/rules/javascript-best-practices/no-alert"
+ - link: "/static_analysis/rules/javascript-best-practices/no-alert"
tag: "no-alert"
text: "Avoid the use of alert, confirm, and prompt"
- - link: "/continuous_integration/static_analysis/rules/javascript-best-practices/no-async-promise-executor"
+ - link: "/static_analysis/rules/javascript-best-practices/no-async-promise-executor"
tag: "no-async-promise-executor"
text: "Promise executor cannot be an async function"
- - link: "/continuous_integration/static_analysis/rules/javascript-best-practices/no-caller"
+ - link: "/static_analysis/rules/javascript-best-practices/no-caller"
tag: "no-caller"
text: "Avoid the use of arguments.caller or arguments.callee"
- - link: "/continuous_integration/static_analysis/rules/javascript-best-practices/no-case-declarations"
+ - link: "/static_analysis/rules/javascript-best-practices/no-case-declarations"
tag: "no-case-declarations"
text: "Avoid lexical declarations in case clauses"
- - link: "/continuous_integration/static_analysis/rules/javascript-best-practices/no-compare-neg-zero"
+ - link: "/static_analysis/rules/javascript-best-practices/no-compare-neg-zero"
tag: "no-compare-neg-zero"
text: "Direct comparison with -0 detected"
- - link: "/continuous_integration/static_analysis/rules/javascript-best-practices/no-cond-assign"
+ - link: "/static_analysis/rules/javascript-best-practices/no-cond-assign"
tag: "no-cond-assign"
text: "Avoid assignment operators in conditional expressions"
- - link: "/continuous_integration/static_analysis/rules/javascript-best-practices/no-console"
+ - link: "/static_analysis/rules/javascript-best-practices/no-console"
tag: "no-console"
text: "Avoid leaving console debug statements"
- - link: "/continuous_integration/static_analysis/rules/javascript-best-practices/no-debugger"
+ - link: "/static_analysis/rules/javascript-best-practices/no-debugger"
tag: "no-debugger"
text: "Disallow the use of debugger"
- - link: "/continuous_integration/static_analysis/rules/javascript-best-practices/no-delete-var"
+ - link: "/static_analysis/rules/javascript-best-practices/no-delete-var"
tag: "no-delete-var"
text: "Avoid using delete on variables directly"
- - link: "/continuous_integration/static_analysis/rules/javascript-best-practices/no-dupe-args"
+ - link: "/static_analysis/rules/javascript-best-practices/no-dupe-args"
tag: "no-dupe-args"
text: "Function parameters redeclared"
- - link: "/continuous_integration/static_analysis/rules/javascript-best-practices/no-dupe-class-members"
+ - link: "/static_analysis/rules/javascript-best-practices/no-dupe-class-members"
tag: "no-dupe-class-members"
text: "Avoid duplicate class members"
- - link: "/continuous_integration/static_analysis/rules/javascript-best-practices/no-dupe-keys"
+ - link: "/static_analysis/rules/javascript-best-practices/no-dupe-keys"
tag: "no-dupe-keys"
text: "Avoid duplicate keys in object literals"
- - link: "/continuous_integration/static_analysis/rules/javascript-best-practices/no-duplicate-case"
+ - link: "/static_analysis/rules/javascript-best-practices/no-duplicate-case"
tag: "no-duplicate-case"
text: "Avoid duplicate case labels"
- - link: "/continuous_integration/static_analysis/rules/javascript-best-practices/no-empty"
+ - link: "/static_analysis/rules/javascript-best-practices/no-empty"
tag: "no-empty"
text: "Avoid empty block statements"
- - link: "/continuous_integration/static_analysis/rules/javascript-best-practices/no-empty-character-class"
+ - link: "/static_analysis/rules/javascript-best-practices/no-empty-character-class"
tag: "no-empty-character-class"
text: "Avoid empty character classes in regular expressions"
- - link: "/continuous_integration/static_analysis/rules/javascript-best-practices/no-empty-pattern"
+ - link: "/static_analysis/rules/javascript-best-practices/no-empty-pattern"
tag: "no-empty-pattern"
text: "Avoid empty destructuring patterns"
- - link: "/continuous_integration/static_analysis/rules/javascript-best-practices/no-ex-assign"
+ - link: "/static_analysis/rules/javascript-best-practices/no-ex-assign"
tag: "no-ex-assign"
text: "Avoid reassigning exceptions in catch clauses"
- - link: "/continuous_integration/static_analysis/rules/javascript-best-practices/no-implied-eval"
+ - link: "/static_analysis/rules/javascript-best-practices/no-implied-eval"
tag: "no-implied-eval"
text: "Prevent the use methods similar to eval()"
- - link: "/continuous_integration/static_analysis/rules/javascript-best-practices/no-import-assign"
+ - link: "/static_analysis/rules/javascript-best-practices/no-import-assign"
tag: "no-import-assign"
text: "Prevent assigning to imported bindings"
- - link: "/continuous_integration/static_analysis/rules/javascript-best-practices/no-inner-declarations"
+ - link: "/static_analysis/rules/javascript-best-practices/no-inner-declarations"
tag: "no-inner-declarations"
text: "Avoid variable or function declaration in nested blocks"
- - link: "/continuous_integration/static_analysis/rules/javascript-best-practices/no-iterator"
+ - link: "/static_analysis/rules/javascript-best-practices/no-iterator"
tag: "no-iterator"
text: "Avoid the use of the __iterator__ property"
- - link: "/continuous_integration/static_analysis/rules/javascript-best-practices/no-loss-of-precision"
+ - link: "/static_analysis/rules/javascript-best-practices/no-loss-of-precision"
tag: "no-loss-of-precision"
text: "Avoid numbers that lose precision"
- - link: "/continuous_integration/static_analysis/rules/javascript-best-practices/no-new-symbol"
+ - link: "/static_analysis/rules/javascript-best-practices/no-new-symbol"
tag: "no-new-symbol"
text: "Avoid new statements with the Symbol object"
- - link: "/continuous_integration/static_analysis/rules/javascript-best-practices/no-octal"
+ - link: "/static_analysis/rules/javascript-best-practices/no-octal"
tag: "no-octal"
text: "Avoid using octal literals to prevent unexpected behavior"
- - link: "/continuous_integration/static_analysis/rules/javascript-best-practices/no-proto"
+ - link: "/static_analysis/rules/javascript-best-practices/no-proto"
tag: "no-proto"
text: "Avoid the use of the __proto__ property"
- - link: "/continuous_integration/static_analysis/rules/javascript-best-practices/no-script-url"
+ - link: "/static_analysis/rules/javascript-best-practices/no-script-url"
tag: "no-script-url"
text: "Avoid using JavaScript in URLs"
- - link: "/continuous_integration/static_analysis/rules/javascript-best-practices/no-unsafe-negation"
+ - link: "/static_analysis/rules/javascript-best-practices/no-unsafe-negation"
tag: "no-unsafe-negation"
text: "Avoid negating the left operand of relational operators"
- - link: "/continuous_integration/static_analysis/rules/javascript-best-practices/no-with"
+ - link: "/static_analysis/rules/javascript-best-practices/no-with"
tag: "no-with"
text: "The with statement can lead to ambiguous code"
- - link: "/continuous_integration/static_analysis/rules/javascript-best-practices/require-yield"
+ - link: "/static_analysis/rules/javascript-best-practices/require-yield"
tag: "require-yield"
text: "Require yield in generator functions"
- - link: "/continuous_integration/static_analysis/rules/javascript-best-practices/use-isnan"
+ - link: "/static_analysis/rules/javascript-best-practices/use-isnan"
tag: "use-isnan"
text: "Avoid direct comparison with NaN"
- - link: "/continuous_integration/static_analysis/rules/javascript-best-practices/valid-typeof"
+ - link: "/static_analysis/rules/javascript-best-practices/valid-typeof"
tag: "valid-typeof"
text: "Compare typeof expressions against valid strings"
javascript_browser_security_data:
- - link: "/continuous_integration/static_analysis/rules/javascript-browser-security/event-check-origin"
+ - link: "/static_analysis/rules/javascript-browser-security/event-check-origin"
tag: "event-check-origin"
text: "Check origin of events"
- - link: "/continuous_integration/static_analysis/rules/javascript-browser-security/inner-outer-html"
+ - link: "/static_analysis/rules/javascript-browser-security/inner-outer-html"
tag: "inner-outer-html"
text: "Do not modify innerHTML or outerHTML"
- - link: "/continuous_integration/static_analysis/rules/javascript-browser-security/insecure-websocket"
+ - link: "/static_analysis/rules/javascript-browser-security/insecure-websocket"
tag: "insecure-websocket"
text: "Websockets must use SSL connections"
- - link: "/continuous_integration/static_analysis/rules/javascript-browser-security/local-storage-sensitive-data"
+ - link: "/static_analysis/rules/javascript-browser-security/local-storage-sensitive-data"
tag: "local-storage-sensitive-data"
text: "Do not store sensitive data to local storage"
- - link: "/continuous_integration/static_analysis/rules/javascript-browser-security/manual-sanitization"
+ - link: "/static_analysis/rules/javascript-browser-security/manual-sanitization"
tag: "manual-sanitization"
text: "Avoid manual sanitization of inputs"
- - link: "/continuous_integration/static_analysis/rules/javascript-browser-security/postmessage-permissive-origin"
+ - link: "/static_analysis/rules/javascript-browser-security/postmessage-permissive-origin"
tag: "postmessage-permissive-origin"
text: "Specify origin in postMessage"
- - link: "/continuous_integration/static_analysis/rules/javascript-browser-security/react-dangerously-inner-html"
+ - link: "/static_analysis/rules/javascript-browser-security/react-dangerously-inner-html"
tag: "react-dangerously-inner-html"
text: "Do not inject unsanitized HTML"
- - link: "/continuous_integration/static_analysis/rules/javascript-browser-security/regexp-non-literal"
+ - link: "/static_analysis/rules/javascript-browser-security/regexp-non-literal"
tag: "regexp-non-literal"
text: "Do not use variable for regular expressions"
javascript_code_style_data:
- - link: "/continuous_integration/static_analysis/rules/javascript-code-style/assignment-name"
+ - link: "/static_analysis/rules/javascript-code-style/assignment-name"
tag: "assignment-name"
text: "Assigment name should use camelCase"
- - link: "/continuous_integration/static_analysis/rules/javascript-code-style/class-name"
+ - link: "/static_analysis/rules/javascript-code-style/class-name"
tag: "class-name"
text: "Class name should be PascalCase"
- - link: "/continuous_integration/static_analysis/rules/javascript-code-style/eqeqeq"
+ - link: "/static_analysis/rules/javascript-code-style/eqeqeq"
tag: "eqeqeq"
text: "Enforce the use of === and !=="
- - link: "/continuous_integration/static_analysis/rules/javascript-code-style/func-name-matching"
+ - link: "/static_analysis/rules/javascript-code-style/func-name-matching"
tag: "func-name-matching"
text: "Function names must match the name of the assignation."
- - link: "/continuous_integration/static_analysis/rules/javascript-code-style/func-names"
+ - link: "/static_analysis/rules/javascript-code-style/func-names"
tag: "func-names"
text: "Enforce named function expressions"
- - link: "/continuous_integration/static_analysis/rules/javascript-code-style/function-naming"
+ - link: "/static_analysis/rules/javascript-code-style/function-naming"
tag: "function-naming"
text: "Function name should use camelCase or PascalCase"
- - link: "/continuous_integration/static_analysis/rules/javascript-code-style/max-class-lines"
+ - link: "/static_analysis/rules/javascript-code-style/max-class-lines"
tag: "max-class-lines"
text: "Classes must be less than 100 lines"
- - link: "/continuous_integration/static_analysis/rules/javascript-code-style/max-function-lines"
+ - link: "/static_analysis/rules/javascript-code-style/max-function-lines"
tag: "max-function-lines"
text: "Functions must be less than 200 lines"
- - link: "/continuous_integration/static_analysis/rules/javascript-code-style/max-params"
+ - link: "/static_analysis/rules/javascript-code-style/max-params"
tag: "max-params"
text: "Enforce a maximum number of parameters in a function"
- - link: "/continuous_integration/static_analysis/rules/javascript-code-style/method-name"
+ - link: "/static_analysis/rules/javascript-code-style/method-name"
tag: "method-name"
text: "Method name should use camelCase"
- - link: "/continuous_integration/static_analysis/rules/javascript-code-style/no-array-constructor"
+ - link: "/static_analysis/rules/javascript-code-style/no-array-constructor"
tag: "no-array-constructor"
text: "Avoid Array constructors"
- - link: "/continuous_integration/static_analysis/rules/javascript-code-style/no-div-regex"
+ - link: "/static_analysis/rules/javascript-code-style/no-div-regex"
tag: "no-div-regex"
text: "Avoid equal signs at the beginning of regular expressions"
- - link: "/continuous_integration/static_analysis/rules/javascript-code-style/no-duplicate-imports"
+ - link: "/static_analysis/rules/javascript-code-style/no-duplicate-imports"
tag: "no-duplicate-imports"
text: "Avoid duplicate module imports"
- - link: "/continuous_integration/static_analysis/rules/javascript-code-style/no-floating-decimal"
+ - link: "/static_analysis/rules/javascript-code-style/no-floating-decimal"
tag: "no-floating-decimal"
text: "Avoid leading or trailing decimal points in numbers"
- - link: "/continuous_integration/static_analysis/rules/javascript-code-style/no-lonely-if"
+ - link: "/static_analysis/rules/javascript-code-style/no-lonely-if"
tag: "no-lonely-if"
text: "Avoid if statements as the only statement in else blocks"
- - link: "/continuous_integration/static_analysis/rules/javascript-code-style/no-multi-assign"
+ - link: "/static_analysis/rules/javascript-code-style/no-multi-assign"
tag: "no-multi-assign"
text: "Avoid the use of chained assignment expressions"
- - link: "/continuous_integration/static_analysis/rules/javascript-code-style/no-new"
+ - link: "/static_analysis/rules/javascript-code-style/no-new"
tag: "no-new"
text: "Avoid new operators outside of assignments or comparisons"
- - link: "/continuous_integration/static_analysis/rules/javascript-code-style/no-new-func"
+ - link: "/static_analysis/rules/javascript-code-style/no-new-func"
tag: "no-new-func"
text: "Avoid new operators with the Function object"
- - link: "/continuous_integration/static_analysis/rules/javascript-code-style/no-new-object"
+ - link: "/static_analysis/rules/javascript-code-style/no-new-object"
tag: "no-new-object"
text: "Avoid Object constructors"
- - link: "/continuous_integration/static_analysis/rules/javascript-code-style/no-return-assign"
+ - link: "/static_analysis/rules/javascript-code-style/no-return-assign"
tag: "no-return-assign"
text: "Avoid assignment operators in return statements"
- - link: "/continuous_integration/static_analysis/rules/javascript-code-style/no-self-compare"
+ - link: "/static_analysis/rules/javascript-code-style/no-self-compare"
tag: "no-self-compare"
text: "Avoid comparisons where both sides are exactly the same"
- - link: "/continuous_integration/static_analysis/rules/javascript-code-style/no-var"
+ - link: "/static_analysis/rules/javascript-code-style/no-var"
tag: "no-var"
text: "Require let or const instead of var"
- - link: "/continuous_integration/static_analysis/rules/javascript-code-style/parameter-name"
+ - link: "/static_analysis/rules/javascript-code-style/parameter-name"
tag: "parameter-name"
text: "Parameter name should use camelCase"
- - link: "/continuous_integration/static_analysis/rules/javascript-code-style/radix"
+ - link: "/static_analysis/rules/javascript-code-style/radix"
tag: "radix"
text: "Consistent use of the radix argument using parseInt"
javascript_common_security_data:
- - link: "/continuous_integration/static_analysis/rules/javascript-common-security/axios-avoid-insecure-http"
+ - link: "/static_analysis/rules/javascript-common-security/axios-avoid-insecure-http"
tag: "axios-avoid-insecure-http"
text: "Avoid insecure HTTP requests with Axios"
- - link: "/continuous_integration/static_analysis/rules/javascript-common-security/unique-function-arguments"
+ - link: "/static_analysis/rules/javascript-common-security/unique-function-arguments"
tag: "unique-function-arguments"
text: "Function argument names should be unique"
- - link: "/continuous_integration/static_analysis/rules/javascript-common-security/xml-no-external-entities"
+ - link: "/static_analysis/rules/javascript-common-security/xml-no-external-entities"
tag: "xml-no-external-entities"
text: "Do not use external XML entities"
javascript_express_data:
- - link: "/continuous_integration/static_analysis/rules/javascript-express/access-restriction"
+ - link: "/static_analysis/rules/javascript-express/access-restriction"
tag: "access-restriction"
text: "Limit exposure to sensitive directories and files"
- - link: "/continuous_integration/static_analysis/rules/javascript-express/default-session-config"
+ - link: "/static_analysis/rules/javascript-express/default-session-config"
tag: "default-session-config"
text: "Enforce overriding default config"
- - link: "/continuous_integration/static_analysis/rules/javascript-express/external-filename-upload"
+ - link: "/static_analysis/rules/javascript-express/external-filename-upload"
tag: "external-filename-upload"
text: "Avoid using unsanitized user input with sendFile"
- - link: "/continuous_integration/static_analysis/rules/javascript-express/external-resource"
+ - link: "/static_analysis/rules/javascript-express/external-resource"
tag: "external-resource"
text: "Avoid rendering resource based on unsanitized user input"
- - link: "/continuous_integration/static_analysis/rules/javascript-express/hardcoded-secret"
+ - link: "/static_analysis/rules/javascript-express/hardcoded-secret"
tag: "hardcoded-secret"
text: "Avoid using a hard-coded secret"
- - link: "/continuous_integration/static_analysis/rules/javascript-express/https-protocol-missing"
+ - link: "/static_analysis/rules/javascript-express/https-protocol-missing"
tag: "https-protocol-missing"
text: "Use `https` protocol over `http`"
- - link: "/continuous_integration/static_analysis/rules/javascript-express/insecure-allow-origin"
+ - link: "/static_analysis/rules/javascript-express/insecure-allow-origin"
tag: "insecure-allow-origin"
text: "Avoid using an insecure Access-Control-Allow-Origin header"
- - link: "/continuous_integration/static_analysis/rules/javascript-express/insecure-cookie"
+ - link: "/static_analysis/rules/javascript-express/insecure-cookie"
tag: "insecure-cookie"
text: "Avoid setting insecure cookie settings"
- - link: "/continuous_integration/static_analysis/rules/javascript-express/jwt-not-revoked"
+ - link: "/static_analysis/rules/javascript-express/jwt-not-revoked"
tag: "jwt-not-revoked"
text: "Ensure an isRevoked method is used for tokens"
- - link: "/continuous_integration/static_analysis/rules/javascript-express/missing-helmet"
+ - link: "/static_analysis/rules/javascript-express/missing-helmet"
tag: "missing-helmet"
text: "Express application should use Helmet"
- - link: "/continuous_integration/static_analysis/rules/javascript-express/path-traversal"
+ - link: "/static_analysis/rules/javascript-express/path-traversal"
tag: "path-traversal"
text: "Avoid allowing access to unintended directories or files"
- - link: "/continuous_integration/static_analysis/rules/javascript-express/reduce-server-fingerprinting"
+ - link: "/static_analysis/rules/javascript-express/reduce-server-fingerprinting"
tag: "reduce-server-fingerprinting"
text: "Server fingerprinting misconfiguration"
- - link: "/continuous_integration/static_analysis/rules/javascript-express/xss-vulnerability"
+ - link: "/static_analysis/rules/javascript-express/xss-vulnerability"
tag: "xss-vulnerability"
text: "Avoid sending unsanitized user input in response"
javascript_inclusive_data:
- - link: "/continuous_integration/static_analysis/rules/javascript-inclusive/comments"
+ - link: "/static_analysis/rules/javascript-inclusive/comments"
tag: "comments"
text: "Check comments for wording issues"
- - link: "/continuous_integration/static_analysis/rules/javascript-inclusive/declarations"
+ - link: "/static_analysis/rules/javascript-inclusive/declarations"
tag: "declarations"
text: "Check declaration names for wording issues"
- - link: "/continuous_integration/static_analysis/rules/javascript-inclusive/formal-parameters"
+ - link: "/static_analysis/rules/javascript-inclusive/formal-parameters"
tag: "formal-parameters"
text: "Check parameter names for wording issues"
- - link: "/continuous_integration/static_analysis/rules/javascript-inclusive/identifiers"
+ - link: "/static_analysis/rules/javascript-inclusive/identifiers"
tag: "identifiers"
text: "Check identifier names for wording issues"
javascript_node_security_data:
- - link: "/continuous_integration/static_analysis/rules/javascript-node-security/argon2"
+ - link: "/static_analysis/rules/javascript-node-security/argon2"
tag: "argon2"
text: "Use strong security mechanisms with argon2"
- - link: "/continuous_integration/static_analysis/rules/javascript-node-security/avoid-crypto-rc4"
+ - link: "/static_analysis/rules/javascript-node-security/avoid-crypto-rc4"
tag: "avoid-crypto-rc4"
text: "Avoid RC4"
- - link: "/continuous_integration/static_analysis/rules/javascript-node-security/avoid-crypto-sha1"
+ - link: "/static_analysis/rules/javascript-node-security/avoid-crypto-sha1"
tag: "avoid-crypto-sha1"
text: "Avoid SHA1 security protocol"
- - link: "/continuous_integration/static_analysis/rules/javascript-node-security/avoid-des"
+ - link: "/static_analysis/rules/javascript-node-security/avoid-des"
tag: "avoid-des"
text: "Avoid DES and 3DES"
- - link: "/continuous_integration/static_analysis/rules/javascript-node-security/chmod-permissions"
+ - link: "/static_analysis/rules/javascript-node-security/chmod-permissions"
tag: "chmod-permissions"
text: "Do not give 777 permissions to a file"
- - link: "/continuous_integration/static_analysis/rules/javascript-node-security/command-injection"
+ - link: "/static_analysis/rules/javascript-node-security/command-injection"
tag: "command-injection"
text: "Avoid command injection"
- - link: "/continuous_integration/static_analysis/rules/javascript-node-security/crypto-avoid-weak-hash"
+ - link: "/static_analysis/rules/javascript-node-security/crypto-avoid-weak-hash"
tag: "crypto-avoid-weak-hash"
text: "Avoid weak hash algorithm from CryptoJS"
- - link: "/continuous_integration/static_analysis/rules/javascript-node-security/detect-buffer-noassert"
+ - link: "/static_analysis/rules/javascript-node-security/detect-buffer-noassert"
tag: "detect-buffer-noassert"
text: "Avoid calls to 'buffer' with 'noAssert' flag set"
- - link: "/continuous_integration/static_analysis/rules/javascript-node-security/detect-child-process"
+ - link: "/static_analysis/rules/javascript-node-security/detect-child-process"
tag: "detect-child-process"
text: "Avoid instances of 'child_process' and non-literal 'exec()'"
- - link: "/continuous_integration/static_analysis/rules/javascript-node-security/detect-eval-with-expression"
+ - link: "/static_analysis/rules/javascript-node-security/detect-eval-with-expression"
tag: "detect-eval-with-expression"
text: "Avoid `eval` with expressions"
- - link: "/continuous_integration/static_analysis/rules/javascript-node-security/detect-new-buffer"
+ - link: "/static_analysis/rules/javascript-node-security/detect-new-buffer"
tag: "detect-new-buffer"
text: "Avoid Buffer(argument) with non-literal values"
- - link: "/continuous_integration/static_analysis/rules/javascript-node-security/detect-non-literal-fs-filename"
+ - link: "/static_analysis/rules/javascript-node-security/detect-non-literal-fs-filename"
tag: "detect-non-literal-fs-filename"
text: "Avoid variables in 'fs' calls filename argument"
- - link: "/continuous_integration/static_analysis/rules/javascript-node-security/detect-non-literal-regexp"
+ - link: "/static_analysis/rules/javascript-node-security/detect-non-literal-regexp"
tag: "detect-non-literal-regexp"
text: "Detects non-literal values in regular expressions"
- - link: "/continuous_integration/static_analysis/rules/javascript-node-security/detect-non-literal-require"
+ - link: "/static_analysis/rules/javascript-node-security/detect-non-literal-require"
tag: "detect-non-literal-require"
text: "Avoid require with non-literal values"
- - link: "/continuous_integration/static_analysis/rules/javascript-node-security/detected-jwt-token"
+ - link: "/static_analysis/rules/javascript-node-security/detected-jwt-token"
tag: "detected-jwt-token"
text: "Detects hardcoded JWT tokens within the codebase."
- - link: "/continuous_integration/static_analysis/rules/javascript-node-security/hardcoded-hmac-key"
+ - link: "/static_analysis/rules/javascript-node-security/hardcoded-hmac-key"
tag: "hardcoded-hmac-key"
text: "Avoid hardcoded HMAC keys"
- - link: "/continuous_integration/static_analysis/rules/javascript-node-security/insecure-hash"
+ - link: "/static_analysis/rules/javascript-node-security/insecure-hash"
tag: "insecure-hash"
text: "Do not use weak hash functions"
- - link: "/continuous_integration/static_analysis/rules/javascript-node-security/insecure-jwt-secret-usage"
+ - link: "/static_analysis/rules/javascript-node-security/insecure-jwt-secret-usage"
tag: "insecure-jwt-secret-usage"
text: "Insecure Usage of a Static Secret in JWT Signing"
- - link: "/continuous_integration/static_analysis/rules/javascript-node-security/jwt-hardcoded-secret"
+ - link: "/static_analysis/rules/javascript-node-security/jwt-hardcoded-secret"
tag: "jwt-hardcoded-secret"
text: "Do not use hardcoded secret with a JWT"
- - link: "/continuous_integration/static_analysis/rules/javascript-node-security/jwt-sensitive-data"
+ - link: "/static_analysis/rules/javascript-node-security/jwt-sensitive-data"
tag: "jwt-sensitive-data"
text: "Do not put sensitive data in objects"
- - link: "/continuous_integration/static_analysis/rules/javascript-node-security/jwt-weak-encryption"
+ - link: "/static_analysis/rules/javascript-node-security/jwt-weak-encryption"
tag: "jwt-weak-encryption"
text: "Use default encryption from the JWT library"
- - link: "/continuous_integration/static_analysis/rules/javascript-node-security/log-sensitive-data"
+ - link: "/static_analysis/rules/javascript-node-security/log-sensitive-data"
tag: "log-sensitive-data"
text: "Avoid logging sensitive data"
- - link: "/continuous_integration/static_analysis/rules/javascript-node-security/oauth2-hardcoded-secret"
+ - link: "/static_analysis/rules/javascript-node-security/oauth2-hardcoded-secret"
tag: "oauth2-hardcoded-secret"
text: "Do not use hardcoded secret for OAuth2 providers"
- - link: "/continuous_integration/static_analysis/rules/javascript-node-security/sql-injection"
+ - link: "/static_analysis/rules/javascript-node-security/sql-injection"
tag: "sql-injection"
text: "Avoid SQL injection"
- - link: "/continuous_integration/static_analysis/rules/javascript-node-security/variable-sql-statement-injection"
+ - link: "/static_analysis/rules/javascript-node-security/variable-sql-statement-injection"
tag: "variable-sql-statement-injection"
text: "Avoid SQL injections"
jsx_react_data:
- - link: "/continuous_integration/static_analysis/rules/jsx-react/jsx-key"
+ - link: "/static_analysis/rules/jsx-react/jsx-key"
tag: "jsx-key"
text: "Prevent missing key props in iterators/collection literals"
- - link: "/continuous_integration/static_analysis/rules/jsx-react/jsx-no-comment-textnodes"
+ - link: "/static_analysis/rules/jsx-react/jsx-no-comment-textnodes"
tag: "jsx-no-comment-textnodes"
text: "Avoid comments from being inserted as text nodes"
- - link: "/continuous_integration/static_analysis/rules/jsx-react/jsx-no-duplicate-key"
+ - link: "/static_analysis/rules/jsx-react/jsx-no-duplicate-key"
tag: "jsx-no-duplicate-key"
text: "Ensures unique key prop"
- - link: "/continuous_integration/static_analysis/rules/jsx-react/jsx-no-duplicate-props"
+ - link: "/static_analysis/rules/jsx-react/jsx-no-duplicate-props"
tag: "jsx-no-duplicate-props"
text: "Avoid duplicate properties in JSX"
- - link: "/continuous_integration/static_analysis/rules/jsx-react/jsx-no-target-blank"
+ - link: "/static_analysis/rules/jsx-react/jsx-no-target-blank"
tag: "jsx-no-target-blank"
text: "Prevent target='_blank' security risks"
- - link: "/continuous_integration/static_analysis/rules/jsx-react/no-children-prop"
+ - link: "/static_analysis/rules/jsx-react/no-children-prop"
tag: "no-children-prop"
text: "Avoid passing children as props"
- - link: "/continuous_integration/static_analysis/rules/jsx-react/no-danger-with-children"
+ - link: "/static_analysis/rules/jsx-react/no-danger-with-children"
tag: "no-danger-with-children"
text: "Avoid using children with dangerouslySetInnerHTML"
- - link: "/continuous_integration/static_analysis/rules/jsx-react/no-deprecated"
+ - link: "/static_analysis/rules/jsx-react/no-deprecated"
tag: "no-deprecated"
text: "Avoid deprecated methods"
- - link: "/continuous_integration/static_analysis/rules/jsx-react/no-render-return-value"
+ - link: "/static_analysis/rules/jsx-react/no-render-return-value"
tag: "no-render-return-value"
text: "Avoid usage of the return value of ReactDOM.render"
- - link: "/continuous_integration/static_analysis/rules/jsx-react/no-string-refs"
+ - link: "/static_analysis/rules/jsx-react/no-string-refs"
tag: "no-string-refs"
text: "Avoid using string references"
- - link: "/continuous_integration/static_analysis/rules/jsx-react/require-render-return"
+ - link: "/static_analysis/rules/jsx-react/require-render-return"
tag: "require-render-return"
text: "Enforce class for returning value in render function"
python_best_practices_data:
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/ambiguous-class-name"
+ - link: "/static_analysis/rules/python-best-practices/ambiguous-class-name"
tag: "ambiguous-class-name"
text: "make sure class names are readable"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/ambiguous-function-name"
+ - link: "/static_analysis/rules/python-best-practices/ambiguous-function-name"
tag: "ambiguous-function-name"
text: "make sure function names are readable"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/ambiguous-variable-name"
+ - link: "/static_analysis/rules/python-best-practices/ambiguous-variable-name"
tag: "ambiguous-variable-name"
text: "make sure variable names are readable"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/any-type-disallow"
+ - link: "/static_analysis/rules/python-best-practices/any-type-disallow"
tag: "any-type-disallow"
text: "do not use Any type"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/argument-same-name"
+ - link: "/static_analysis/rules/python-best-practices/argument-same-name"
tag: "argument-same-name"
text: "do not have arguments with the same name"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/assertraises-specific-exception"
+ - link: "/static_analysis/rules/python-best-practices/assertraises-specific-exception"
tag: "assertraises-specific-exception"
text: "assertRaises must check for a specific exception"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/avoid-duplicate-keys"
+ - link: "/static_analysis/rules/python-best-practices/avoid-duplicate-keys"
tag: "avoid-duplicate-keys"
text: "Avoid duplicate keys in dictionaries"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/avoid-string-concat"
+ - link: "/static_analysis/rules/python-best-practices/avoid-string-concat"
tag: "avoid-string-concat"
text: "avoid string concatenation"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/class-methods-use-self"
+ - link: "/static_analysis/rules/python-best-practices/class-methods-use-self"
tag: "class-methods-use-self"
text: "Class methods should not use self"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/collection-while-iterating"
+ - link: "/static_analysis/rules/python-best-practices/collection-while-iterating"
tag: "collection-while-iterating"
text: "do not modify a dictionary while iterating on it"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/comment-fixme-todo-ownership"
+ - link: "/static_analysis/rules/python-best-practices/comment-fixme-todo-ownership"
tag: "comment-fixme-todo-ownership"
text: "TODO and FIXME comments must have ownership"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/comparison-constant-left"
+ - link: "/static_analysis/rules/python-best-practices/comparison-constant-left"
tag: "comparison-constant-left"
text: "in comparisons, variables must be left"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/condition-similar-block"
+ - link: "/static_analysis/rules/python-best-practices/condition-similar-block"
tag: "condition-similar-block"
text: "if conditions must have different code blocks"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/ctx-manager-enter-exit-defined"
+ - link: "/static_analysis/rules/python-best-practices/ctx-manager-enter-exit-defined"
tag: "ctx-manager-enter-exit-defined"
text: "ensure that both __exit__ and __enter__ are defined"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/dataclass-special-methods"
+ - link: "/static_analysis/rules/python-best-practices/dataclass-special-methods"
tag: "dataclass-special-methods"
text: "do not use special method on data class"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/equal-basic-types"
+ - link: "/static_analysis/rules/python-best-practices/equal-basic-types"
tag: "equal-basic-types"
text: "check equal is used on consistent basic types"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/exception-inherit"
+ - link: "/static_analysis/rules/python-best-practices/exception-inherit"
tag: "exception-inherit"
text: "ensure exception inherit a base exception"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/finally-no-break-continue-return"
+ - link: "/static_analysis/rules/python-best-practices/finally-no-break-continue-return"
tag: "finally-no-break-continue-return"
text: "do not use break or continue in finally block"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/function-already-exists"
+ - link: "/static_analysis/rules/python-best-practices/function-already-exists"
tag: "function-already-exists"
text: "a function must be defined only once"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/function-variable-argument-name"
+ - link: "/static_analysis/rules/python-best-practices/function-variable-argument-name"
tag: "function-variable-argument-name"
text: "Do not assign to function arguments"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/generic-exception-last"
+ - link: "/static_analysis/rules/python-best-practices/generic-exception-last"
tag: "generic-exception-last"
text: "If using generic exception, it should be last"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/get-set-arguments"
+ - link: "/static_analysis/rules/python-best-practices/get-set-arguments"
tag: "get-set-arguments"
text: "getter/setter must have 1 or 2 arguments respectively"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/if-return-no-else"
+ - link: "/static_analysis/rules/python-best-practices/if-return-no-else"
tag: "if-return-no-else"
text: "when an if condition returns an value, else is not necessary"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/import-modules-twice"
+ - link: "/static_analysis/rules/python-best-practices/import-modules-twice"
tag: "import-modules-twice"
text: "module imported twice"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/import-single-module"
+ - link: "/static_analysis/rules/python-best-practices/import-single-module"
tag: "import-single-module"
text: "only one module to import per import statement"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/init-call-parent"
+ - link: "/static_analysis/rules/python-best-practices/init-call-parent"
tag: "init-call-parent"
text: "use super() to call the parent constructor"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/init-method-required"
+ - link: "/static_analysis/rules/python-best-practices/init-method-required"
tag: "init-method-required"
text: "ensure classes have an __init__ method"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/init-no-return-value"
+ - link: "/static_analysis/rules/python-best-practices/init-no-return-value"
tag: "init-no-return-value"
text: "No return in an __init__ function"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/invalid-strip-call"
+ - link: "/static_analysis/rules/python-best-practices/invalid-strip-call"
tag: "invalid-strip-call"
text: "strip() argument should not have duplicate characters"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/logging-no-format"
+ - link: "/static_analysis/rules/python-best-practices/logging-no-format"
tag: "logging-no-format"
text: "do not use format string with logging functions"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/method-hidden"
+ - link: "/static_analysis/rules/python-best-practices/method-hidden"
tag: "method-hidden"
text: "a method has the same name than an attribute"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/nested-blocks"
+ - link: "/static_analysis/rules/python-best-practices/nested-blocks"
tag: "nested-blocks"
text: "Do not have too many nested blocks"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/no-assert"
+ - link: "/static_analysis/rules/python-best-practices/no-assert"
tag: "no-assert"
text: "do not use assert in production code"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/no-assert-on-tuples"
+ - link: "/static_analysis/rules/python-best-practices/no-assert-on-tuples"
tag: "no-assert-on-tuples"
text: "no assert on tuples"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/no-bare-except"
+ - link: "/static_analysis/rules/python-best-practices/no-bare-except"
tag: "no-bare-except"
text: "do not use bare except"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/no-bare-raise"
+ - link: "/static_analysis/rules/python-best-practices/no-bare-raise"
tag: "no-bare-raise"
text: "Do not use a raise statement without a specific exception"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/no-base-exception"
+ - link: "/static_analysis/rules/python-best-practices/no-base-exception"
tag: "no-base-exception"
text: "do not raise base exception"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/no-datetime-today"
+ - link: "/static_analysis/rules/python-best-practices/no-datetime-today"
tag: "no-datetime-today"
text: "do not use datetime.today()"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/no-double-not"
+ - link: "/static_analysis/rules/python-best-practices/no-double-not"
tag: "no-double-not"
text: "do not use double negation"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/no-double-unary-operator"
+ - link: "/static_analysis/rules/python-best-practices/no-double-unary-operator"
tag: "no-double-unary-operator"
text: "do not use operator -- and ++"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/no-duplicate-base-class"
+ - link: "/static_analysis/rules/python-best-practices/no-duplicate-base-class"
tag: "no-duplicate-base-class"
text: "use a base class only once"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/no-equal-unary"
+ - link: "/static_analysis/rules/python-best-practices/no-equal-unary"
tag: "no-equal-unary"
text: "do not use operations =+ and =-"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/no-exit"
+ - link: "/static_analysis/rules/python-best-practices/no-exit"
tag: "no-exit"
text: "do not use exit()"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/no-generic-exception"
+ - link: "/static_analysis/rules/python-best-practices/no-generic-exception"
tag: "no-generic-exception"
text: "Do not use generic exceptions"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/no-if-true"
+ - link: "/static_analysis/rules/python-best-practices/no-if-true"
tag: "no-if-true"
text: "do not compare to True in a condition"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/no-range-loop-with-len"
+ - link: "/static_analysis/rules/python-best-practices/no-range-loop-with-len"
tag: "no-range-loop-with-len"
text: "Do not use for i in range(len())"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/no-silent-exception"
+ - link: "/static_analysis/rules/python-best-practices/no-silent-exception"
tag: "no-silent-exception"
text: "Do not ignore Exception with a pass statement"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/open-add-flag"
+ - link: "/static_analysis/rules/python-best-practices/open-add-flag"
tag: "open-add-flag"
text: "do not define an open flag for reading"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/os-environ-no-assign"
+ - link: "/static_analysis/rules/python-best-practices/os-environ-no-assign"
tag: "os-environ-no-assign"
text: "assigning to os.environ does not clear the environment"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/raising-not-implemented"
+ - link: "/static_analysis/rules/python-best-practices/raising-not-implemented"
tag: "raising-not-implemented"
text: "Do not raise NotImplemented - it does not exists"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/return-bytes-not-string"
+ - link: "/static_analysis/rules/python-best-practices/return-bytes-not-string"
tag: "return-bytes-not-string"
text: "__bytes__ method should returns bytes, not string"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/return-outside-function"
+ - link: "/static_analysis/rules/python-best-practices/return-outside-function"
tag: "return-outside-function"
text: "do not return outside a function"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/self-assignment"
+ - link: "/static_analysis/rules/python-best-practices/self-assignment"
tag: "self-assignment"
text: "do not assign to itself"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/slots-no-single-string"
+ - link: "/static_analysis/rules/python-best-practices/slots-no-single-string"
tag: "slots-no-single-string"
text: "__slots__ should not be a single string"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/special-methods-arguments"
+ - link: "/static_analysis/rules/python-best-practices/special-methods-arguments"
tag: "special-methods-arguments"
text: "ensure special methods have the correct arguments"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/static-method-no-self"
+ - link: "/static_analysis/rules/python-best-practices/static-method-no-self"
tag: "static-method-no-self"
text: "do not use self as parameter for static methods"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/too-many-nested-if"
+ - link: "/static_analysis/rules/python-best-practices/too-many-nested-if"
tag: "too-many-nested-if"
text: "do not use too many nested if conditions"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/too-many-while"
+ - link: "/static_analysis/rules/python-best-practices/too-many-while"
tag: "too-many-while"
text: "do not use too many nested loops and conditions "
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/type-check-isinstance"
+ - link: "/static_analysis/rules/python-best-practices/type-check-isinstance"
tag: "type-check-isinstance"
text: "use isinstance instead of type"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/unreachable-code"
+ - link: "/static_analysis/rules/python-best-practices/unreachable-code"
tag: "unreachable-code"
text: "avoid unreachable code"
- - link: "/continuous_integration/static_analysis/rules/python-best-practices/use-callable-not-hasattr"
+ - link: "/static_analysis/rules/python-best-practices/use-callable-not-hasattr"
tag: "use-callable-not-hasattr"
text: "do not use hasattr to check if a value is callable"
python_code_style_data:
- - link: "/continuous_integration/static_analysis/rules/python-code-style/assignment-names"
+ - link: "/static_analysis/rules/python-code-style/assignment-names"
tag: "assignment-names"
text: "variable names must use snake_case"
- - link: "/continuous_integration/static_analysis/rules/python-code-style/class-name"
+ - link: "/static_analysis/rules/python-code-style/class-name"
tag: "class-name"
text: "class name should be CamelCase"
- - link: "/continuous_integration/static_analysis/rules/python-code-style/function-naming"
+ - link: "/static_analysis/rules/python-code-style/function-naming"
tag: "function-naming"
text: "function name and parameters should use snake_case"
- - link: "/continuous_integration/static_analysis/rules/python-code-style/max-class-lines"
+ - link: "/static_analysis/rules/python-code-style/max-class-lines"
tag: "max-class-lines"
text: "classes must be less than 100 lines"
- - link: "/continuous_integration/static_analysis/rules/python-code-style/max-function-lines"
+ - link: "/static_analysis/rules/python-code-style/max-function-lines"
tag: "max-function-lines"
text: "Functions must be less than 200 lines"
python_design_data:
- - link: "/continuous_integration/static_analysis/rules/python-design/function-too-long"
+ - link: "/static_analysis/rules/python-design/function-too-long"
tag: "function-too-long"
text: "functions must have less than 100 lines"
python_django_data:
- - link: "/continuous_integration/static_analysis/rules/python-django/http-response-from-request"
+ - link: "/static_analysis/rules/python-django/http-response-from-request"
tag: "http-response-from-request"
text: "Lack of sanitization of user data"
- - link: "/continuous_integration/static_analysis/rules/python-django/http-response-with-json-dumps"
+ - link: "/static_analysis/rules/python-django/http-response-with-json-dumps"
tag: "http-response-with-json-dumps"
text: "use JsonResponse instead of HttpResponse to send JSON data"
- - link: "/continuous_integration/static_analysis/rules/python-django/jsonresponse-no-content-type"
+ - link: "/static_analysis/rules/python-django/jsonresponse-no-content-type"
tag: "jsonresponse-no-content-type"
text: "do not specify content-type for JsonResponse"
- - link: "/continuous_integration/static_analysis/rules/python-django/model-charfield-max-length"
+ - link: "/static_analysis/rules/python-django/model-charfield-max-length"
tag: "model-charfield-max-length"
text: "always specify max_length for a Charfield"
- - link: "/continuous_integration/static_analysis/rules/python-django/model-help-text"
+ - link: "/static_analysis/rules/python-django/model-help-text"
tag: "model-help-text"
text: "use help_text to document model columns"
- - link: "/continuous_integration/static_analysis/rules/python-django/no-null-boolean"
+ - link: "/static_analysis/rules/python-django/no-null-boolean"
tag: "no-null-boolean"
text: "do not use NullBooleanField"
- - link: "/continuous_integration/static_analysis/rules/python-django/no-unicode-on-models"
+ - link: "/static_analysis/rules/python-django/no-unicode-on-models"
tag: "no-unicode-on-models"
text: "do not use __unicode__"
- - link: "/continuous_integration/static_analysis/rules/python-django/open-filename-from-request"
+ - link: "/static_analysis/rules/python-django/open-filename-from-request"
tag: "open-filename-from-request"
text: "Filename coming from the request"
- - link: "/continuous_integration/static_analysis/rules/python-django/os-system-from-request"
+ - link: "/static_analysis/rules/python-django/os-system-from-request"
tag: "os-system-from-request"
text: "Command coming from incoming request"
- - link: "/continuous_integration/static_analysis/rules/python-django/subprocess-from-request"
+ - link: "/static_analysis/rules/python-django/subprocess-from-request"
tag: "subprocess-from-request"
text: "Command coming from incoming request"
- - link: "/continuous_integration/static_analysis/rules/python-django/use-convenience-imports"
+ - link: "/static_analysis/rules/python-django/use-convenience-imports"
tag: "use-convenience-imports"
text: "use convenience imports whenever possible"
python_flask_data:
- - link: "/continuous_integration/static_analysis/rules/python-flask/disable-sqlalchemy-text"
+ - link: "/static_analysis/rules/python-flask/disable-sqlalchemy-text"
tag: "disable-sqlalchemy-text"
text: "Do not use text() as it leads to SQL injection"
- - link: "/continuous_integration/static_analysis/rules/python-flask/html-format-from-user-input"
+ - link: "/static_analysis/rules/python-flask/html-format-from-user-input"
tag: "html-format-from-user-input"
text: "Use of unsanitized data to make API calls"
- - link: "/continuous_integration/static_analysis/rules/python-flask/listen-all-interfaces"
+ - link: "/static_analysis/rules/python-flask/listen-all-interfaces"
tag: "listen-all-interfaces"
text: "Your application should not listen on all interfaces"
- - link: "/continuous_integration/static_analysis/rules/python-flask/no-render-template-string"
+ - link: "/static_analysis/rules/python-flask/no-render-template-string"
tag: "no-render-template-string"
text: "Do not use template created with strings"
- - link: "/continuous_integration/static_analysis/rules/python-flask/open-file-unsanitized-data"
+ - link: "/static_analysis/rules/python-flask/open-file-unsanitized-data"
tag: "open-file-unsanitized-data"
text: "Use of unsanitized data to open file"
- - link: "/continuous_integration/static_analysis/rules/python-flask/os-system-unsanitized-data"
+ - link: "/static_analysis/rules/python-flask/os-system-unsanitized-data"
tag: "os-system-unsanitized-data"
text: "Use of unsanitized data to create processes"
- - link: "/continuous_integration/static_analysis/rules/python-flask/secure-cookie"
+ - link: "/static_analysis/rules/python-flask/secure-cookie"
tag: "secure-cookie"
text: "Make sure cookies are safe and secure"
- - link: "/continuous_integration/static_analysis/rules/python-flask/sqlalchemy-injection"
+ - link: "/static_analysis/rules/python-flask/sqlalchemy-injection"
tag: "sqlalchemy-injection"
text: "Use of unsanitized data to issue SQL queries"
- - link: "/continuous_integration/static_analysis/rules/python-flask/ssrf-requests"
+ - link: "/static_analysis/rules/python-flask/ssrf-requests"
tag: "ssrf-requests"
text: "Use of unsanitized data to make API calls"
- - link: "/continuous_integration/static_analysis/rules/python-flask/urlopen-unsanitized-data"
+ - link: "/static_analysis/rules/python-flask/urlopen-unsanitized-data"
tag: "urlopen-unsanitized-data"
text: "Use of unsanitized data to open API"
- - link: "/continuous_integration/static_analysis/rules/python-flask/use-jsonify"
+ - link: "/static_analysis/rules/python-flask/use-jsonify"
tag: "use-jsonify"
text: "use jsonify instead of json.dumps for JSON output"
python_inclusive_data:
- - link: "/continuous_integration/static_analysis/rules/python-inclusive/comments"
+ - link: "/static_analysis/rules/python-inclusive/comments"
tag: "comments"
text: "check comments for wording issues"
- - link: "/continuous_integration/static_analysis/rules/python-inclusive/function-definition"
+ - link: "/static_analysis/rules/python-inclusive/function-definition"
tag: "function-definition"
text: "check function names for wording issues"
- - link: "/continuous_integration/static_analysis/rules/python-inclusive/variable-name"
+ - link: "/static_analysis/rules/python-inclusive/variable-name"
tag: "variable-name"
text: "check variable names for wording issues"
python_pandas_data:
- - link: "/continuous_integration/static_analysis/rules/python-pandas/arith-operator-not-functions"
+ - link: "/static_analysis/rules/python-pandas/arith-operator-not-functions"
tag: "arith-operator-not-functions"
text: "Use arithmetic operator instead of a function"
- - link: "/continuous_integration/static_analysis/rules/python-pandas/avoid-inplace"
+ - link: "/static_analysis/rules/python-pandas/avoid-inplace"
tag: "avoid-inplace"
text: "Avoid using inplace=True"
- - link: "/continuous_integration/static_analysis/rules/python-pandas/comp-operator-not-function"
+ - link: "/static_analysis/rules/python-pandas/comp-operator-not-function"
tag: "comp-operator-not-function"
text: "Use operators to compare values, not functions"
- - link: "/continuous_integration/static_analysis/rules/python-pandas/import-as-pd"
+ - link: "/static_analysis/rules/python-pandas/import-as-pd"
tag: "import-as-pd"
text: "Import pandas according to coding guidelines"
- - link: "/continuous_integration/static_analysis/rules/python-pandas/isna-instead-of-isnull"
+ - link: "/static_analysis/rules/python-pandas/isna-instead-of-isnull"
tag: "isna-instead-of-isnull"
text: "Use isna instead of isnull"
- - link: "/continuous_integration/static_analysis/rules/python-pandas/loc-not-ix"
+ - link: "/static_analysis/rules/python-pandas/loc-not-ix"
tag: "loc-not-ix"
text: "prefer iloc or loc rather than ix"
- - link: "/continuous_integration/static_analysis/rules/python-pandas/notna-instead-of-notnull"
+ - link: "/static_analysis/rules/python-pandas/notna-instead-of-notnull"
tag: "notna-instead-of-notnull"
text: "prefer notna to notnull"
- - link: "/continuous_integration/static_analysis/rules/python-pandas/pivot-table"
+ - link: "/static_analysis/rules/python-pandas/pivot-table"
tag: "pivot-table"
text: "Use pivot_table instead of pivot or unstack"
- - link: "/continuous_integration/static_analysis/rules/python-pandas/use-read-csv-not-read-table"
+ - link: "/static_analysis/rules/python-pandas/use-read-csv-not-read-table"
tag: "use-read-csv-not-read-table"
text: "prefer read_csv to read_table"
python_security_data:
- - link: "/continuous_integration/static_analysis/rules/python-security/asyncio-subprocess-create-shell"
+ - link: "/static_analysis/rules/python-security/asyncio-subprocess-create-shell"
tag: "asyncio-subprocess-create-shell"
text: "Unsafe execution of shell commands"
- - link: "/continuous_integration/static_analysis/rules/python-security/asyncio-subprocess-exec"
+ - link: "/static_analysis/rules/python-security/asyncio-subprocess-exec"
tag: "asyncio-subprocess-exec"
text: "Unsafe execution of shell commands"
- - link: "/continuous_integration/static_analysis/rules/python-security/avoid-random"
+ - link: "/static_analysis/rules/python-security/avoid-random"
tag: "avoid-random"
text: "use secrets package over random package"
- - link: "/continuous_integration/static_analysis/rules/python-security/aws-boto-credentials"
+ - link: "/static_analysis/rules/python-security/aws-boto-credentials"
tag: "aws-boto-credentials"
text: "use env vars over hardcoded values"
- - link: "/continuous_integration/static_analysis/rules/python-security/deserialize-untrusted-data"
+ - link: "/static_analysis/rules/python-security/deserialize-untrusted-data"
tag: "deserialize-untrusted-data"
text: "avoid unsafe function to (de)serialize data"
- - link: "/continuous_integration/static_analysis/rules/python-security/file-write-others"
+ - link: "/static_analysis/rules/python-security/file-write-others"
tag: "file-write-others"
text: "do not let all users write permissions"
- - link: "/continuous_integration/static_analysis/rules/python-security/hardcoded-tmp-file"
+ - link: "/static_analysis/rules/python-security/hardcoded-tmp-file"
tag: "hardcoded-tmp-file"
text: "Do not hardcode temp file or directory"
- - link: "/continuous_integration/static_analysis/rules/python-security/html-string-from-parameters"
+ - link: "/static_analysis/rules/python-security/html-string-from-parameters"
tag: "html-string-from-parameters"
text: "Avoid HTML built in strings"
- - link: "/continuous_integration/static_analysis/rules/python-security/insecure-hash-functions"
+ - link: "/static_analysis/rules/python-security/insecure-hash-functions"
tag: "insecure-hash-functions"
text: "Do not use insecure functions"
- - link: "/continuous_integration/static_analysis/rules/python-security/insecure-jwt"
+ - link: "/static_analysis/rules/python-security/insecure-jwt"
tag: "insecure-jwt"
text: "Ensure JWT signatures are verified"
- - link: "/continuous_integration/static_analysis/rules/python-security/insecure-ssl-protocols"
+ - link: "/static_analysis/rules/python-security/insecure-ssl-protocols"
tag: "insecure-ssl-protocols"
text: "Do not use insecure encryption protocols"
- - link: "/continuous_integration/static_analysis/rules/python-security/jinja-autoescape"
+ - link: "/static_analysis/rules/python-security/jinja-autoescape"
tag: "jinja-autoescape"
text: "Auto escape should be set to true"
- - link: "/continuous_integration/static_analysis/rules/python-security/mktemp"
+ - link: "/static_analysis/rules/python-security/mktemp"
tag: "mktemp"
text: "Make sure temporary files are secure"
- - link: "/continuous_integration/static_analysis/rules/python-security/no-empty-array-as-parameter"
+ - link: "/static_analysis/rules/python-security/no-empty-array-as-parameter"
tag: "no-empty-array-as-parameter"
text: "Do not use empty array as default parameter"
- - link: "/continuous_integration/static_analysis/rules/python-security/no-eval"
+ - link: "/static_analysis/rules/python-security/no-eval"
tag: "no-eval"
text: "use of eval can be insecure"
- - link: "/continuous_integration/static_analysis/rules/python-security/os-spawn"
+ - link: "/static_analysis/rules/python-security/os-spawn"
tag: "os-spawn"
text: "Call of a spawn process without sanitization"
- - link: "/continuous_integration/static_analysis/rules/python-security/os-system"
+ - link: "/static_analysis/rules/python-security/os-system"
tag: "os-system"
text: "Command execution without sanitization"
- - link: "/continuous_integration/static_analysis/rules/python-security/request-verify"
+ - link: "/static_analysis/rules/python-security/request-verify"
tag: "request-verify"
text: "verify should be True"
- - link: "/continuous_integration/static_analysis/rules/python-security/requests-http"
+ - link: "/static_analysis/rules/python-security/requests-http"
tag: "requests-http"
text: "Do not make http calls without encryption"
- - link: "/continuous_integration/static_analysis/rules/python-security/requests-timeout"
+ - link: "/static_analysis/rules/python-security/requests-timeout"
tag: "requests-timeout"
text: "no timeout was given on call to external resource"
- - link: "/continuous_integration/static_analysis/rules/python-security/ruamel-unsafe-yaml"
+ - link: "/static_analysis/rules/python-security/ruamel-unsafe-yaml"
tag: "ruamel-unsafe-yaml"
text: "Do not use insecure YAML deserialization"
- - link: "/continuous_integration/static_analysis/rules/python-security/sql-server-security-credentials"
+ - link: "/static_analysis/rules/python-security/sql-server-security-credentials"
tag: "sql-server-security-credentials"
text: "do not pass hardcoded credentials"
- - link: "/continuous_integration/static_analysis/rules/python-security/ssl-unverified-context"
+ - link: "/static_analysis/rules/python-security/ssl-unverified-context"
tag: "ssl-unverified-context"
text: "should not bypass certificate verification"
- - link: "/continuous_integration/static_analysis/rules/python-security/subprocess-shell-true"
+ - link: "/static_analysis/rules/python-security/subprocess-shell-true"
tag: "subprocess-shell-true"
text: "shell argument leads to unnecessary privileges"
- - link: "/continuous_integration/static_analysis/rules/python-security/variable-sql-statement-injection"
+ - link: "/static_analysis/rules/python-security/variable-sql-statement-injection"
tag: "variable-sql-statement-injection"
text: "Avoid SQL injections"
- - link: "/continuous_integration/static_analysis/rules/python-security/yaml-load"
+ - link: "/static_analysis/rules/python-security/yaml-load"
tag: "yaml-load"
text: "avoid deserializing untrusted YAML"
tsx_react_data:
- - link: "/continuous_integration/static_analysis/rules/tsx-react/jsx-no-comment-textnodes"
+ - link: "/static_analysis/rules/tsx-react/jsx-no-comment-textnodes"
tag: "jsx-no-comment-textnodes"
text: "Avoid comments from being inserted as text nodes"
- - link: "/continuous_integration/static_analysis/rules/tsx-react/no-children-prop"
+ - link: "/static_analysis/rules/tsx-react/no-children-prop"
tag: "no-children-prop"
text: "Avoid passing children as props"
- - link: "/continuous_integration/static_analysis/rules/tsx-react/no-danger-with-children"
+ - link: "/static_analysis/rules/tsx-react/no-danger-with-children"
tag: "no-danger-with-children"
text: "Avoid using children with dangerouslySetInnerHTML"
- - link: "/continuous_integration/static_analysis/rules/tsx-react/no-deprecated"
+ - link: "/static_analysis/rules/tsx-react/no-deprecated"
tag: "no-deprecated"
text: "Avoid deprecated methods"
- - link: "/continuous_integration/static_analysis/rules/tsx-react/no-render-return-value"
+ - link: "/static_analysis/rules/tsx-react/no-render-return-value"
tag: "no-render-return-value"
text: "Avoid usage of the return value of ReactDOM.render"
- - link: "/continuous_integration/static_analysis/rules/tsx-react/no-string-refs"
+ - link: "/static_analysis/rules/tsx-react/no-string-refs"
tag: "no-string-refs"
text: "Avoid using string references"
- - link: "/continuous_integration/static_analysis/rules/tsx-react/require-render-return"
+ - link: "/static_analysis/rules/tsx-react/require-render-return"
tag: "require-render-return"
text: "Enforce class for returning value in render function"
- - link: "/continuous_integration/static_analysis/rules/tsx-react/tsx-key"
+ - link: "/static_analysis/rules/tsx-react/tsx-key"
tag: "tsx-key"
text: "Prevent missing key props in iterators/collection literals"
- - link: "/continuous_integration/static_analysis/rules/tsx-react/tsx-no-duplicate-key"
+ - link: "/static_analysis/rules/tsx-react/tsx-no-duplicate-key"
tag: "tsx-no-duplicate-key"
text: "Ensures unique key prop"
- - link: "/continuous_integration/static_analysis/rules/tsx-react/tsx-no-target-blank"
+ - link: "/static_analysis/rules/tsx-react/tsx-no-target-blank"
tag: "tsx-no-target-blank"
text: "Prevent target='_blank' security risks"
typescript_best_practices_data:
- - link: "/continuous_integration/static_analysis/rules/typescript-best-practices/ban-types"
+ - link: "/static_analysis/rules/typescript-best-practices/ban-types"
tag: "ban-types"
text: "Avoid certain types"
- - link: "/continuous_integration/static_analysis/rules/typescript-best-practices/boolean-prop-naming"
+ - link: "/static_analysis/rules/typescript-best-practices/boolean-prop-naming"
tag: "boolean-prop-naming"
text: "Consistent naming for boolean props"
- - link: "/continuous_integration/static_analysis/rules/typescript-best-practices/for-direction"
+ - link: "/static_analysis/rules/typescript-best-practices/for-direction"
tag: "for-direction"
text: "Check for loop is moving in the right direction"
- - link: "/continuous_integration/static_analysis/rules/typescript-best-practices/new-parens"
+ - link: "/static_analysis/rules/typescript-best-practices/new-parens"
tag: "new-parens"
text: "Invoking a constructor must use parentheses"
- - link: "/continuous_integration/static_analysis/rules/typescript-best-practices/no-alert"
+ - link: "/static_analysis/rules/typescript-best-practices/no-alert"
tag: "no-alert"
text: "Avoid the use of alert, confirm, and prompt"
- - link: "/continuous_integration/static_analysis/rules/typescript-best-practices/no-async-promise-executor"
+ - link: "/static_analysis/rules/typescript-best-practices/no-async-promise-executor"
tag: "no-async-promise-executor"
text: "Promise executor cannot be an async function"
- - link: "/continuous_integration/static_analysis/rules/typescript-best-practices/no-caller"
+ - link: "/static_analysis/rules/typescript-best-practices/no-caller"
tag: "no-caller"
text: "Avoid the use of arguments.caller or arguments.callee"
- - link: "/continuous_integration/static_analysis/rules/typescript-best-practices/no-compare-neg-zero"
+ - link: "/static_analysis/rules/typescript-best-practices/no-compare-neg-zero"
tag: "no-compare-neg-zero"
text: "Direct comparison with -0 detected"
- - link: "/continuous_integration/static_analysis/rules/typescript-best-practices/no-cond-assign"
+ - link: "/static_analysis/rules/typescript-best-practices/no-cond-assign"
tag: "no-cond-assign"
text: "Avoid assignment operators in conditional expressions"
- - link: "/continuous_integration/static_analysis/rules/typescript-best-practices/no-console"
+ - link: "/static_analysis/rules/typescript-best-practices/no-console"
tag: "no-console"
text: "Avoid leaving console debug statements"
- - link: "/continuous_integration/static_analysis/rules/typescript-best-practices/no-debugger"
+ - link: "/static_analysis/rules/typescript-best-practices/no-debugger"
tag: "no-debugger"
text: "Disallow the use of debugger"
- - link: "/continuous_integration/static_analysis/rules/typescript-best-practices/no-delete-var"
+ - link: "/static_analysis/rules/typescript-best-practices/no-delete-var"
tag: "no-delete-var"
text: "Avoid using delete on variables directly"
- - link: "/continuous_integration/static_analysis/rules/typescript-best-practices/no-dupe-keys"
+ - link: "/static_analysis/rules/typescript-best-practices/no-dupe-keys"
tag: "no-dupe-keys"
text: "Avoid duplicate keys in object literals"
- - link: "/continuous_integration/static_analysis/rules/typescript-best-practices/no-duplicate-enum-values"
+ - link: "/static_analysis/rules/typescript-best-practices/no-duplicate-enum-values"
tag: "no-duplicate-enum-values"
text: "Avoid duplicate enum member values"
- - link: "/continuous_integration/static_analysis/rules/typescript-best-practices/no-duplicate-type-constituents"
+ - link: "/static_analysis/rules/typescript-best-practices/no-duplicate-type-constituents"
tag: "no-duplicate-type-constituents"
text: "Avoid duplicate constituents of unions or intersections"
- - link: "/continuous_integration/static_analysis/rules/typescript-best-practices/no-empty"
+ - link: "/static_analysis/rules/typescript-best-practices/no-empty"
tag: "no-empty"
text: "Avoid empty block statements"
- - link: "/continuous_integration/static_analysis/rules/typescript-best-practices/no-empty-character-class"
+ - link: "/static_analysis/rules/typescript-best-practices/no-empty-character-class"
tag: "no-empty-character-class"
text: "Avoid empty character classes in regular expressions"
- - link: "/continuous_integration/static_analysis/rules/typescript-best-practices/no-empty-pattern"
+ - link: "/static_analysis/rules/typescript-best-practices/no-empty-pattern"
tag: "no-empty-pattern"
text: "Avoid empty destructuring patterns"
- - link: "/continuous_integration/static_analysis/rules/typescript-best-practices/no-ex-assign"
+ - link: "/static_analysis/rules/typescript-best-practices/no-ex-assign"
tag: "no-ex-assign"
text: "Avoid reassigning exceptions in catch clauses"
- - link: "/continuous_integration/static_analysis/rules/typescript-best-practices/no-explicit-any"
+ - link: "/static_analysis/rules/typescript-best-practices/no-explicit-any"
tag: "no-explicit-any"
text: "Avoid the any type"
- - link: "/continuous_integration/static_analysis/rules/typescript-best-practices/no-extra-non-null-assertion"
+ - link: "/static_analysis/rules/typescript-best-practices/no-extra-non-null-assertion"
tag: "no-extra-non-null-assertion"
text: "Avoid extra non-null assertions"
- - link: "/continuous_integration/static_analysis/rules/typescript-best-practices/no-implied-eval"
+ - link: "/static_analysis/rules/typescript-best-practices/no-implied-eval"
tag: "no-implied-eval"
text: "Prevent the use methods similar to eval()"
- - link: "/continuous_integration/static_analysis/rules/typescript-best-practices/no-inner-declarations"
+ - link: "/static_analysis/rules/typescript-best-practices/no-inner-declarations"
tag: "no-inner-declarations"
text: "Avoid variable or function declaration in nested blocks"
- - link: "/continuous_integration/static_analysis/rules/typescript-best-practices/no-iterator"
+ - link: "/static_analysis/rules/typescript-best-practices/no-iterator"
tag: "no-iterator"
text: "Avoid the use of the __iterator__ property"
- - link: "/continuous_integration/static_analysis/rules/typescript-best-practices/no-loss-of-precision"
+ - link: "/static_analysis/rules/typescript-best-practices/no-loss-of-precision"
tag: "no-loss-of-precision"
text: "Avoid numbers that lose precision"
- - link: "/continuous_integration/static_analysis/rules/typescript-best-practices/no-namespace"
+ - link: "/static_analysis/rules/typescript-best-practices/no-namespace"
tag: "no-namespace"
text: "Avoid TypeScript namespaces"
- - link: "/continuous_integration/static_analysis/rules/typescript-best-practices/no-non-null-optional-chain"
+ - link: "/static_analysis/rules/typescript-best-practices/no-non-null-optional-chain"
tag: "no-non-null-optional-chain"
text: "Avoid non-null assertions after an optional chain"
- - link: "/continuous_integration/static_analysis/rules/typescript-best-practices/no-proto"
+ - link: "/static_analysis/rules/typescript-best-practices/no-proto"
tag: "no-proto"
text: "Avoid the use of the __proto__ property"
- - link: "/continuous_integration/static_analysis/rules/typescript-best-practices/no-script-url"
+ - link: "/static_analysis/rules/typescript-best-practices/no-script-url"
tag: "no-script-url"
text: "Avoid using Javascript in URLs"
- - link: "/continuous_integration/static_analysis/rules/typescript-best-practices/no-unnecessary-type-constraint"
+ - link: "/static_analysis/rules/typescript-best-practices/no-unnecessary-type-constraint"
tag: "no-unnecessary-type-constraint"
text: "Avoid unnecessary constraints on generic types"
- - link: "/continuous_integration/static_analysis/rules/typescript-best-practices/no-unsafe-assignment"
+ - link: "/static_analysis/rules/typescript-best-practices/no-unsafe-assignment"
tag: "no-unsafe-assignment"
text: "Avoid assigning a value with type any"
- - link: "/continuous_integration/static_analysis/rules/typescript-best-practices/no-unsafe-declaration-merging"
+ - link: "/static_analysis/rules/typescript-best-practices/no-unsafe-declaration-merging"
tag: "no-unsafe-declaration-merging"
text: "Avoid unsafe declaration merging"
- - link: "/continuous_integration/static_analysis/rules/typescript-best-practices/no-unsafe-negation"
+ - link: "/static_analysis/rules/typescript-best-practices/no-unsafe-negation"
tag: "no-unsafe-negation"
text: "Avoid negating the left operand of relational operators"
- - link: "/continuous_integration/static_analysis/rules/typescript-best-practices/no-var-requires"
+ - link: "/static_analysis/rules/typescript-best-practices/no-var-requires"
tag: "no-var-requires"
text: "Avoid require statements"
- - link: "/continuous_integration/static_analysis/rules/typescript-best-practices/require-yield"
+ - link: "/static_analysis/rules/typescript-best-practices/require-yield"
tag: "require-yield"
text: "Require yield in generator functions"
- - link: "/continuous_integration/static_analysis/rules/typescript-best-practices/triple-slash-reference"
+ - link: "/static_analysis/rules/typescript-best-practices/triple-slash-reference"
tag: "triple-slash-reference"
text: "Avoid triple slash in favor of ES6 import declarations"
typescript_browser_security_data:
- - link: "/continuous_integration/static_analysis/rules/typescript-browser-security/event-check-origin"
+ - link: "/static_analysis/rules/typescript-browser-security/event-check-origin"
tag: "event-check-origin"
text: "Check origin of events"
- - link: "/continuous_integration/static_analysis/rules/typescript-browser-security/inner-outer-html"
+ - link: "/static_analysis/rules/typescript-browser-security/inner-outer-html"
tag: "inner-outer-html"
text: "Do not modify innerHTML or outerHTML"
- - link: "/continuous_integration/static_analysis/rules/typescript-browser-security/insecure-websocket"
+ - link: "/static_analysis/rules/typescript-browser-security/insecure-websocket"
tag: "insecure-websocket"
text: "Websockets must use SSL connections"
- - link: "/continuous_integration/static_analysis/rules/typescript-browser-security/local-storage-sensitive-data"
+ - link: "/static_analysis/rules/typescript-browser-security/local-storage-sensitive-data"
tag: "local-storage-sensitive-data"
text: "Do not store sensitive data to local storage"
- - link: "/continuous_integration/static_analysis/rules/typescript-browser-security/manual-sanitization"
+ - link: "/static_analysis/rules/typescript-browser-security/manual-sanitization"
tag: "manual-sanitization"
text: "Avoid manual sanitization of inputs"
- - link: "/continuous_integration/static_analysis/rules/typescript-browser-security/postmessage-permissive-origin"
+ - link: "/static_analysis/rules/typescript-browser-security/postmessage-permissive-origin"
tag: "postmessage-permissive-origin"
text: "Specify origin in postMessage"
- - link: "/continuous_integration/static_analysis/rules/typescript-browser-security/react-dangerously-inner-html"
+ - link: "/static_analysis/rules/typescript-browser-security/react-dangerously-inner-html"
tag: "react-dangerously-inner-html"
text: "Do not inject unsanitized HTML"
- - link: "/continuous_integration/static_analysis/rules/typescript-browser-security/regexp-non-literal"
+ - link: "/static_analysis/rules/typescript-browser-security/regexp-non-literal"
tag: "regexp-non-literal"
text: "Do not use variable for regular expressions"
typescript_code_style_data:
- - link: "/continuous_integration/static_analysis/rules/typescript-code-style/array-type"
+ - link: "/static_analysis/rules/typescript-code-style/array-type"
tag: "array-type"
text: "Require consistently using either T[] or Array for arrays"
- - link: "/continuous_integration/static_analysis/rules/typescript-code-style/assignment-name"
+ - link: "/static_analysis/rules/typescript-code-style/assignment-name"
tag: "assignment-name"
text: "Assigment name should use camelCase"
- - link: "/continuous_integration/static_analysis/rules/typescript-code-style/ban-ts-comment"
+ - link: "/static_analysis/rules/typescript-code-style/ban-ts-comment"
tag: "ban-ts-comment"
text: "Avoid @ts- comments"
- - link: "/continuous_integration/static_analysis/rules/typescript-code-style/ban-tslint-comment"
+ - link: "/static_analysis/rules/typescript-code-style/ban-tslint-comment"
tag: "ban-tslint-comment"
text: "Avoid using TSLint comments"
- - link: "/continuous_integration/static_analysis/rules/typescript-code-style/class-name"
+ - link: "/static_analysis/rules/typescript-code-style/class-name"
tag: "class-name"
text: "Class name should be PascalCase"
- - link: "/continuous_integration/static_analysis/rules/typescript-code-style/eqeqeq"
+ - link: "/static_analysis/rules/typescript-code-style/eqeqeq"
tag: "eqeqeq"
text: "Enforce the use of === and !=="
- - link: "/continuous_integration/static_analysis/rules/typescript-code-style/func-name-matching"
+ - link: "/static_analysis/rules/typescript-code-style/func-name-matching"
tag: "func-name-matching"
text: "Function names must match the name of the assignation"
- - link: "/continuous_integration/static_analysis/rules/typescript-code-style/func-names"
+ - link: "/static_analysis/rules/typescript-code-style/func-names"
tag: "func-names"
text: "Enforce named function expressions"
- - link: "/continuous_integration/static_analysis/rules/typescript-code-style/function-naming"
+ - link: "/static_analysis/rules/typescript-code-style/function-naming"
tag: "function-naming"
text: "Function name should use camelCase or PascalCase"
- - link: "/continuous_integration/static_analysis/rules/typescript-code-style/max-class-lines"
+ - link: "/static_analysis/rules/typescript-code-style/max-class-lines"
tag: "max-class-lines"
text: "Classes must be less than 100 lines"
- - link: "/continuous_integration/static_analysis/rules/typescript-code-style/max-function-lines"
+ - link: "/static_analysis/rules/typescript-code-style/max-function-lines"
tag: "max-function-lines"
text: "Functions must be less than 200 lines"
- - link: "/continuous_integration/static_analysis/rules/typescript-code-style/max-params"
+ - link: "/static_analysis/rules/typescript-code-style/max-params"
tag: "max-params"
text: "Enforce a maximum number of parameters in a function"
- - link: "/continuous_integration/static_analysis/rules/typescript-code-style/method-name"
+ - link: "/static_analysis/rules/typescript-code-style/method-name"
tag: "method-name"
text: "Method name should use camelCase"
- - link: "/continuous_integration/static_analysis/rules/typescript-code-style/no-array-constructor"
+ - link: "/static_analysis/rules/typescript-code-style/no-array-constructor"
tag: "no-array-constructor"
text: "Avoid Array constructors"
- - link: "/continuous_integration/static_analysis/rules/typescript-code-style/no-confusing-non-null-assertion"
+ - link: "/static_analysis/rules/typescript-code-style/no-confusing-non-null-assertion"
tag: "no-confusing-non-null-assertion"
text: "Avoid non-null assertion in confusing locations"
- - link: "/continuous_integration/static_analysis/rules/typescript-code-style/no-div-regex"
+ - link: "/static_analysis/rules/typescript-code-style/no-div-regex"
tag: "no-div-regex"
text: "Avoid equal signs explicitly at the beginning of regex"
- - link: "/continuous_integration/static_analysis/rules/typescript-code-style/no-duplicate-imports"
+ - link: "/static_analysis/rules/typescript-code-style/no-duplicate-imports"
tag: "no-duplicate-imports"
text: "Avoid duplicate module imports"
- - link: "/continuous_integration/static_analysis/rules/typescript-code-style/no-empty-interface"
+ - link: "/static_analysis/rules/typescript-code-style/no-empty-interface"
tag: "no-empty-interface"
text: "Avoid the declaration of empty interfaces"
- - link: "/continuous_integration/static_analysis/rules/typescript-code-style/no-floating-decimal"
+ - link: "/static_analysis/rules/typescript-code-style/no-floating-decimal"
tag: "no-floating-decimal"
text: "Avoid leading or trailing decimal points in numbers"
- - link: "/continuous_integration/static_analysis/rules/typescript-code-style/no-inferrable-types"
+ - link: "/static_analysis/rules/typescript-code-style/no-inferrable-types"
tag: "no-inferrable-types"
text: "Avoid explicit type declarations for variables and params"
- - link: "/continuous_integration/static_analysis/rules/typescript-code-style/no-lonely-if"
+ - link: "/static_analysis/rules/typescript-code-style/no-lonely-if"
tag: "no-lonely-if"
text: "Avoid if statements as the only statement in else blocks"
- - link: "/continuous_integration/static_analysis/rules/typescript-code-style/no-multi-assign"
+ - link: "/static_analysis/rules/typescript-code-style/no-multi-assign"
tag: "no-multi-assign"
text: "Avoid the use of chained assignment expressions"
- - link: "/continuous_integration/static_analysis/rules/typescript-code-style/no-new"
+ - link: "/static_analysis/rules/typescript-code-style/no-new"
tag: "no-new"
text: "Avoid new operators outside of assignments or comparisons"
- - link: "/continuous_integration/static_analysis/rules/typescript-code-style/no-new-func"
+ - link: "/static_analysis/rules/typescript-code-style/no-new-func"
tag: "no-new-func"
text: "Avoid new operators with the Function object"
- - link: "/continuous_integration/static_analysis/rules/typescript-code-style/no-new-object"
+ - link: "/static_analysis/rules/typescript-code-style/no-new-object"
tag: "no-new-object"
text: "Avoid Object constructors"
- - link: "/continuous_integration/static_analysis/rules/typescript-code-style/no-return-assign"
+ - link: "/static_analysis/rules/typescript-code-style/no-return-assign"
tag: "no-return-assign"
text: "Avoid assignment operators in return statements"
- - link: "/continuous_integration/static_analysis/rules/typescript-code-style/no-self-compare"
+ - link: "/static_analysis/rules/typescript-code-style/no-self-compare"
tag: "no-self-compare"
text: "Avoid comparisons where both sides are exactly the same"
- - link: "/continuous_integration/static_analysis/rules/typescript-code-style/no-useless-empty-export"
+ - link: "/static_analysis/rules/typescript-code-style/no-useless-empty-export"
tag: "no-useless-empty-export"
text: "Avoid empty exports that don't change anything"
- - link: "/continuous_integration/static_analysis/rules/typescript-code-style/no-var"
+ - link: "/static_analysis/rules/typescript-code-style/no-var"
tag: "no-var"
text: "Require let or const instead of var"
- - link: "/continuous_integration/static_analysis/rules/typescript-code-style/parameter-name"
+ - link: "/static_analysis/rules/typescript-code-style/parameter-name"
tag: "parameter-name"
text: "Parameter name should use camelCase"
- - link: "/continuous_integration/static_analysis/rules/typescript-code-style/radix"
+ - link: "/static_analysis/rules/typescript-code-style/radix"
tag: "radix"
text: "Consistent use of the radix argument using parseInt"
typescript_common_security_data:
- - link: "/continuous_integration/static_analysis/rules/typescript-common-security/axios-avoid-insecure-http"
+ - link: "/static_analysis/rules/typescript-common-security/axios-avoid-insecure-http"
tag: "axios-avoid-insecure-http"
text: "Avoid insecure HTTP requests with Axios"
- - link: "/continuous_integration/static_analysis/rules/typescript-common-security/unique-function-arguments"
+ - link: "/static_analysis/rules/typescript-common-security/unique-function-arguments"
tag: "unique-function-arguments"
text: "Function argument names should be unique"
- - link: "/continuous_integration/static_analysis/rules/typescript-common-security/xml-no-external-entities"
+ - link: "/static_analysis/rules/typescript-common-security/xml-no-external-entities"
tag: "xml-no-external-entities"
text: "Do not use external XML entities"
typescript_express_data:
- - link: "/continuous_integration/static_analysis/rules/typescript-express/access-restriction"
+ - link: "/static_analysis/rules/typescript-express/access-restriction"
tag: "access-restriction"
text: "Limit exposure to sensitive directories and files"
- - link: "/continuous_integration/static_analysis/rules/typescript-express/default-session-config"
+ - link: "/static_analysis/rules/typescript-express/default-session-config"
tag: "default-session-config"
text: "Enforce overriding default config"
- - link: "/continuous_integration/static_analysis/rules/typescript-express/external-filename-upload"
+ - link: "/static_analysis/rules/typescript-express/external-filename-upload"
tag: "external-filename-upload"
text: "Avoid using unsanitized user input with sendFile"
- - link: "/continuous_integration/static_analysis/rules/typescript-express/external-resource"
+ - link: "/static_analysis/rules/typescript-express/external-resource"
tag: "external-resource"
text: "Avoid rendering resource based on unsanitized user input"
- - link: "/continuous_integration/static_analysis/rules/typescript-express/hardcoded-secret"
+ - link: "/static_analysis/rules/typescript-express/hardcoded-secret"
tag: "hardcoded-secret"
text: "Avoid using a hard-coded secret"
- - link: "/continuous_integration/static_analysis/rules/typescript-express/https-protocol-missing"
+ - link: "/static_analysis/rules/typescript-express/https-protocol-missing"
tag: "https-protocol-missing"
text: "Use `https` protocol over `http`"
- - link: "/continuous_integration/static_analysis/rules/typescript-express/insecure-allow-origin"
+ - link: "/static_analysis/rules/typescript-express/insecure-allow-origin"
tag: "insecure-allow-origin"
text: "Avoid using an insecure Access-Control-Allow-Origin header"
- - link: "/continuous_integration/static_analysis/rules/typescript-express/insecure-cookie"
+ - link: "/static_analysis/rules/typescript-express/insecure-cookie"
tag: "insecure-cookie"
text: "Avoid setting insecure cookie settings"
- - link: "/continuous_integration/static_analysis/rules/typescript-express/jwt-not-revoked"
+ - link: "/static_analysis/rules/typescript-express/jwt-not-revoked"
tag: "jwt-not-revoked"
text: "Ensure an isRevoked method is used for tokens"
- - link: "/continuous_integration/static_analysis/rules/typescript-express/missing-helmet"
+ - link: "/static_analysis/rules/typescript-express/missing-helmet"
tag: "missing-helmet"
text: "Express application should use Helmet"
- - link: "/continuous_integration/static_analysis/rules/typescript-express/path-traversal"
+ - link: "/static_analysis/rules/typescript-express/path-traversal"
tag: "path-traversal"
text: "Avoid allowing access to unintended directories or files"
- - link: "/continuous_integration/static_analysis/rules/typescript-express/reduce-server-fingerprinting"
+ - link: "/static_analysis/rules/typescript-express/reduce-server-fingerprinting"
tag: "reduce-server-fingerprinting"
text: "Server fingerprinting misconfiguration"
- - link: "/continuous_integration/static_analysis/rules/typescript-express/xss-vulnerability"
+ - link: "/static_analysis/rules/typescript-express/xss-vulnerability"
tag: "xss-vulnerability"
text: "Avoid sending unsanitized user input in response"
typescript_inclusive_data:
- - link: "/continuous_integration/static_analysis/rules/typescript-inclusive/comments"
+ - link: "/static_analysis/rules/typescript-inclusive/comments"
tag: "comments"
text: "Check comments for wording issues"
- - link: "/continuous_integration/static_analysis/rules/typescript-inclusive/declarations"
+ - link: "/static_analysis/rules/typescript-inclusive/declarations"
tag: "declarations"
text: "Check declaration names for wording issues"
- - link: "/continuous_integration/static_analysis/rules/typescript-inclusive/formal-parameters"
+ - link: "/static_analysis/rules/typescript-inclusive/formal-parameters"
tag: "formal-parameters"
text: "Check parameter names for wording issues"
- - link: "/continuous_integration/static_analysis/rules/typescript-inclusive/identifiers"
+ - link: "/static_analysis/rules/typescript-inclusive/identifiers"
tag: "identifiers"
text: "Check identifier names for wording issues"
typescript_node_security_data:
- - link: "/continuous_integration/static_analysis/rules/typescript-node-security/argon2"
+ - link: "/static_analysis/rules/typescript-node-security/argon2"
tag: "argon2"
text: "Use strong security mechanisms with argon2"
- - link: "/continuous_integration/static_analysis/rules/typescript-node-security/avoid-crypto-rc4"
+ - link: "/static_analysis/rules/typescript-node-security/avoid-crypto-rc4"
tag: "avoid-crypto-rc4"
text: "Avoid RC4"
- - link: "/continuous_integration/static_analysis/rules/typescript-node-security/avoid-crypto-sha1"
+ - link: "/static_analysis/rules/typescript-node-security/avoid-crypto-sha1"
tag: "avoid-crypto-sha1"
text: "Avoid SHA1 security protocol"
- - link: "/continuous_integration/static_analysis/rules/typescript-node-security/avoid-des"
+ - link: "/static_analysis/rules/typescript-node-security/avoid-des"
tag: "avoid-des"
text: "Avoid DES and 3DES"
- - link: "/continuous_integration/static_analysis/rules/typescript-node-security/chmod-permissions"
+ - link: "/static_analysis/rules/typescript-node-security/chmod-permissions"
tag: "chmod-permissions"
text: "Do not give 777 permissions to a file"
- - link: "/continuous_integration/static_analysis/rules/typescript-node-security/command-injection"
+ - link: "/static_analysis/rules/typescript-node-security/command-injection"
tag: "command-injection"
text: "Avoid command injection"
- - link: "/continuous_integration/static_analysis/rules/typescript-node-security/crypto-avoid-weak-hash"
+ - link: "/static_analysis/rules/typescript-node-security/crypto-avoid-weak-hash"
tag: "crypto-avoid-weak-hash"
text: "Avoid weak hash algorithm from CryptoJS"
- - link: "/continuous_integration/static_analysis/rules/typescript-node-security/detect-buffer-noassert"
+ - link: "/static_analysis/rules/typescript-node-security/detect-buffer-noassert"
tag: "detect-buffer-noassert"
text: "Avoid calls to 'buffer' with 'noAssert' flag set"
- - link: "/continuous_integration/static_analysis/rules/typescript-node-security/detect-child-process"
+ - link: "/static_analysis/rules/typescript-node-security/detect-child-process"
tag: "detect-child-process"
text: "Avoid instances of 'child_process' and non-literal 'exec()'"
- - link: "/continuous_integration/static_analysis/rules/typescript-node-security/detect-eval-with-expression"
+ - link: "/static_analysis/rules/typescript-node-security/detect-eval-with-expression"
tag: "detect-eval-with-expression"
text: "Avoid `eval` with expressions"
- - link: "/continuous_integration/static_analysis/rules/typescript-node-security/detect-new-buffer"
+ - link: "/static_analysis/rules/typescript-node-security/detect-new-buffer"
tag: "detect-new-buffer"
text: "Avoid Buffer(argument) with non-literal values"
- - link: "/continuous_integration/static_analysis/rules/typescript-node-security/detect-non-literal-fs-filename"
+ - link: "/static_analysis/rules/typescript-node-security/detect-non-literal-fs-filename"
tag: "detect-non-literal-fs-filename"
text: "Avoid variables in 'fs' calls filename argument"
- - link: "/continuous_integration/static_analysis/rules/typescript-node-security/detect-non-literal-regexp"
+ - link: "/static_analysis/rules/typescript-node-security/detect-non-literal-regexp"
tag: "detect-non-literal-regexp"
text: "Detects non-literal values in regular expressions"
- - link: "/continuous_integration/static_analysis/rules/typescript-node-security/detect-non-literal-require"
+ - link: "/static_analysis/rules/typescript-node-security/detect-non-literal-require"
tag: "detect-non-literal-require"
text: "Avoid require with non-literal values"
- - link: "/continuous_integration/static_analysis/rules/typescript-node-security/detected-jwt-token"
+ - link: "/static_analysis/rules/typescript-node-security/detected-jwt-token"
tag: "detected-jwt-token"
text: "Detects hardcoded JWT tokens within the codebase"
- - link: "/continuous_integration/static_analysis/rules/typescript-node-security/hardcoded-hmac-key"
+ - link: "/static_analysis/rules/typescript-node-security/hardcoded-hmac-key"
tag: "hardcoded-hmac-key"
text: "Detects hardcoded HMAC keys"
- - link: "/continuous_integration/static_analysis/rules/typescript-node-security/insecure-hash"
+ - link: "/static_analysis/rules/typescript-node-security/insecure-hash"
tag: "insecure-hash"
text: "Do not use weak hash functions"
- - link: "/continuous_integration/static_analysis/rules/typescript-node-security/insecure-jwt-secret-usage"
+ - link: "/static_analysis/rules/typescript-node-security/insecure-jwt-secret-usage"
tag: "insecure-jwt-secret-usage"
text: "Insecure Usage of a Static Secret in JWT Signing"
- - link: "/continuous_integration/static_analysis/rules/typescript-node-security/jwt-hardcoded-secret"
+ - link: "/static_analysis/rules/typescript-node-security/jwt-hardcoded-secret"
tag: "jwt-hardcoded-secret"
text: "Do not use hardcoded secret with a JWT"
- - link: "/continuous_integration/static_analysis/rules/typescript-node-security/jwt-sensitive-data"
+ - link: "/static_analysis/rules/typescript-node-security/jwt-sensitive-data"
tag: "jwt-sensitive-data"
text: "Do not put sensitive data in objects"
- - link: "/continuous_integration/static_analysis/rules/typescript-node-security/jwt-weak-encryption"
+ - link: "/static_analysis/rules/typescript-node-security/jwt-weak-encryption"
tag: "jwt-weak-encryption"
text: "Use default encryption from the JWT library"
- - link: "/continuous_integration/static_analysis/rules/typescript-node-security/log-sensitive-data"
+ - link: "/static_analysis/rules/typescript-node-security/log-sensitive-data"
tag: "log-sensitive-data"
text: "Avoid logging sensitive data"
- - link: "/continuous_integration/static_analysis/rules/typescript-node-security/oauth2-hardcoded-secret"
+ - link: "/static_analysis/rules/typescript-node-security/oauth2-hardcoded-secret"
tag: "oauth2-hardcoded-secret"
text: "Do not use hardcoded secret for OAuth2 providers"
- - link: "/continuous_integration/static_analysis/rules/typescript-node-security/sql-injection"
+ - link: "/static_analysis/rules/typescript-node-security/sql-injection"
tag: "sql-injection"
text: "Avoid SQL injection"
further_reading:
- - link: "/continuous_integration/static_analysis/"
+ - link: "/static_analysis/"
tag: "Documentation"
text: "Learn about Datadog Static Analysis"
---
@@ -1518,4 +1520,4 @@ Rules to identify potential security hotspots in Node. This may include false po
{{< partial name="whats-next/whats-next.html" >}}
-[1]: /continuous_integration/static_analysis
+[1]: /static_analysis
diff --git a/content/en/continuous_integration/tests/_index.md b/content/en/tests/_index.md
similarity index 83%
rename from content/en/continuous_integration/tests/_index.md
rename to content/en/tests/_index.md
index cc31070efef57..c1cab620eaed0 100644
--- a/content/en/continuous_integration/tests/_index.md
+++ b/content/en/tests/_index.md
@@ -5,6 +5,7 @@ aliases:
- /continuous_integration/explore_tests/
- /continuous_integration/guides/test_configurations/
- /continuous_integration/integrate_tests/
+ - /continuous_integration/tests/
further_reading:
- link: "/monitors/types/ci/"
tag: "Documentation"
@@ -38,17 +39,17 @@ cascade:
## Setup
{{< whatsnext desc="Choose a language to set up Test Visibility in Datadog:" >}}
- {{< nextlink href="continuous_integration/tests/setup/dotnet" >}}.NET{{< /nextlink >}}
- {{< nextlink href="continuous_integration/tests/setup/java" >}}Java{{< /nextlink >}}
- {{< nextlink href="continuous_integration/tests/setup/javascript" >}}JavaScript{{< /nextlink >}}
- {{< nextlink href="continuous_integration/tests/setup/python" >}}Python{{< /nextlink >}}
- {{< nextlink href="continuous_integration/tests/setup/ruby" >}}Ruby{{< /nextlink >}}
- {{< nextlink href="continuous_integration/tests/setup/swift" >}}Swift{{< /nextlink >}}
- {{< nextlink href="continuous_integration/tests/junit_upload" >}}Uploading JUnit test report files to Datadog{{< /nextlink >}}
- {{< nextlink href="continuous_integration/tests/containers" >}}Tests running in containers{{< /nextlink >}}
+ {{< nextlink href="tests/setup/dotnet" >}}.NET{{< /nextlink >}}
+ {{< nextlink href="tests/setup/java" >}}Java{{< /nextlink >}}
+ {{< nextlink href="tests/setup/javascript" >}}JavaScript{{< /nextlink >}}
+ {{< nextlink href="tests/setup/python" >}}Python{{< /nextlink >}}
+ {{< nextlink href="tests/setup/ruby" >}}Ruby{{< /nextlink >}}
+ {{< nextlink href="tests/setup/swift" >}}Swift{{< /nextlink >}}
+ {{< nextlink href="tests/setup/junit_xml" >}}Uploading JUnit test report files to Datadog{{< /nextlink >}}
+ {{< nextlink href="tests/containers" >}}Tests running in containers{{< /nextlink >}}
{{< /whatsnext >}}
-In addition to tests, CI Visibility provides visibility over the whole testing phase of your project (except for Ruby).
+In addition to tests, Test Visibility provides visibility over the whole testing phase of your project (except for Ruby).
### Supported features
@@ -73,13 +74,13 @@ In addition to tests, CI Visibility provides visibility over the whole testing p
Tests evaluate the behavior of code for a set of given conditions. Some of those conditions are related to the environment where the tests are run, such as the operating system or the runtime used. The same code executed under different sets of conditions can behave differently, so developers usually configure their tests to run in different sets of conditions and validate that the behavior is the expected for all of them. This specific set of conditions is called a *configuration*.
-In CI Visibility, a test with multiple configurations is treated as multiple tests with a separate test for each configuration. In the case where one of the configurations fails but the others pass, only that specific test and configuration combination is marked as failed.
+In Test Visibility, a test with multiple configurations is treated as multiple tests with a separate test for each configuration. In the case where one of the configurations fails but the others pass, only that specific test and configuration combination is marked as failed.
For example, suppose you're testing a single commit and you have a Python test that runs against three different Python versions. If the test fails for one of those versions, that specific test is marked as failed, while the other versions are marked as passed. If you retry the tests against the same commit and now the test for all three Python versions pass, the test with the version that previously failed is now marked as both passed and flaky, while the other two versions remain passed, with no flakiness detected.
### Test configuration attributes
-When you run your tests with CI Visibility, the library detects and reports information about the environment where tests are run as test tags. For example, the operating system name, such as `Windows` or `Linux`, and the architecture of the platform, such as `arm64` or `x86_64`, are added as tags on each test. These values are shown in the commit and on branch overview pages when a test fails or is flaky for a specific configuration but not others.
+When you run your tests with Test Visibility, the library detects and reports information about the environment where tests are run as test tags. For example, the operating system name, such as `Windows` or `Linux`, and the architecture of the platform, such as `arm64` or `x86_64`, are added as tags on each test. These values are shown in the commit and on branch overview pages when a test fails or is flaky for a specific configuration but not others.
The following tags are automatically collected to identify test configurations, and some may only apply to specific platforms:
@@ -101,7 +102,7 @@ The following tags are automatically collected to identify test configurations,
## Custom configurations
-There are some configurations that cannot be directly identified and reported automatically because they can depend on environment variables, test run arguments, or other approaches that developers use. For those cases, you must provide the configuration details to the library so CI Visibility can properly identify them.
+There are some configurations that cannot be directly identified and reported automatically because they can depend on environment variables, test run arguments, or other approaches that developers use. For those cases, you must provide the configuration details to the library so Test Visibility can properly identify them.
Define these tags as part of the `DD_TAGS` environment variable using the `test.configuration` prefix.
@@ -122,10 +123,10 @@ In order to filter using these configurations tags, [you must create facets for
### Integrations
{{< whatsnext desc="Learn about the following integrations with Test Visibility:" >}}
-{{< nextlink href="/continuous_integration/tests/developer_workflows" >}}Enhancing Developer Workflows with Datadog{{< /nextlink >}}
-{{< nextlink href="/continuous_integration/tests/code_coverage" >}}Code Coverage{{< /nextlink >}}
-{{< nextlink href="/continuous_integration/tests/browser_tests" >}}Instrument Cypress Browser Tests with Browser RUM{{< /nextlink >}}
-{{< nextlink href="/continuous_integration/tests/swift_tests" >}}Instrument Swift Tests with Browser RUM{{< /nextlink >}}
+{{< nextlink href="/tests/developer_workflows/" >}}Enhancing Developer Workflows with Datadog{{< /nextlink >}}
+{{< nextlink href="/tests/code_coverage" >}}Code Coverage{{< /nextlink >}}
+{{< nextlink href="/tests/browser_tests" >}}Instrument Cypress Browser Tests with Browser RUM{{< /nextlink >}}
+{{< nextlink href="/tests/swift_tests" >}}Instrument Swift Tests with Browser RUM{{< /nextlink >}}
{{< /whatsnext >}}
If [Intelligent Test Runner][13] is enabled for .NET, JavaScript, or Swift, [code coverage information][12], including file names and line numbers covered by each test, are collected from your projects.
@@ -146,5 +147,5 @@ When you evaluate failed or flaky tests, or the performance of a CI test on the
[9]: https://app.datadoghq.com/notebook/list
[10]: https://app.datadoghq.com/ci/test-runs
[11]: /monitors/types/ci/
-[12]: /continuous_integration/guides/code_coverage/
-[13]: /continuous_integration/intelligent_test_runner/
+[12]: /tests/code_coverage/
+[13]: /intelligent_test_runner/
diff --git a/content/en/continuous_integration/tests/browser_tests.md b/content/en/tests/browser_tests.md
similarity index 95%
rename from content/en/continuous_integration/tests/browser_tests.md
rename to content/en/tests/browser_tests.md
index 3839ad51ad99f..8147e44fd2e60 100644
--- a/content/en/continuous_integration/tests/browser_tests.md
+++ b/content/en/tests/browser_tests.md
@@ -5,6 +5,7 @@ description: Learn how to use CI Visibility and RUM to connect your test results
aliases:
- /continuous_integration/guides/rum_integration
- /continuous_integration/integrate_tests/browser_tests
+- /continuous_integration/tests/browser_tests
further_reading:
- link: "/continuous_integration/tests"
tag: "Documentation"
@@ -52,6 +53,6 @@ The RUM session has all the data that [RUM normally collects][3] so you can debu
{{< partial name="whats-next/whats-next.html" >}}
-[1]: /continuous_integration/tests/javascript/?tab=cypress#instrument-your-tests
+[1]: /tests/setup/javascript/?tab=cypress#instrument-your-tests
[2]: /real_user_monitoring/browser/
[3]: /real_user_monitoring/browser/data_collected/
diff --git a/content/en/continuous_integration/tests/code_coverage.md b/content/en/tests/code_coverage.md
similarity index 99%
rename from content/en/continuous_integration/tests/code_coverage.md
rename to content/en/tests/code_coverage.md
index 112ba92241441..79215fd47b7d4 100644
--- a/content/en/continuous_integration/tests/code_coverage.md
+++ b/content/en/tests/code_coverage.md
@@ -5,8 +5,9 @@ description: Learn how to report and use code coverage in Datadog.
aliases:
- /continuous_integration/guides/code_coverage/
- /continuous_integration/integrate_tests/code_coverage/
+- /continuous_integration/tests/code_coverage/
further_reading:
-- link: "/continuous_integration/tests"
+- link: "/tests"
tag: "Documentation"
text: "Learn about Test Visibility"
- link: "/monitors/types/ci"
@@ -234,7 +235,7 @@ Get alerted whenever code coverage for your service drops below a certain thresh
{{< partial name="whats-next/whats-next.html" >}}
-[1]: /continuous_integration/tests/
+[1]: /tests/
[2]: /dashboards
[3]: /notebooks
[4]: /monitors
diff --git a/content/en/continuous_integration/tests/containers.md b/content/en/tests/containers.md
similarity index 95%
rename from content/en/continuous_integration/tests/containers.md
rename to content/en/tests/containers.md
index b4ad6c074d746..bcdeee06867e5 100644
--- a/content/en/continuous_integration/tests/containers.md
+++ b/content/en/tests/containers.md
@@ -3,10 +3,15 @@ title: Tests in Containers
kind: documentation
aliases:
- /continuous_integration/setup_tests/containers
+ - /continuous_integration/tests/containers
+further_reading:
+- link: "/tests"
+ tag: "Documentation"
+ text: "Learn about Test Visibility"
---
{{< site-region region="gov" >}}
-CI Visibility is not available in the selected site ({{< region-param key="dd_site_name" >}}) at this time.
+Test Visibility is not available in the selected site ({{< region-param key="dd_site_name" >}}) at this time.
{{< /site-region >}}
## Overview
@@ -295,6 +300,10 @@ Additionally, you need to pass in the environment variables required to configur
{{% /tab %}}
{{< /tabs >}}
+## Further reading
+
+{{< partial name="whats-next/whats-next.html" >}}
+
[1]: https://docs.docker.com/engine/reference/run/
[2]: https://docs.docker.com/compose/reference/
-[3]: /continuous_integration/tests/
+[3]: /tests/
diff --git a/content/en/continuous_integration/tests/developer_workflows.md b/content/en/tests/developer_workflows.md
similarity index 94%
rename from content/en/continuous_integration/tests/developer_workflows.md
rename to content/en/tests/developer_workflows.md
index 43e58bdd31f38..60502c8150f2c 100644
--- a/content/en/continuous_integration/tests/developer_workflows.md
+++ b/content/en/tests/developer_workflows.md
@@ -6,6 +6,7 @@ aliases:
- /continuous_integration/guides/developer_workflows
- /continuous_integration/guides/pull_request_comments
- /continuous_integration/integrate_tests/developer_workflows
+- /continuous_integration/tests/developer_workflows
further_reading:
- link: "https://www.datadoghq.com/blog/datadog-github-actions-ci-visibility/"
tag: "Blog"
@@ -18,10 +19,10 @@ further_reading:
## Overview
{{< site-region region="gov" >}}
-CI Visibility is not available in the selected site ({{< region-param key="dd_site_name" >}}) at this time.
+Test Visibility is not available in the selected site ({{< region-param key="dd_site_name" >}}) at this time.
{{< /site-region >}}
-[CI Test Visibility][5] integrates with other developer-oriented Datadog products as well as external partners such as GitHub to streamline developer workflows with features including being able to:
+[Test Visibility][5] integrates with other developer-oriented Datadog products as well as external partners such as GitHub to streamline developer workflows with features including being able to:
- [Create and open GitHub issues](#create-and-open-github-issues)
- [Open tests in GitHub and your IDE](#open-tests-in-github-and-your-ide)
diff --git a/content/en/tests/guides/_index.md b/content/en/tests/guides/_index.md
new file mode 100644
index 0000000000000..16726d79bddc5
--- /dev/null
+++ b/content/en/tests/guides/_index.md
@@ -0,0 +1,16 @@
+---
+title: Test Visibility Guides
+kind: guide
+private: true
+disable_toc: true
+cascade:
+ algolia:
+ rank: 20
+ category: Guide
+ subcategory: Test Visibility Guides
+---
+
+{{< whatsnext desc="Test Visibility Guides:" >}}
+ {{< nextlink href="/tests/guides/flaky_test_management" >}}Flaky Test Management{{< /nextlink >}}
+ {{< nextlink href="/tests/guides/add_custom_metrics" >}}Add Custom Metrics to Your Tests{{< /nextlink >}}
+{{< /whatsnext >}}
diff --git a/content/en/continuous_integration/guides/add_custom_metrics.md b/content/en/tests/guides/add_custom_metrics.md
similarity index 98%
rename from content/en/continuous_integration/guides/add_custom_metrics.md
rename to content/en/tests/guides/add_custom_metrics.md
index 49af329c3dd4f..7766bd1e28347 100644
--- a/content/en/continuous_integration/guides/add_custom_metrics.md
+++ b/content/en/tests/guides/add_custom_metrics.md
@@ -2,6 +2,8 @@
title: Add Custom Metrics To Your Tests
kind: guide
description: Learn how to use custom metrics (measures) in your tests.
+aliases:
+- /continuous_integration/guides/add_custom_metrics/
further_reading:
- link: "/continuous_integration/tests"
tag: "Documentation"
diff --git a/content/en/continuous_integration/guides/flaky_test_management.md b/content/en/tests/guides/flaky_test_management.md
similarity index 98%
rename from content/en/continuous_integration/guides/flaky_test_management.md
rename to content/en/tests/guides/flaky_test_management.md
index d4e7bb9514718..9af73ecc4c4a2 100644
--- a/content/en/continuous_integration/guides/flaky_test_management.md
+++ b/content/en/tests/guides/flaky_test_management.md
@@ -3,6 +3,7 @@ title: Flaky Test Management
kind: guide
aliases:
- /continuous_integration/guides/find_flaky_tests/
+- /continuous_integration/guides/flaky_test_management/
further_reading:
- link: "/continuous_integration/tests/"
tag: "Documentation"
diff --git a/content/en/tests/search/_index.md b/content/en/tests/search/_index.md
new file mode 100644
index 0000000000000..0714e8fba887e
--- /dev/null
+++ b/content/en/tests/search/_index.md
@@ -0,0 +1,93 @@
+---
+title: Search and Manage CI Tests
+description: Learn how to search for your CI tests.
+algolia:
+ rank: 70
+ tags: ['flaky test', 'flaky tests', 'test regression', 'test regressions', 'test service', 'test services']
+further_reading:
+- link: "/continuous_integration/explorer"
+ tag: "Documentation"
+ text: "Search and filter test runs"
+- link: "/continuous_integration/guides/flaky_test_management"
+ tag: "Documentation"
+ text: "Learn how to manage flaky tests"
+---
+
+{{< site-region region="gov" >}}
+CI Visibility is not available in the selected site ({{< region-param key="dd_site_name" >}}) at this time.
+{{< /site-region >}}
+
+## Overview
+
+The [Tests page][1] is useful for developers who want to keep an eye on their test results.
+
+{{< img src="/continuous_integration/tests.png" text="CI Tests page" style="width:100%" >}}
+
+You can access low-level and immediate insights:
+
+- See what tests are failing and why.
+- See your last commit's test results.
+- View the wall time of your tests in your feature branch and compare it to the default branch, to identify if you're about to introduce a performance regression.
+- Find out if your commit introduces a new [flaky test][5] that wasn't flaky before, indicating that your code change is what's making it flaky. This gives you the opportunity to fix the problem before proceeding rather than contributing to the number of flaky tests in your CI.
+
+You can also access high-level accumulation and trends:
+
+- See the effects that changed code, added tests, and increased complexity have on your test suite performance over time.
+- See which tests have become slower over time and identify the commit that introduced the regression.
+- Take advantage of Datadog's automatic test flakiness detection and tracking, which shows you which tests are becoming more or less unreliable over time.
+
+## Search for tests
+
+To see your tests, navigate to [**CI** > **Tests**][1] and select between the [**Branches**](#branches-view) or [**Default Branches** view](#default-branches-view).
+
+### Branches view
+
+The [Branches][2] view of the Tests page lists all branches from all [test services][3] that have reported test results. This tab is useful for individual developers to quickly see the status of tests that run on their code branches and troubleshoot test failures.
+
+In this page, you can filter the list by name, test service, or commit SHA, or to show only your branches (branches that contain at least one commit authored by you), enable the **My branches** toggle and add the email addresses you use in your Git configuration.
+
+#### Test results
+
+For each branch, you can see the test service, the number of failed, passed, and skipped tests, test regressions, wall time, the percentage of change compared to the default branch, when the commit was last updated, and the avatar of the author of the commit.
+
+Click on a branch to explore the test details page, which includes information about the branch's latest commits, flaky tests, test performance, common error types, and all test runs.
+
+{{< img src="continuous_integration/test_details.png" alt="Test Details page for a single branch" style="width:100%;">}}
+
+#### Test suite performance
+
+There is also information about the [wall time][4] of the most recent test suite run, and a comparison to the average wall time of the default branch. The comparison of your branch's wall time to the default branch's wall time can help you determine if your commit is introducing performance [regressions][6] to your test suite.
+
+Hovering over the commit author avatar shows detailed information about the latest commit.
+
+#### Test regressions
+
+[Test regressions][6] are evaluated per commit in an effort to tie performance regressions to specific code changes.
+
+#### Investigate for more details
+
+Click on the row to see test suite run details such as test results for the last commit on this branch (or you can switch branches), failing tests and the most common errors, slow tests, flaky tests, and a complete list of test runs over the time frame selected. You can filter this list of test runs by facet to get to the information you want to see most.
+
+Click into one of the test runs to see the test trace as a flame graph or a span list. The _Runs (n)_ list on the left lets you quickly access traces for each retry of the test for the same commit.
+
+#### Explore connections to services, resources, logs, and network events
+
+Click the CI provider link to examine the Resource, Service, or Analytics page for the test. You can also find complete tags information and links to related log events and network monitoring events.
+
+### Default Branches view
+
+The [Default Branches][7] view of the Tests page shows aggregated health metrics for the _default_ branch of each test service. This view is useful for teams to understand the overall health of the service over time.
+
+The Default Branches view shows similar information to the Branches view, but applied to the default branch. It compares the current wall time with the average default branch wall time to give you an indication of how your test suite performance is trending over time.
+
+## Further reading
+
+{{< partial name="whats-next/whats-next.html" >}}
+
+[1]: https://app.datadoghq.com/ci/test-services
+[2]: https://app.datadoghq.com/ci/test-services?view=branches
+[3]: /glossary/#test-service
+[4]: /glossary/#wall-time
+[5]: /glossary/#flaky-test
+[6]: /glossary/#test-regression
+[7]: https://app.datadoghq.com/ci/test-services?view=default-branches
\ No newline at end of file
diff --git a/content/en/continuous_integration/tests/setup/_index.md b/content/en/tests/setup/_index.md
similarity index 85%
rename from content/en/continuous_integration/tests/setup/_index.md
rename to content/en/tests/setup/_index.md
index 68e70780a043c..8277d84b53b01 100644
--- a/content/en/continuous_integration/tests/setup/_index.md
+++ b/content/en/tests/setup/_index.md
@@ -2,6 +2,8 @@
title: Configure Test Visibility
kind: documentation
type: multi-code-lang
+aliases:
+- continuous_integration/tests/setup/
---
For information about configuration options for [Test Visibility][1], choose your language:
diff --git a/content/en/continuous_integration/tests/setup/dotnet.md b/content/en/tests/setup/dotnet.md
similarity index 99%
rename from content/en/continuous_integration/tests/setup/dotnet.md
rename to content/en/tests/setup/dotnet.md
index a436c17eca070..6e0e0be6bcaa2 100644
--- a/content/en/continuous_integration/tests/setup/dotnet.md
+++ b/content/en/tests/setup/dotnet.md
@@ -7,6 +7,7 @@ code_lang_weight: 0
aliases:
- /continuous_integration/setup_tests/dotnet
- /continuous_integration/tests/dotnet
+ - continuous_integration/tests/setup/dotnet
further_reading:
- link: "/continuous_integration/tests/containers/"
tag: "Documentation"
diff --git a/content/en/continuous_integration/tests/setup/java.md b/content/en/tests/setup/java.md
similarity index 99%
rename from content/en/continuous_integration/tests/setup/java.md
rename to content/en/tests/setup/java.md
index 5e681773bc9ea..a19206c03cb53 100644
--- a/content/en/continuous_integration/tests/setup/java.md
+++ b/content/en/tests/setup/java.md
@@ -7,6 +7,7 @@ code_lang_weight: 10
aliases:
- /continuous_integration/setup_tests/java
- /continuous_integration/tests/java
+ - continuous_integration/tests/setup/java
further_reading:
- link: "/continuous_integration/tests/containers/"
tag: "Documentation"
diff --git a/content/en/continuous_integration/tests/setup/javascript.md b/content/en/tests/setup/javascript.md
similarity index 99%
rename from content/en/continuous_integration/tests/setup/javascript.md
rename to content/en/tests/setup/javascript.md
index 9a1908e583bf7..4d9dd0b31ed08 100644
--- a/content/en/continuous_integration/tests/setup/javascript.md
+++ b/content/en/tests/setup/javascript.md
@@ -7,6 +7,7 @@ code_lang_weight: 20
aliases:
- /continuous_integration/setup_tests/javascript
- /continuous_integration/tests/javascript
+ - continuous_integration/tests/setup/javascript
further_reading:
- link: "/continuous_integration/tests/containers/"
tag: "Documentation"
diff --git a/content/en/continuous_integration/tests/setup/junit_xml.md b/content/en/tests/setup/junit_xml.md
similarity index 99%
rename from content/en/continuous_integration/tests/setup/junit_xml.md
rename to content/en/tests/setup/junit_xml.md
index 3260ae8082bfc..ca4521272e8c4 100644
--- a/content/en/continuous_integration/tests/setup/junit_xml.md
+++ b/content/en/tests/setup/junit_xml.md
@@ -7,6 +7,7 @@ code_lang_weight: 60
aliases:
- /continuous_integration/setup_tests/junit_upload
- /continuous_integration/tests/junit_upload
+ - continuous_integration/tests/setup/junit_xml
further_reading:
- link: "/continuous_integration/tests"
tag: "Documentation"
diff --git a/content/en/continuous_integration/tests/setup/python.md b/content/en/tests/setup/python.md
similarity index 99%
rename from content/en/continuous_integration/tests/setup/python.md
rename to content/en/tests/setup/python.md
index 52e95596e4789..b74d4fd2f6038 100644
--- a/content/en/continuous_integration/tests/setup/python.md
+++ b/content/en/tests/setup/python.md
@@ -7,6 +7,7 @@ code_lang_weight: 30
aliases:
- /continuous_integration/setup_tests/python
- /continuous_integration/tests/python
+ - continuous_integration/tests/setup/python
further_reading:
- link: "/continuous_integration/tests/containers/"
tag: "Documentation"
diff --git a/content/en/continuous_integration/tests/setup/ruby.md b/content/en/tests/setup/ruby.md
similarity index 99%
rename from content/en/continuous_integration/tests/setup/ruby.md
rename to content/en/tests/setup/ruby.md
index 67efd96ef7da2..8fe5f6dc18f62 100644
--- a/content/en/continuous_integration/tests/setup/ruby.md
+++ b/content/en/tests/setup/ruby.md
@@ -7,6 +7,7 @@ code_lang_weight: 40
aliases:
- /continuous_integration/setup_tests/ruby
- /continuous_integration/tests/ruby
+ - continuous_integration/tests/setup/ruby
further_reading:
- link: "/continuous_integration/tests/containers/"
tag: "Documentation"
diff --git a/content/en/continuous_integration/tests/setup/swift.md b/content/en/tests/setup/swift.md
similarity index 99%
rename from content/en/continuous_integration/tests/setup/swift.md
rename to content/en/tests/setup/swift.md
index 26cb10e92ff54..32cdca6920c29 100644
--- a/content/en/continuous_integration/tests/setup/swift.md
+++ b/content/en/tests/setup/swift.md
@@ -7,6 +7,7 @@ code_lang_weight: 50
aliases:
- /continuous_integration/setup_tests/swift
- /continuous_integration/tests/swift
+ - continuous_integration/tests/setup/swift
further_reading:
- link: "/continuous_integration/tests"
tag: "Documentation"
diff --git a/content/en/continuous_integration/tests/swift_tests.md b/content/en/tests/swift_tests.md
similarity index 97%
rename from content/en/continuous_integration/tests/swift_tests.md
rename to content/en/tests/swift_tests.md
index 557719c591aca..8a8cfe5b386d5 100644
--- a/content/en/continuous_integration/tests/swift_tests.md
+++ b/content/en/tests/swift_tests.md
@@ -5,6 +5,7 @@ description: Learn how to use CI Visibility and RUM to connect your Swift test r
aliases:
- /continuous_integration/guides/rum_swift_integration
- /continuous_integration/integrate_tests/swift_tests
+- continuous_integration/tests/swift_tests
further_reading:
- link: "/continuous_integration/tests"
tag: "Documentation"
diff --git a/content/en/tests/troubleshooting/_index.md b/content/en/tests/troubleshooting/_index.md
new file mode 100644
index 0000000000000..1141ded83ab5e
--- /dev/null
+++ b/content/en/tests/troubleshooting/_index.md
@@ -0,0 +1,175 @@
+---
+title: Test Visibility Troubleshooting
+kind: documentation
+further_reading:
+ - link: "/continuous_integration/tests"
+ tag: "Documentation"
+ text: "Learn how to monitor your CI tests"
+---
+
+{{< site-region region="gov" >}}
+CI Visibility is not available in the selected site ({{< region-param key="dd_site_name" >}}) at this time.
+{{< /site-region >}}
+
+## Overview
+
+This page provides information to help you troubleshot issues with Test Visibility. If you need additional help, contact [Datadog Support][2].
+
+## Your tests are instrumented, but Datadog isn't showing any data
+
+1. Go to the [**Tests**][3] page for the language you're instrumenting and check that the testing framework you are using is supported in the **Compatibility** section.
+2. Check if you see any test results in the [**Test Runs**][4] section. If you do see results there, but not in the [**Tests**][5] section, Git information is missing. See [Data appears in Test Runs but not Tests](#data-appears-in-test-runs-but-not-tests) to troubleshoot it.
+3. If you are reporting the data through the Datadog Agent, make sure it is running on the host where tests are run (accessible at `localhost:8126`), or if accessible on another hostname or port, make sure you run your tests with the appropriate Agent hostname set in the `DD_AGENT_HOST` and the appropriate port in `DD_TRACE_AGENT_PORT` environment variables. You can activate [debug mode][6] in the tracer to check if it's able to connect to the Agent.
+4. If you still don't see any results, [contact Support][2] for troubleshooting help.
+
+## You are uploading JUnit test reports with `datadog-ci` but some or all tests are missing
+If you are uploading JUnit test report files with `datadog-ci` CLI and you do not see the tests, it is likely the tests are being discarded because the report is considered incorrect.
+
+The following aspects make a JUnit test report incorrect:
+* A timestamp of the reported tests that is older than **71 hours** before the moment the report is uploaded.
+* A testsuite without a name.
+
+## Data appears in test runs but not tests
+
+If you can see test results data in the **Test Runs** tab, but not the **Tests** tab, Git metadata (repository, commit, or branch) is probably missing. To confirm this is the case, open a test execution in the [**Test Runs**][4] section, and check that there is no `git.repository_url`, `git.commit.sha`, or `git.branch`. If these tags are not populated, nothing shows in the [**Tests**][5] section.
+
+1. Tracers first use the environment variables, if any, set by the CI provider to collect Git information. See [Running tests inside a container][7] for a list of environment variables that the tracer attempts to read for each supported CI provider. At a minimum, this populates the repository, commit hash, and branch information.
+2. Next, tracers fetch Git metadata using the local `.git` folder, if present, by executing `git` commands. This populates all Git metadata fields, including commit message, author, and committer information. Ensure the `.git` folder is present and the `git` binary is installed and in `$PATH`. This information is used to populate attributes not detected in the previous step.
+3. You can also provide Git information manually using environment variables, which override information detected by any of the previous steps.
+
+ The supported environment variables for providing Git information are:
+
+ `DD_GIT_REPOSITORY_URL` **(required)**
+ : URL of the repository where the code is stored. Both HTTP and SSH URLs are supported.
+ **Example**: `git@github.com:MyCompany/MyApp.git`, `https://github.com/MyCompany/MyApp.git`
+
+ `DD_GIT_COMMIT_SHA` **(required)**
+ : Full (40-character long SHA1) commit hash.
+ **Example**: `a18ebf361cc831f5535e58ec4fae04ffd98d8152`
+
+ `DD_GIT_BRANCH`
+ : Git branch being tested. Leave empty if providing tag information instead.
+ **Example**: `develop`
+
+ `DD_GIT_TAG`
+ : Git tag being tested (if applicable). Leave empty if providing branch information instead.
+ **Example**: `1.0.1`
+
+ `DD_GIT_COMMIT_MESSAGE`
+ : Commit message.
+ **Example**: `Set release number`
+
+ `DD_GIT_COMMIT_AUTHOR_NAME`
+ : Commit author name.
+ **Example**: `John Smith`
+
+ `DD_GIT_COMMIT_AUTHOR_EMAIL`
+ : Commit author email.
+ **Example**: `john@example.com`
+
+ `DD_GIT_COMMIT_AUTHOR_DATE`
+ : Commit author date in ISO 8601 format.
+ **Example**: `2021-03-12T16:00:28Z`
+
+ `DD_GIT_COMMIT_COMMITTER_NAME`
+ : Commit committer name.
+ **Example**: `Jane Smith`
+
+ `DD_GIT_COMMIT_COMMITTER_EMAIL`
+ : Commit committer email.
+ **Example**: `jane@example.com`
+
+ `DD_GIT_COMMIT_COMMITTER_DATE`
+ : Commit committer date in ISO 8601 format.
+ **Example**: `2021-03-12T16:00:28Z`
+
+4. If no CI provider environment variables are found, tests results are sent with no Git metadata.
+
+## The tests wall time is empty
+
+If you cannot see the tests wall time it is likely that the CI provider metadata is missing. To confirm this is the case, open a test execution in the [**Test Runs**][4] section, and check if the `ci.pipeline.id`, `ci.pipeline.name`, `ci.pipeline.number`, or `ci.job.url` tags are missing. If these tags are not populated, then nothing shows in the wall time column.
+
+1. Tracers use the environment variables set by the CI provider to collect this information. See [Running tests inside a container][7] for a list of environment variables that the tracer attempts to read for each supported CI provider. Make sure that the environment variables have the expected values set.
+2. Check that you are running your tests in a supported CI provider. For a list of supported CI providers, see [Running tests inside a container][7]. Only these CI providers can extract the information to enrich the test metadata with CI information.
+3. If you still don't see the wall time, contact [Datadog support][2] for help.
+
+## The tests wall time is not what is expected
+
+### How wall time is calculated
+The wall time is defined as the time difference between the start time of the first test and the end time of the last test for the given pipeline.
+
+This is done using the following algorithm:
+
+1. Compute a hash based on CI information to group the tests.
+ 1. If the tests include `ci.job.url`, use this tag to calculate the hash.
+ 2. If the tests don't include `ci.job.url`, use `ci.pipeline.id` + `ci.pipeline.name` + `ci.pipeline.number` to calculate the hash.
+2. The calculated wall time is associated to a given hash. **Note**: If there are multiple jobs that execute tests, the wall time is calculated for each job, and the maximum from all calculated wall times is shown.
+
+### Possible issues with wall time calculation
+If you're using a library for testing time-dependent code, like [timecop][8] for Ruby or [FreezeGun][9] for Python, it is possible that test timestamps are wrong, and therefore calculated wall times. If this is the case, make sure that modifications to time are rolled back before finishing your tests.
+
+## The test status numbers are not what is expected
+
+The test status numbers are calculated based on the unique tests that were collected. The uniqueness of a test is defined not only by its suite and name, but by its test parameters and test configurations as well.
+
+### The numbers are lower than expected
+
+If the numbers are lower than expected, it is likely that either the library or the tool you are using to collect test data cannot collect test parameters and/or some test configurations.
+
+1. If you are uploading JUnit test report files:
+ 1. If you are running the same tests in different environment configurations, [make sure you are setting those configuration tags during the upload][10].
+ 2. If you are running parameterized tests, it's very likely that the JUnit report does not have that information. [Try using a native library to report test data][3].
+2. If you still don't see the expected results, [contact Datadog support][2] for troubleshooting help.
+
+### The passed/failed/skipped numbers are different than expected
+
+If the same test is collected several times for the same commit but with different status, the aggregated result follows the algorithm in the table below:
+
+| **Test Status - First Try** | **Test Status - Retry #1** | **Result** |
+|-----------------------------|----------------------------|------------|
+| `Passed` | `Passed` | `Passed` |
+| `Passed` | `Failed` | `Passed` |
+| `Passed` | `Skipped` | `Passed` |
+| `Failed` | `Passed` | `Passed` |
+| `Failed` | `Failed` | `Failed` |
+| `Failed` | `Skipped` | `Failed` |
+| `Skipped` | `Passed` | `Passed` |
+| `Skipped` | `Failed` | `Failed` |
+| `Skipped` | `Skipped` | `Skipped` |
+
+## The default branch is not correct
+
+### How it impacts the product
+
+The default branch is used to power some features of the products, namely:
+
+- Default branches list on the Tests page: This list only displays default branches. Setting the wrong default branch can result in missing or incorrect data in the default branches list.
+
+- Wall time comparison for non-default branches: On the Tests page, in the Branches view, the **VS Default** column is calculated by comparing wall time for the current branch against wall time for the default branch.
+
+- New flaky tests: Tests that are not currently classified as flaky in the default branch. If the default branch is not properly set, this could lead to a wrong number of detected new flaky tests.
+
+- Pipelines list: The pipelines list only displays default branches. Setting the wrong default branch can result in missing or incorrect data in the pipelines list.
+
+### How to fix the default branch
+
+If you have admin access, you can update it from the [Repository Settings Page][11].
+
+
+
+## Further reading
+
+{{< partial name="whats-next/whats-next.html" >}}
+
+[1]: https://www.jenkins.io/doc/book/system-administration/viewing-logs/
+[2]: /help/
+[3]: /continuous_integration/tests/
+[4]: https://app.datadoghq.com/ci/test-runs
+[5]: https://app.datadoghq.com/ci/test-services
+[6]: /tracing/troubleshooting/tracer_debug_logs
+[7]: /continuous_integration/tests/containers/
+[8]: https://github.com/travisjeffery/timecop
+[9]: https://github.com/spulec/freezegun
+[10]: /continuous_integration/tests/junit_upload/?tabs=linux#collecting-environment-configuration-metadata
+[11]: https://app.datadoghq.com/ci/settings/repository
+[12]: /continuous_integration/intelligent_test_runner/
\ No newline at end of file
diff --git a/local/bin/py/build/configurations/pull_config.yaml b/local/bin/py/build/configurations/pull_config.yaml
index 006e138e8b4ad..51cba83ee0ad4 100644
--- a/local/bin/py/build/configurations/pull_config.yaml
+++ b/local/bin/py/build/configurations/pull_config.yaml
@@ -343,13 +343,15 @@
globs:
- 'README.md'
options:
- dest_path: '/continuous_integration/static_analysis/'
+ dest_path: '/static_analysis/'
file_name: 'circleci_orbs.md'
front_matters:
dependencies: ["https://github.com/DataDog/datadog-static-analyzer-circleci-orb/blob/main/README.md"]
title: Static Analysis and CircleCI Orbs
kind: documentation
description: Use Datadog and CircleCI to run Static Analysis jobs in a CI pipeline.
+ aliases:
+ - /continuous_integration/static_analysis/circleci_orbs
- repo_name: datadog-static-analyzer-github-action
contents:
@@ -358,13 +360,15 @@
globs:
- 'README.md'
options:
- dest_path: '/continuous_integration/static_analysis/'
+ dest_path: '/static_analysis/'
file_name: 'github_actions.md'
front_matters:
dependencies: ["https://github.com/DataDog/datadog-static-analyzer-github-action/blob/main/README.md"]
title: Static Analysis and GitHub Actions
kind: documentation
description: Use Datadog and GitHub to run Static Analysis jobs in a CI pipeline.
+ aliases:
+ - /continuous_integration/static_analysis/github_actions
- repo_name: datadog-static-analyzer-rule-docs
contents:
@@ -373,7 +377,7 @@
globs:
- rulesets/**/*.md
options:
- dest_dir: '/continuous_integration/static_analysis/rules/'
+ dest_dir: '/static_analysis/rules/'
path_to_remove: 'rulesets/'
front_matters:
disable_edit: true
diff --git a/local/bin/py/build/configurations/pull_config_preview.yaml b/local/bin/py/build/configurations/pull_config_preview.yaml
index 4e01a7f401c27..ade397a4fbe1f 100644
--- a/local/bin/py/build/configurations/pull_config_preview.yaml
+++ b/local/bin/py/build/configurations/pull_config_preview.yaml
@@ -344,13 +344,15 @@
globs:
- 'README.md'
options:
- dest_path: '/continuous_integration/static_analysis/'
+ dest_path: '/static_analysis/'
file_name: 'circleci_orbs.md'
front_matters:
dependencies: ["https://github.com/DataDog/datadog-static-analyzer-circleci-orb/blob/main/README.md"]
title: Static Analysis and CircleCI Orbs
kind: documentation
description: Use Datadog and CircleCI to run Static Analysis jobs in a CI pipeline.
+ aliases:
+ - /continuous_integration/static_analysis/circleci_orbs
- repo_name: datadog-static-analyzer-github-action
contents:
@@ -359,13 +361,15 @@
globs:
- 'README.md'
options:
- dest_path: '/continuous_integration/static_analysis/'
+ dest_path: '/static_analysis/'
file_name: 'github_actions.md'
front_matters:
dependencies: ["https://github.com/DataDog/datadog-static-analyzer-github-action/blob/main/README.md"]
title: Static Analysis and GitHub Actions
kind: documentation
description: Use Datadog and GitHub to run Static Analysis jobs in a CI pipeline.
+ aliases:
+ - /continuous_integration/static_analysis/github_actions
- repo_name: datadog-static-analyzer-rule-docs
contents:
@@ -374,7 +378,7 @@
globs:
- rulesets/**/*.md
options:
- dest_dir: '/continuous_integration/static_analysis/rules/'
+ dest_dir: '/static_analysis/rules/'
path_to_remove: 'rulesets/'
front_matters:
disable_edit: true