Существует открытая проблема для запуска сквозного теста Cypress.io GitHub Action в репозитории Yarn2 plug-and-play: действие завершается со следующей ошибкой:

Error: Cannot find module 'cypress'
Require stack:
- /home/runner/work/_actions/cypress-io/github-action/v2/dist/index.js 

Я сам пытался решить эту проблему и обнаружил, что основной причиной является эта строка действия GitHub:

// If `command:` is provided, run it.
const customCommand = core.getInput('command')
if (customCommand) {
  console.log('Using custom test command: %s', customCommand)
  return execCommand(customCommand, true, 'run tests')
}
// If `command-prefix:` is provided, use it.
const commandPrefix = core.getInput('command-prefix')
if (commandPrefix) {
  return runTestsUsingCommandLine()
}
// Otherwise, find `cypress` and run it.
debug('Running Cypress tests using NPM module API')  debug(`requiring cypress dependency, cwd is ${process.cwd()}`)
debug(`working directory ${workingDirectory}`)
const cypressModulePath =
  require.resolve('cypress', {
    paths: [workingDirectory]
  }) || 'cypress'
debug(`resolved cypress ${cypressModulePath}`)

В приведенном выше коде реализации, которые не предоставляют переменную command или command-prefix в конфигурации with действия GitHub, откатываются к методу require.resolve в Node. Это означает, что реализации, использующие command (например, command: yarn cypress) или command-prefix, не столкнутся с этой ошибкой, поскольку они не достигнут строки, содержащей require.resolve.

Разрешение пути к cypress не удается в репозитории Yarn2, потому что действие GitHub выполняет свой скрипт Node, используя NPM. Поэтому он делает предположение, что NPM установил свои зависимости, несмотря на иную проверку установки Yarn. Я внес запрос в оригинальный выпуск для поддержки файла Yarn .pnp.cjs, который должен исправить require.resolve для поиска модулей, установленных с помощью Plug and Play.

Чтобы разблокировать себя, пока это не получит официальную поддержку, добавьте command-prefix: yarn dlx. При замене cypress run --flags на yarn dlx cypress run --flags команда модуля Node сначала передается через yarn, который внедряет файл .pnp.cjs для поддержки Plug and Play.

Хотя вы можете добавить скрипт в файл package.json, содержащий cypress run — flags, опция command-prefix предлагает одно важное преимущество по сравнению с альтернативой command: автоматическая вставка флагов, как указано with. Когда вы используете command, ваша конфигурация в with будет игнорироваться, и вам потребуется указать все свои флаги в определении сценария NPM в package.json. Хотя это подходит для многих случаев использования, позволяя вам легко запускать тесты Cypress локально, это становится проблематичным при использовании секретов GitHub (например, вашего ключа записи) в вашем запуске Cypress.

Для тех, кто осмелится погрузиться глубже, чем мое расследование, команда Cypress может быть признательна за запрос на включение, чтобы решить эту проблему в коде. 😉