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:
parent
6044e13b5d
commit
dff445bec7
5 changed files with 109 additions and 3 deletions
|
|
@ -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`
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue