From f51d00d35093385491d63ab9bbab83efd02173e6 Mon Sep 17 00:00:00 2001 From: Michele Locati Date: Fri, 30 Oct 2020 11:15:26 +0100 Subject: [PATCH 1/2] Allow installing a specific Composer version --- __tests__/tools.test.ts | 9 +++++++++ dist/index.js | 4 ++++ src/tools.ts | 6 ++++++ 3 files changed, 19 insertions(+) diff --git a/__tests__/tools.test.ts b/__tests__/tools.test.ts index 1a6b1acf..4bc7db4f 100644 --- a/__tests__/tools.test.ts +++ b/__tests__/tools.test.ts @@ -267,6 +267,15 @@ describe('Tools tests', () => { expect(await tools.getComposerUrl('2')).toContain( 'https://getcomposer.org/composer-2.phar' ); + expect(await tools.getComposerUrl('1.7.2')).toContain( + 'https://github.com/composer/composer/releases/download/1.7.2/composer.phar' + ); + expect(await tools.getComposerUrl('2.0.0-RC2')).toContain( + 'https://github.com/composer/composer/releases/download/2.0.0-RC2/composer.phar' + ); + expect(await tools.getComposerUrl('wrong')).toContain( + 'https://getcomposer.org/composer-stable.phar' + ); }); it('checking getSymfonyUri', async () => { diff --git a/dist/index.js b/dist/index.js index 83836f34..a44fb254 100644 --- a/dist/index.js +++ b/dist/index.js @@ -2058,6 +2058,10 @@ async function getComposerUrl(version) { case '2': return (cache_url + 'https://getcomposer.org/composer-' + version + '.phar'); default: + if (/^\d+\.\d+\.\d+[\w-]*$/.test(version)) { + return (cache_url + + `https://github.com/composer/composer/releases/download/${version}/composer.phar`); + } return cache_url + 'https://getcomposer.org/composer-stable.phar'; } } diff --git a/src/tools.ts b/src/tools.ts index 8a05a44a..050802d4 100644 --- a/src/tools.ts +++ b/src/tools.ts @@ -344,6 +344,12 @@ export async function getComposerUrl(version: string): Promise { cache_url + 'https://getcomposer.org/composer-' + version + '.phar' ); default: + if (/^\d+\.\d+\.\d+[\w-]*$/.test(version)) { + return ( + cache_url + + `https://github.com/composer/composer/releases/download/${version}/composer.phar` + ); + } return cache_url + 'https://getcomposer.org/composer-stable.phar'; } } From 808e74aed58c90c67bf261a16c9cd553266b3549 Mon Sep 17 00:00:00 2001 From: Michele Locati Date: Fri, 30 Oct 2020 11:35:39 +0100 Subject: [PATCH 2/2] Adjust filtered composer version --- __tests__/tools.test.ts | 12 ++++++++++-- dist/index.js | 4 ++-- src/tools.ts | 4 ++-- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/__tests__/tools.test.ts b/__tests__/tools.test.ts index 4bc7db4f..015caf08 100644 --- a/__tests__/tools.test.ts +++ b/__tests__/tools.test.ts @@ -222,9 +222,17 @@ describe('Tools tests', () => { 'a', 'b' ]); + expect(await tools.addComposer(['a', 'b', 'composer:1.2'])).toStrictEqual([ + 'composer', + 'a', + 'b' + ]); expect( await tools.addComposer(['a', 'b', 'composer:1.2.3']) - ).toStrictEqual(['composer', 'a', 'b']); + ).toStrictEqual(['composer:1.2.3', 'a', 'b']); + expect( + await tools.addComposer(['a', 'b', 'composer:v1.2.3']) + ).toStrictEqual(['composer:1.2.3', 'a', 'b']); expect( await tools.addComposer(['a', 'b', 'composer:snapshot']) ).toStrictEqual(['composer:snapshot', 'a', 'b']); @@ -304,7 +312,7 @@ describe('Tools tests', () => { it('checking getCleanedToolsList', async () => { const tools_list: string[] = await tools.getCleanedToolsList( - 'tool, composer:1.2.3, behat/behat, icanhazstring/composer-unused, laravel/vapor-cli, robmorgan/phinx, phpspec/phpspec, symfony/flex' + 'tool, composer:1.2, behat/behat, icanhazstring/composer-unused, laravel/vapor-cli, robmorgan/phinx, phpspec/phpspec, symfony/flex' ); expect(tools_list).toStrictEqual([ 'composer', diff --git a/dist/index.js b/dist/index.js index a44fb254..a13b9c05 100644 --- a/dist/index.js +++ b/dist/index.js @@ -2022,7 +2022,7 @@ exports.getWpCliUrl = getWpCliUrl; */ async function addComposer(tools_list) { const regex_any = /^composer($|:.*)/; - const regex_valid = /^composer:?($|preview$|snapshot$|v?[1-2]$)/; + const regex_valid = /^composer:?($|preview$|snapshot$|v?[1-2]$|v?\d+\.\d+\.\d+[\w-]*$)/; const regex_composer1_tools = /hirak|prestissimo|narrowspark|composer-prefetcher/; const matches = tools_list.filter(tool => regex_valid.test(tool)); let composer = 'composer'; @@ -2034,7 +2034,7 @@ async function addComposer(tools_list) { case matches[0] == undefined: break; default: - composer = matches[matches.length - 1].replace(/v([1-2])/, '$1'); + composer = matches[matches.length - 1].replace(/v(\d\S*)/, '$1'); break; } tools_list.unshift(composer); diff --git a/src/tools.ts b/src/tools.ts index 050802d4..5914099b 100644 --- a/src/tools.ts +++ b/src/tools.ts @@ -305,7 +305,7 @@ export async function getWpCliUrl(version: string): Promise { */ export async function addComposer(tools_list: string[]): Promise { const regex_any = /^composer($|:.*)/; - const regex_valid = /^composer:?($|preview$|snapshot$|v?[1-2]$)/; + const regex_valid = /^composer:?($|preview$|snapshot$|v?[1-2]$|v?\d+\.\d+\.\d+[\w-]*$)/; const regex_composer1_tools = /hirak|prestissimo|narrowspark|composer-prefetcher/; const matches: string[] = tools_list.filter(tool => regex_valid.test(tool)); let composer = 'composer'; @@ -317,7 +317,7 @@ export async function addComposer(tools_list: string[]): Promise { case matches[0] == undefined: break; default: - composer = matches[matches.length - 1].replace(/v([1-2])/, '$1'); + composer = matches[matches.length - 1].replace(/v(\d\S*)/, '$1'); break; } tools_list.unshift(composer);