mirror of
				https://github.com/shivammathur/setup-php.git
				synced 2025-10-31 07:16:22 +07:00 
			
		
		
		
	Merge pull request #690 from stevelacey/php-version-file
Support .php-version file for version detection
This commit is contained in:
		
							
								
								
									
										11
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								README.md
									
									
									
									
									
								
							| @ -391,7 +391,7 @@ Disable coverage for these reasons: | ||||
|  | ||||
| > Specify using `with` keyword | ||||
|  | ||||
| #### `php-version` (required) | ||||
| #### `php-version` (optional) | ||||
|  | ||||
| - Specify the PHP version you want to set up. | ||||
| - Accepts a `string`. For example `'8.0'`. | ||||
| @ -399,6 +399,15 @@ Disable coverage for these reasons: | ||||
| - Accepts `nightly` to set up a nightly build from the master branch of PHP. | ||||
| - Accepts the format `d.x`, where `d` is the major version. For example `5.x`, `7.x` and `8.x`.   | ||||
| - See [PHP support](#tada-php-support) for supported PHP versions. | ||||
| - By default, the PHP version is read from `php-version-file`. | ||||
| - Required if `php-version-file` does not exist. | ||||
|  | ||||
| #### `php-version-file` (optional) | ||||
|  | ||||
| - Specify the PHP version file you want to read when `php-version` is not provided. | ||||
| - Accepts a `string`. For example `'.phpenv-version'`. | ||||
| - See [PHP support](#tada-php-support) for supported PHP versions. | ||||
| - By default, `.php-version` file is used. | ||||
|  | ||||
| #### `extensions` (optional) | ||||
|  | ||||
|  | ||||
| @ -10,7 +10,7 @@ jest.mock('../src/install', () => ({ | ||||
|     .mockImplementation(async (os: string): Promise<string> => { | ||||
|       const filename = os + (await utils.scriptExtension(os)); | ||||
|       const version: string = await utils.parseVersion( | ||||
|         await utils.getInput('php-version', true) | ||||
|         await utils.resolveVersion() | ||||
|       ); | ||||
|       const ini_file: string = await utils.parseIniFile( | ||||
|         await utils.getInput('ini-file', false) | ||||
|  | ||||
| @ -1,3 +1,4 @@ | ||||
| import fs from 'fs'; | ||||
| import * as path from 'path'; | ||||
| import * as utils from '../src/utils'; | ||||
|  | ||||
| @ -7,7 +8,8 @@ import * as utils from '../src/utils'; | ||||
| jest.mock('@actions/core', () => ({ | ||||
|   getInput: jest.fn().mockImplementation(key => { | ||||
|     return ['setup-php'].indexOf(key) !== -1 ? key : ''; | ||||
|   }) | ||||
|   }), | ||||
|   info: jest.fn() | ||||
| })); | ||||
|  | ||||
| /** | ||||
| @ -261,6 +263,31 @@ describe('Utils tests', () => { | ||||
|     ); | ||||
|   }); | ||||
|  | ||||
|   it('checking resolveVersion', async () => { | ||||
|     await expect(utils.resolveVersion()).rejects.toThrow( | ||||
|       "Neither 'php-version' nor 'php-version-file' inputs were supplied, and could not find '.php-version' file." | ||||
|     ); | ||||
|  | ||||
|     process.env['php-version-file'] = '.phpenv-version'; | ||||
|     await expect(utils.resolveVersion()).rejects.toThrow( | ||||
|       "Could not find '.phpenv-version' file." | ||||
|     ); | ||||
|  | ||||
|     const existsSync = jest.spyOn(fs, 'existsSync').mockImplementation(); | ||||
|     const readFileSync = jest.spyOn(fs, 'readFileSync').mockImplementation(); | ||||
|  | ||||
|     existsSync.mockReturnValue(true); | ||||
|     readFileSync.mockReturnValue('8.1'); | ||||
|  | ||||
|     expect(await utils.resolveVersion()).toBe('8.1'); | ||||
|  | ||||
|     process.env['php-version'] = '8.2'; | ||||
|     expect(await utils.resolveVersion()).toBe('8.2'); | ||||
|  | ||||
|     existsSync.mockClear(); | ||||
|     readFileSync.mockClear(); | ||||
|   }); | ||||
|  | ||||
|   it('checking setVariable', async () => { | ||||
|     let script: string = await utils.setVariable('var', 'command', 'linux'); | ||||
|     expect(script).toEqual('\nvar="$(command)"\n'); | ||||
|  | ||||
							
								
								
									
										28
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										28
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							| @ -557,7 +557,7 @@ async function getScript(os) { | ||||
|     const ini_values_csv = await utils.getInput('ini-values', false); | ||||
|     const coverage_driver = await utils.getInput('coverage', false); | ||||
|     const tools_csv = await utils.getInput('tools', false); | ||||
|     const version = await utils.parseVersion(await utils.getInput('php-version', true)); | ||||
|     const version = await utils.parseVersion(await utils.resolveVersion()); | ||||
|     const ini_file = await utils.parseIniFile(await utils.getInput('ini-file', false)); | ||||
|     let script = await utils.joins('.', script_path, version, ini_file); | ||||
|     if (extension_csv) { | ||||
| @ -1032,8 +1032,12 @@ var __importStar = (this && this.__importStar) || function (mod) { | ||||
|     __setModuleDefault(result, mod); | ||||
|     return result; | ||||
| }; | ||||
| var __importDefault = (this && this.__importDefault) || function (mod) { | ||||
|     return (mod && mod.__esModule) ? mod : { "default": mod }; | ||||
| }; | ||||
| Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||
| exports.setVariable = exports.parseExtensionSource = exports.customPackage = exports.scriptTool = exports.scriptExtension = exports.joins = exports.getCommand = exports.getUnsupportedLog = exports.suppressOutput = exports.getExtensionPrefix = exports.CSVArray = exports.extensionArray = exports.addLog = exports.stepLog = exports.log = exports.color = exports.asyncForEach = exports.parseIniFile = exports.parseVersion = exports.getManifestURL = exports.getInput = exports.readEnv = void 0; | ||||
| exports.setVariable = exports.resolveVersion = exports.parseExtensionSource = exports.customPackage = exports.scriptTool = exports.scriptExtension = exports.joins = exports.getCommand = exports.getUnsupportedLog = exports.suppressOutput = exports.getExtensionPrefix = exports.CSVArray = exports.extensionArray = exports.addLog = exports.stepLog = exports.log = exports.color = exports.asyncForEach = exports.parseIniFile = exports.parseVersion = exports.getManifestURL = exports.getInput = exports.readEnv = void 0; | ||||
| const fs_1 = __importDefault(__nccwpck_require__(7147)); | ||||
| const path = __importStar(__nccwpck_require__(1017)); | ||||
| const core = __importStar(__nccwpck_require__(2186)); | ||||
| const fetch = __importStar(__nccwpck_require__(2387)); | ||||
| @ -1279,6 +1283,26 @@ async function parseExtensionSource(extension, prefix) { | ||||
|     return await joins('\nadd_extension_from_source', ...matches.splice(1, matches.length), prefix); | ||||
| } | ||||
| exports.parseExtensionSource = parseExtensionSource; | ||||
| async function resolveVersion() { | ||||
|     let version = await getInput('php-version', false); | ||||
|     let versionFile = await getInput('php-version-file', false); | ||||
|     if (version) { | ||||
|         return version; | ||||
|     } | ||||
|     if (versionFile && !fs_1.default.existsSync(versionFile)) { | ||||
|         throw new Error(`Could not find '${versionFile}' file.`); | ||||
|     } | ||||
|     versionFile ??= '.php-version'; | ||||
|     if (fs_1.default.existsSync(versionFile)) { | ||||
|         version = fs_1.default.readFileSync(versionFile, 'utf8'); | ||||
|         core.info(`Resolved ${versionFile} as ${version}`); | ||||
|     } | ||||
|     if (!version) { | ||||
|         throw new Error("Neither 'php-version' nor 'php-version-file' inputs were supplied, and could not find '.php-version' file."); | ||||
|     } | ||||
|     return version; | ||||
| } | ||||
| exports.resolveVersion = resolveVersion; | ||||
| async function setVariable(variable, command, os) { | ||||
|     switch (os) { | ||||
|         case 'win32': | ||||
|  | ||||
| @ -24,7 +24,7 @@ export async function getScript(os: string): Promise<string> { | ||||
|   const coverage_driver: string = await utils.getInput('coverage', false); | ||||
|   const tools_csv: string = await utils.getInput('tools', false); | ||||
|   const version: string = await utils.parseVersion( | ||||
|     await utils.getInput('php-version', true) | ||||
|     await utils.resolveVersion() | ||||
|   ); | ||||
|   const ini_file: string = await utils.parseIniFile( | ||||
|     await utils.getInput('ini-file', false) | ||||
|  | ||||
							
								
								
									
										32
									
								
								src/utils.ts
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								src/utils.ts
									
									
									
									
									
								
							| @ -1,3 +1,4 @@ | ||||
| import fs from 'fs'; | ||||
| import * as path from 'path'; | ||||
| import * as core from '@actions/core'; | ||||
| import * as fetch from './fetch'; | ||||
| @ -422,6 +423,37 @@ export async function parseExtensionSource( | ||||
|   ); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Resolve php version from input or file | ||||
|  */ | ||||
| export async function resolveVersion(): Promise<string> { | ||||
|   let version = await getInput('php-version', false); | ||||
|   let versionFile = await getInput('php-version-file', false); | ||||
|  | ||||
|   if (version) { | ||||
|     return version; | ||||
|   } | ||||
|  | ||||
|   if (versionFile && !fs.existsSync(versionFile)) { | ||||
|     throw new Error(`Could not find '${versionFile}' file.`); | ||||
|   } | ||||
|  | ||||
|   versionFile ??= '.php-version'; | ||||
|  | ||||
|   if (fs.existsSync(versionFile)) { | ||||
|     version = fs.readFileSync(versionFile, 'utf8'); | ||||
|     core.info(`Resolved ${versionFile} as ${version}`); | ||||
|   } | ||||
|  | ||||
|   if (!version) { | ||||
|     throw new Error( | ||||
|       "Neither 'php-version' nor 'php-version-file' inputs were supplied, and could not find '.php-version' file." | ||||
|     ); | ||||
|   } | ||||
|  | ||||
|   return version; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Log to console | ||||
|  * | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Shivam Mathur
					Shivam Mathur