mirror of
				https://github.com/pnpm/action-setup.git
				synced 2025-11-01 01:42:13 +08:00 
			
		
		
		
	feat: throw error when multiple versions specified (#122)
* Throw error when multiple versions specified * fix: fmt * fix: fmt * Swallow error on ENOENT * Match versions * refactor: install pnpm --------- Co-authored-by: Khải <hvksmr1996@gmail.com> Co-authored-by: Zoltan Kochan <z@kochan.io>
This commit is contained in:
		| @@ -1,8 +1,10 @@ | ||||
| import { addPath, exportVariable } from '@actions/core' | ||||
| import { spawn } from 'child_process' | ||||
| import { rm, writeFile, readFile, mkdir } from 'fs/promises' | ||||
| import { rm, writeFile, mkdir } from 'fs/promises' | ||||
| import { readFileSync } from 'fs' | ||||
| import path from 'path' | ||||
| import { execPath } from 'process' | ||||
| import util from 'util' | ||||
| import { Inputs } from '../inputs' | ||||
|  | ||||
| export async function runSelfInstaller(inputs: Inputs): Promise<number> { | ||||
| @@ -41,10 +43,33 @@ async function readTarget(opts: { | ||||
|   readonly standalone: boolean | ||||
| }) { | ||||
|   const { version, packageJsonFile, standalone } = opts | ||||
|  | ||||
|   if (version) return `${ standalone ? '@pnpm/exe' : 'pnpm' }@${version}` | ||||
|  | ||||
|   const { GITHUB_WORKSPACE } = process.env | ||||
|  | ||||
|   let packageManager | ||||
|  | ||||
|   if (GITHUB_WORKSPACE) { | ||||
|     try { | ||||
|       ({ packageManager } = JSON.parse(readFileSync(path.join(GITHUB_WORKSPACE, packageJsonFile), 'utf8'))) | ||||
|     } catch (error: unknown) { | ||||
|       // Swallow error if package.json doesn't exist in root | ||||
|       if (!util.types.isNativeError(error) || !('code' in error) || error.code !== 'ENOENT') throw error | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (version) { | ||||
|     if ( | ||||
|       typeof packageManager === 'string' && | ||||
|       packageManager.replace('pnpm@', '') !== version | ||||
|     ) { | ||||
|       throw new Error(`Multiple versions of pnpm specified: | ||||
|   - version ${version} in the GitHub Action config with the key "version" | ||||
|   - version ${packageManager} in the package.json with the key "packageManager" | ||||
| Remove one of these versions to avoid version mismatch errors like ERR_PNPM_BAD_PM_VERSION`) | ||||
|     } | ||||
|      | ||||
|     return `${ standalone ? '@pnpm/exe' : 'pnpm' }@${version}` | ||||
|   } | ||||
|  | ||||
|   if (!GITHUB_WORKSPACE) { | ||||
|     throw new Error(`No workspace is found. | ||||
| If you're intended to let pnpm/action-setup read preferred pnpm version from the "packageManager" field in the package.json file, | ||||
| @@ -52,7 +77,6 @@ please run the actions/checkout before pnpm/action-setup. | ||||
| Otherwise, please specify the pnpm version in the action configuration.`) | ||||
|   } | ||||
|  | ||||
|   const { packageManager } = JSON.parse(await readFile(path.join(GITHUB_WORKSPACE, packageJsonFile), 'utf8')) | ||||
|   if (typeof packageManager !== 'string') { | ||||
|     throw new Error(`No pnpm version is specified. | ||||
| Please specify it by one of the following ways: | ||||
| @@ -64,7 +88,7 @@ Please specify it by one of the following ways: | ||||
|     throw new Error('Invalid packageManager field in package.json') | ||||
|   } | ||||
|  | ||||
|   if(standalone){ | ||||
|   if (standalone) { | ||||
|     return packageManager.replace('pnpm@', '@pnpm/exe@') | ||||
|   } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user