fix(#1357): Gracefully handle missing pnpm installation during cache

This change prevents the action from failing immediately when pnpm is specified
in packageManager but not yet installed (e.g., when using corepack).

Changes:
- Add isPackageManagerInstalled() function to check if a package manager exists
- Update restoreCache to skip caching with a warning if package manager not found
- Update cachePackages to skip cache save with a warning if package manager not found
- This allows workflows to continue instead of failing
- Users can either install pnpm first or disable caching with package-manager-cache: false

Fixes #1357
Related: https://github.com/actions/setup-node/issues/1357
This commit is contained in:
Satishchoudhary94 2026-01-18 14:08:11 +00:00
parent 6044e13b5d
commit dff445bec7
5 changed files with 109 additions and 3 deletions

View file

@ -110,6 +110,30 @@ export const getPackageManagerInfo = async (packageManager: string) => {
}
};
/**
* Checks if a package manager is installed and available on the PATH
* This helps prevent cache failures when a package manager is specified
* but not yet installed (e.g., pnpm via corepack)
* See: https://github.com/actions/setup-node/issues/1357
*/
export const isPackageManagerInstalled = async (
packageManager: string
): Promise<boolean> => {
try {
const {exitCode} = await exec.getExecOutput(
`${packageManager} --version`,
undefined,
{
ignoreReturnCode: true,
silent: true
}
);
return exitCode === 0;
} catch {
return false;
}
};
/**
* getProjectDirectoriesFromCacheDependencyPath is called twice during `restoreCache`
* - first through `getCacheDirectories`