{"id":13489738,"url":"https://github.com/cypress-io/github-action","last_synced_at":"2026-01-28T16:03:50.445Z","repository":{"id":37548473,"uuid":"219649445","full_name":"cypress-io/github-action","owner":"cypress-io","description":"GitHub Action for running Cypress end-to-end \u0026 component tests","archived":false,"fork":false,"pushed_at":"2026-01-23T13:37:38.000Z","size":47816,"stargazers_count":1448,"open_issues_count":46,"forks_count":360,"subscribers_count":33,"default_branch":"master","last_synced_at":"2026-01-26T06:41:40.334Z","etag":null,"topics":["actions","cypress","cypress-io","github-actions"],"latest_commit_sha":null,"homepage":"https://on.cypress.io/guides/continuous-integration/github-actions","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cypress-io.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-11-05T03:26:52.000Z","updated_at":"2026-01-22T14:16:59.000Z","dependencies_parsed_at":"2023-01-11T17:21:19.719Z","dependency_job_id":"42c5c810-df11-400e-8a6f-029e0902df9a","html_url":"https://github.com/cypress-io/github-action","commit_stats":{"total_commits":925,"total_committers":44,"mean_commits":"21.022727272727273","dds":0.6605405405405406,"last_synced_commit":"6bd027c6a6edba06262cbcc029a149f8abeacf4f"},"previous_names":[],"tags_count":191,"template":false,"template_full_name":null,"purl":"pkg:github/cypress-io/github-action","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cypress-io%2Fgithub-action","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cypress-io%2Fgithub-action/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cypress-io%2Fgithub-action/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cypress-io%2Fgithub-action/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cypress-io","download_url":"https://codeload.github.com/cypress-io/github-action/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cypress-io%2Fgithub-action/sbom","scorecard":{"id":314574,"data":{"date":"2025-08-11","repo":{"name":"github.com/cypress-io/github-action","commit":"eb2de20e2763f75216dff067108f0fb02ad6f2cf"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5.6,"checks":[{"name":"Code-Review","score":10,"reason":"all changesets reviewed","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":10,"reason":"28 commit(s) and 13 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/add-issue-to-triage-board.yml:1","Warn: no topLevel permission defined: .github/workflows/check-dist.yml:1","Warn: no topLevel permission defined: .github/workflows/check-markdown.yml:1","Warn: no topLevel permission defined: .github/workflows/example-basic-pnpm.yml:1","Warn: no topLevel permission defined: .github/workflows/example-basic.yml:1","Warn: no topLevel permission defined: .github/workflows/example-build-artifacts.yml:1","Warn: no topLevel permission defined: .github/workflows/example-chrome-for-testing.yml:1","Warn: no topLevel permission defined: .github/workflows/example-chrome.yml:1","Warn: no topLevel permission defined: .github/workflows/example-component-test.yml:1","Warn: no topLevel permission defined: .github/workflows/example-config.yml:1","Warn: no topLevel permission defined: .github/workflows/example-cron.yml:1","Warn: no topLevel permission defined: .github/workflows/example-custom-ci-build-id.yml:1","Warn: no topLevel permission defined: .github/workflows/example-custom-command.yml:1","Warn: no topLevel permission defined: .github/workflows/example-debug.yml:1","Warn: no topLevel permission defined: .github/workflows/example-docker.yml:1","Warn: no topLevel permission defined: .github/workflows/example-edge.yml:1","Warn: no topLevel permission defined: .github/workflows/example-env.yml:1","Warn: no topLevel permission defined: .github/workflows/example-firefox.yml:1","Warn: no topLevel permission defined: .github/workflows/example-install-command.yml:1","Warn: no topLevel permission defined: .github/workflows/example-install-only.yml:1","Warn: no topLevel permission defined: .github/workflows/example-node-versions.yml:1","Warn: no topLevel permission defined: .github/workflows/example-quiet.yml:1","Warn: no topLevel permission defined: .github/workflows/example-recording.yml:1","Warn: no topLevel permission defined: .github/workflows/example-start-and-pnpm-workspaces.yml:1","Warn: no topLevel permission defined: .github/workflows/example-start-and-yarn-workspaces.yml:1","Warn: no topLevel permission defined: .github/workflows/example-start.yml:1","Warn: no topLevel permission defined: .github/workflows/example-wait-on.yml:1","Warn: no topLevel permission defined: .github/workflows/example-webpack.yml:1","Warn: no topLevel permission defined: .github/workflows/example-yarn-classic.yml:1","Warn: no topLevel permission defined: .github/workflows/example-yarn-modern-pnp.yml:1","Warn: no topLevel permission defined: .github/workflows/example-yarn-modern.yml:1","Warn: no topLevel permission defined: .github/workflows/main.yml:1","Warn: no topLevel permission defined: .github/workflows/triage_closed_issue_comment.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":1,"reason":"dependency not pinned by hash detected -- score normalized to 1","details":["Warn: third-party GitHubAction not pinned by hash: .github/workflows/add-issue-to-triage-board.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/add-issue-to-triage-board.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/check-dist.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/check-dist.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/check-dist.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/check-dist.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/check-markdown.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/check-markdown.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-basic-pnpm.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-basic-pnpm.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/example-basic-pnpm.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-basic-pnpm.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-basic-pnpm.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-basic-pnpm.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-basic.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-basic.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-build-artifacts.yml:46: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-build-artifacts.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-build-artifacts.yml:49: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-build-artifacts.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-build-artifacts.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-build-artifacts.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-build-artifacts.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-build-artifacts.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-chrome-for-testing.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-chrome-for-testing.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/example-chrome-for-testing.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-chrome-for-testing.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-chrome.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-chrome.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-chrome.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-chrome.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-chrome.yml:52: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-chrome.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-component-test.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-component-test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-config.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-config.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-config.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-config.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-config.yml:47: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-config.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-config.yml:66: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-config.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-cron.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-cron.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-custom-ci-build-id.yml:74: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-custom-ci-build-id.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-custom-ci-build-id.yml:105: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-custom-ci-build-id.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-custom-command.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-custom-command.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-debug.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-debug.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-debug.yml:39: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-debug.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-debug.yml:58: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-debug.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-docker.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-docker.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-edge.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-edge.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-env.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-env.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-env.yml:38: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-env.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-env.yml:55: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-env.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-env.yml:77: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-env.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-firefox.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-firefox.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-firefox.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-firefox.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-install-command.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-install-command.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-install-only.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-install-only.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-install-only.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-install-only.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-node-versions.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-node-versions.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-node-versions.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-node-versions.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-quiet.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-quiet.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-recording.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-recording.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-recording.yml:79: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-recording.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-start-and-pnpm-workspaces.yml:75: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-start-and-pnpm-workspaces.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-start-and-pnpm-workspaces.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-start-and-pnpm-workspaces.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-start-and-yarn-workspaces.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-start-and-yarn-workspaces.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-start-and-yarn-workspaces.yml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-start-and-yarn-workspaces.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-start.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-start.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-start.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-start.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-start.yml:39: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-start.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-wait-on.yml:43: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-wait-on.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-wait-on.yml:56: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-wait-on.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-wait-on.yml:83: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-wait-on.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-wait-on.yml:97: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-wait-on.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-wait-on.yml:163: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-wait-on.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-wait-on.yml:173: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-wait-on.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-wait-on.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-wait-on.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-wait-on.yml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-wait-on.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-wait-on.yml:69: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-wait-on.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-wait-on.yml:112: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-wait-on.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-wait-on.yml:124: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-wait-on.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-wait-on.yml:138: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-wait-on.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-wait-on.yml:150: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-wait-on.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-webpack.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-webpack.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-yarn-classic.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-yarn-classic.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-yarn-modern-pnp.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-yarn-modern-pnp.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-yarn-modern-pnp.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-yarn-modern-pnp.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-yarn-modern.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-yarn-modern.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/example-yarn-modern.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/example-yarn-modern.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/main.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/main.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:40: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/main.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/main.yml:44: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/main.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/triage_closed_issue_comment.yml:10: update your workflow using https://app.stepsecurity.io/secureworkflow/cypress-io/github-action/triage_closed_issue_comment.yml/master?enable=pin","Warn: npmCommand not pinned by hash: scripts/update-cypress-latest-npm.sh:31","Warn: npmCommand not pinned by hash: scripts/update-cypress-latest-yarn.sh:28","Warn: npmCommand not pinned by hash: scripts/update-cypress-latest-yarn.sh:84","Warn: npmCommand not pinned by hash: .github/workflows/example-install-only.yml:33","Warn: npmCommand not pinned by hash: .github/workflows/example-start-and-pnpm-workspaces.yml:79","Warn: npmCommand not pinned by hash: .github/workflows/example-start-and-pnpm-workspaces.yml:28","Warn: npmCommand not pinned by hash: .github/workflows/example-yarn-modern-pnp.yml:17","Warn: npmCommand not pinned by hash: .github/workflows/example-yarn-modern-pnp.yml:27","Warn: npmCommand not pinned by hash: .github/workflows/example-yarn-modern.yml:17","Warn: npmCommand not pinned by hash: .github/workflows/example-yarn-modern.yml:27","Info:   0 out of  71 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   5 third-party GitHubAction dependencies pinned","Info:   5 out of  15 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.md:0","Info: FSF or OSI recognized license: MIT License: LICENSE.md:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":7,"reason":"3 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-52f5-9888-hmc6","Warn: Project is vulnerable to: GHSA-76c9-3jph-rj3q","Warn: Project is vulnerable to: GHSA-xffm-g5w8-qvg7"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-17T23:55:32.028Z","repository_id":37548473,"created_at":"2025-08-17T23:55:32.028Z","updated_at":"2025-08-17T23:55:32.028Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28825155,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-27T18:44:20.126Z","status":"ssl_error","status_checked_at":"2026-01-27T18:44:09.161Z","response_time":168,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["actions","cypress","cypress-io","github-actions"],"created_at":"2024-07-31T19:00:34.232Z","updated_at":"2026-01-28T16:03:45.425Z","avatar_url":"https://github.com/cypress-io.png","language":"JavaScript","funding_links":[],"categories":["JavaScript","Community Resources","Testing","actions","五、按场景分类的实用Action"],"sub_categories":["Static Analysis","2. 代码质量与测试"],"readme":"# cypress-io/github-action [![Action status][ci-badge]][ci-workflow] [![cypress][cloud-badge]][cloud-project] [![renovate-app badge][renovate-badge]][renovate-bot]\n\n\u003e [Cypress](https://www.cypress.io) based `cypress-io/github-action` runs [End-to-End](#end-to-end-testing) or [Component](#component-testing) tests in [GitHub Actions](https://docs.github.com/en/actions/) Continuous Integration (CI) workflows, optionally [recording](#record-test-results-on-cypress-cloud) to [Cypress Cloud](https://on.cypress.io/cloud-introduction)\n\n## Introduction\n\nIn addition to running Cypress tests, the action includes [dependency installation](#installation), [caching](#caching) and more:\n\n| Function                                                                                                                                                                                                                                  | Benefits                                                                                                                                                                                                                                |\n| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| [Single-line call](#end-to-end-testing)                                                                                                                                                                                                   | Simplified use by installing dependencies and running Cypress in one line of workflow code                                                                                                                                              |\n| [Build app](#build-app), [Start server](#start-server) and [Wait for server](#wait-on) options                                                                                                                                            | Convenience of app, server and test coordination                                                                                                                                                                                        |\n| [cypress run](https://docs.cypress.io/app/references/command-line#cypress-run) CLI type options                                                                                                                                           | Improved readability with vertically listed workflow options                                                                                                                                                                            |\n| [Dependency installation](#installation) based on [npm](https://docs.npmjs.com/cli/configuring-npm/package-lock-json), [pnpm](https://pnpm.io/git#lockfiles) and [Yarn Classic](https://classic.yarnpkg.com/en/docs/yarn-lock) lock files | Reduced command complexity                                                                                                                                                                                                              |\n| [Caching](#caching) of Cypress binary and dependencies for [npm](https://docs.npmjs.com/cli/commands/npm-cache) and [Yarn Classic](https://classic.yarnpkg.com/lang/en/docs/cli/cache/) installations                                     | Reduced download bandwidth requirements                                                                                                                                                                                                 |\n| [Job summary](#job-summary-title)                                                                                                                                                                                                         | Fast access to results overview                                                                                                                                                                                                         |\n| [Docker](#docker-image) compatibility                                                                                                                                                                                                     | Improved independence from [GitHub-hosted runner image](https://docs.github.com/en/actions/using-github-hosted-runners/using-github-hosted-runners/about-github-hosted-runners) version changes. Fixed Docker environments can be used. |\n| [Recording](#record-test-results-on-cypress-cloud) to Cypress Cloud compatibility including [parallel](#parallel) execution                                                                                                               | Improved interpretation of test results through [Cypress Cloud](https://on.cypress.io/cloud-introduction)                                                                                                                               |\n| [Live examples](#examples)                                                                                                                                                                                                                | Speeds up introduction and troubleshooting                                                                                                                                                                                              |\n| [Yarn Modern](#yarn-modern) usage and cache examples                                                                                                                                                                                      | Extends usage beyond [Yarn Classic](https://classic.yarnpkg.com/)                                                                                                                                                                       |\n| [pnpm cache examples](#pnpm)                                                                                                                                                                                                              | Reduced download bandwidth requirements for [pnpm](https://pnpm.io/)                                                                                                                                                                    |\n| [Debug](#debugging) enabled                                                                                                                                                                                                               | Improved workflow troubleshooting                                                                                                                                                                                                       |\n| [Ping utility](#debugging-waiting-for-url-to-respond)                                                                                                                                                                                     | Improved server reachability troubleshooting                                                                                                                                                                                            |\n\nThe following examples demonstrate the actions' functions.\n\n## Examples\n\n- [End-to-End](#end-to-end-testing) testing\n- [Component](#component-testing) testing\n- Select [action version](#action-version)\n- Run tests in a given [browser](#browser)\n  - using [Chrome](#chrome)\n  - using [Firefox](#firefox)\n  - using [Edge](#edge)\n  - using [headed mode](#headed)\n- Using [Docker image](#docker-image)\n- Specify [environment variables](#env)\n- Run only some [spec files](#specs)\n- Test [project in subfolder](#project)\n- [Record results](#record-test-results-on-cypress-cloud) on Cypress Cloud\n  - Getting [Git information](#git-information) environment variables\n  - Getting [PR and URL](#automatic-pr-number-and-url-detection) automatically\n  - Overwriting [Merge SHA into SHA](#merge-sha-into-sha) message\n- Tag [recordings](#tag-recordings)\n- Specify [auto cancel](#auto-cancel-after-failures) after failures\n- Store [test artifacts](#artifacts) on GitHub\n- [Quiet output](#quiet-flag)\n- Set Cypress [config values](#config)\n- Use specific [config file](#config-file)\n- Run tests in [parallel](#parallel)\n- Combine [Component and E2E](#component-and-e2e-testing) testing\n- [Build app](#build-app) before running the tests\n- [Start server](#start-server) before running the tests\n- [Start multiple servers](#start-multiple-servers) before running the tests\n- [Wait for server](#wait-on) to respond before running the tests\n- Use [custom install command](#custom-install-command)\n- Use [command prefix](#command-prefix)\n- Use [custom test command](#custom-test-command)\n- Pass [custom build id](#custom-build-id) when recording to Cypress Cloud\n- Generate a [robust custom build id](#robust-custom-build-id) to allow re-running the workflow\n- Use different [working-directory](#working-directory)\n- Use [subfolders](#subfolders)\n- Use [pnpm](#pnpm)\n- Use [pnpm workspaces](#pnpm-workspaces)\n- Use [Yarn Classic](#yarn-classic)\n- Use [Yarn Modern](#yarn-modern)\n- Use [Yarn Plug'n'Play](#yarn-plugnplay)\n- Use [Yarn workspaces](#yarn-workspaces)\n- Use [custom cache key](#custom-cache-key)\n- Run tests on multiple [Node versions](#node-versions)\n- Split [install and tests](#split-install-and-tests) into separate jobs\n- Split [install and tests](#split-install-and-test-with-artifacts) with artifacts\n- Use [custom install commands](#custom-install)\n- Install [only Cypress](#install-cypress-only) to avoid installing all dependencies\n- Use [timeouts](#timeouts) to avoid hanging CI jobs\n- Print [Cypress info](#print-cypress-info) like detected browsers\n- Run [tests nightly](#nightly-tests) or on any schedule\n- Specify [job summary title](#job-summary-title)\n- Suppress [job summary](#suppress-job-summary)\n- [More examples](#more-examples)\n\nExamples contained in this repository, based on current Cypress versions, can be found in the [examples](./examples) directory.\n\nLive examples, such as [example-basic.yml](.github/workflows/example-basic.yml) are shown together with a status badge. Click on the status badge to read the source code of the workflow, for example\n\n[![End-to-End example](https://github.com/cypress-io/github-action/actions/workflows/example-basic.yml/badge.svg)](.github/workflows/example-basic.yml)\n\n**Note:** this package assumes that [cypress](https://www.npmjs.com/package/cypress) is declared as a development dependency in the [package.json](https://docs.npmjs.com/creating-a-package-json-file) file. The [cypress npm module](https://www.npmjs.com/package/cypress) is required to run Cypress via its [Module API](https://on.cypress.io/module-api).\n\n### End-to-End Testing\n\n```yml\nname: End-to-end tests\non: push\njobs:\n  cypress-run:\n    runs-on: ubuntu-24.04\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n      # Install npm dependencies, cache them correctly\n      # and run all Cypress tests\n      - name: Cypress run\n        uses: cypress-io/github-action@v6\n```\n\n[![End-to-End example](https://github.com/cypress-io/github-action/actions/workflows/example-basic.yml/badge.svg)](.github/workflows/example-basic.yml)\n\nThe workflow file [example-basic.yml](.github/workflows/example-basic.yml) shows how Cypress runs on GH Actions using Ubuntu (`22.04` and `24.04`), Windows, and macOS without additional OS dependencies necessary.\n\nThis workflow uses the default [test type](https://on.cypress.io/choosing-testing-type) of [End-to-End (E2E) Testing](https://on.cypress.io/app/core-concepts/testing-types#What-is-E2E-Testing). Alternatively, [Component Testing](https://on.cypress.io/app/core-concepts/testing-types#What-is-Component-Testing) can be utilized by referencing the [Component Testing](#component-testing) section below.\n\n### Component Testing\n\nTo use [Cypress Component Testing](https://on.cypress.io/component-testing) add `component: true`\n\n```yml\nname: Component tests\non: push\njobs:\n  cypress-run:\n    runs-on: ubuntu-24.04\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n      - name: Cypress run\n        uses: cypress-io/github-action@v6\n        with:\n          component: true\n```\n\n[![Component Testing example](https://github.com/cypress-io/github-action/actions/workflows/example-component-test.yml/badge.svg)](.github/workflows/example-component-test.yml)\n\nSee the example project [component-tests](examples/component-tests/) and the [example-component-test.yml](.github/workflows/example-component-test.yml) workflow for more details.\n\n### Action version\n\n**Best practice:**\n\nOur examples specify using branch [v6](https://github.com/cypress-io/github-action/tree/v6) which is the action's recommended major version:\n\n```yml\n- name: Cypress run\n  uses: cypress-io/github-action@v6\n```\n\nWhen using `cypress-io/github-action@v6` from your workflow file, you will automatically use the latest [tag](https://github.com/cypress-io/github-action/tags) from branch [v6](https://github.com/cypress-io/github-action/tree/v6).\n\nAlternatively, to mitigate unforeseen breaks, bind to a specific [tag](https://github.com/cypress-io/github-action/tags), for example:\n\n```yml\n- name: Cypress run\n  uses: cypress-io/github-action@v6.1.0\n```\n\nThe changes associated with each tag are shown under GitHub's [releases](https://github.com/cypress-io/github-action/releases) list. Refer also to the [CHANGELOG](./CHANGELOG.md) for an overview of major changes.\n\n### Browser\n\nSpecify the browser name or path with the `browser` parameter. The default browser, if none is specified, is the built-in [Electron browser](https://on.cypress.io/guides/guides/launching-browsers#Electron-Browser).\n\n### Chrome\n\n```yml\nname: Chrome\non: push\njobs:\n  chrome:\n    runs-on: ubuntu-24.04\n    name: E2E on Chrome\n    steps:\n      - uses: actions/checkout@v4\n      - uses: cypress-io/github-action@v6\n        with:\n          browser: chrome\n```\n\n[![Chrome example](https://github.com/cypress-io/github-action/actions/workflows/example-chrome.yml/badge.svg)](.github/workflows/example-chrome.yml)\n\n### Firefox\n\n```yml\nname: Firefox\non: push\njobs:\n  firefox:\n    runs-on: ubuntu-24.04\n    name: E2E on Firefox\n    steps:\n      - uses: actions/checkout@v4\n      - uses: cypress-io/github-action@v6\n        with:\n          browser: firefox\n```\n\n[![Firefox example](https://github.com/cypress-io/github-action/actions/workflows/example-firefox.yml/badge.svg)](.github/workflows/example-firefox.yml)\n\n### Edge\n\n```yml\nname: Edge\non: push\njobs:\n  edge:\n    runs-on: ubuntu-24.04\n    name: E2E on Edge\n    steps:\n      - uses: actions/checkout@v4\n      - uses: cypress-io/github-action@v6\n        with:\n          browser: edge\n```\n\n[![Edge example](https://github.com/cypress-io/github-action/actions/workflows/example-edge.yml/badge.svg)](.github/workflows/example-edge.yml)\n\n### Headed\n\nRun the browser in headed mode - as of Cypress v8.0 the `cypress run` command executes tests in `headless` mode by default\n\n```yml\nname: Chrome headed\non: push\njobs:\n  cypress-run:\n    runs-on: ubuntu-24.04\n    steps:\n      - uses: actions/checkout@v4\n      - uses: cypress-io/github-action@v6\n        with:\n          browser: chrome\n          headed: true\n```\n\n### Docker image\n\nYou can run the action in a Docker container.\n\n```yml\nname: Test in Docker\non: push\njobs:\n  cypress-run:\n    runs-on: ubuntu-24.04\n    # Cypress Docker image from https://hub.docker.com/r/cypress\n    # with browsers pre-installed\n    container:\n      image: cypress/browsers:latest\n      options: --user 1001\n    steps:\n      - uses: actions/checkout@v4\n      - uses: cypress-io/github-action@v6\n        with:\n          browser: chrome\n```\n\nReplace the `latest` tag with a specific version image tag from [`cypress/browsers` on Docker Hub](https://hub.docker.com/r/cypress/browsers/tags) to avoid breaking changes when new images are released (especially when they include new major versions of Node.js).\n\nInclude `options: --user 1001` to avoid permissions issues.\n\nWhen using [cypress/included](https://github.com/cypress-io/cypress-docker-images/tree/master/included) Docker images, set the environment variable `CYPRESS_INSTALL_BINARY=0` to suppress saving the Cypress binary cache, otherwise cache restore errors may occur. The example below shows how to do this:\n\n```yml\nname: Test with Docker cypress/included\non: push\njobs:\n  cypress-run:\n    runs-on: ubuntu-24.04\n    container:\n      # Cypress Docker image from https://hub.docker.com/r/cypress/included\n      # with Cypress globally pre-installed\n      image: cypress/included:latest\n      options: --user 1001\n    steps:\n      - uses: actions/checkout@v4\n      - uses: cypress-io/github-action@v6\n        with:\n          browser: chrome\n        env:\n          CYPRESS_INSTALL_BINARY: 0\n```\n\nRefer to [cypress-io/cypress-docker-images](https://github.com/cypress-io/cypress-docker-images) for further information about using Cypress Docker images. Cypress offers the [Cypress Docker Factory](https://github.com/cypress-io/cypress-docker-images/tree/master/factory) to generate additional Docker images with selected components and versions.\n\n[![Docker example](https://github.com/cypress-io/github-action/actions/workflows/example-docker.yml/badge.svg)](.github/workflows/example-docker.yml)\n\n### Env\n\nSpecify the env argument with `env` parameter\n\n```yml\nname: Cypress tests\non: push\njobs:\n  cypress-run:\n    runs-on: ubuntu-24.04\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n\n      - name: Cypress run with env\n        uses: cypress-io/github-action@v6\n        with:\n          env: host=api.dev.local,port=4222\n```\n\nWhen passing the environment variables this way, unfortunately due to GitHub Actions syntax, the variables should be listed in a single line, which can be hard to read. As an alternative, you can use the step's `env` block where every variable can be set on its own line. In this case, you should prefix every variable with `CYPRESS_` because such variables [are loaded by Cypress automatically](https://on.cypress.io/environment-variables). The above code example is equivalent to:\n\n```yml\nname: Cypress tests\non: push\njobs:\n  cypress-run:\n    runs-on: ubuntu-24.04\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n\n      - name: Cypress run with env\n        uses: cypress-io/github-action@v6\n        env:\n          CYPRESS_host: api.dev.local\n          CYPRESS_port: 4222\n```\n\nFor more examples, see the workflows below, using environment variables for [recording](#record-test-results-on-cypress-cloud).\n\n[![Env example](https://github.com/cypress-io/github-action/actions/workflows/example-env.yml/badge.svg)](.github/workflows/example-env.yml)\n\n### Specs\n\nSpecify the [spec files to run](https://docs.cypress.io/guides/guides/command-line.html#cypress-run-spec-lt-spec-gt) with `spec` parameter\n\n```yml\nname: Cypress tests\non: push\njobs:\n  cypress-run:\n    name: Cypress run\n    runs-on: ubuntu-24.04\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n\n      - name: Cypress run\n        uses: cypress-io/github-action@v6\n        with:\n          spec: cypress/e2e/spec1.cy.js\n```\n\nYou can pass multiple specs and wild card patterns using multi-line parameter, see [example-config.yml](.github/workflows/example-config.yml):\n\n```yml\nspec: |\n  cypress/e2e/spec-a.cy.js\n  cypress/**/*-b.cy.js\n```\n\nFor more information, visit [the Cypress command-line docs](https://on.cypress.io/command-line#cypress-run-env-lt-env-gt).\n\n### Project\n\nSpecify the [project to run](https://docs.cypress.io/guides/guides/command-line.html#cypress-run-project-lt-project-path-gt) with `project` parameter\n\n```yml\nname: Cypress tests\non: push\njobs:\n  cypress-run:\n    name: Cypress run\n    runs-on: ubuntu-24.04\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n      - name: Cypress run\n        uses: cypress-io/github-action@v6\n        with:\n          project: ./some/nested/folder\n```\n\nFor more information, visit [the Cypress command-line docs](https://on.cypress.io/command-line#cypress-run-project-lt-project-path-gt).\n\n### Record test results on Cypress Cloud\n\nBy setting the parameter `record` to `true`, you can record your test results into [Cypress Cloud](https://on.cypress.io/cloud-introduction). Read the [Cypress Cloud setup](https://on.cypress.io/cloud/get-started/setup) documentation to learn how to sign up to Cypress Cloud, to create and set up a [Cloud project](https://on.cypress.io/cloud/account-management/projects) to get the required `projectId` and record key for recording.\n\n- The `projectId` can either be stored in the [Cypress Configuration File](https://on.cypress.io/app/references/configuration#Configuration-File) or passed to the action as an environment variable `CYPRESS_PROJECT_ID`. In the example below, it is retrieved from a [GitHub secret](https://docs.github.com/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions) variable.\n\n- The record key is passed to the action as an environment variable `CYPRESS_RECORD_KEY`. We recommend you treat this value as sensitive and store it as a [GitHub secret](https://docs.github.com/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions) variable, so that access is restricted.\n\n- We recommend passing the `GITHUB_TOKEN` secret (created by the GH Action automatically) as an environment variable. This will allow correctly identifying every build and avoid confusion when re-running a build.\n\n```yml\nname: Cypress tests\non: push\njobs:\n  cypress-run:\n    name: Cypress run\n    runs-on: ubuntu-24.04\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n\n      - name: Cypress run\n        uses: cypress-io/github-action@v6\n        with:\n          record: true\n        env:\n          # pass the Cypress Cloud project ID as an environment variable or store it in the Cypress configuration file\n          CYPRESS_PROJECT_ID: ${{ secrets.EXAMPLE_PROJECT_ID }}\n          # pass the Cypress Cloud record key as an environment variable\n          CYPRESS_RECORD_KEY: ${{ secrets.EXAMPLE_RECORDING_KEY }}\n          # pass GitHub token to allow accurately detecting a build vs a re-run build\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n```\n\n[![recording example](https://github.com/cypress-io/github-action/actions/workflows/example-recording.yml/badge.svg)](.github/workflows/example-recording.yml)\n\n### Git information\n\nCypress uses the [@cypress/commit-info](https://github.com/cypress-io/commit-info) package to associate Git details (branch, commit message, author) with each run. It typically uses Git commands, expecting a .git folder. In Docker or similar environments where .git is absent, or if you need different data in the Cypress Cloud, Git information can be passed via custom environment variables.\n\n```yml\nname: Cypress tests\non: push\njobs:\n  cypress-run:\n    name: Cypress run\n    runs-on: ubuntu-24.04\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n      - name: Cypress run\n        uses: cypress-io/github-action@v6\n        with:\n          record: true\n        env:\n          # Get the short ref name of the branch that triggered the workflow run\n          COMMIT_INFO_BRANCH: ${{ github.ref_name }}\n          CYPRESS_RECORD_KEY: ${{ secrets.EXAMPLE_RECORDING_KEY }}\n```\n\nPlease refer to the [Cypress Cloud Git information environment variables](https://on.cypress.io/guides/continuous-integration/introduction#Git-information) section in our documentation for more examples.\n\nPlease refer to the [default GitHub environment variables](https://docs.github.com/en/actions/learn-github-actions/variables#default-environment-variables) for additional GitHub examples.\n\n### Automatic PR number and URL detection\n\nWhen recording runs to Cypress Cloud, the PR number and URL can be automatically detected if you pass `GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}`\nvia the workflow `env`. When set, this value enables the Action to perform additional logic that grabs the related PR number and URL (if they\nexist) and sets them in the environment variables `CYPRESS_PULL_REQUEST_ID` and `CYPRESS_PULL_REQUEST_URL`, respectively.\n\n- See Cypress' documentation on [CI Build Information](https://on.cypress.io/guides/continuous-integration/introduction#CI-Build-Information)\n\nExample workflow using the variables:\n\n```yml\nname: Example echo PR number and URL\non: push\njobs:\n  cypress-run:\n    runs-on: ubuntu-24.04\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n      - name: Cypress run\n        uses: cypress-io/github-action@v6\n        with:\n          record: true\n      - run: echo \"PR number is $CYPRESS_PULL_REQUEST_ID\"\n      - run: echo \"PR URL is $CYPRESS_PULL_REQUEST_URL\"\n    env:\n      CYPRESS_RECORD_KEY: ${{ secrets.EXAMPLE_RECORDING_KEY }}\n      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n```\n\n#### Triggering event: `pull_request`/`pull_request_target`\n\nFor either of these events, we set `CYPRESS_PULL_REQUEST_ID` and `CYPRESS_PULL_REQUEST_URL` to that of the PR number and URL, respectively, of the\nPR that triggered the workflow.\n\n#### Triggering event: `push`\n\nWhen a commit on a branch without a PR is made, the Cypress GitHub Action checks to see if the commit that triggered the workflow has a\nrelated PR. If the commit exists in any other PRs, it's considered a related PR. When there are related PRs, we grab the first related PR\nand use that PR's number and URL for `CYPRESS_PULL_REQUEST_ID` and `CYPRESS_PULL_REQUEST_URL`, respectively.\n\nIf no related PR is detected, `CYPRESS_PULL_REQUEST_ID` and `CYPRESS_PULL_REQUEST_URL` will be undefined.\n\n### Merge SHA into SHA\n\nWe recommend using the action with `on: push` rather than `on: pull_request` or `on: merge_group` for more accurate commit information in Cypress Cloud. When running on pull_request or merge_group, the commit message defaults to \"merge SHA into SHA\". You can overwrite the commit message sent to Cypress Cloud by setting an environment variable.\n\n```yml\nname: Cypress tests\non: push\njobs:\n  cypress-run:\n    name: Cypress run\n    runs-on: ubuntu-24.04\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n\n      - name: Cypress run\n        uses: cypress-io/github-action@v6\n        with:\n          record: true\n        env:\n          # overwrite commit message sent to Cypress Cloud\n          COMMIT_INFO_MESSAGE: ${{github.event.pull_request.title}}\n          # re-enable PR comment bot\n          COMMIT_INFO_SHA: ${{github.event.pull_request.head.sha}}\n          CYPRESS_RECORD_KEY: ${{ secrets.EXAMPLE_RECORDING_KEY }}\n```\n\nSee [issue 124](https://github.com/cypress-io/github-action/issues/124#issuecomment-1076826988) for details.\n\n### Tag recordings\n\nYou can pass a single or multiple tags when recording a run. For example\n\n```yml\nname: tags\non: push\njobs:\n  cypress-run:\n    runs-on: ubuntu-24.04\n    # let's make sure our \"app\" works on several versions of Node\n    strategy:\n      matrix:\n        node: [20, 22, 23, 24]\n    name: E2E on Node v${{ matrix.node }}\n    steps:\n      - name: Setup Node\n        uses: actions/setup-node@v4\n        with:\n          node-version: ${{ matrix.node }}\n      - run: node -v\n\n      - name: Checkout\n        uses: actions/checkout@v4\n\n      - name: Cypress run\n        uses: cypress-io/github-action@v6\n        with:\n          record: true\n          tag: node-${{ matrix.node }}\n        env:\n          CYPRESS_RECORD_KEY: ${{ secrets.EXAMPLE_RECORDING_KEY }}\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n```\n\nThe recording will have tags as labels on the run.\n\n![Tags](images/tags.png)\n\nYou can pass multiple tags using commas like `tag: node-22,nightly,staging`.\n\n### Auto cancel after failures\n\nSpecify the number of failed tests that will cancel a run when using the [Cypress Cloud Auto Cancellation](https://docs.cypress.io/cloud/features/smart-orchestration/run-cancellation) feature.\n\nThis feature requires Cypress 12.6.0 or later and a [Cypress Cloud Business or Enterprise](https://www.cypress.io/cloud/) account.\n\n```yml\nname: Cypress E2E Tests\non: push\njobs:\n  cypress-run:\n    runs-on: ubuntu-24.04\n    name: E2E\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n\n      - name: Cypress run\n        uses: cypress-io/github-action@v6\n        with:\n          record: true\n          # Cancel the run after 2 failed tests\n          auto-cancel-after-failures: 2\n        env:\n          CYPRESS_RECORD_KEY: ${{ secrets.EXAMPLE_RECORDING_KEY }}\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n```\n\nSee [Auto Cancellation](https://docs.cypress.io/cloud/features/smart-orchestration/run-cancellation) for more information.\n\n### Artifacts\n\nIf you don't record the test run on Cypress Cloud, you can still store generated videos and screenshots as CI artifacts. See the workflow example below.\n\n```yml\nname: Artifacts\non: push\njobs:\n  cypress-run:\n    runs-on: ubuntu-24.04\n    name: Artifacts\n    steps:\n      - uses: actions/checkout@v4\n      - uses: cypress-io/github-action@v6\n      # after the test run completes store videos and any screenshots\n      - uses: actions/upload-artifact@v4\n        # add the line below to store screenshots only on failures\n        # if: failure()\n        with:\n          name: cypress-screenshots\n          path: cypress/screenshots\n          if-no-files-found: ignore # 'warn' or 'error' are also available, defaults to `warn`\n      - uses: actions/upload-artifact@v4\n        with:\n          name: cypress-videos\n          path: cypress/videos\n          if-no-files-found: ignore # 'warn' or 'error' are also available, defaults to `warn`\n```\n\n### Quiet flag\n\nYou can provide `quiet` flag for cypress run to silence any Cypress specific output from stdout\n\n```yml\nname: example-quiet\non: push\njobs:\n  cypress-run:\n    runs-on: ubuntu-24.04\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n      # Install npm dependencies, cache them correctly\n      # and run all Cypress tests with `quiet` parameter\n      - name: Cypress run\n        uses: ./\n        with:\n          working-directory: examples/quiet\n          quiet: true\n```\n\n[![example-quiet](https://github.com/cypress-io/github-action/actions/workflows/example-quiet.yml/badge.svg)](.github/workflows/example-quiet.yml)\n\n### Config\n\nSpecify [configuration](https://docs.cypress.io/guides/references/configuration.html) values with `config` parameter\n\n```yml\nname: Cypress tests\non: push\njobs:\n  cypress-run:\n    name: Cypress run\n    runs-on: ubuntu-24.04\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n\n      - name: Cypress run\n        uses: cypress-io/github-action@v6\n        with:\n          config: pageLoadTimeout=100000,baseUrl=http://localhost:3000\n```\n\n[![example-config](https://github.com/cypress-io/github-action/actions/workflows/example-config.yml/badge.svg)](.github/workflows/example-config.yml)\n\n### Config File\n\nSpecify the path to your [Configuration File](https://on.cypress.io/guides/references/configuration#Configuration-File) with `config-file` parameter\n\n```yml\nname: Cypress tests\non: push\njobs:\n  cypress-run:\n    name: Cypress run\n    runs-on: ubuntu-24.04\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n\n      - name: Cypress run\n        uses: cypress-io/github-action@v6\n        with:\n          config-file: cypress.config-alternate.js\n```\n\n[![example-config](https://github.com/cypress-io/github-action/actions/workflows/example-config.yml/badge.svg)](.github/workflows/example-config.yml)\n\n### Parallel\n\n**Note:** Cypress parallelization requires a [Cypress Cloud](https://on.cypress.io/cloud-introduction) account.\n\nYou can spin multiple containers running in parallel using `strategy: matrix` argument. Just add more dummy items to the `containers: [1, 2, ...]` array to spin more free or paid containers. Then use `record` and `parallel` parameters to [load balance tests](https://on.cypress.io/parallelization).\n\n```yml\nname: Parallel Cypress Tests\non: push\njobs:\n  test:\n    name: Cypress run\n    runs-on: ubuntu-24.04\n    strategy:\n      # when one test fails, DO NOT cancel the other\n      # containers, because this will kill Cypress processes\n      # leaving Cypress Cloud hanging ...\n      # https://github.com/cypress-io/github-action/issues/48\n      fail-fast: false\n      matrix:\n        # run 3 copies of the current job in parallel\n        containers: [1, 2, 3]\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n\n      # because of \"record\" and \"parallel\" parameters\n      # these containers will load balance all found tests among themselves\n      - name: Cypress run\n        uses: cypress-io/github-action@v6\n        with:\n          record: true\n          parallel: true\n          group: 'Actions example'\n        env:\n          # pass the Cypress Cloud record key as an environment variable\n          CYPRESS_RECORD_KEY: ${{ secrets.EXAMPLE_RECORDING_KEY }}\n          # Recommended: pass the GitHub token lets this action correctly\n          # determine the unique run id necessary to re-run the checks\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n```\n\n![Parallel run](images/parallel.png)\n\nThe Cypress GH Action does not spawn or create any additional containers - it only links the multiple containers spawned using the matrix strategy into a single logical Cypress Cloud run where it splits the specs amongst the machines. See the [Cypress Cloud Smart Orchestration](https://docs.cypress.io/cloud/features/smart-orchestration/overview/) guide for a detailed explanation.\n\nIf you use the GitHub Actions facility for [Re-running workflows and jobs](https://docs.github.com/en/actions/managing-workflow-runs/re-running-workflows-and-jobs), note that [Re-running failed jobs in a workflow](https://docs.github.com/en/actions/managing-workflow-runs/re-running-workflows-and-jobs?tool=webui#re-running-failed-jobs-in-a-workflow) is not suited for use with parallel recording into Cypress Cloud. Re-running failed jobs in this situation does not simply re-run failed Cypress tests. Instead it re-runs **all** Cypress tests, load-balanced over the containers with failed jobs.\n\nTo optimize runs when there are failing tests present, refer to optional [Cypress Cloud Smart Orchestration](https://docs.cypress.io/cloud/features/smart-orchestration/overview/) Premium features:\n\n- [Spec Prioritization](https://docs.cypress.io/cloud/features/smart-orchestration/spec-prioritization)\n- [Auto Cancellation](https://docs.cypress.io/guides/cloud/smart-orchestration/run-cancellation). See also [Auto cancel after failures](#auto-cancel-after-failures) for details of how to set this option in a Cypress GitHub Action workflow.\n\nDuring staged rollout of a new GitHub-hosted runner version, GitHub may provide a mixture of current and new image versions used by the container matrix. It is recommended to use a [Docker image](#docker-image) in the parallel job run which avoids any Cypress Cloud errors due to browser major version mismatch from the two different image versions. A [Docker image](#docker-image) is not necessary if testing against the default built-in Electron browser because this browser version is fixed by the Cypress version in use and it is unaffected by any GitHub runner image rollout.\n\n### Component and E2E Testing\n\n[Component Testing](https://on.cypress.io/app/core-concepts/testing-types#What-is-Component-Testing) and [End-to-End (E2E) Testing](https://on.cypress.io/app/core-concepts/testing-types#What-is-E2E-Testing) types can be combined in the same job using separate steps\n\n```yml\n- name: Run E2E tests\n  uses: cypress-io/github-action@v6\n\n- name: Run Component Testing\n  uses: cypress-io/github-action@v6\n  with:\n    # we have already installed everything\n    install: false\n    component: true\n```\n\nSee the example project [component-test](examples/component-tests/) and the [example-component-test.yml](.github/workflows/example-component-test.yml) workflow for more details.\n\n### Build app\n\nYou can run a build step before starting tests\n\n```yml\nname: Build\non: push\njobs:\n  cypress-run:\n    runs-on: ubuntu-24.04\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n      - name: Cypress run\n        uses: cypress-io/github-action@v6\n        with:\n          build: npm run build\n```\n\n### Start server\n\nIf your tests run against a local server, use the `start` parameter to start your server. The server will run in the background.\n\n```yml\nname: With server\non: push\njobs:\n  cypress-run:\n    runs-on: ubuntu-24.04\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n      - name: Cypress run\n        uses: cypress-io/github-action@v6\n        with:\n          start: npm start\n```\n\n**Caution:** use the `start` parameter only to start a server, not to run Cypress, otherwise tests may be run twice. The action runs Cypress tests by default, unless the parameter `runTests` is set to `false`.\n\n**Note:** sometimes on Windows you need to run a different start command. You can use the `start-windows` parameter for this.\n\n```yml\nname: With server\non: push\njobs:\n  cypress-run:\n    runs-on: ubuntu-24.04\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n      - name: Cypress run\n        uses: cypress-io/github-action@v6\n        with:\n          # Linux and macOS\n          start: npm start\n          # Takes precedences on Windows\n          start-windows: npm run start:windows:server\n```\n\n[![start example](https://github.com/cypress-io/github-action/actions/workflows/example-start.yml/badge.svg)](.github/workflows/example-start.yml)\n\n**Note:** A server continues to run until the end of the GitHub workflow job that started it. At the end of the job the GitHub workflow runner executes a \"Complete job\" phase automatically where it terminates any server processes which are still running.\n\n### Start multiple servers\n\nYou can start multiple server processes. For example, if you have an API to start using `npm run api` and the web server to start using `npm run web` you can put those commands in `start` using comma separation.\n\n```yml\nname: With servers\non: push\njobs:\n  cypress-run:\n    runs-on: ubuntu-24.04\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n      - name: Cypress run\n        uses: cypress-io/github-action@v6\n        with:\n          start: npm run api, npm run web\n```\n\nYou can place the start commands in separate lines\n\n```yml\nwith:\n  start: |\n    npm run api\n    npm run web\n```\n\n[![start example](https://github.com/cypress-io/github-action/actions/workflows/example-start.yml/badge.svg)](.github/workflows/example-start.yml)\n\n### Wait-on\n\nIf you are starting a local server and it takes a while to start, you can add a parameter `wait-on` and pass url to wait for the server to respond.\n\n```yml\nname: After server responds\non: push\njobs:\n  cypress-run:\n    runs-on: ubuntu-24.04\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n      - name: Cypress run\n        uses: cypress-io/github-action@v6\n        with:\n          start: npm start\n          # quote the url to be safe against YML parsing surprises\n          wait-on: 'http://localhost:8080'\n```\n\n[![wait-on example](https://github.com/cypress-io/github-action/actions/workflows/example-wait-on.yml/badge.svg)](.github/workflows/example-wait-on.yml)\n\n[![Webpack Dev Server example](https://github.com/cypress-io/github-action/actions/workflows/example-webpack.yml/badge.svg)](.github/workflows/example-webpack.yml) (also uses `wait-on`)\n\nBy default, `wait-on` will retry for 60 seconds. You can pass a custom timeout in seconds using `wait-on-timeout`.\n\n```yml\n- uses: cypress-io/github-action@v6\n  with:\n    start: npm start\n    wait-on: 'http://localhost:8080/status'\n    # wait for 2 minutes for the server to respond\n    wait-on-timeout: 120\n```\n\nYou can wait for multiple URLs to respond by separating urls with a comma\n\n```yml\n- uses: cypress-io/github-action@v6\n  with:\n    # API runs on port 3050\n    # Web server runs on port 8080\n    start: npm run api, npm run web\n    # wait for all services to respond\n    wait-on: 'http://localhost:3050, http://localhost:8080'\n```\n\nThe action will wait for the first url to respond, then will check the second url, and so on.\n\nYou can even use your own command (usually by using `npm`, `yarn`, `npx`) to wait for the server to respond. For example, if you want to use the [wait-on](https://github.com/jeffbski/wait-on) utility to ping the server and run the Cypress tests after the server responds:\n\n```yml\n- uses: cypress-io/github-action@v6\n  with:\n    start: npm start\n    wait-on: 'npx wait-on --timeout 60000 http://localhost:3000'\n```\n\nSee [example-wait-on.yml](.github/workflows/example-wait-on.yml) workflow file.\n\nIf this action times out waiting for the server to respond, please see [Debugging](#debugging) section in this README file.\n\n### Custom install command\n\nThe action installs dependencies based on a package manager lock file using default commands described in the [Installation](#installation) section below. If you want to overwrite the default install command you can use the `install-command` option:\n\n```yml\n- uses: cypress-io/github-action@v6\n  with:\n    install-command: yarn --frozen-lockfile --silent\n```\n\nSee [example-install-command.yml](.github/workflows/example-install-command.yml) workflow file.\n\nIf you do not commit a lock file to the repository, you cannot use the action to install dependencies. In this case you must ensure that dependencies are installed before using the action, and you must use the action option setting `install: false`.\n\n### Command prefix\n\nYou can prefix a test command using the `command-prefix` parameter. This is useful, for example, when running [BrowserStack Percy](https://www.browserstack.com/docs/percy/integrate/cypress), which requires the test command to be prefixed with `percy exec --`. When this parameter is used, the action constructs and executes a CLI command using [npx](https://docs.npmjs.com/cli/v11/commands/npx) in the following form:\n\n```shell\nnpx \u003ccommand-prefix\u003e cypress run \u003ccli run options\u003e\n```\n\nwhere the `\u003ccommand-prefix\u003e` is the literal string value from the `command-prefix` parameter and `\u003ccli run options\u003e` are put together from action parameters such as the value of the `browser` parameter. The complete constructed command is shown in the logs. For the example below, this is shown as:\n\n```text\nCypress test command: npx percy exec -- npx cypress run --browser chrome\n```\n\nSince `command-prefix` is run using `npx`, it is compatible with [npm](https://docs.npmjs.com/cli/v11/) and [Yarn Classic](https://classic.yarnpkg.com/). It may also be used with [pnpm](https://pnpm.io/settings#nodelinker) and [Yarn Modern](https://yarnpkg.com/configuration/yarnrc#nodeLinker) when they are configured for `nodeLinker` compatibility with the `node_modules` directory structure of npm. An alternative to using `command-prefix` is to pass a complete [command](#custom-test-command) parameter instead, including the exact command to be passed to the CLI.\n\n```yml\nname: Visual\non: push\njobs:\n  e2e:\n    runs-on: ubuntu-24.04\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n      - name: Cypress run\n        uses: cypress-io/github-action@v6\n        with:\n          command-prefix: 'percy exec -- npx'\n          browser: chrome\n```\n\nIf `command-prefix` is used, then no [job summary](#job-summary-title) is produced, since it runs Cypress with a CLI [cypress run](https://on.cypress.io/app/references/command-line#cypress-run) command instead of using the [Cypress Module API](https://docs.cypress.io/app/references/module-api). The `command` parameter overrides the `command-prefix` parameter, preventing these two parameters from being used together.\n\n### Custom test command\n\nThe `command` parameter executes a CLI command using the GitHub [@actions/exec](https://github.com/actions/toolkit/tree/main/packages/exec) action.\n\nThis parameter is useful for special test cases, for example:\n\n- in the project [examples/custom-command](./examples/custom-command/), a JavaScript [examples/custom-command/index.js](./examples/custom-command/index.js) is run with `node .` through `command: npm run custom-test`\n- in the workflow [example-yarn-modern-pnp.yml](.github/workflows/example-yarn-modern-pnp.yml) Yarn Modern with Plug'n'Play is run with `command: yarn run --binaries-only cypress run` since [Yarn Plug'n'Play](#yarn-plugnplay) is not natively supported by the action.\n\nIf you don't have a special case and you just need to convert a `cypress run` CLI command to use the Cypress GitHub Action, refer to the section [Migrating from CLI command](#migrating-from-cli-command) which explains how to map CLI options to equivalent action parameters, avoiding the need for the `command` parameter in most cases.\n\nThere are some parameters that cannot be used together with the `command` parameter, and these are ignored. The parameters include action input parameters listed in the table [CLI Run Option / Action Parameter](#cli-run-option--action-parameter), the [publish-summary](#suppress-job-summary), [summary-title](#job-summary-title) and [command-prefix](#command-prefix). If any such parameters are passed to the action, a warning message appears in the logs that the parameters have been ignored.\n\nCorrect example snippet:\n\n```yml\nsteps:\n  - uses: actions/checkout@v4\n  - uses: cypress-io/github-action@v6\n    with:\n      command: npm run custom-test\n```\n\n[![command example](https://github.com/cypress-io/github-action/actions/workflows/example-custom-command.yml/badge.svg)](.github/workflows/example-custom-command.yml)\n\n### Custom build id\n\nYou can overwrite [`ci-build-id`](https://on.cypress.io/parallelization#Linking-CI-machines-for-parallelization-or-grouping) used to link separate machines running tests into a single parallel run.\n\n```yml\nname: Parallel\non: push\njobs:\n  test:\n    runs-on: ubuntu-24.04\n    strategy:\n      matrix:\n        # run 3 copies of the current job in parallel\n        containers: [1, 2, 3]\n    steps:\n      - uses: actions/checkout@v4\n      - uses: cypress-io/github-action@v6\n        with:\n          record: true\n          parallel: true\n          group: 'Actions example'\n          ci-build-id: '${{ github.sha }}-${{ github.workflow }}-${{ github.event_name }}'\n        env:\n          # pass the Cypress Cloud record key as an environment variable\n          CYPRESS_RECORD_KEY: ${{ secrets.EXAMPLE_RECORDING_KEY }}\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n```\n\n**Tip:** see [Learn GitHub Actions](https://docs.github.com/en/actions/learn-github-actions), with sections on Expressions, Contexts and Environment variables.\n\n### Robust custom build id\n\nIf you re-run the GitHub workflow, if you use the same custom build id during recording, Cypress Cloud will cancel the run with \"Build already finished\" error. To avoid this, you need to generate a _new_ custom build id on every workflow re-run. A good solution showing in the [example-custom-ci-build-id.yml](.github/workflows/example-custom-ci-build-id.yml) file is to run a common job first that just generates a new random ID. This ID can be used by the testing jobs to tie the build together. If the user re-runs the workflow a new unique build id is generated, allowing recording the new Cypress Cloud run.\n\n```yml\njobs:\n  # single job that generates and outputs a common id\n  prepare:\n    outputs:\n      uuid: ${{ steps.uuid.outputs.value }}\n    steps:\n      - name: Generate unique ID 💎\n        id: uuid\n        # take the current commit + timestamp together\n        # the typical value would be something like\n        # \"sha-5d3fe...35d3-time-1620841214\"\n        run: echo \"value=sha-$GITHUB_SHA-time-$(date +\"%s\")\" \u003e\u003e $GITHUB_OUTPUT\n  smoke-tests:\n    needs: ['prepare']\n    steps:\n      - uses: actions/checkout@v4\n      - uses: cypress-io/github-action@v6\n        with:\n          record: true\n          parallel: true\n          ci-build-id: ${{ needs.prepare.outputs.uuid }}\n        env:\n          # pass the Cypress Cloud record key as an environment variable\n          CYPRESS_RECORD_KEY: ${{ secrets.EXAMPLE_RECORDING_KEY }}\n```\n\nSee the [example-custom-ci-build-id.yml](.github/workflows/example-custom-ci-build-id.yml) for the full workflow.\n\n### Working directory\n\nIn a monorepo, the end-to-end or component test might be placed in a different sub-folder from the application itself. This sub-folder is the Cypress \"working directory\" which you can specify using the `working-directory` parameter.\n\nIn the following example of a directory layout for end-to-end testing, the Cypress working directory is `app-test`. The working directory contains the Cypress tests and a package manager lock file:\n\n```text\nrepo/\n  app/\n  app-test/\n    cypress/\n      e2e/\n      fixtures/\n      support/\n    cypress.config.js\n  package.json\n  package-lock.json\n```\n\nWe use `working-directory: app-test` to match the above example directory structure:\n\n```yml\non: push\njobs:\n  cypress-run:\n    runs-on: ubuntu-24.04\n    steps:\n      - uses: actions/checkout@v4\n      - uses: cypress-io/github-action@v6\n        with:\n          start: npm start\n          working-directory: app-test\n```\n\nSee the Cypress documentation [Folder structure](https://on.cypress.io/guides/core-concepts/writing-and-organizing-tests#Folder-Structure) section for examples of standard directory layouts, covering end-to-end testing and component testing with both JavaScript and TypeScript options.\n\nEach of the examples in this monorepo is separated from other examples by using different working directories. See [example-basic.yml](.github/workflows/example-basic.yml) for one end-to-end test example using the parameter `working-directory` and [example-component-test.yml](.github/workflows/example-component-test.yml) for a component test example.\n\n### Subfolders\n\nSometimes the application under test and the Cypress end-to-end tests may have separately defined dependencies. In the example below, Cypress has its own `package.json` file in a subfolder:\n\n```text\nroot/\n  e2e/\n    (code for installing and running Cypress tests)\n    package.json\n    package-lock.json\n    cypress.config.js\n    cypress/\n\n  (code for running the \"app\" with \"npm start\")\n  package.json\n  package-lock.json\n```\n\nIn this case you can first install the dependencies for the application (`npm ci`), then start the application server (`npm start`) before calling `cypress-io/github-action` to install the dependencies for Cypress and to run Cypress. You may also need to use the [wait-on](#wait-on) parameter to make sure that the app server is fully available.\n\n```yml\nname: E2E\non: push\njobs:\n  test:\n    runs-on: ubuntu-24.04\n    steps:\n      - uses: actions/checkout@v4\n      - name: Install root dependencies\n        run: npm ci\n\n      - name: Start server in the background\n        run: npm start \u0026\n\n      # Cypress has its own package.json in folder \"e2e\"\n      - name: Install Cypress and run tests\n        uses: cypress-io/github-action@v6\n        with:\n          working-directory: e2e\n```\n\n### pnpm\n\nThe package manager `pnpm` is not pre-installed in [GitHub Actions runner images](https://github.com/actions/runner-images) (unlike `npm` and `yarn`) and so it must be installed in a separate workflow step (see below). If the action finds a `pnpm-lock.yaml` file, it uses the [pnpm](https://pnpm.io/cli/install) command `pnpm install --frozen-lockfile` by default to install dependencies.\n\nThe example below follows [pnpm recommendations](https://pnpm.io/continuous-integration#github-actions) for installing pnpm and caching the [pnpm store](https://pnpm.io/cli/store). Follow the [Cypress pnpm configuration instructions](https://on.cypress.io/install#pnpm-Configuration) and apply them to your project, to enable pnpm to install the Cypress binary.\n\n```yaml\nname: example-basic-pnpm\non: push\njobs:\n  basic-pnpm:\n    runs-on: ubuntu-24.04\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n      - name: Install pnpm\n        uses: pnpm/action-setup@v4\n        with:\n          version: 10\n      - name: Install Node.js\n        uses: actions/setup-node@v4\n        with:\n          node-version: 22\n          cache: 'pnpm'\n          cache-dependency-path: examples/basic-pnpm/pnpm-lock.yaml\n      - name: Cypress run\n        uses: cypress-io/github-action@v6\n        with:\n          working-directory: examples/basic-pnpm\n```\n\n[![pnpm example](https://github.com/cypress-io/github-action/actions/workflows/example-basic-pnpm.yml/badge.svg)](.github/workflows/example-basic-pnpm.yml)\n\n### pnpm workspaces\n\nIf you are using [pnpm workspaces](https://pnpm.io/workspaces) you need to install dependencies and run Cypress tests in a workspace in separate steps. The snippet below shows this principle.\n\n```yml\n      ...\n      - name: Install dependencies\n        uses: cypress-io/github-action@v6\n        with:\n          working-directory: examples/start-and-pnpm-workspaces\n          runTests: false\n\n      - name: Cypress test\n        uses: cypress-io/github-action@v6\n        with:\n          install: false\n          working-directory: examples/start-and-pnpm-workspaces/packages/workspace-1\n        ...\n```\n\n[![pnpm workspaces example](https://github.com/cypress-io/github-action/actions/workflows/example-start-and-pnpm-workspaces.yml/badge.svg)](.github/workflows/example-start-and-pnpm-workspaces.yml)\n\nSee the example project [start-and-pnpm-workspaces](examples/start-and-pnpm-workspaces/) and the [example-start-and-pnpm-workspaces.yml](.github/workflows/example-start-and-pnpm-workspaces.yml) workflow for a full working example.\n\n### Yarn Classic\n\nIf a `yarn.lock` file is found, the action uses the [Yarn 1 (Classic)](https://classic.yarnpkg.com/) command `yarn --frozen-lockfile` by default to install dependencies.\n\n```yaml\nname: example-yarn-classic\non: push\njobs:\n  yarn-classic:\n    runs-on: ubuntu-24.04\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n      - name: Cypress run\n        uses: cypress-io/github-action@v6\n        with:\n          working-directory: examples/yarn-classic\n```\n\n[![Yarn classic example](https://github.com/cypress-io/github-action/actions/workflows/example-yarn-classic.yml/badge.svg)](.github/workflows/example-yarn-classic.yml)\n\n### Yarn Modern\n\nTo install dependencies using a `yarn.lock` file from [Yarn Modern](https://yarnpkg.com/) (Yarn 2 and later) you need to override the default [Yarn 1 (Classic)](https://classic.yarnpkg.com/) installation command `yarn --frozen-lockfile`. You can do this by using the `install-command` parameter and specifying `yarn install` as in the example below.\n\nThe action supports built-in caching of Yarn Classic dependencies only. To cache Yarn Modern dependencies additionally use [actions/setup-node](https://github.com/actions/setup-node) and specify `cache: yarn`.\n\n```yaml\nname: example-yarn-modern\non: push\njobs:\n  yarn-modern:\n    runs-on: ubuntu-24.04\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n      - run: corepack enable # (experimental and optional)\n      - name: Set up Yarn cache\n        uses: actions/setup-node@v4\n        with:\n          node-version: 22\n          cache: yarn\n          cache-dependency-path: examples/yarn-modern/yarn.lock\n      - name: Cypress run\n        uses: cypress-io/github-action@v6\n        with:\n          working-directory: examples/yarn-modern\n          install-command: yarn install\n```\n\nThis example covers the [`.yarnrc.yml`](https://yarnpkg.com/configuration/yarnrc#nodeLinker) configuration `nodeLinker: node-modules` which Yarn uses by default for projects updated from Yarn Classic. For `nodeLinker: pnp` see [Yarn Plug'n'Play](#yarn-plugnplay) below.\n(Note that `github-action` is not compatible with the `nodeLinker: pnpm` setting.)\n\n[![Yarn Modern example](https://github.com/cypress-io/github-action/actions/workflows/example-yarn-modern.yml/badge.svg)](.github/workflows/example-yarn-modern.yml)\n\n### Yarn Plug'n'Play\n\nWhen using [Yarn Modern](https://yarnpkg.com/) (Yarn 2 and later) with [Plug'n'Play](https://yarnpkg.com/features/pnp) enabled, you will need to use the `command` parameter to run [`yarn`](https://yarnpkg.com/cli/run) instead of [`npx`](https://docs.npmjs.com/cli/v9/commands/npx).\n\nSee the above [Yarn Modern](#yarn-modern) section for information on caching Yarn Modern dependencies.\n\n```yaml\nname: example-yarn-modern-pnp\non: push\njobs:\n  yarn-classic:\n    runs-on: ubuntu-24.04\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n      - name: Cypress run\n        uses: cypress-io/github-action@v6\n        with:\n          working-directory: examples/yarn-modern-pnp\n          install-command: yarn install\n          command: yarn run --binaries-only cypress run\n```\n\nThis example covers the [`.yarnrc.yml`](https://yarnpkg.com/configuration/yarnrc#nodeLinker) configuration when `nodeLinker` is undefined or set to `nodeLinker: pnp` corresponding to Yarn Plug'n'Play. Yarn uses this by default for projects newly created with Yarn Modern.\n\n[![Yarn Plug'n'Play example](https://github.com/cypress-io/github-action/actions/workflows/example-yarn-modern-pnp.yml/badge.svg)](https://github.com/cypress-io/github-action/actions/workflows/example-yarn-modern-pnp.yml)\n\n**Caution**: using the action parameter `command` causes multiple other parameters to be ignored. [See `command` section for more information.](#custom-test-command)\n\n### Yarn workspaces\n\nThis action should discover the Yarn workspaces correctly. For example, see folder [examples/start-and-yarn-workspaces](examples/start-and-yarn-workspaces) and workflow file [example-start-and-yarn-workspaces.yml](.github/workflows/example-start-and-yarn-workspaces.yml)\n\n```yaml\nname: example-start-and-yarn-workspaces\non: push\njobs:\n  single:\n    # the example has Yarn workspace in its \"root\" folder\n    # examples/start-and-yarn-workspaces\n    # and tests in a subfolder like \"workspace-1\"\n    runs-on: ubuntu-24.04\n    steps:\n      - uses: actions/checkout@v4\n      - uses: cypress-io/github-action@v6\n        with:\n          working-directory: examples/start-and-yarn-workspaces/workspace-1\n          build: yarn run build\n          start: yarn start\n          wait-on: 'http://localhost:5000'\n```\n\n[![Yarn workspaces example](https://github.com/cypress-io/github-action/actions/workflows/example-start-and-yarn-workspaces.yml/badge.svg)](.github/workflows/example-start-and-yarn-workspaces.yml)\n\n### Custom cache key\n\nSometimes the default cache key does not work. For example, if you cannot share the Node modules across Node versions due to native extensions. In that case pass your own `cache-key` parameter.\n\n```yml\nname: End-to-end tests\non: push\njobs:\n  cypress-run:\n    runs-on: ubuntu-24.04\n    # let's make sure our \"app\" works on several versions of Node\n    strategy:\n      matrix:\n        node: [20, 22, 23, 24]\n    name: E2E on Node v${{ matrix.node }}\n    steps:\n      - name: Setup Node\n        uses: actions/setup-node@v4\n        with:\n          node-version: ${{ matrix.node }}\n      - name: Checkout\n        uses: actions/checkout@v4\n      # run Cypress tests and record them under the same run\n      # associated with commit SHA and just give a different group name\n      - name: Cypress run\n        uses: cypress-io/github-action@v6\n        with:\n          record: true\n          group: Tests on Node v${{ matrix.node }}\n          cache-key: node-v${{ matrix.node }}-on-${{ runner.os }}-hash-${{ hashFiles('yarn.lock') }}\n        env:\n          CYPRESS_RECORD_KEY: ${{ secrets.EXAMPLE_RECORDING_KEY }}\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n```\n\n### Node versions\n\nYou can run your tests across multiple Node versions.\n\n```yml\nname: Node versions\non: push\njobs:\n  cypress-run:\n    runs-on: ubuntu-24.04\n    strategy:\n      matrix:\n        node: [20, 22, 23, 24]\n    name: E2E on Node v${{ matrix.node }}\n    steps:\n      - uses: actions/setup-node@v4\n        with:\n          node-version: ${{ matrix.node }}\n      - uses: actions/checkout@v4\n      - uses: cypress-io/github-action@v6\n```\n\nSee the [Node.js](#nodejs) section for information about supported versions and usage of Node.js.\n\n[![Node versions example](https://github.com/cypress-io/github-action/actions/workflows/example-node-versions.yml/badge.svg)](.github/workflows/example-node-versions.yml)\n\n### Split install and tests\n\nSometimes you may want to run additional commands between installation and tests. To enable this use the `install` and `runTests` parameters.\n\n```yml\nname: E2E\non: push\njobs:\n  test:\n    runs-on: ubuntu-24.04\n    steps:\n      - uses: actions/checkout@v4\n      - name: Install dependencies\n        uses: cypress-io/github-action@v6\n        with:\n          # just perform install\n          runTests: false\n      - run: yarn lint\n      - name: Run e2e tests\n        uses: cypress-io/github-action@v6\n        with:\n          # we have already installed all dependencies above\n          install: false\n          # Cypress tests and config file are in \"e2e\" folder\n          working-directory: e2e\n```\n\nSee [cypress-gh-action-monorepo](https://github.com/bahmutov/cypress-gh-action-monorepo) for a working example.\n\n### Split install and test with artifacts\n\nIf your test job(s) first need a build step, you can split the jobs into a separate build job followed by test jobs. You pass the build results to any subsequent jobs using [GitHub Actions artifacts](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/storing-and-sharing-data-from-a-workflow).\n\nIn the build job, use [upload-artifact](https://github.com/actions/upload-artifact) to store the build results, then in subsequent jobs use [download-artifact](https://github.com/actions/download-artifact) to restore them.\n\nYour tests jobs may use a [GitHub Actions matrix strategy](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/running-variations-of-jobs-in-a-workflow), such as when recording to [Cypress Cloud](https://on.cypress.io/cloud-introduction) with [parallel jobs](#parallel).\n\n```yml\nname: Split build and test\non: push\njobs:\n  build:\n    runs-on: ubuntu-24.04\n    steps:\n      - uses: actions/checkout@v4\n      - name: Build app\n        uses: cypress-io/github-action@v6\n        with:\n          runTests: false # only build app, don't test yet\n          build: npm run build\n      - name: Store build artifacts\n        uses: actions/upload-artifact@v4\n        with:\n          name: app\n          path: build\n          if-no-files-found: error\n          retention-days: 1\n\n  test:\n    needs: build\n    runs-on: ubuntu-24.04\n    steps:\n      - uses: actions/checkout@v4\n      - name: Restore build artifacts\n        uses: actions/download-artifact@v4\n        with:\n          name: app\n          path: build\n\n      - name: Cypress tests\n        uses: cypress-io/github-action@v6\n        with:\n          start: npm start # start server using the build artifacts\n```\n\n[![Split with build artifacts](https://github.com/cypress-io/github-action/actions/workflows/example-build-artifacts.yml/badge.svg)](.github/workflows/example-build-artifacts.yml)\n\n### Custom install\n\nFinally, you might not need this GH Action at all. For example, if you want to split the npm dependencies installation from the Cypress binary installation, then it makes no sense to use this action. Instead you can install and cache Cypress yourself.\n\n### Install Cypress only\n\nIf the project has many dependencies, but you want to install just Cypress you can combine this action with `actions/cache` and `npm i cypress` commands yourself.\n\n```yml\n- uses: actions/checkout@v4\n- uses: actions/cache@v4\n  with:\n    path: |\n      ~/.cache/Cypress\n      node_modules\n    key: my-cache-${{ runner.os }}-${{ hashFiles('package-lock.json') }}\n- run: npm i cypress\n- uses: cypress-io/github-action@v6\n  with:\n    install: false\n```\n\n[![Install only Cypress example](https://github.com/cypress-io/github-action/actions/workflows/example-install-only.yml/badge.svg)](.github/workflows/example-install-only.yml)\n\n### Timeouts\n\nYou can tell the CI to stop the job or the individual step if it runs for longer then a given time limit. This is a good practice to ensure the hanging process does not accidentally use up all your CI minutes.\n\n```yml\njobs:\n  cypress-run:\n    runs-on: ubuntu-24.04\n    # stop the job if it runs over 10 minutes\n    # to prevent a hanging process from using all your CI minutes\n    timeout-minutes: 10\n    steps:\n      - uses: actions/checkout@v4\n      - uses: cypress-io/github-action@v6\n        # you can specify individual step timeout too\n        timeout-minutes: 5\n```\n\n### More examples\n\n| Name                                                                                                | Description                                                                           |\n| --------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |\n| [cypress-io/cypress-example-kitchensink](https://github.com/cypress-io/cypress-example-kitchensink) | Runs every API command in Cypress using various CI platforms including GitHub Actions |\n| [cypress-io/cypress-realworld-app](https://github.com/cypress-io/cypress-realworld-app)             | A real-world example payment application. Uses GitHub Actions and CircleCI.           |\n| [cypress-gh-action-monorepo](https://github.com/bahmutov/cypress-gh-action-monorepo)                | Splits install and running tests commands, runs Cypress from sub-folder               |\n\n## Migration\n\n### Migrating from CLI command\n\nTo migrate from Cypress [CLI run command options](https://on.cypress.io/command-line#Options) to Cypress GitHub Action parameters, check the [CLI Run Option / Action Parameter](#cli-run-option--action-parameter) table below. In most cases, the name of the action parameter is the same as the long form of the `cypress run` CLI option.\n\nCreate a [GitHub Actions workflow](https://docs.github.com/en/actions/writing-workflows/quickstart) referring to [Workflow syntax for GitHub Actions](https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions). The action `cypress-io/github-action@v6` is invoked with the `uses` keyword. Cypress GitHub Action input parameters are specified under the [with](https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#jobsjob_idstepswith) keyword.\n\nIf you have previously been using a [CLI command](https://on.cypress.io/command-line#cypress-run) to run Cypress locally or in a CI environment, you will be familiar with testing commands like this:\n\n```shell\nnpx cypress run --spec cypress/e2e/spec.cy.js --browser chrome\n```\n\nor you may be using a script defined in your project's `package.json` file, such as:\n\n```json\n\"cy:e2e:chrome\": \"cypress run --spec cypress/e2e/spec.cy.js --browser chrome\"\n```\n\nHere is the equivalent GitHub Actions example workflow. The action runs Cypress by passing the action parameters (`browser` and `spec`) programmatically to the [Cypress Module API](https://on.cypress.io/module-api) without using any CLI. The complete workflow also checks out the repo and installs dependencies before running Cypress.\n\n```yml\nname: CLI migration example\non: push\njobs:\n  cypress-run:\n    runs-on: ubuntu-24.04\n    steps:\n      - name: Check out repo\n        uses: actions/checkout@v4\n      - name: Cypress run # install dependencies and run Cypress E2E tests\n        uses: cypress-io/github-action@v6 # replaces CLI cypress run\n        with:\n          browser: chrome # replaces CLI option --browser chrome\n          spec: cypress/e2e/spec.cy.js # replaces CLI option --spec cypress/e2e/spec.cy.js\n```\n\n#### CLI Run Option / Action Parameter\n\n| CLI Option `cypress run`       | Action Parameter                                            | Description                                                                                          |\n| ------------------------------ | ----------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |\n| `--auto-cancel-after-failures` | [`auto-cancel-after-failures`](#auto-cancel-after-failures) | Set the failed test threshold for auto cancellation or disable auto cancellation for Cloud recording |\n| `--browser`, `-b`              | [`browser`](#browser)                                       | Select browser that Cypress runs in. A filesystem path to a browser can also be used.                |\n| `--ci-build-id`                | [`ci-build-id`](#custom-build-id)                           | Specify a unique identifier for a run to enable grouping or parallelization for Cloud recording      |\n| `--component`                  | [`component`](#component-testing)                           | Run component tests                                                                                  |\n| `--config`, `-c`               | [`config`](#config)                                         | Specify configuration                                                                                |\n| `--config-file`, `-C`          | [`config-file`](#config-file)                               | Specify configuration file                                                                           |\n| `--e2e`                        | [`component: false`](#component-testing) (default)          | Run end to end tests                                                                                 |\n| `--env`, `-e`                  | [`env`](#env)                                               | Specify environment variables                                                                        |\n| `--group`                      | [`group`](#parallel)                                        | Group recorded tests together under a single run for Cloud recording                                 |\n| `--headed`                     | [`headed`](#headed)                                         | Display the browser instead of running headlessly                                                    |\n| `--headless`                   | [`headed: false`](#headed) (default)                        | Hide the browser instead of running headed                                                           |\n| `--parallel`                   | [`parallel`](#parallel)                                     | Run recorded specs in parallel across multiple machines for Cloud recording                          |\n| `--project`, `-P`              | [`project`](#project)                                       | Path to a specific project                                                                           |\n| `--quiet`, `-q`                | [`quiet`](#quiet-flag)                                      | Reduce output to `stdout`                                                                            |\n| `--record`                     | [`record`](#record-test-results-on-cypress-cloud)           | Record the test run to Cypress Cloud                                                                 |\n| `--spec`, `-s`                 | [`spec`](#specs)                                            | Specify the spec files to run                                                                        |\n| `--tag`, `-t`                  | [`tag`](#tag-recordings)                                    | Identify a run with a tag or tags                                                                    |\n\nThere is no equivalent action parameter for the CLI options `help`, `key`, `--no-exit`, `--no-runner-ui`, `port`, `reporter`, `reporter-options` or `runner-ui`. See the section [Record test results on Cypress Cloud](#record-test-results-on-cypress-cloud) for information on passing a Cypress Cloud record key to the action.\n\n## Notes\n\n### Installation\n\nThis action installs local dependencies using lock files. Ensure that exactly one type of lock file is used for each project or working-directory from the following supported package managers:\n\n| Lock file           | Package Manager                                                                                  | Installation command             |\n| ------------------- | ------------------------------------------------------------------------------------------------ | -------------------------------- |\n| `package-lock.json` | [npm](https://docs.npmjs.com/cli/v9/commands/npm-ci)                                             | `npm ci`                         |\n| `pnpm-lock.yaml`    | [pnpm](https://pnpm.io/cli/install#--frozen-lockfile)                                            | `pnpm install --frozen-lockfile` |\n| `yarn.lock`         | [Yarn Classic](https://classic.yarnpkg.com/en/docs/cli/install#toc-yarn-install-frozen-lockfile) | `yarn --frozen-lockfile`         |\n\nSee section [Yarn Modern](#yarn-modern) for information about using Yarn version 2 and later.\n\n### Caching\n\nWhen the action installs dependencies, it also caches these where possible using GitHub Actions [@actions/cache](https://github.com/actions/toolkit/tree/main/packages/cache).\n\n#### Cypress binary cache\n\nThe Cypress binary is saved to the `$HOME/.cache/Cypress` directory or to a location defined by the environment variable `CYPRESS_CACHE_FOLDER`. This location is then cached by GitHub Actions and carries the cache label `cypress-\u003cplatform-and-architecture\u003e-hash`.\n\n#### Package Manager cache\n\nBased on the package manager lock file, the action caches the following package manager cache locations:\n\n| Lock file           | Package Manager                                                     | Cached location     |\n| ------------------- | ------------------------------------------------------------------- | ------------------- |\n| `package-lock.json` | [npm](https://docs.npmjs.com/cli/commands/npm-cache)                | `$HOME/.npm`        |\n| `yarn.lock`         | [Yarn Classic](https://classic.yarnpkg.com/lang/en/docs/cli/cache/) | `$HOME/.cache/yarn` |\n\nThe cache carries the label `npm-\u003cplatform-and-architecture\u003e-hash`.\nIn the cache label, `npm` refers to the npm public registry at https://registry.npmjs.org from which both the above package managers download npm modules by default.\n\nNote that the Cypress GitHub action does not include any built-in caching for pnpm and Yarn Modern.\nGitHub Actions however provides [actions/setup-node](https://github.com/actions/setup-node) which includes functionality to optionally cache npm, Yarn and pnpm dependencies. This can be added to any GitHub Actions workflow if needed. Examples are shown above for [pnpm](#pnpm) and [Yarn Modern](#yarn-modern).\n\n## Debugging\n\nThis action uses the [debug](https://github.com/debug-js/debug#readme) module to output additional verbose logs. You can see these debug messages by setting the following environment variable:\n\n```yml\nDEBUG: @cypress/github-action\n```\n\nYou can set the environment variable using GitHub UI interface, or in the workflow file:\n\n```yml\n- name: Cypress tests with debug logs\n  uses: cypress-io/github-action@v6\n  env:\n    DEBUG: '@cypress/github-action'\n```\n\nSee the [example-debug.yml](.github/workflows/example-debug.yml) workflow file.\n\nTo collect more verbose GitHub Action logs you can set a GitHub secret or variable `ACTIONS_STEP_DEBUG` to `true`. This is useful to see detailed caching steps. See [Enabling debug logging](https://docs.github.com/en/actions/monitoring-and-troubleshooting-workflows/enabling-debug-logging) from GitHub Actions documentation for more information.\n\n### Logs from the test runner\n\nTo see all [Cypress debug logs](http://on.cypress.io/troubleshooting#Print-DEBUG-logs), add the environment variable `DEBUG` to the workflow using the value `cypress:*`:\n\n```yml\n- name: Cypress tests with debug logs\n  uses: cypress-io/github-action@v6\n  env:\n    DEBUG: 'cypress:*'\n```\n\nReplace the value `cypress:*` with specific [Cypress log sources](https://on.cypress.io/troubleshooting#Log-sources) to filter debug log output.\n\n### Debugging waiting for URL to respond\n\nIf you have a problem with `wait-on` not working, you can check the [src/ping.js](src/ping.js) logic from the local machine.\n\n- clone this repository to the local machine\n- install dependencies with `npm install`\n- start your server\n- from another terminal call the `ping` yourself to validate the server is responding:\n\n```shell\nnode src/ping-cli.js \u003curl\u003e\n```\n\nFor example:\n\n```text\n$ node src/ping-cli.js https://example.cypress.io\npinging url https://example.cypress.io for 30 seconds\n```\n\nYou can also enable debug logs by setting the environment variable `DEBUG='@cypress/github-action'`, for example:\n\n```text\n$ DEBUG='@cypress/github-action' node src/ping-cli.js https://example.cypress.io\npinging url https://example.cypress.io for 30 seconds\n  @cypress/github-action total ping timeout 60000 +0ms\n  @cypress/github-action individual ping timeout 30000ms +0ms\n  @cypress/github-action retries limit 2 +0ms\n  @cypress/github-action pinging https://example.cypress.io has finished ok after 185ms +185ms\n```\n\n## Extras\n\n### Manual trigger\n\nEach of the `example-*` workflows in the [.github/workflows](https://github.com/cypress-io/github-action/tree/master/.github/workflows) directory is configured to trigger on a `workflow_dispatch` event. This allows any of these workflows to be run manually.\n\n[Fork](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo) and [clone](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo#cloning-your-forked-repository) this repository to try out the examples live in your own repository copy. Refer to the GitHub Actions documentation [Manually running a workflow](https://docs.github.com/en/actions/managing-workflow-runs-and-deployments/managing-workflow-runs/manually-running-a-workflow) which explains how to run a workflow from the Actions tab on GitHub. Workflows can also be run using the GitHub CLI or the REST API.\n\nIf you configure a `workflow_dispatch` event in your own workflows, you will be able to run them manually in the same way.\n\n### Outputs\n\nThis action sets a GitHub step output `resultsUrl` if the run was recorded on [Cypress Cloud](https://on.cypress.io/cloud-introduction) using the action parameter setting `record: true` (see [Record test results on Cypress Cloud](#record-test-results-on-cypress-cloud)). Note that if a custom test command with the [command](#custom-test-command) parameter or the [command-prefix](#command-prefix) parameter are used then no `resultsUrl` step output is saved.\n\nThis is an example of using the step output `resultsUrl`:\n\n```yml\n- name: Cypress tests\n  uses: cypress-io/github-action@v6\n  # let's give this action an ID so we can refer\n  # to its output values later\n  id: cypress\n  with:\n    record: true\n  env:\n    CYPRESS_RECORD_KEY: ${{ secrets.EXAMPLE_RECORDING_KEY }}\n- name: Print Cypress Cloud URL\n  if: always()\n  run: |\n    echo Cypress finished with: ${{ steps.cypress.outcome }}\n    echo See results at ${{ steps.cypress.outputs.resultsUrl }}\n```\n\nThe GitHub step output `dashboardUrl` is deprecated. Cypress Dashboard is now [Cypress Cloud](https://on.cypress.io/cloud-introduction).\n\n[![recording example](https://github.com/cypress-io/github-action/actions/workflows/example-recording.yml/badge.svg)](.github/workflows/example-recording.yml)\n\n**Note:** every GitHub workflow step can have `outcome` and `conclusion` properties. See the GitHub [Contexts](https://docs.github.com/en/actions/learn-github-actions/contexts) documentation section [steps context](https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#steps-context). In particular, the `outcome` or `conclusion` value can be `success`, `failure`, `cancelled`, or `skipped` which you can use in any following steps.\n\n### Print Cypress info\n\nSometimes you might want to print Cypress and OS information, like the list of detected browsers. You can use the [`cypress info`](https://on.cypress.io/command-line#cypress-info) command for this.\n\nIf you are NOT using the `build` command in your project, you can run the `cypress info` command:\n\n```yml\nname: info\non: push\njobs:\n  cypress-run:\n    runs-on: ubuntu-24.04\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n      - name: Cypress run\n        uses: cypress-io/github-action@v6\n        with:\n          build: npx cypress info\n```\n\nIf you are already using the `build` parameter, you can split the [installation and the test steps](#split-install-and-tests) and insert the `cypress info` command in between:\n\n```yml\nname: info\non: push\njobs:\n  cypress-run:\n    runs-on: ubuntu-24.04\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n      - name: Cypress install\n        uses: cypress-io/github-action@v6\n        with:\n          # just perform install\n          runTests: false\n      - name: Cypress info\n        run: npx cypress info\n      - name: Cypress run\n        uses: cypress-io/github-action@v6\n        with:\n          # we have already installed all dependencies above\n          install: false\n          # rest of your parameters\n```\n\n### Nightly tests\n\nSometimes you want to execute the workflow on a schedule. For example, to run Cypress tests nightly, you can schedule the workflow using `cron` syntax:\n\n```yml\nname: example-cron\non:\n  schedule:\n    # runs tests every day at 4am\n    - cron: '0 4 * * *'\njobs:\n  nightly:\n    runs-on: ubuntu-24.04\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n      - name: Cypress nightly tests 🌃\n        uses: cypress-io/github-action@v6\n```\n\n[![cron example](https://github.com/cypress-io/github-action/actions/workflows/example-cron.yml/badge.svg)](.github/workflows/example-cron.yml)\n\n### Job summary title\n\nBy default, the action produces a job summary in the GitHub Actions log for each workflow step where `github-action` is used. Each job summary shows a Passing / Failing status, the test counts for Passed, Failed, Pending \u0026 Skipped, followed by the Duration of the run. The job summaries are grouped by job.\n\nTo specify a title for a Job Summary, use the parameter `summary-title`. If no title is specified, then the default \"Cypress Results\" is used:\n\n```yml\nname: Summary titles\non: push\njobs:\n  tests:\n    runs-on: ubuntu-24.04\n    steps:\n      - uses: actions/checkout@v4\n      - name: Cypress headless tests\n        uses: cypress-io/github-action@v6\n        with:\n          summary-title: 'Headless'\n      - name: Cypress headed tests\n        uses: cypress-io/github-action@v6\n        with:\n          install: false\n          headed: true\n          summary-title: 'Headed'\n```\n\nThe name of the GitHub Actions job is shown at the top of one or more job summaries from the same job. If multiple summaries belong to the same job, then giving them separate titles allows them to be uniquely identified.\n\nSee the [example-chrome.yml](.github/workflows/example-chrome.yml) workflow, with multiple calls to `cypress-io/github-action` in one job, making use of the `summary-title` parameter. View the [example-chrome.yml - actions log](https://github.com/cypress-io/github-action/actions/workflows/example-chrome.yml) for an example of the resulting job summaries.\n\n### Suppress job summary\n\nThe default job summary can be suppressed by using the parameter `publish-summary` and setting its value to `false`.\n\n```yml\nname: Example no summary\non: push\njobs:\n  cypress-run:\n    runs-on: ubuntu-24.04\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n      - name: Cypress run\n        uses: cypress-io/github-action@v6\n        with:\n          publish-summary: false\n```\n\n## Node.js\n\n### Support\n\nNode.js is required to run this action. The recommended version `v6` supports:\n\n- **Node.js** 20.x, 22.x, 23.x and 24.x\n\nand is generally aligned with [Node.js's release schedule](https://github.com/nodejs/Release).\n\n### Usage\n\n`github-action` command-type options such as [`install-command`](#custom-install-command), [`build`](#build-app), [`start`](#start-server) and [`command`](#custom-test-command) are executed with the runner's version of Node.js. You can use GitHub's [actions/setup-node](https://github.com/actions/setup-node) to install an explicit Node.js version into the runner.\n\n[![Node versions example](https://github.com/cypress-io/github-action/actions/workflows/example-node-versions.yml/badge.svg)](.github/workflows/example-node-versions.yml)\n\nCypress itself runs with a fixed Node.js version specified by the [runs.using](https://docs.github.com/en/actions/creating-actions/metadata-syntax-for-github-actions#runs-for-javascript-actions) parameter of [action.yml](action.yml). `github-action@v6` uses `node20`.\n\n## Changelog\n\nView the [CHANGELOG](./CHANGELOG.md) document for an overview of version changes.\n\n## Compatibility\n\n- `github-action@v6` is the current recommended version, uses `node20` and is compatible with Cypress `10` and above.\n- `github-action` versions `v1` to `v5` are unsupported: they rely on Node.js `12` and `16` in End-of-life status.\n\n## Contributing\n\nPlease see our [Contributing Guideline](./CONTRIBUTING.md) which explains how to contribute fixes or features to the repo and how to test.\n\n## License\n\n[![license][license-badge]][license-file]\n\nThis project is licensed under the terms of the [MIT license][license-file].\n\n\u003c!-- badge links follow --\u003e\n\n[ci-badge]: https://github.com/cypress-io/github-action/actions/workflows/main.yml/badge.svg\n[ci-workflow]: https://github.com/cypress-io/github-action/actions/workflows/main.yml\n[cloud-badge]: https://img.shields.io/endpoint?url=https://cloud.cypress.io/badge/simple/3tb7jn/master\u0026style=flat\u0026logo=cypress\n[cloud-project]: https://cloud.cypress.io/projects/3tb7jn/runs\n[renovate-badge]: https://img.shields.io/badge/renovate-app-blue.svg\n[renovate-bot]: https://github.com/renovatebot\n[license-badge]: https://img.shields.io/badge/license-MIT-green.svg\n[license-file]: ./LICENSE.md\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcypress-io%2Fgithub-action","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcypress-io%2Fgithub-action","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcypress-io%2Fgithub-action/lists"}