github-action: Error "Cannot find module 'cypress'" using Yarn Berry

Hi there! This action worked with yarn berry workspaces. but, this action can’t find the “cypress” module.

Error: Cannot find module 'cypress'

I found the issue of Yarn Berry and tried as follows.

here is the relavant configuration:

jobs:
  check-e2e-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Use Node.js 14.x
        uses: actions/setup-node@v1
        with:
          node-version: 14.x

      - name: Cypress run
        uses: cypress-io/github-action@v2
        with:
          install-command : yarn install --immutable --immutable-cache
          start: yarn start
          wait-on: 'http://localhost:3000'
          browser: chrome
          headless: true

here is github-action log:

Run cypress-io/github-action@v2
  with:
    install-command: yarn install --immutable --immutable-cache
    build: yarn run build
    start: yarn start
    wait-on: http://localhost:3000
    browser: chrome
    headless: true
    record: false
    config-file: cypress.json
Received 22 of 22 (100.0%), 0.0 MBs/sec
Cache Size: ~0 MB (22 B)
/usr/bin/tar --use-compress-program zstd -d -xf /home/runner/work/_temp/be0c8559-6dda-42c1-822d-2db565488a1c/cache.tzst -P -C /home/runner/work/*****/*****
Cache restored successfully
Received 0 of 353031365 (0.0%), 0.0 MBs/sec
Received 58720256 of 353031365 (16.6%), 28.0 MBs/sec
Received 155189248 of 353031365 (44.0%), 49.3 MBs/sec
Received 251658240 of 353031365 (71.3%), 60.0 MBs/sec
Received 344642757 of 353031365 (97.6%), 65.7 MBs/sec
Received 353031365 of 353031365 (100.0%), 61.3 MBs/sec
Cache Size: ~337 MB (353031365 B)
/usr/bin/tar --use-compress-program zstd -d -xf /home/runner/work/_temp/dd9a16d5-2321-41d4-9f8f-3e8284d07e08/cache.tzst -P -C /home/runner/work/*****/*****
Cache restored successfully
install command command "yarn install --immutable --immutable-cache"
current working directory "/home/runner/work/*****/*****"
/usr/local/bin/yarn install --immutable --immutable-cache
➤ YN0000: ┌ Resolution step
Resolution step
➤ YN0000: └ Completed in 0s 376ms
➤ YN0000: ┌ Fetch step
Fetch step
➤ YN0000: └ Completed in 0s 743ms
➤ YN0000: ┌ Link step
Link step
➤ YN0000: └ Completed in 0s 397ms
➤ YN0000: Done with warnings in 1s 966ms
/opt/hostedtoolcache/node/14.17.6/x64/bin/npx cypress cache list
┌─────────┬───────────────────┐
│ version │ last used         │
├─────────┼───────────────────┤
│ 8.4.1   │ a few seconds ago │
├─────────┼───────────────────┤
│ 8.5.0   │ a few seconds ago │
└─────────┴───────────────────┘
build app command "yarn run build"
current working directory "/home/runner/work/*****/*****"
/usr/local/bin/yarn run build
The following changes are being made to your tsconfig.json file:
  - compilerOptions.paths must not be set (aliased imports are not supported)

Creating an optimized production build...
Compiled successfully.

File sizes after gzip:

  74.98 KB  build/static/js/2.c1fee284.chunk.js
  1.71 KB   build/static/js/3.b8a66e6b.chunk.js
  1.17 KB   build/static/js/runtime-main.2d193d74.js
  1.01 KB   build/static/js/main.a1fef262.chunk.js
  554 B     build/static/css/main.f09a1402.chunk.css

The project was built assuming it is hosted at /.
You can control this with the homepage field in your package.json.

The build folder is ready to be deployed.
You may serve it with a static server:

  yarn global add serve
  serve -s build

Find out more about deployment here:

  cra.link/deployment

start server "yarn start command "yarn start"
current working directory "/home/runner/work/*****/*****"
waiting on "http://localhost:3000" with timeout of 60 seconds
/usr/local/bin/yarn start
The following changes are being made to your tsconfig.json file:
  - compilerOptions.paths must not be set (aliased imports are not supported)

