mirror of
				https://github.com/pnpm/action-setup.git
				synced 2025-11-04 05:19:08 +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:
		
							
								
								
									
										8
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@@ -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:
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user