diff --git a/lib/manager/composer/types.ts b/lib/manager/composer/types.ts index b5df7f99c1abbd3be86762b954510fca4a948c90..65e9c3fe7ad6cc1b9b46f81f610d35e0332f9b21 100644 --- a/lib/manager/composer/types.ts +++ b/lib/manager/composer/types.ts @@ -8,6 +8,17 @@ export interface Repo { } export interface ComposerConfig { type?: string; + /** + * Setting a fixed PHP version (e.g. {"php": "7.0.3"}) will let you fake the + * platform version so that you can emulate a production env or define your + * target platform in the config. + * See https://getcomposer.org/doc/06-config.md#platform + */ + config?: { + platform?: { + php?: string; + }; + }; /** * A repositories field can be an array of Repo objects or an object of repoName: Repo * Also it can be a boolean (usually false) to disable packagist. diff --git a/lib/manager/composer/utils.spec.ts b/lib/manager/composer/utils.spec.ts index 563ff991fc239400b0e228b14ca6ac333b4b02a1..47de19bd1a8628a6326d61a2b65ed6fa8faab623 100644 --- a/lib/manager/composer/utils.spec.ts +++ b/lib/manager/composer/utils.spec.ts @@ -18,6 +18,18 @@ describe('manager/composer/utils', () => { ).toEqual({ php: '>=5.3.2', composer: '1.1.0' }); }); + it('returns platform php version', () => { + expect( + extractContraints( + { + config: { platform: { php: '7.4.27' } }, + require: { php: '~7.4 || ~8.0' }, + }, + {} + ) + ).toEqual({ composer: '1.*', php: '7.4.27' }); + }); + it('returns from require-dev', () => { expect( extractContraints( diff --git a/lib/manager/composer/utils.ts b/lib/manager/composer/utils.ts index d17fe86a9d3ffd1fdd1675b14f36b5ef894c7b5d..b2b0d31fe582c929826482cc2026baa533a37fb3 100644 --- a/lib/manager/composer/utils.ts +++ b/lib/manager/composer/utils.ts @@ -69,8 +69,10 @@ export function extractContraints( const res: Record<string, string> = { composer: '1.*' }; // extract php - if (composerJson.require?.php) { - res.php = composerJson.require?.php; + if (composerJson.config?.platform?.php) { + res.php = composerJson.config.platform.php; + } else if (composerJson.require?.php) { + res.php = composerJson.require.php; } // extract direct composer dependency