diff --git a/__tests__/utils.test.ts b/__tests__/utils.test.ts index 21feea57..f64be9bf 100644 --- a/__tests__/utils.test.ts +++ b/__tests__/utils.test.ts @@ -282,6 +282,24 @@ describe('Utils tests', () => { process.env['php-version'] = '8.2'; expect(await utils.readPHPVersion()).toBe('8.2'); + delete process.env['php-version-file']; + delete process.env['php-version']; + + existsSync.mockReturnValueOnce(false).mockReturnValueOnce(true); + readFileSync.mockReturnValue( + '{ "platform-overrides": { "php": "7.3.25" } }' + ); + expect(await utils.readPHPVersion()).toBe('7.3.25'); + + existsSync + .mockReturnValueOnce(false) + .mockReturnValueOnce(false) + .mockReturnValueOnce(true); + readFileSync.mockReturnValue( + '{ "config": { "platform": { "php": "7.4.33" } } }' + ); + expect(await utils.readPHPVersion()).toBe('7.4.33'); + existsSync.mockClear(); readFileSync.mockClear(); }); diff --git a/dist/index.js b/dist/index.js index 4a719438..c61b659a 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1371,6 +1371,23 @@ async function readPHPVersion() { else if (versionFile !== '.php-version') { throw new Error(`Could not find '${versionFile}' file.`); } + const composerLock = 'composer.lock'; + if (fs_1.default.existsSync(composerLock)) { + const lockFileContents = JSON.parse(fs_1.default.readFileSync(composerLock, 'utf8')); + if (lockFileContents['platform-overrides'] && + lockFileContents['platform-overrides']['php']) { + return lockFileContents['platform-overrides']['php']; + } + } + const composerJson = 'composer.json'; + if (fs_1.default.existsSync(composerJson)) { + const composerFileContents = JSON.parse(fs_1.default.readFileSync(composerJson, 'utf8')); + if (composerFileContents['config'] && + composerFileContents['config']['platform'] && + composerFileContents['config']['platform']['php']) { + return composerFileContents['config']['platform']['php']; + } + } return 'latest'; } exports.readPHPVersion = readPHPVersion; diff --git a/src/utils.ts b/src/utils.ts index e25928a4..c42b9310 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -440,6 +440,32 @@ export async function readPHPVersion(): Promise { } else if (versionFile !== '.php-version') { throw new Error(`Could not find '${versionFile}' file.`); } + + const composerLock = 'composer.lock'; + if (fs.existsSync(composerLock)) { + const lockFileContents = JSON.parse(fs.readFileSync(composerLock, 'utf8')); + if ( + lockFileContents['platform-overrides'] && + lockFileContents['platform-overrides']['php'] + ) { + return lockFileContents['platform-overrides']['php']; + } + } + + const composerJson = 'composer.json'; + if (fs.existsSync(composerJson)) { + const composerFileContents = JSON.parse( + fs.readFileSync(composerJson, 'utf8') + ); + if ( + composerFileContents['config'] && + composerFileContents['config']['platform'] && + composerFileContents['config']['platform']['php'] + ) { + return composerFileContents['config']['platform']['php']; + } + } + return 'latest'; }