ℹ 「wds」: Project is running at http://10.1.0.5
ℹ 「wds」: webpack output is served from 
ℹ 「wds」: Content not from webpack is served from /home/runner/work/*****/*****/public
ℹ 「wds」: 404s will fallback to /
Starting the development server...

Compiled successfully!

You can now view ***** in the browser.

  Local:            http://localhost:3000
  On Your Network:  http://10.1.0.5:3000

Note that the development build is not optimized.
To create a production build, use yarn build.

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

The above error occurred and was solved using with command.

  check-e2e-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Use Node.js 14.x
        uses: actions/setup-node@v1
        with:
          node-version: 14.x

      - name: Cypress run
        uses: cypress-io/github-action@v2
        with:
          install-command : yarn install --immutable --immutable-cache
          command: yarn test:e2e

here is yarn test:e2e script:

"test:e2e": "start-server-and-test start http://localhost:3000 cypress:run",

Why can’t I find the cypress module when I use the command provided by Cypress github-action? Or did I miss something? I’d appreciate it if you had any other advice. thank you!🙏

About this issue

  • Original URL
  • State: closed
  • Created 3 years ago
  • Reactions: 6
  • Comments: 21 (5 by maintainers)

Commits related to this issue

Most upvoted comments

The problem is here: https://github.com/cypress-io/github-action/blob/0c9eccfb5989bd87ea58b5d8cce9a4f0db1a6d67/index.js#L621

The Cypress action runs the above index.js file as a Node script. It does so using NPM.

require.resolve('cypress') throws an error in Yarn 2, because the index.js script is running using NPM, meaning the Plug N Play file (.pnp.cjs) is not loaded.

The index.js file ironically looks for Yarn PNP cache files, but it has no way of using files in that cache. 😂

To bypass this (for now), you can use command-prefix: yarrn dlx to pass the default cypress run command through Yarn to find it through PNP. The code path for command-prefix does not use require.resolve, but this feels like coincidence so I’d ask the repo owners still address this.

I believe to fix this formally, the GitHub action needs to load the .pnp.cjs file before or during executing index.js.

Again, for easy access:

Unblocking yourself

  • Add command-prefix: yarn dlx to the action’s with.

Notes for repository owners

  • If I’m not mistaken, run your dist/index.js file with Yarn’s PNP file (.pnp.cjs) so that require.resolve finds PNP modules like cypress.

I have this same issue. I don’t run the install command in the cypress-io/github-action@v2, but in a previous workflow run step:

run: yarn install --immutable --immutable-cache

and then later:

      - name: Cypress run
        uses: cypress-io/github-action@v2
        with:
          install: false
          start: yarn start:test
          wait-on: 'http://localhost:3000'
          wait-on-timeout: 200
          browser: chrome
          headless: true
          record: true

This was working previously with yarn, but this is now yarn “berry” (3.0.2).

I am using PnP and a Zero-Installs Yarn setup.

@saseungmin

Please check out Yarn Plug’n’Play and see if it meets your needs. This is new functionality contributed by @PilotConway.

Cypress v10 + Cypress GitHub Action v4 + Yarn v3

Sorry I’m late to upgrading to v4. I managed this dirty workaround:

Before running the cypress-io/github-action, run the following:

  1. Setup Node
  2. yarn install
  3. yarn run cypress:pnp

In your package.json, create the script "cypres:pnp": "node ./scripts/cypress-pnp.cjs".

Create the file ./scripts/cypress-pnp.cjs. If you are using Yarn workspaces, create it in the workspace that’s running cypress.

// running Cypress from root
const { mkdirSync, writeFileSync } = require('fs');

const SPACES = 2;

const PACKAGE_JSON = {
  name: 'cypress',
  version: '0.0.1',
  main: './index.cjs',
  type: 'commonjs',
  peerDependencies: {
    cypress: '*',
  },
};

mkdirSync('./node_modules/cypress', {
  recursive: true,
});

writeFileSync(
  './node_modules/cypress/package.json',
  JSON.stringify(PACKAGE_JSON, null, SPACES),
);

writeFileSync(
  './node_modules/cypress/index.cjs',
  `require('../../.pnp.cjs').setup();
module.exports = require('cypress');`,
);
// running Cypress from packages/package-name workspace:
const { mkdirSync, writeFileSync } = require('fs');

const SPACES = 2;

