Package manager caching strategy for pnpm and Yarn Modern
Situation
cypress-io/github-action caches package manager dependencies for:
and offers no equivalent built-in functionality for:
Background
The variety of package managers has expanded since cypress-io/github-action was originally developed when only npm and Yarn v1 Classic were available and in common use.
The action is set up to recognize the following lockfiles and use GitHub's @actions/cache to cache the related path:
| Lockfile | Linux path |
|---|---|
package-lock.json |
~/.npm |
yarn.lock |
~/.cache/yarn |
The above set of path settings does not however cover all currently used package managers:
| Package manager | Command | Linux default example |
|---|---|---|
| npm | npm config get cache |
~/.npm |
| pnpm v10 | pnpm store path |
~/.local/share/pnpm/store/v10 |
| Yarn v1 | yarn cache dir |
~/.cache/yarn/v6 |
Yarn Modern node-modules |
yarn config get cacheFolder |
~/.yarn/berry/cache |
Yarn Modern pnp |
yarn config get cacheFolder |
~/.yarn/berry/cache |
This causes the action to attempt to cache unused paths:
~/.npm(unused) for pnpm~/.cache/yarn(non-existent) for Yarn Modern
Assessment
GitHub Actions offers a full suite of setup-* actions to cache dependencies of commonly-used package managers.
For Cypress, the relevant caching action is actions/setup-node which offers caching for npm, Yarn (v1 and Modern) and pnpm.
Duplicating the capability from actions/setup-node into cypress-io/github-action for pnpm and Yarn would involve a significant effort and on-going maintenance for the Cypress team.
Recommendations
- [X] keep actions/setup-node for pnpm examples
- [x] add actions/setup-node to Yarn Modern examples #1374
- [ ] add an option to
cypress-io/github-actionto disable package manager caching, leaving the default as caching enabled (related to https://github.com/cypress-io/github-action/issues/953) - [x] add any new package manager caching recommendations into the README document
Related
- https://github.com/cypress-io/github-action/issues/953
- https://github.com/cypress-io/github-action/issues/969
- https://github.com/cypress-io/github-action/issues/1044
Update of Yarn Modern examples is delayed, pending resolution of:
- https://github.com/actions/cache/issues/1541
- https://github.com/actions/setup-node/issues/1233