{
  "doc": {
    "id": "app/continuous-integration/overview",
    "title": "Continuous Integration with Cypress",
    "description": "Learn how to set up Cypress in Continuous Integration (CI), record tests, run tests in parallel, and set up CI workflows to use Cypress Docker images.",
    "section": "app",
    "source_path": "/llm/markdown/app/continuous-integration/overview.md",
    "version": "3cf5b86b3403f604bdf7f3e35025c3bc3865e02c",
    "updated_at": "2026-05-07T17:44:31.931Z",
    "headings": [
      {
        "id": "app/continuous-integration/overview#continuous-integration-with-cypress",
        "text": "Continuous Integration with Cypress",
        "level": 1
      },
      {
        "id": "app/continuous-integration/overview#what-youll-learn",
        "text": "What you'll learn",
        "level": 5
      },
      {
        "id": "app/continuous-integration/overview#what-is-continuous-integration",
        "text": "What is Continuous Integration?",
        "level": 2
      },
      {
        "id": "app/continuous-integration/overview#setting-up-ci",
        "text": "Setting up CI",
        "level": 2
      },
      {
        "id": "app/continuous-integration/overview#basics",
        "text": "Basics",
        "level": 3
      },
      {
        "id": "app/continuous-integration/overview#boot-your-server",
        "text": "Boot your server",
        "level": 3
      },
      {
        "id": "app/continuous-integration/overview#challenges",
        "text": "Challenges",
        "level": 4
      },
      {
        "id": "app/continuous-integration/overview#solutions",
        "text": "Solutions",
        "level": 4
      },
      {
        "id": "app/continuous-integration/overview#gotchas",
        "text": "Gotchas",
        "level": 4
      },
      {
        "id": "app/continuous-integration/overview#record-tests",
        "text": "Record tests",
        "level": 3
      },
      {
        "id": "app/continuous-integration/overview#recording-tests-allow-you-to",
        "text": "Recording tests allow you to:",
        "level": 4
      },
      {
        "id": "app/continuous-integration/overview#to-record-tests",
        "text": "To record tests:",
        "level": 4
      },
      {
        "id": "app/continuous-integration/overview#run-tests-in-parallel",
        "text": "Run tests in parallel",
        "level": 3
      },
      {
        "id": "app/continuous-integration/overview#cypress-docker-images",
        "text": "Cypress Docker Images",
        "level": 2
      },
      {
        "id": "app/continuous-integration/overview#cypress-docker-variants",
        "text": "Cypress Docker variants",
        "level": 3
      },
      {
        "id": "app/continuous-integration/overview#ci-docker-examples",
        "text": "CI Docker examples",
        "level": 3
      },
      {
        "id": "app/continuous-integration/overview#ci-examples",
        "text": "CI Examples",
        "level": 2
      },
      {
        "id": "app/continuous-integration/overview#aws-amplify-console",
        "text": "AWS Amplify Console",
        "level": 3
      },
      {
        "id": "app/continuous-integration/overview#aws-codebuild",
        "text": "AWS CodeBuild",
        "level": 3
      },
      {
        "id": "app/continuous-integration/overview#azure-pipelines",
        "text": "Azure Pipelines",
        "level": 3
      },
      {
        "id": "app/continuous-integration/overview#bitbucket-pipelines",
        "text": "Bitbucket Pipelines",
        "level": 3
      },
      {
        "id": "app/continuous-integration/overview#circleci",
        "text": "CircleCI",
        "level": 3
      },
      {
        "id": "app/continuous-integration/overview#buildkite",
        "text": "Buildkite",
        "level": 3
      },
      {
        "id": "app/continuous-integration/overview#github-actions",
        "text": "GitHub Actions",
        "level": 3
      },
      {
        "id": "app/continuous-integration/overview#gitlab",
        "text": "GitLab",
        "level": 3
      },
      {
        "id": "app/continuous-integration/overview#jenkins",
        "text": "Jenkins",
        "level": 3
      },
      {
        "id": "app/continuous-integration/overview#netlify",
        "text": "Netlify",
        "level": 3
      },
      {
        "id": "app/continuous-integration/overview#semaphore",
        "text": "Semaphore",
        "level": 3
      },
      {
        "id": "app/continuous-integration/overview#travisci",
        "text": "TravisCI",
        "level": 3
      },
      {
        "id": "app/continuous-integration/overview#advanced-setup",
        "text": "Advanced setup",
        "level": 2
      },
      {
        "id": "app/continuous-integration/overview#machine-requirements",
        "text": "Machine requirements",
        "level": 3
      },
      {
        "id": "app/continuous-integration/overview#dependencies",
        "text": "Dependencies",
        "level": 3
      },
      {
        "id": "app/continuous-integration/overview#linux",
        "text": "Linux",
        "level": 4
      },
      {
        "id": "app/continuous-integration/overview#caching",
        "text": "Caching",
        "level": 3
      },
      {
        "id": "app/continuous-integration/overview#we-recommend-users",
        "text": "We recommend users:",
        "level": 4
      },
      {
        "id": "app/continuous-integration/overview#environment-variables",
        "text": "Environment variables",
        "level": 3
      },
      {
        "id": "app/continuous-integration/overview#configuration-values",
        "text": "Configuration Values",
        "level": 4
      },
      {
        "id": "app/continuous-integration/overview#git-information",
        "text": "Git information",
        "level": 4
      },
      {
        "id": "app/continuous-integration/overview#ci-build-information",
        "text": "CI Build Information",
        "level": 4
      },
      {
        "id": "app/continuous-integration/overview#custom-environment-variables",
        "text": "Custom Environment Variables",
        "level": 4
      },
      {
        "id": "app/continuous-integration/overview#module-api",
        "text": "Module API",
        "level": 3
      },
      {
        "id": "app/continuous-integration/overview#common-problems-and-solutions",
        "text": "Common problems and solutions",
        "level": 2
      },
      {
        "id": "app/continuous-integration/overview#missing-binary",
        "text": "Missing binary",
        "level": 3
      },
      {
        "id": "app/continuous-integration/overview#xvfb",
        "text": "Xvfb",
        "level": 3
      },
      {
        "id": "app/continuous-integration/overview#colors",
        "text": "Colors",
        "level": 3
      },
      {
        "id": "app/continuous-integration/overview#see-also",
        "text": "See also",
        "level": 2
      }
    ]
  },
  "content": {
    "type": "root",
    "children": [
      {
        "type": "heading",
        "depth": 1,
        "children": [
          {
            "type": "text",
            "value": "Continuous Integration with Cypress"
          }
        ]
      },
      {
        "type": "heading",
        "depth": 5,
        "children": [
          {
            "type": "text",
            "value": "What you'll learn"
          }
        ]
      },
      {
        "type": "list",
        "ordered": false,
        "start": null,
        "spread": false,
        "children": [
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "How to set up Cypress in Continuous Integration (CI)"
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "How to run Cypress in CI, record tests, and run tests in parallel"
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "How to set up CI workflows to use Cypress Docker images"
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "Advanced configuration for OS, dependencies, caching, and environment variables"
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "type": "heading",
        "depth": 2,
        "children": [
          {
            "type": "text",
            "value": "What is Continuous Integration?"
          }
        ]
      },
      {
        "type": "heading",
        "depth": 2,
        "children": [
          {
            "type": "text",
            "value": "Setting up CI"
          }
        ]
      },
      {
        "type": "heading",
        "depth": 3,
        "children": [
          {
            "type": "text",
            "value": "Basics"
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Running Cypress in Continuous Integration is almost the same as running it locally in your terminal. You generally only need to do two things:"
          }
        ]
      },
      {
        "type": "list",
        "ordered": true,
        "start": 1,
        "spread": false,
        "children": [
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "Install Cypress"
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "type": "list",
        "ordered": false,
        "start": null,
        "spread": false,
        "children": [
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "npm"
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "yarn"
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "pnpm"
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "npm install cypress --save-dev"
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "yarn add cypress --dev"
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "pnpm add --save-dev cypress"
      },
      {
        "type": "list",
        "ordered": true,
        "start": 1,
        "spread": false,
        "children": [
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "Run Cypress"
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "type": "list",
        "ordered": false,
        "start": null,
        "spread": false,
        "children": [
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "npm"
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "yarn"
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "pnpm"
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "npx cypress run"
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "yarn cypress run"
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "pnpm cypress run"
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Depending on which CI provider you use, you may need a config file. You'll want to refer to your CI provider's documentation to know where to add the commands to install and run Cypress. For more configuration examples check out our "
          },
          {
            "type": "link",
            "title": null,
            "url": "/llm/markdown/app/continuous-integration/overview.md#CI-Examples",
            "children": [
              {
                "type": "text",
                "value": "examples"
              }
            ]
          },
          {
            "type": "text",
            "value": "."
          }
        ]
      },
      {
        "type": "heading",
        "depth": 3,
        "children": [
          {
            "type": "text",
            "value": "Boot your server"
          }
        ]
      },
      {
        "type": "heading",
        "depth": 4,
        "children": [
          {
            "type": "text",
            "value": "Challenges"
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Typically you will need to boot a local server prior to running Cypress. When you boot your web server, it runs as a long running process that will never exit. Because of this, you'll need it to run in the background - else your CI provider will never move onto the next command."
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Backgrounding your server process means that your CI provider will continue to execute the next command after executing the signal to start your server."
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Many people approach this situation by running a command like the following:"
          }
        ]
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "npm start & cypress run // Do not do this"
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "The problem is - what happens if your server takes time to boot? There is no guarantee that when the next command runs (`cypress run`) that your web server is up and available. So your Cypress test may start and try to visit your local server before it is ready to be visited."
          }
        ]
      },
      {
        "type": "heading",
        "depth": 4,
        "children": [
          {
            "type": "text",
            "value": "Solutions"
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Luckily, there are some solutions for this. Instead of introducing arbitrary waits (like `sleep 20`) you can use a better option."
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "`wait-on` module"
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Using the "
          },
          {
            "type": "link",
            "title": null,
            "url": "https://github.com/jeffbski/wait-on",
            "children": [
              {
                "type": "text",
                "value": "wait-on"
              }
            ]
          },
          {
            "type": "text",
            "value": " module, you can block the `cypress run` command from executing until your server has booted."
          }
        ]
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "npm start & wait-on http://localhost:8080"
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "cypress run"
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Most CI providers will automatically kill background processes so you don't have to worry about cleaning up your server process once Cypress finishes."
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "However, if you're running this script locally you'll have to do a bit more work to collect the backgrounded PID and then kill it after `cypress run`."
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "`start-server-and-test` module"
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "If the server takes a very long time to start, we recommend trying the "
          },
          {
            "type": "link",
            "title": null,
            "url": "https://github.com/bahmutov/start-server-and-test",
            "children": [
              {
                "type": "text",
                "value": "start-server-and-test"
              }
            ]
          },
          {
            "type": "text",
            "value": " module."
          }
        ]
      },
      {
        "type": "list",
        "ordered": false,
        "start": null,
        "spread": false,
        "children": [
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "npm"
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "yarn"
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "pnpm"
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "npm install start-server-and-test --save-dev"
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "yarn add start-server-and-test --dev"
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "pnpm add --save-dev start-server-and-test"
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "In your `package.json` scripts, pass the command to boot your server, the url your server is hosted on and your Cypress test command."
          }
        ]
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "{  \"scripts\": {    \"start\": \"my-server -p 3030\",    \"cy:run\": \"cypress run\",    \"test\": \"start-server-and-test start http://localhost:3030 cy:run\"  }}"
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "In the example above, the `cy:run` command will only be executed when the URL `http://localhost:3030` responds with an HTTP status code of 200. The server will also shut down when the tests complete."
          }
        ]
      },
      {
        "type": "heading",
        "depth": 4,
        "children": [
          {
            "type": "text",
            "value": "Gotchas"
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "When "
          },
          {
            "type": "link",
            "title": null,
            "url": "https://github.com/bahmutov/start-server-and-test#note-for-webpack-dev-server-users",
            "children": [
              {
                "type": "text",
                "value": "working with `webpack-dev-server`"
              }
            ]
          },
          {
            "type": "text",
            "value": " that does not respond to `HEAD` requests, use an explicit `GET` method to ping the server like this:"
          }
        ]
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "{  \"scripts\": {    \"test\": \"start-server-and-test start http-get://localhost:3030 cy:run\"  }}"
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "When working with local `https` in webpack, set a system environment variable to allow local certificate:"
          }
        ]
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "{  \"scripts\": {    \"start\": \"my-server -p 3030 --https\",    \"cy:run\": \"cypress run\",    \"cy:ci\": \"START_SERVER_AND_TEST_INSECURE=1 start-server-and-test start https-get://localhost:3030 cy:run\"  }}"
      },
      {
        "type": "heading",
        "depth": 3,
        "children": [
          {
            "type": "text",
            "value": "Record tests"
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Cypress can record your tests and make the results available in "
          },
          {
            "type": "link",
            "title": null,
            "url": "/llm/markdown/cloud/get-started/introduction.md",
            "children": [
              {
                "type": "text",
                "value": "Cypress Cloud"
              }
            ]
          },
          {
            "type": "text",
            "value": ". Cloud gives you access to recorded tests - typically when running Cypress tests from your "
          },
          {
            "type": "link",
            "title": null,
            "url": "/llm/markdown/app/continuous-integration/overview.md",
            "children": [
              {
                "type": "text",
                "value": "CI provider"
              }
            ]
          },
          {
            "type": "text",
            "value": " - and provides you insight into what happened when your tests ran."
          }
        ]
      },
      {
        "type": "heading",
        "depth": 4,
        "children": [
          {
            "type": "text",
            "value": "Recording tests allow you to:"
          }
        ]
      },
      {
        "type": "list",
        "ordered": false,
        "start": null,
        "spread": false,
        "children": [
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "See the number of failed, pending and passing tests."
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "Get the entire stack trace of failed tests."
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "View screenshots taken when tests fail and when using "
                  },
                  {
                    "type": "link",
                    "title": null,
                    "url": "/llm/markdown/api/commands/screenshot.md",
                    "children": [
                      {
                        "type": "text",
                        "value": "`cy.screenshot()`"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": "."
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "Watch a video of your entire test run or a clip at the point of test failure when the `video` configuration is enabled."
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "See which machines ran each test when "
                  },
                  {
                    "type": "link",
                    "title": null,
                    "url": "/llm/markdown/cloud/features/smart-orchestration/parallelization.md",
                    "children": [
                      {
                        "type": "text",
                        "value": "parallelized"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": "."
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "type": "heading",
        "depth": 4,
        "children": [
          {
            "type": "text",
            "value": "To record tests:"
          }
        ]
      },
      {
        "type": "list",
        "ordered": true,
        "start": 1,
        "spread": false,
        "children": [
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "link",
                    "title": null,
                    "url": "/llm/markdown/cloud/get-started/setup.md#Setup",
                    "children": [
                      {
                        "type": "text",
                        "value": "Set up your project to record"
                      }
                    ]
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "link",
                    "title": null,
                    "url": "/llm/markdown/app/references/command-line.md#cypress-run",
                    "children": [
                      {
                        "type": "text",
                        "value": "Pass the `--record` flag to `cypress run`"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": " within CI."
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "cypress run --record --key=abc123"
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "link",
            "title": null,
            "url": "/llm/markdown/cloud/get-started/introduction.md",
            "children": [
              {
                "type": "text",
                "value": "Read the full guide on the Cypress Cloud."
              }
            ]
          }
        ]
      },
      {
        "type": "heading",
        "depth": 3,
        "children": [
          {
            "type": "text",
            "value": "Run tests in parallel"
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Cypress can run tests in parallel across multiple machines."
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "You'll want to refer to your CI provider's documentation on how to set up multiple machines to run in your CI environment."
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Once multiple machines are available within your CI environment, you can pass the "
          },
          {
            "type": "link",
            "title": null,
            "url": "/llm/markdown/app/references/command-line.md#cypress-run-parallel",
            "children": [
              {
                "type": "text",
                "value": "--parallel"
              }
            ]
          },
          {
            "type": "text",
            "value": " flag to have your tests run in parallel."
          }
        ]
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "cypress run --record --key=abc123 --parallel"
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "link",
            "title": null,
            "url": "/llm/markdown/cloud/features/smart-orchestration/parallelization.md",
            "children": [
              {
                "type": "text",
                "value": "Read the full guide on parallelization."
              }
            ]
          }
        ]
      },
      {
        "type": "heading",
        "depth": 2,
        "children": [
          {
            "type": "text",
            "value": "Cypress Docker Images"
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "CI providers, such as "
          },
          {
            "type": "link",
            "title": null,
            "url": "https://docs.github.com/en/actions/using-jobs/running-jobs-in-a-container",
            "children": [
              {
                "type": "text",
                "value": "GitHub Actions"
              }
            ]
          },
          {
            "type": "text",
            "value": " and "
          },
          {
            "type": "link",
            "title": null,
            "url": "https://circleci.com/docs/executor-intro/#docker",
            "children": [
              {
                "type": "text",
                "value": "CircleCI"
              }
            ]
          },
          {
            "type": "text",
            "value": ", allow workflows to run using "
          },
          {
            "type": "link",
            "title": null,
            "url": "https://docs.docker.com/get-started/docker-concepts/the-basics/what-is-a-container/",
            "children": [
              {
                "type": "text",
                "value": "Docker container images"
              }
            ]
          },
          {
            "type": "text",
            "value": "."
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Cypress supports the use of "
          },
          {
            "type": "link",
            "title": null,
            "url": "https://docs.docker.com/get-started/docker-overview/",
            "children": [
              {
                "type": "text",
                "value": "Docker"
              }
            ]
          },
          {
            "type": "text",
            "value": " through the provisioning of official "
          },
          {
            "type": "link",
            "title": null,
            "url": "https://github.com/cypress-io/cypress-docker-images",
            "children": [
              {
                "type": "text",
                "value": "Cypress Docker images"
              }
            ]
          },
          {
            "type": "text",
            "value": ". Images are Linux-based and support the following platforms:"
          }
        ]
      },
      {
        "type": "list",
        "ordered": false,
        "start": null,
        "spread": false,
        "children": [
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "Linux/amd64"
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "Linux/arm64"
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Cypress Docker images provide a consistent environment tailored for use with Cypress. By choosing an appropriate Cypress Docker image, you determine the exact environment that your Cypress tests run in. This allows you to shield your workflows from version updates made by your CI provider, for instance if they update Node.js or browser versions."
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Cypress Docker images are available from:"
          }
        ]
      },
      {
        "type": "list",
        "ordered": false,
        "start": null,
        "spread": false,
        "children": [
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://hub.docker.com/u/cypress",
                    "children": [
                      {
                        "type": "text",
                        "value": "Docker Hub"
                      }
                    ]
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://gallery.ecr.aws/cypress-io",
                    "children": [
                      {
                        "type": "text",
                        "value": "Amazon ECR (Elastic Container Registry) Public Gallery"
                      }
                    ]
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "type": "heading",
        "depth": 3,
        "children": [
          {
            "type": "text",
            "value": "Cypress Docker variants"
          }
        ]
      },
      {
        "type": "list",
        "ordered": false,
        "start": null,
        "spread": true,
        "children": [
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://github.com/cypress-io/cypress-docker-images/tree/master/base",
                    "children": [
                      {
                        "type": "text",
                        "value": "cypress/base"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": " is the entry-level Cypress Docker image, allowing you to test in the Electron browser, built in to Cypress. It contains a complete Linux (Debian) operating system, together with the "
                  },
                  {
                    "type": "link",
                    "title": null,
                    "url": "/llm/markdown/app/get-started/install-cypress.md#UbuntuDebian",
                    "children": [
                      {
                        "type": "text",
                        "value": "prerequisite operating system packages"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": " for Cypress, Node.js, npm and Yarn v1 Classic. An image `<tag>` gives you the choice of Node.js version."
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://github.com/cypress-io/cypress-docker-images/tree/master/browsers",
                    "children": [
                      {
                        "type": "text",
                        "value": "cypress/browsers"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": " builds on the "
                  },
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://github.com/cypress-io/cypress-docker-images/tree/master/base",
                    "children": [
                      {
                        "type": "text",
                        "value": "cypress/base"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": " image. For `Linux/amd64` images it adds Chrome, Firefox and Edge browsers. For `Linux/arm64` images it adds only Firefox browsers from version `136.0.2` and above. Chrome and Edge browsers are currently not available for `Linux/arm64`. A corresponding image `<tag>` allows selection of the combined Node.js and browser versions. The version tags for the unavailable Chrome and Edge browsers on the `Linux/arm64` platform are empty place-holders only, required for multi-platform support compatibility."
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://github.com/cypress-io/cypress-docker-images/tree/master/included",
                    "children": [
                      {
                        "type": "text",
                        "value": "cypress/included"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": " builds on the "
                  },
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://github.com/cypress-io/cypress-docker-images/tree/master/browsers",
                    "children": [
                      {
                        "type": "text",
                        "value": "cypress/browsers"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": " image. It adds a fixed version of Cypress, globally installed by npm. A short-form image `<tag>` selects the version of Cypress. A corresponding long-form `<tag>` selects the version of Cypress and documents the combined Node.js and browser versions."
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://github.com/cypress-io/cypress-docker-images/tree/master/factory",
                    "children": [
                      {
                        "type": "text",
                        "value": "cypress/factory"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": " provides the base operating system image and allows individual selection of other components by version. It is used to generate customized Docker images."
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "type": "heading",
        "depth": 3,
        "children": [
          {
            "type": "text",
            "value": "CI Docker examples"
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "You can find examples that use Cypress Docker images below"
          }
        ]
      },
      {
        "type": "list",
        "ordered": false,
        "start": null,
        "spread": false,
        "children": [
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://github.com/cypress-io/cypress-docker-images/blob/master/README.md#examples",
                    "children": [
                      {
                        "type": "text",
                        "value": "cypress-docker-images examples"
                      }
                    ]
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://github.com/cypress-io/cypress-example-kitchensink/blob/master/README.md",
                    "children": [
                      {
                        "type": "text",
                        "value": "cypress-example-kitchensink"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": "."
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://github.com/cypress-io/cypress-realworld-app/blob/develop/.circleci/config.yml",
                    "children": [
                      {
                        "type": "text",
                        "value": "Real World App - CircleCI"
                      }
                    ]
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://github.com/cypress-io/cypress-realworld-app/blob/develop/.github/workflows/main.yml",
                    "children": [
                      {
                        "type": "text",
                        "value": "Real World App - GitHub Actions"
                      }
                    ]
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://github.com/cypress-io/cypress-docker-images/blob/master/.github/workflows/example-cypress-github-action.yml",
                    "children": [
                      {
                        "type": "text",
                        "value": "cypress-docker-images - GitHub Actions"
                      }
                    ]
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "type": "heading",
        "depth": 2,
        "children": [
          {
            "type": "text",
            "value": "CI Examples"
          }
        ]
      },
      {
        "type": "heading",
        "depth": 3,
        "children": [
          {
            "type": "text",
            "value": "AWS Amplify Console"
          }
        ]
      },
      {
        "type": "list",
        "ordered": false,
        "start": null,
        "spread": false,
        "children": [
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://github.com/cypress-io/cypress-example-kitchensink/blob/master/amplify.yml",
                    "children": [
                      {
                        "type": "text",
                        "value": "Basic Example (amplify.yml)"
                      }
                    ]
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "type": "heading",
        "depth": 3,
        "children": [
          {
            "type": "text",
            "value": "AWS CodeBuild"
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Read our extensive guide on how to set up Cypress in "
          },
          {
            "type": "link",
            "title": null,
            "url": "/llm/markdown/app/continuous-integration/aws-codebuild.md",
            "children": [
              {
                "type": "text",
                "value": "AWS CodeBuild"
              }
            ]
          },
          {
            "type": "text",
            "value": "."
          }
        ]
      },
      {
        "type": "heading",
        "depth": 3,
        "children": [
          {
            "type": "text",
            "value": "Azure Pipelines"
          }
        ]
      },
      {
        "type": "list",
        "ordered": false,
        "start": null,
        "spread": false,
        "children": [
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://github.com/cypress-io/cypress-example-kitchensink/blob/master/basic/azure-ci.yml",
                    "children": [
                      {
                        "type": "text",
                        "value": "Basic Example (azure-ci.yml)"
                      }
                    ]
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://github.com/cypress-io/cypress-example-kitchensink/blob/master/azure-ci.yml",
                    "children": [
                      {
                        "type": "text",
                        "value": "Parallelized Example (azure-ci.yml)"
                      }
                    ]
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "type": "heading",
        "depth": 3,
        "children": [
          {
            "type": "text",
            "value": "Bitbucket Pipelines"
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Read our extensive guide on how to set up Cypress in "
          },
          {
            "type": "link",
            "title": null,
            "url": "/llm/markdown/app/continuous-integration/bitbucket-pipelines.md",
            "children": [
              {
                "type": "text",
                "value": "Bitbucket Pipelines"
              }
            ]
          },
          {
            "type": "text",
            "value": "."
          }
        ]
      },
      {
        "type": "heading",
        "depth": 3,
        "children": [
          {
            "type": "text",
            "value": "CircleCI"
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Read our extensive guide on how to set up Cypress in "
          },
          {
            "type": "link",
            "title": null,
            "url": "/llm/markdown/app/continuous-integration/circleci.md",
            "children": [
              {
                "type": "text",
                "value": "CircleCI"
              }
            ]
          },
          {
            "type": "text",
            "value": "."
          }
        ]
      },
      {
        "type": "heading",
        "depth": 3,
        "children": [
          {
            "type": "text",
            "value": "Buildkite"
          }
        ]
      },
      {
        "type": "list",
        "ordered": false,
        "start": null,
        "spread": false,
        "children": [
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://github.com/cypress-io/cypress-example-kitchensink/blob/master/.buildkite/pipeline.yml",
                    "children": [
                      {
                        "type": "text",
                        "value": "Parallel Example"
                      }
                    ]
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "type": "heading",
        "depth": 3,
        "children": [
          {
            "type": "text",
            "value": "GitHub Actions"
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Read our extensive guide on how to set up Cypress in "
          },
          {
            "type": "link",
            "title": null,
            "url": "/llm/markdown/app/continuous-integration/github-actions.md",
            "children": [
              {
                "type": "text",
                "value": "GitHub Actions"
              }
            ]
          },
          {
            "type": "text",
            "value": "."
          }
        ]
      },
      {
        "type": "heading",
        "depth": 3,
        "children": [
          {
            "type": "text",
            "value": "GitLab"
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Read our extensive guide on how to set up Cypress in "
          },
          {
            "type": "link",
            "title": null,
            "url": "/llm/markdown/app/continuous-integration/gitlab-ci.md",
            "children": [
              {
                "type": "text",
                "value": "GitLab"
              }
            ]
          },
          {
            "type": "text",
            "value": "."
          }
        ]
      },
      {
        "type": "heading",
        "depth": 3,
        "children": [
          {
            "type": "text",
            "value": "Jenkins"
          }
        ]
      },
      {
        "type": "list",
        "ordered": false,
        "start": null,
        "spread": false,
        "children": [
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://github.com/cypress-io/cypress-example-kitchensink/blob/master/basic/Jenkinsfile",
                    "children": [
                      {
                        "type": "text",
                        "value": "Basic Jenkinsfile"
                      }
                    ]
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://github.com/cypress-io/cypress-example-kitchensink/blob/master/Jenkinsfile",
                    "children": [
                      {
                        "type": "text",
                        "value": "Parallel Jenkinsfile"
                      }
                    ]
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "type": "heading",
        "depth": 3,
        "children": [
          {
            "type": "text",
            "value": "Netlify"
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "We recommend using our official "
          },
          {
            "type": "link",
            "title": null,
            "url": "https://github.com/cypress-io/netlify-plugin-cypress",
            "children": [
              {
                "type": "text",
                "value": "netlify-plugin-cypress"
              }
            ]
          },
          {
            "type": "text",
            "value": " to execute end-to-end tests before and after deployment to Netlify platform. Read our tutorial "
          },
          {
            "type": "link",
            "title": null,
            "url": "https://cypress.io/blog/2020/03/30/run-cypress-tests-on-netlify-using-a-single-line/",
            "children": [
              {
                "type": "text",
                "value": "Run Cypress Tests on Netlify Using a Single Line"
              }
            ]
          },
          {
            "type": "text",
            "value": "."
          }
        ]
      },
      {
        "type": "heading",
        "depth": 3,
        "children": [
          {
            "type": "text",
            "value": "Semaphore"
          }
        ]
      },
      {
        "type": "list",
        "ordered": false,
        "start": null,
        "spread": false,
        "children": [
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://github.com/cypress-io/cypress-example-kitchensink/blob/master/basic/.semaphore.yml",
                    "children": [
                      {
                        "type": "text",
                        "value": "Basic .semaphore.yml"
                      }
                    ]
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://github.com/cypress-io/cypress-example-kitchensink/blob/master/.semaphore/semaphore.yml",
                    "children": [
                      {
                        "type": "text",
                        "value": "Parallel .semaphore.yml"
                      }
                    ]
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "type": "heading",
        "depth": 3,
        "children": [
          {
            "type": "text",
            "value": "TravisCI"
          }
        ]
      },
      {
        "type": "list",
        "ordered": false,
        "start": null,
        "spread": false,
        "children": [
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://github.com/cypress-io/cypress-example-kitchensink/blob/master/basic/.travis.yml",
                    "children": [
                      {
                        "type": "text",
                        "value": "Basic .travis.yml"
                      }
                    ]
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://github.com/cypress-io/cypress-example-kitchensink/blob/master/.travis.yml",
                    "children": [
                      {
                        "type": "text",
                        "value": "Parallel .travis.yml"
                      }
                    ]
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "type": "heading",
        "depth": 2,
        "children": [
          {
            "type": "text",
            "value": "Advanced setup"
          }
        ]
      },
      {
        "type": "heading",
        "depth": 3,
        "children": [
          {
            "type": "text",
            "value": "Machine requirements"
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Hardware requirements to run Cypress depend how much memory the browser, the application under test, and the server (if running it locally) need to run the tests without crashing. Visit our "
          },
          {
            "type": "link",
            "title": null,
            "url": "/llm/markdown/app/get-started/install-cypress.md#System-requirements",
            "children": [
              {
                "type": "text",
                "value": "System Requirements"
              }
            ]
          },
          {
            "type": "text",
            "value": " guide for minimum hardware recommendations."
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Some signs that your machine may not have enough CPU or memory to run Cypress:"
          }
        ]
      },
      {
        "type": "list",
        "ordered": false,
        "start": null,
        "spread": false,
        "children": [
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "The recorded video artifacts have random pauses or dropped frames."
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "link",
                    "title": null,
                    "url": "/llm/markdown/app/references/troubleshooting.md#Log-memory-and-CPU-usage",
                    "children": [
                      {
                        "type": "text",
                        "value": "Debug logs of the CPU and memory"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": " frequently show CPU percent above 100%."
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "The browser crashes."
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "You can see the total available machine memory and the current free memory by running the "
          },
          {
            "type": "link",
            "title": null,
            "url": "/llm/markdown/app/references/command-line.md#cypress-info",
            "children": [
              {
                "type": "text",
                "value": "`cypress info`"
              }
            ]
          },
          {
            "type": "text",
            "value": " command."
          }
        ]
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "npx cypress info...Cypress Version: 13.6.6 (stable)System Platform: linux (Debian - 11.6)System Memory: 73.6 GB free 48.6 GB"
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "You can see the CPU parameters on the CI machines by executing the command below."
          }
        ]
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "node -p 'os.cpus()'[  {    model: 'Intel(R) Xeon(R) Platinum 8124M CPU @ 3.00GHz',    speed: 3399,    times: { user: 760580, nice: 1010, sys: 158130, idle: 1638340, irq: 0 }  }  ...]"
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Example projects and the machine configurations used to run them on CI:"
          }
        ]
      },
      {
        "type": "list",
        "ordered": false,
        "start": null,
        "spread": false,
        "children": [
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "The "
                  },
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://github.com/cypress-io/cypress-realworld-app",
                    "children": [
                      {
                        "type": "text",
                        "value": "Real World App"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": " project runs tests on a CircleCI machine using the "
                  },
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://circleci.com/docs/executor-intro/#docker",
                    "children": [
                      {
                        "type": "text",
                        "value": "Docker executor"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": " with "
                  },
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://circleci.com/docs/configuration-reference/#docker-execution-environment",
                    "children": [
                      {
                        "type": "text",
                        "value": "`resource_class: large`"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": " providing 4 vCPUs and 8 GB of RAM. `cypress info` reports `System Memory: 73.6 GB free 48.6 GB`."
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "The "
                  },
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://github.com/cypress-io/cypress-realworld-app",
                    "children": [
                      {
                        "type": "text",
                        "value": "Real World App"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": " project also executes its tests on "
                  },
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://docs.github.com/en/actions",
                    "children": [
                      {
                        "type": "text",
                        "value": "GitHub Actions"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": " using the "
                  },
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://github.com/cypress-io/github-action",
                    "children": [
                      {
                        "type": "text",
                        "value": "Cypress GitHub Action"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": " with the "
                  },
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners/about-github-hosted-runners",
                    "children": [
                      {
                        "type": "text",
                        "value": "standard Ubuntu GitHub-hosted runner for Public repositories"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": " providing 4 vCPUs and 16 GB of RAM. `cypress info` reports `System Memory: 16.8 GB free 15.5 GB` with CPUs reported as `AMD EPYC 7763 64-Core Processor`."
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Tip: if there are problems with longer specs, try splitting them into shorter ones."
          }
        ]
      },
      {
        "type": "heading",
        "depth": 3,
        "children": [
          {
            "type": "text",
            "value": "Dependencies"
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Cypress runs on many CI providers' virtual machine environments out-of-the-box without needing additional dependencies installed."
          }
        ]
      },
      {
        "type": "heading",
        "depth": 4,
        "children": [
          {
            "type": "text",
            "value": "Linux"
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "If you see a message about a missing dependency when you run Cypress in a Linux CI environment, then refer to the "
          },
          {
            "type": "link",
            "title": null,
            "url": "/llm/markdown/app/get-started/install-cypress.md#Linux-Prerequisites",
            "children": [
              {
                "type": "text",
                "value": "Linux Prerequisites"
              }
            ]
          },
          {
            "type": "text",
            "value": " lists for guidance."
          }
        ]
      },
      {
        "type": "heading",
        "depth": 3,
        "children": [
          {
            "type": "text",
            "value": "Caching"
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Cypress downloads its binary to the global system cache - on Linux that is `~/.cache/Cypress`. By ensuring this cache persists across builds you can save minutes off install time by preventing a large binary download."
          }
        ]
      },
      {
        "type": "heading",
        "depth": 4,
        "children": [
          {
            "type": "text",
            "value": "We recommend users:"
          }
        ]
      },
      {
        "type": "list",
        "ordered": false,
        "start": null,
        "spread": true,
        "children": [
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "Cache the `~/.cache` folder after running `npm install`, `yarn`, "
                  },
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://docs.npmjs.com/cli/ci",
                    "children": [
                      {
                        "type": "text",
                        "value": "`npm ci`"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": " or equivalents as demonstrated in the configs below."
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "Do not cache `node_modules` across builds. This bypasses more intelligent caching packaged with `npm` or `yarn`, and can cause issues with Cypress not downloading the Cypress binary on `npm install`."
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "If you are using `npm install` in your build process, consider "
                  },
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://blog.npmjs.org/post/171556855892/introducing-npm-ci-for-faster-more-reliable",
                    "children": [
                      {
                        "type": "text",
                        "value": "switching to `npm ci`"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": " and caching the `~/.npm` directory for a faster and more reliable build."
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "If you are using `yarn`, caching `~/.cache` will include both the `yarn` and Cypress caches. Consider using `yarn install --frozen-lockfile` as an "
                  },
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://docs.npmjs.com/cli/ci",
                    "children": [
                      {
                        "type": "text",
                        "value": "`npm ci`"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": " equivalent."
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "If you need to override the binary location for some reason, use "
                  },
                  {
                    "type": "link",
                    "title": null,
                    "url": "/llm/markdown/app/references/advanced-installation.md#Binary-cache",
                    "children": [
                      {
                        "type": "text",
                        "value": "CYPRESS_CACHE_FOLDER"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": " environment variable."
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "Make sure you are not restoring the previous cache using lax keys; then the Cypress binaries can \"snowball\"."
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Tip: you can find lots of CI examples with configured caching in our "
          },
          {
            "type": "link",
            "title": null,
            "url": "https://github.com/cypress-io/cypress-example-kitchensink#ci-status",
            "children": [
              {
                "type": "text",
                "value": "cypress-example-kitchensink"
              }
            ]
          },
          {
            "type": "text",
            "value": " repository."
          }
        ]
      },
      {
        "type": "heading",
        "depth": 3,
        "children": [
          {
            "type": "text",
            "value": "Environment variables"
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "You can set various environment variables to modify how Cypress runs."
          }
        ]
      },
      {
        "type": "heading",
        "depth": 4,
        "children": [
          {
            "type": "text",
            "value": "Configuration Values"
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "You can set any configuration value as an environment variable. This overrides values in the Cypress configuration."
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Typical use cases would be modifying things like:"
          }
        ]
      },
      {
        "type": "list",
        "ordered": false,
        "start": null,
        "spread": false,
        "children": [
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "`CYPRESS_BASE_URL`"
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "`CYPRESS_VIDEO`"
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "`CYPRESS_VIDEO_COMPRESSION`"
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "`CYPRESS_REPORTER`"
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "`CYPRESS_INSTALL_BINARY`"
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Refer to the "
          },
          {
            "type": "link",
            "title": null,
            "url": "/llm/markdown/app/references/configuration.md#Environment-Variables",
            "children": [
              {
                "type": "text",
                "value": "Environment Variables recipe"
              }
            ]
          },
          {
            "type": "text",
            "value": " for more examples."
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Record Key"
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "If you are "
          },
          {
            "type": "link",
            "title": null,
            "url": "#Record-tests",
            "children": [
              {
                "type": "text",
                "value": "recording your runs"
              }
            ]
          },
          {
            "type": "text",
            "value": " on a public project, you'll want to protect your Record Key. "
          },
          {
            "type": "link",
            "title": null,
            "url": "/llm/markdown/cloud/account-management/projects.md#Identification",
            "children": [
              {
                "type": "text",
                "value": "Learn why."
              }
            ]
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Instead of hard coding it into your run command like this:"
          }
        ]
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "cypress run --record --key abc-key-123"
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "You can set the record key as the environment variable, `CYPRESS_RECORD_KEY`, and we'll automatically use that value. You can now omit the `--key` flag when recording."
          }
        ]
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "cypress run --record"
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Typically you'd set this inside of your CI provider."
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "CircleCI Environment Variable"
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "TravisCI Environment Variable"
          }
        ]
      },
      {
        "type": "heading",
        "depth": 4,
        "children": [
          {
            "type": "text",
            "value": "Git information"
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Cypress assumes there is a `.git` folder and uses Git commands to get each property, like `git show -s --pretty=%B` to get the commit message."
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Under some environment setups (e.g. `docker`/`docker-compose`) if the `.git` directory is not available or mounted, you can pass all git related information under custom system environment variables."
          }
        ]
      },
      {
        "type": "list",
        "ordered": false,
        "start": null,
        "spread": false,
        "children": [
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "Branch: `COMMIT_INFO_BRANCH`"
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "Message: `COMMIT_INFO_MESSAGE`"
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "Author email: `COMMIT_INFO_EMAIL`"
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "Author: `COMMIT_INFO_AUTHOR`"
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "SHA: `COMMIT_INFO_SHA`"
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "Remote: `COMMIT_INFO_REMOTE`"
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "If the commit information is missing in the Cypress Cloud run then "
          },
          {
            "type": "link",
            "title": null,
            "url": "/llm/markdown/cloud/integrations/github.md",
            "children": [
              {
                "type": "text",
                "value": "GitHub Integration"
              }
            ]
          },
          {
            "type": "text",
            "value": " or other tasks might not work correctly. To see the relevant Cypress debug logs, set the system environment variable `DEBUG` on your CI machine and inspect the terminal output to see why the commit information is unavailable."
          }
        ]
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "DEBUG=cypress:server:record"
      },
      {
        "type": "heading",
        "depth": 4,
        "children": [
          {
            "type": "text",
            "value": "CI Build Information"
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "In some newer CI providers, Cypress can't map the system environment variables required to link back to builds or pull requests. In this case we provided users some environment variables to help pass that information along."
          }
        ]
      },
      {
        "type": "list",
        "ordered": false,
        "start": null,
        "spread": false,
        "children": [
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "Pull Request Id: `CYPRESS_PULL_REQUEST_ID`"
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "Pull Request URL: `CYPRESS_PULL_REQUEST_URL`"
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "Build URL: `CYPRESS_CI_BUILD_URL`"
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Setting these will allow links within the Cloud run to take you to the appropriate place."
          }
        ]
      },
      {
        "type": "heading",
        "depth": 4,
        "children": [
          {
            "type": "text",
            "value": "Custom Environment Variables"
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "You can also set custom environment variables for use in your tests. These enable your test code and browser to reference dynamic values."
          }
        ]
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "export \"EXTERNAL_API_SERVER=https://corp.acme.co\""
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "And then in your tests:"
          }
        ]
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "cy.request({  method: 'POST',  url: Cypress.expose('EXTERNAL_API_SERVER') + '/users/1',  body: {    foo: 'bar',    baz: 'quux',  },})"
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Refer to the dedicated "
          },
          {
            "type": "link",
            "title": null,
            "url": "/llm/markdown/app/guides/environment-variables.md",
            "children": [
              {
                "type": "text",
                "value": "Environment Variables & Secrets guide"
              }
            ]
          },
          {
            "type": "text",
            "value": " for more examples."
          }
        ]
      },
      {
        "type": "heading",
        "depth": 3,
        "children": [
          {
            "type": "text",
            "value": "Module API"
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Oftentimes it can be less complex to programmatically control and boot your servers with a Node script."
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "If you're using our "
          },
          {
            "type": "link",
            "title": null,
            "url": "/llm/markdown/app/references/module-api.md",
            "children": [
              {
                "type": "text",
                "value": "Module API"
              }
            ]
          },
          {
            "type": "text",
            "value": " then you can write a script that boots and then shuts down the server later. As a bonus, you can work with the results and do other things."
          }
        ]
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "// scripts/run-cypress-tests.jsconst cypress = require('cypress')const server = require('./lib/my-server')// start your serverreturn server.start().then(() => {  // kick off a cypress run  return cypress.run().then((results) => {    // stop your server when it's complete    return server.stop()  })})"
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "node scripts/run-cypress-tests.js"
      },
      {
        "type": "heading",
        "depth": 2,
        "children": [
          {
            "type": "text",
            "value": "Common problems and solutions"
          }
        ]
      },
      {
        "type": "heading",
        "depth": 3,
        "children": [
          {
            "type": "text",
            "value": "Missing binary"
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "When npm or yarn install the `cypress` package, a `postinstall` hook is executed that downloads the platform-specific Cypress binary. If the hook is skipped for any reason the Cypress binary will be missing (unless it was already cached)."
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "To better diagnose the error, add "
          },
          {
            "type": "link",
            "title": null,
            "url": "/llm/markdown/app/references/command-line.md#cypress-cache-command",
            "children": [
              {
                "type": "text",
                "value": "commands to get information about the Cypress cache"
              }
            ]
          },
          {
            "type": "text",
            "value": " to your CI setup. This will print where the binary is located and what versions are already present."
          }
        ]
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "npx cypress cache pathnpx cypress cache list"
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "If the required binary version is not found in the cache, you can try the following:"
          }
        ]
      },
      {
        "type": "list",
        "ordered": true,
        "start": 1,
        "spread": false,
        "children": [
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "Clean your CI's cache using your CI's settings to force a clean `npm install` on the next build."
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "Run the binary install yourself by adding the command `npx cypress install` to your CI script. If there is a binary already present, it should finish quickly."
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "type": "heading",
        "depth": 3,
        "children": [
          {
            "type": "text",
            "value": "Xvfb"
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "When running on Linux, Cypress needs an X11 server; otherwise it spawns its own X11 server during the test run. When running several Cypress instances in parallel, the spawning of multiple X11 servers at once can cause problems for some of them. In this case, you can separately start a single X11 server and pass the server's address to each Cypress instance using `DISPLAY` variable."
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "First, spawn the X11 server in the background at some port, for example `:99`. If you have installed `xvfb` on Linux or if you are using one of our Docker images from "
          },
          {
            "type": "link",
            "title": null,
            "url": "https://github.com/cypress-io/cypress-docker-images",
            "children": [
              {
                "type": "text",
                "value": "cypress-docker-images"
              }
            ]
          },
          {
            "type": "text",
            "value": ", the tools below should be available."
          }
        ]
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "Xvfb :99 &"
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Second, set the X11 address in a system environment variable"
          }
        ]
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "export DISPLAY=:99"
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Start Cypress as usual"
          }
        ]
      },
      {
        "type": "list",
        "ordered": false,
        "start": null,
        "spread": false,
        "children": [
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "npm"
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "yarn"
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "pnpm"
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "npx cypress run"
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "yarn cypress run"
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "pnpm cypress run"
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "After all tests across all Cypress instances finish, kill the Xvfb background process using `pkill`"
          }
        ]
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "pkill Xvfb"
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "In certain Linux environments, you may experience connection errors with your X11 server. In this case, you may need to start Xvfb with the following command:"
          }
        ]
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "Xvfb -screen 0 1024x768x24 :99 &"
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Cypress internally passes these Xvfb arguments, but if you are spawning your own Xvfb, you would need to pass these arguments. This is necessary to avoid using 8-bit color depth with Xvfb, which will prevent Chrome or Electron from crashing."
          }
        ]
      },
      {
        "type": "heading",
        "depth": 3,
        "children": [
          {
            "type": "text",
            "value": "Colors"
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "If you want colors to be disabled, you can pass the `NO_COLOR` environment variable to disable colors. You may want to do this if ASCII characters or colors are not properly formatted in your CI."
          }
        ]
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "NO_COLOR=1 cypress run"
      },
      {
        "type": "heading",
        "depth": 2,
        "children": [
          {
            "type": "text",
            "value": "See also"
          }
        ]
      },
      {
        "type": "list",
        "ordered": false,
        "start": null,
        "spread": false,
        "children": [
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://github.com/cypress-io/cypress-realworld-app",
                    "children": [
                      {
                        "type": "text",
                        "value": "Cypress Real World App"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": " runs parallelized CI jobs across multiple operating systems, browsers, and viewport sizes."
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://github.com/cypress-io/cypress-example-kitchensink#ci-status",
                    "children": [
                      {
                        "type": "text",
                        "value": "cypress-example-kitchensink"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": " is set up to run on multiple CI providers."
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "link",
                    "title": null,
                    "url": "/llm/markdown/cloud/features/test-replay.md",
                    "children": [
                      {
                        "type": "text",
                        "value": "Test Replay"
                      }
                    ]
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "link",
                    "title": null,
                    "url": "/llm/markdown/app/guides/cross-browser-testing.md",
                    "children": [
                      {
                        "type": "text",
                        "value": "Cross Browser Testing Guide"
                      }
                    ]
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://www.cypress.io/blog/2018/08/30/setting-up-bitbucket-pipelines-with-proper-caching-of-npm-and-cypress/",
                    "children": [
                      {
                        "type": "text",
                        "value": "Blog: Setting up Bitbucket Pipelines with proper caching of npm and Cypress"
                      }
                    ]
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://www.cypress.io/blog/2018/08/28/record-test-artifacts-from-any-ci/",
                    "children": [
                      {
                        "type": "text",
                        "value": "Blog: Record Test Artifacts from any Docker CI"
                      }
                    ]
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "link",
                    "title": null,
                    "url": "https://www.cypress.io/blog/2019/10/04/webcast-recording-continuous-integration-with-cypress/",
                    "children": [
                      {
                        "type": "text",
                        "value": "Continuous Integration with Cypress"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": " webinar covering TeamCity, Travis and CircleCI setups."
                  }
                ]
              }
            ]
          }
        ]
      }
    ]
  },
  "token_estimate": 3879
}