const PACKAGE_JSON = {
  name: 'cypress',
  version: '0.0.1',
  main: './index.cjs',
  type: 'commonjs',
  peerDependencies: {
    cypress: '*',
  },
};

mkdirSync('./node_modules/cypress', {
  recursive: true,
});

writeFileSync(
  './node_modules/cypress/package.json',
  JSON.stringify(PACKAGE_JSON, null, SPACES),
);

writeFileSync(
  './node_modules/cypress/index.cjs',
  `require('../../../../.pnp.cjs').setup();
module.exports = require('cypress');`,
);

(The only difference between the two is the ../../ before .pnp.cjs for workspaces.)

For the cypress-io/github-action:

  1. If you are using with.project for a workspace, move it to with.working-directory.
  2. Set with.install to false. Remove with.install-command since we installed in a previous step.
  3. Just to be safe, keep with.command-prefix set to yarn dlx.

If time permits this weekend, I’ll package this script up into a Node module to make this easier; but the above copy-paste job should work for now.

Link to proof of concept run where the installation is passing for me.

I’ve had success using:

  • Latest Cypress (10.3.0 as of writing this)
  • The new Cypress config format (cypress.config.js instead of cypress.json)
  • Latest Yarn (3.2.1 as of writing this)
  • cypress-io/github-action@v3.1.0

Note that you will need to explicitly set the path to your Cypress config file, as otherwise the 3.1.0 action still looks for cypress.json.

Example action:

- name: Run Cypress with Chrome
  uses: cypress-io/github-action@v3.1.0
  with:
    browser: chrome
    record: true
    config-file: cypress.config.js
    install-command: yarn install --immutable
    command-prefix: yarn dlx

Same cannot get it to work. A timeout occurs during pipe run:

Opening Cypress...
[1965:1017/182222.115087:ERROR:node_bindings.cc(278)] Most NODE_OPTIONs are not supported in packaged apps. See documentation for more details.
[1965:1017/182222.115179:ERROR:node_bindings.cc(278)] Most NODE_OPTIONs are not supported in packaged apps. See documentation for more details.
[1965:1017/182224.237041:ERROR:bus.cc(392)] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
[1965:1017/182224.237078:ERROR:bus.cc(392)] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
[2138:1017/182224.258717:ERROR:gpu_init.cc(441)] Passthrough is not supported, GL is swiftshader
[1965:1017/182224.491841:ERROR:bus.cc(392)] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
[1965:1017/182224.516792:ERROR:bus.cc(392)] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")

.yml

name: CI
on: push

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2

    - name: Get yarn cache directory path
      id: yarn-cache-dir-path    
      run: echo "::set-output name=dir::$(yarn config get cacheFolder)"
      
    - uses: actions/cache@v2
      id: yarn-cache
      with:
        path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
        key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
        restore-keys: |
          ${{ runner.os }}-yarn-

    - name: Yarn Install if no cache hit
      if: steps.yarn-cache.outputs.cache-hit != 'true'
      run: yarn add --cached

    - name: Eslint
      run: yarn lint
            
    - name: Run Component tests 🧪
      uses: cypress-io/github-action@v2
      with:
        install-command : yarn install --immutable --immutable-cache
        command: yarn cypress run-ct 

@forgo Thank you for your advice! I modified it as you suggested, but it doesn’t work.

  check-e2e-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Use Node.js 14.x
        uses: actions/setup-node@v1
        with:
          node-version: 14.x

      - name: Install dependencies
        run: yarn install --immutable --immutable-cache

      - name: Cypress run
        uses: cypress-io/github-action@v2
        with:
          install: false
          start: yarn start
          wait-on: 'http://localhost:3000'
          browser: chrome
          headless: true

I’m using PnP and a Zero-Installs Yarn 3.0.2 setup. Anyway, is it impossible to install using yarn berry in Cypress github-action?

@MikeMcC399 @PilotConway

Thank you for finally solving this issue! 🙇‍♂️ I checked that it works perfectly.

Has anybody got this to work with Cypress 10, Yarn 3, and cypress-io/github-action v4?

I can get it working with Cypress 10.8.0, Yarn 3.2.3, and cypress-io/github-action v3.1.0. But I would like to instead use cypress-io/github-action v4.

I was really stuck and that saved me so much time, thanks @CharlesStover ! 🥇

@CharlesStover Awesome!!👏 thanks you!👍