mirror of
				https://github.com/pnpm/action-setup.git
				synced 2025-10-31 17:32:24 +08:00 
			
		
		
		
	feat!: node20 upgrade (#110)
* upgrade versions to latest * remove usage of ts-schema-autogen * fix: update pnpm sources * update build/output * use node20 * fix: run-install array output * fix: maintain behaviour for parseRunInstall, error messages * fix: another edge case for input.args * fix: use zod for input validation * fix: use zod.infer for exported RunInstall types * fix: remove @types/js-yaml --------- Co-authored-by: Zoltan Kochan <z@kochan.io>
This commit is contained in:
		| @@ -1,21 +0,0 @@ | ||||
| { | ||||
|   "$schema": "https://raw.githubusercontent.com/ksxnodeapps/ts-schema-autogen/master/packages/schemas/config.schema.json", | ||||
|   "instruction": { | ||||
|     "compilerOptions": { | ||||
|       "strict": true, | ||||
|       "target": "ES2018", | ||||
|       "lib": [ | ||||
|         "ES2018", | ||||
|         "ES2019", | ||||
|         "ES2020", | ||||
|         "ESNext" | ||||
|       ], | ||||
|       "moduleResolution": "Node", | ||||
|       "esModuleInterop": true, | ||||
|       "resolveJsonModule": true | ||||
|     }, | ||||
|     "input": "run-install.ts", | ||||
|     "symbol": "RunInstallInput", | ||||
|     "output": "run-install-input.schema.json" | ||||
|   } | ||||
| } | ||||
| @@ -1,39 +0,0 @@ | ||||
| { | ||||
|   "anyOf": [ | ||||
|     { | ||||
|       "$ref": "#/definitions/RunInstall" | ||||
|     }, | ||||
|     { | ||||
|       "type": "array", | ||||
|       "items": { | ||||
|         "$ref": "#/definitions/RunInstall" | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "type": [ | ||||
|         "null", | ||||
|         "boolean" | ||||
|       ] | ||||
|     } | ||||
|   ], | ||||
|   "definitions": { | ||||
|     "RunInstall": { | ||||
|       "type": "object", | ||||
|       "properties": { | ||||
|         "recursive": { | ||||
|           "type": "boolean" | ||||
|         }, | ||||
|         "cwd": { | ||||
|           "type": "string" | ||||
|         }, | ||||
|         "args": { | ||||
|           "type": "array", | ||||
|           "items": { | ||||
|             "type": "string" | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   "$schema": "http://json-schema.org/draft-07/schema#" | ||||
| } | ||||
| @@ -1,39 +1,41 @@ | ||||
| import { getInput, error, InputOptions } from '@actions/core' | ||||
| import Ajv from 'ajv' | ||||
| import { load } from 'js-yaml' | ||||
| import process from 'process' | ||||
| import runInstallSchema from './run-install-input.schema.json' | ||||
| import { getInput, error } from '@actions/core' | ||||
| import * as yaml from 'yaml' | ||||
| import { z, ZodError } from 'zod' | ||||
|  | ||||
| export interface RunInstall { | ||||
|   readonly recursive?: boolean | ||||
|   readonly cwd?: string | ||||
|   readonly args?: readonly string[] | ||||
| } | ||||
| const RunInstallSchema = z.object({ | ||||
|   recursive: z.boolean().optional(), | ||||
|   cwd: z.string().optional(), | ||||
|   args: z.array(z.string()).optional(), | ||||
| }) | ||||
|  | ||||
| export type RunInstallInput = | ||||
|   | null | ||||
|   | boolean | ||||
|   | RunInstall | ||||
|   | RunInstall[] | ||||
| const RunInstallInputSchema = z.union([ | ||||
|   z.null(), | ||||
|   z.boolean(), | ||||
|   RunInstallSchema, | ||||
|   z.array(RunInstallSchema), | ||||
| ]) | ||||
|  | ||||
| const options: InputOptions = { | ||||
|   required: true, | ||||
| } | ||||
| export type RunInstallInput = z.infer<typeof RunInstallInputSchema> | ||||
| export type RunInstall = z.infer<typeof RunInstallSchema> | ||||
|  | ||||
| export function parseRunInstall(name: string): RunInstall[] { | ||||
|   const result: RunInstallInput = load(getInput(name, options)) as any | ||||
|   const ajv = new Ajv({ | ||||
|     allErrors: true, | ||||
|   }) | ||||
|   const validate = ajv.compile(runInstallSchema) | ||||
|   if (!validate(result)) { | ||||
|     for (const errorItem of validate.errors!) { | ||||
|       error(`with.run_install${errorItem.dataPath}: ${errorItem.message}`) | ||||
| export function parseRunInstall(inputName: string): RunInstall[] { | ||||
|   const input = getInput(inputName, { required: true }) | ||||
|   const parsedInput: unknown = yaml.parse(input) | ||||
|  | ||||
|   try { | ||||
|     const result: RunInstallInput = RunInstallInputSchema.parse(parsedInput) | ||||
|     if (!result) return [] | ||||
|     if (result === true) return [{ recursive: true }] | ||||
|     if (Array.isArray(result)) return result | ||||
|     return [result] | ||||
|   } catch (exception: unknown) { | ||||
|     error(`Error for input "${inputName}" = ${input}`) | ||||
|  | ||||
|     if (exception instanceof ZodError) { | ||||
|       error(`Errors: ${exception.errors}`) | ||||
|     } else { | ||||
|       error(`Exception: ${exception}`) | ||||
|     } | ||||
|     return process.exit(1) | ||||
|     process.exit(1) | ||||
|   } | ||||
|   if (!result) return [] | ||||
|   if (result === true) return [{ recursive: true }] | ||||
|   if (Array.isArray(result)) return result | ||||
|   return [result] | ||||
| } | ||||
|   | ||||
							
								
								
									
										134031
									
								
								src/install-pnpm/pnpm.js
									
									
									
									
									
								
							
							
						
						
									
										134031
									
								
								src/install-pnpm/pnpm.js
									
									
									
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @@ -16,7 +16,7 @@ export async function runSelfInstaller(inputs: Inputs): Promise<number> { | ||||
|  | ||||
|   // prepare target pnpm | ||||
|   const target = await readTarget({ version, packageJsonFile, standalone }) | ||||
|   const cp = spawn(execPath, [path.join(__dirname, 'pnpm.js'), 'install', target, '--no-lockfile'], { | ||||
|   const cp = spawn(execPath, [path.join(__dirname, 'pnpm.cjs'), 'install', target, '--no-lockfile'], { | ||||
|     cwd: dest, | ||||
|     stdio: ['pipe', 'inherit', 'inherit'], | ||||
|   }) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user