cypress-io / cypress-io/github-action
Enable support for Cypress tests that rely on workspace packages
- Dominant language
- JavaScript
- Stars
- 1.5k
- Forks
- 353
- Avg merge
- 1d 22h
- Merged PRs (30d)
- 27
Description
The GitHub Action fails to run Cypress tests in a pnpm monorepo workspace with the following error:
```
Error: Webpack Compilation Error
Module not found: Error: Can't resolve '@repo/mock/rules' in /home/runner/work/monorepo/monorepo/packages/e2e/cypress/constants'
```
## Environment
- cypress-io/github-action: v6
- Cypress: v14.2.0
- Package manager: pnpm
- Project structure: Monorepo with workspace packages
- OS: Ubuntu 22.04 (GitHub Action runner)
## Project Structure
```
/monorepo
├── .github
│ └── workflows
│ └── web-e2e-deployed-environments.yml # GitHub Actions workflow file
├── packages
│ ├── mock # Mock package with KYC rules and scenarios
│ │ ├── package.json # Contains exports configuration
│ │ ├── src
│ │ │ └── handlers
│ │ │ └── kyc
│ │ │ ├── rules.ts # Exports RULES and SSNS used in tests
│ │ │ └── scenarios.ts # KYC mock scenarios
│ │ └── dist # Built JavaScript files
│ │
│ └── e2e # E2E test package using Cypress
│ │ ├── package.json
│ │ ├── cypress.config.ts
│ │ ├── cypress
│ │ ├── constants
│ │ │ └── kyc-mock-constants.ts # Imports from @repo/mock/rules
│ └── ...
```
## The import causing the issue
From `packages/e2e/cypress/constants/kyc-mock-constants.ts`:
```typescript
// Import using the exports field from package.json
import { RULES, SSNS } from '@repo/mock/rules';
```
From `packages/mock/package.json`:
```json
"exports": {
"./rules": {
"types": "./src/handlers/kyc/rules.ts",
"default": "./dist/handlers/kyc/rules.js"
}
}
```
## Steps to reproduce
1. Have a pnpm monorepo with workspace packages (using "workspace:*" in package.json)
2. Create a Cypress test that imports from a workspace package (e.g., `import { RULES } from '@repo/mock/rules'`)
3. Run the Cypress tests using the GitHub Action
## Current workflow
```yaml
# Install Cypress dependencies. Since we're in a monorepo, tell Cypress to look at the root package.json/lockfile
# Don't run the tests yet, we'll do that later in the proper directory
- name: Install Cypress dependencies
uses: cypress-io/github-action@v6
with:
runTests: false
- name: Build mock package
run: pnpm build --filter @repo/mock
- name: Run Cypress tests
uses: cypress-io/github-action@v6
env:
# Environment variables here
with:
install: false
working-directory: packages/e2e
browser: chrome
record: true
parallel: true
tag: "Staging"
```
## Expected behavior
The Cypress tests should be able to resolve and import the workspace package modules.
## Actual behavior
Cypress webpack preprocessor fails to resolve the imports, resulting in the above error.
## Additional information
- The issue seems to be related to how the GitHub Action configures Cypress with pnpm workspaces
- The mock package is built successfully before running the tests
- The same tests run fine locally with `pnpm cy:run`
## Expected behavior
The Cypress tests should be able to resolve and import the workspace package modules.
## Actual behavior
Cypress webpack preprocessor fails to resolve the imports, resulting in the above error.
## Possible solutions
1. Add native support for pnpm workspaces in the github-action
2. Provide built-in webpack configuration options for monorepos in the action
3. Document a recommended approach for handling pnpm workspaces with Cypress
Any guidance on how to fix this issue would be greatly appreciated!
Contributor guide
Assessment
This issue has not been assessed yet.