diff --git a/__tests__/tools.test.ts b/__tests__/tools.test.ts index ca4d0e7a..e8337688 100644 --- a/__tests__/tools.test.ts +++ b/__tests__/tools.test.ts @@ -16,7 +16,7 @@ describe('Tools tests', () => { expect(await tools.getToolVersion('1.2.3-alpha.1')).toBe('1.2.3-alpha.1'); }); - it('checking parseToolVersion', async () => { + it('checking parseTool', async () => { expect(await tools.parseTool('phpunit')).toStrictEqual({ name: 'phpunit', version: 'latest' @@ -65,6 +65,10 @@ describe('Tools tests', () => { name: 'phpunit', version: '1.2.3-alpha.1' }); + expect(await tools.parseTool('phpunit/phpunit:^1.2.3')).toStrictEqual({ + name: 'phpunit/phpunit', + version: '^1.2.3' + }); }); it('checking getUri', async () => { @@ -234,22 +238,6 @@ describe('Tools tests', () => { ); }); - it('checking getCleanedToolsList', async () => { - const tools_list: string[] = await tools.getCleanedToolsList( - 'tool, composer:1.2, behat/behat, icanhazstring/composer-unused, laravel/vapor-cli, robmorgan/phinx, phpspec/phpspec, symfony/flex' - ); - expect(tools_list).toStrictEqual([ - 'composer', - 'tool', - 'behat', - 'composer-unused', - 'vapor-cli', - 'phinx', - 'phpspec', - 'flex' - ]); - }); - it('checking getWpCliUri', async () => { expect(await tools.getWpCliUrl('latest')).toBe( 'wp-cli/builds/blob/gh-pages/phar/wp-cli.phar?raw=true' @@ -548,9 +536,11 @@ describe('Tools tests', () => { const listOfTools = [ 'composer:v1', 'codeception/codeception', + 'prestissimo', 'hirak/prestissimo', + 'composer-prefetcher', 'narrowspark/automatic-composer-prefetcher', - 'robmorgan/phinx' + 'robmorgan/phinx: ^1.2' ]; const script: string = await tools.addTools( @@ -563,9 +553,9 @@ describe('Tools tests', () => { 'Add-Tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-1.phar,https://getcomposer.org/composer-1.phar composer' ); expect(script).toContain('Add-Composertool prestissimo prestissimo hirak/'); - expect(script).toContain('Add-Composertool phinx phinx robmorgan/'); + expect(script).toContain('Add-Composertool phinx phinx:^1.2 robmorgan/'); expect(script).toContain( - 'Add-Composertool composer-prefetcher composer-prefetcher narrowspark/automatic-' + 'Add-Composertool automatic-composer-prefetcher automatic-composer-prefetcher narrowspark/' ); }); it('checking composer setup', async () => { diff --git a/dist/index.js b/dist/index.js index ea9454c9..fb7cf7e4 100644 --- a/dist/index.js +++ b/dist/index.js @@ -2162,7 +2162,7 @@ var __importStar = (this && this.__importStar) || function (mod) { return result; }; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.addTools = exports.addPackage = exports.addDevTools = exports.addArchive = exports.getCleanedToolsList = exports.getComposerUrl = exports.addComposer = exports.getWpCliUrl = exports.getSymfonyUri = exports.getDeployerUrl = exports.getBlackfirePlayerUrl = exports.getPharUrl = exports.addPhive = exports.getUri = exports.parseTool = exports.getToolVersion = void 0; +exports.addTools = exports.addPackage = exports.addDevTools = exports.addArchive = exports.getComposerUrl = exports.addComposer = exports.getWpCliUrl = exports.getSymfonyUri = exports.getDeployerUrl = exports.getBlackfirePlayerUrl = exports.getPharUrl = exports.addPhive = exports.getUri = exports.parseTool = exports.getToolVersion = void 0; const utils = __importStar(__nccwpck_require__(314)); /** * Function to get tool version @@ -2194,12 +2194,17 @@ async function parseTool(release) { const parts = release.split(':'); const tool = parts[0]; const version = parts[1]; - switch (version) { - case undefined: + switch (true) { + case version === undefined: return { name: tool, version: 'latest' }; + case /^[\w.-]+\/[\w.-]+$/.test(tool): + return { + name: tool, + version: version + }; default: return { name: tool, @@ -2395,24 +2400,6 @@ async function getComposerUrl(version) { } } exports.getComposerUrl = getComposerUrl; -/** - * Function to get Tools list after cleanup - * - * @param tools_csv - */ -async function getCleanedToolsList(tools_csv) { - let tools_list = await utils.CSVArray(tools_csv); - tools_list = await addComposer(tools_list); - tools_list = tools_list - .map(function (extension) { - return extension - .trim() - .replace(/-agent|behat\/|codeception\/|hirak\/|icanhazstring\/|laravel\/|narrowspark\/automatic-|overtrue\/|phpspec\/|robmorgan\/|symfony\//, ''); - }) - .filter(Boolean); - return [...new Set(tools_list)]; -} -exports.getCleanedToolsList = getCleanedToolsList; /** * Helper function to get script to setup a tool using a phar url * @@ -2466,7 +2453,7 @@ exports.addPackage = addPackage; */ async function addTools(tools_csv, php_version, os_version) { let script = '\n' + (await utils.stepLog('Setup Tools', os_version)); - const tools_list = await getCleanedToolsList(tools_csv); + const tools_list = await addComposer(await utils.CSVArray(tools_csv)); await utils.asyncForEach(tools_list, async function (release) { const tool_data = await parseTool(release); const tool = tool_data.name; @@ -2475,126 +2462,122 @@ async function addTools(tools_csv, php_version, os_version) { let uri = await getUri(tool, '.phar', version, 'releases', '', 'download'); script += '\n'; let url = ''; - switch (tool) { - case 'blackfire': - case 'grpc_php_plugin': - case 'protoc': + switch (true) { + case /^blackfire(-agent)?$/.test(tool): + script += await utils.customPackage('blackfire', 'tools', version, os_version); + break; + case /^grpc_php_plugin$|^protoc$/.test(tool): script += await utils.customPackage(tool, 'tools', version, os_version); break; - case 'behat': - case 'codeception': - case 'phpspec': + case /^behat$|^codeception$|^phpspec$/.test(tool): script += await addPackage(tool, release, tool + '/', os_version); break; - case 'blackfire-player': + case /^blackfire-player$/.test(tool): url = await getBlackfirePlayerUrl(version, php_version); script += await addArchive(tool, url, os_version, '"-V"'); break; - case 'composer': + case /^composer$/.test(tool): url = await getComposerUrl(version); script += await addArchive('composer', url, os_version, version); break; - case 'composer-normalize': + case /^composer-normalize$/.test(tool): uri = await getUri(tool, '.phar', version, 'releases', '', 'download'); url = github + 'ergebnis/composer-normalize/' + uri; script += await addArchive(tool, url, os_version, '"-V"'); break; - case 'composer-prefetcher': - script += await addPackage(tool, release, 'narrowspark/automatic-', os_version); + case /^composer-prefetcher$/.test(tool): + script += await addPackage('automatic-' + tool, release, 'narrowspark/', os_version); break; - case 'composer-require-checker': + case /^composer-require-checker$/.test(tool): uri = await getUri(tool, '.phar', version, 'releases', '', 'download'); url = github + 'maglnet/ComposerRequireChecker/' + uri; script += await addArchive(tool, url, os_version, '"-V"'); break; - case 'composer-unused': + case /^composer-unused$/.test(tool): script += await addPackage(tool, release, 'icanhazstring/', os_version); break; - case 'cs2pr': + case /^cs2pr$/.test(tool): uri = await getUri(tool, '', version, 'releases', '', 'download'); url = github + 'staabm/annotate-pull-request-from-checkstyle/' + uri; script += await addArchive(tool, url, os_version, '"-V"'); break; - case 'deployer': + case /^deployer$/.test(tool): url = await getDeployerUrl(version); script += await addArchive(tool, url, os_version, '"-V"'); break; - case 'flex': + case /^flex$/.test(tool): script += await addPackage(tool, release, 'symfony/', os_version); break; - case 'infection': + case /^infection$/.test(tool): url = github + 'infection/infection/' + uri; script += await addArchive(tool, url, os_version, '"-V"'); break; - case 'pecl': + case /^pecl/.test(tool): script += await utils.getCommand(os_version, 'pecl'); break; - case 'phan': + case /^phan$/.test(tool): url = github + 'phan/phan/' + uri; script += await addArchive(tool, url, os_version, '"-v"'); break; - case 'phing': + case /^phing$/.test(tool): url = 'https://www.phing.info/get/phing-' + version + '.phar'; script += await addArchive(tool, url, os_version, '"-v"'); break; - case 'phinx': + case /^phinx$/.test(tool): script += await addPackage(tool, release, 'robmorgan/', os_version); break; - case 'phive': + case /^phive$/.test(tool): script += await addPhive(version, php_version, os_version); break; - case 'php-config': - case 'phpize': + case /^php(-config|ize)$/.test(tool): script += await addDevTools(tool, os_version); break; - case 'php-cs-fixer': + case /^php-cs-fixer$/.test(tool): uri = await getUri(tool, '.phar', version, 'releases', 'v', 'download'); url = github + 'FriendsOfPHP/PHP-CS-Fixer/' + uri; script += await addArchive(tool, url, os_version, '"-V"'); break; - case 'phpcbf': - case 'phpcs': + case /^php(cbf|cs)$/.test(tool): url = github + 'squizlabs/PHP_CodeSniffer/' + uri; script += await addArchive(tool, url, os_version, '"--version"'); break; - case 'phpcpd': - case 'phpunit': + case /^php(cpd|unit)$/.test(tool): url = await getPharUrl('https://phar.phpunit.de', tool, '', version); script += await addArchive(tool, url, os_version, '"--version"'); break; - case 'phplint': + case /^phplint$/.test(tool): script += await addPackage(tool, release, 'overtrue/', os_version); break; - case 'phpmd': + case /^phpmd$/.test(tool): url = github + 'phpmd/phpmd/' + uri; script += await addArchive(tool, url, os_version, '"--version"'); break; - case 'phpstan': + case /^phpstan$/.test(tool): url = github + 'phpstan/phpstan/' + uri; script += await addArchive(tool, url, os_version, '"-V"'); break; - case 'prestissimo': + case /^prestissimo$/.test(tool): script += await addPackage(tool, release, 'hirak/', os_version); break; - case 'psalm': + case /^psalm$/.test(tool): url = github + 'vimeo/psalm/' + uri; script += await addArchive(tool, url, os_version, '"-v"'); break; - case 'symfony': - case 'symfony-cli': + case /^symfony(-cli)?$/.test(tool): uri = await getSymfonyUri(version, os_version); url = github + 'symfony/cli/' + uri; script += await addArchive('symfony', url, os_version, 'version'); break; - case 'vapor-cli': - case 'vapor': + case /^vapor(-cli)?$/.test(tool): script += await addPackage('vapor-cli', release, 'laravel/', os_version); break; - case 'wp': - case 'wp-cli': + case /^wp(-cli)?$/.test(tool): url = github + (await getWpCliUrl(version)); script += await addArchive('wp-cli', url, os_version, '"--version"'); break; + case /^[\w.-]+\/[\w.-]+$/.test(tool): + script += await addPackage(tool.split('/')[1], release.split('/')[1].replace(/\s+/, ''), tool.split('/')[0] + '/', os_version); + break; default: script += await utils.addLog('$cross', tool, 'Tool ' + tool + ' is not supported', os_version); break; diff --git a/src/tools.ts b/src/tools.ts index c4d6dfe7..423c9744 100644 --- a/src/tools.ts +++ b/src/tools.ts @@ -32,12 +32,17 @@ export async function parseTool( const parts: string[] = release.split(':'); const tool: string = parts[0]; const version: string | undefined = parts[1]; - switch (version) { - case undefined: + switch (true) { + case version === undefined: return { name: tool, version: 'latest' }; + case /^[\w.-]+\/[\w.-]+$/.test(tool): + return { + name: tool, + version: version + }; default: return { name: tool, @@ -283,29 +288,6 @@ export async function getComposerUrl(version: string): Promise { } } -/** - * Function to get Tools list after cleanup - * - * @param tools_csv - */ -export async function getCleanedToolsList( - tools_csv: string -): Promise { - let tools_list: string[] = await utils.CSVArray(tools_csv); - tools_list = await addComposer(tools_list); - tools_list = tools_list - .map(function (extension: string) { - return extension - .trim() - .replace( - /-agent|behat\/|codeception\/|hirak\/|icanhazstring\/|laravel\/|narrowspark\/automatic-|overtrue\/|phpspec\/|robmorgan\/|symfony\//, - '' - ); - }) - .filter(Boolean); - return [...new Set(tools_list)]; -} - /** * Helper function to get script to setup a tool using a phar url * @@ -387,7 +369,7 @@ export async function addTools( os_version: string ): Promise { let script = '\n' + (await utils.stepLog('Setup Tools', os_version)); - const tools_list: Array = await getCleanedToolsList(tools_csv); + const tools_list = await addComposer(await utils.CSVArray(tools_csv)); await utils.asyncForEach(tools_list, async function (release: string) { const tool_data: {name: string; version: string} = await parseTool(release); const tool: string = tool_data.name; @@ -403,124 +385,123 @@ export async function addTools( ); script += '\n'; let url = ''; - switch (tool) { - case 'blackfire': - case 'grpc_php_plugin': - case 'protoc': + switch (true) { + case /^blackfire(-agent)?$/.test(tool): + script += await utils.customPackage( + 'blackfire', + 'tools', + version, + os_version + ); + break; + case /^grpc_php_plugin$|^protoc$/.test(tool): script += await utils.customPackage(tool, 'tools', version, os_version); break; - case 'behat': - case 'codeception': - case 'phpspec': + case /^behat$|^codeception$|^phpspec$/.test(tool): script += await addPackage(tool, release, tool + '/', os_version); break; - case 'blackfire-player': + case /^blackfire-player$/.test(tool): url = await getBlackfirePlayerUrl(version, php_version); script += await addArchive(tool, url, os_version, '"-V"'); break; - case 'composer': + case /^composer$/.test(tool): url = await getComposerUrl(version); script += await addArchive('composer', url, os_version, version); break; - case 'composer-normalize': + case /^composer-normalize$/.test(tool): uri = await getUri(tool, '.phar', version, 'releases', '', 'download'); url = github + 'ergebnis/composer-normalize/' + uri; script += await addArchive(tool, url, os_version, '"-V"'); break; - case 'composer-prefetcher': + case /^composer-prefetcher$/.test(tool): script += await addPackage( - tool, + 'automatic-' + tool, release, - 'narrowspark/automatic-', + 'narrowspark/', os_version ); break; - case 'composer-require-checker': + case /^composer-require-checker$/.test(tool): uri = await getUri(tool, '.phar', version, 'releases', '', 'download'); url = github + 'maglnet/ComposerRequireChecker/' + uri; script += await addArchive(tool, url, os_version, '"-V"'); break; - case 'composer-unused': + case /^composer-unused$/.test(tool): script += await addPackage(tool, release, 'icanhazstring/', os_version); break; - case 'cs2pr': + case /^cs2pr$/.test(tool): uri = await getUri(tool, '', version, 'releases', '', 'download'); url = github + 'staabm/annotate-pull-request-from-checkstyle/' + uri; script += await addArchive(tool, url, os_version, '"-V"'); break; - case 'deployer': + case /^deployer$/.test(tool): url = await getDeployerUrl(version); script += await addArchive(tool, url, os_version, '"-V"'); break; - case 'flex': + case /^flex$/.test(tool): script += await addPackage(tool, release, 'symfony/', os_version); break; - case 'infection': + case /^infection$/.test(tool): url = github + 'infection/infection/' + uri; script += await addArchive(tool, url, os_version, '"-V"'); break; - case 'pecl': + case /^pecl/.test(tool): script += await utils.getCommand(os_version, 'pecl'); break; - case 'phan': + case /^phan$/.test(tool): url = github + 'phan/phan/' + uri; script += await addArchive(tool, url, os_version, '"-v"'); break; - case 'phing': + case /^phing$/.test(tool): url = 'https://www.phing.info/get/phing-' + version + '.phar'; script += await addArchive(tool, url, os_version, '"-v"'); break; - case 'phinx': + case /^phinx$/.test(tool): script += await addPackage(tool, release, 'robmorgan/', os_version); break; - case 'phive': + case /^phive$/.test(tool): script += await addPhive(version, php_version, os_version); break; - case 'php-config': - case 'phpize': + case /^php(-config|ize)$/.test(tool): script += await addDevTools(tool, os_version); break; - case 'php-cs-fixer': + case /^php-cs-fixer$/.test(tool): uri = await getUri(tool, '.phar', version, 'releases', 'v', 'download'); url = github + 'FriendsOfPHP/PHP-CS-Fixer/' + uri; script += await addArchive(tool, url, os_version, '"-V"'); break; - case 'phpcbf': - case 'phpcs': + case /^php(cbf|cs)$/.test(tool): url = github + 'squizlabs/PHP_CodeSniffer/' + uri; script += await addArchive(tool, url, os_version, '"--version"'); break; - case 'phpcpd': - case 'phpunit': + case /^php(cpd|unit)$/.test(tool): url = await getPharUrl('https://phar.phpunit.de', tool, '', version); script += await addArchive(tool, url, os_version, '"--version"'); break; - case 'phplint': + case /^phplint$/.test(tool): script += await addPackage(tool, release, 'overtrue/', os_version); break; - case 'phpmd': + case /^phpmd$/.test(tool): url = github + 'phpmd/phpmd/' + uri; script += await addArchive(tool, url, os_version, '"--version"'); break; - case 'phpstan': + case /^phpstan$/.test(tool): url = github + 'phpstan/phpstan/' + uri; script += await addArchive(tool, url, os_version, '"-V"'); break; - case 'prestissimo': + case /^prestissimo$/.test(tool): script += await addPackage(tool, release, 'hirak/', os_version); break; - case 'psalm': + case /^psalm$/.test(tool): url = github + 'vimeo/psalm/' + uri; script += await addArchive(tool, url, os_version, '"-v"'); break; - case 'symfony': - case 'symfony-cli': + case /^symfony(-cli)?$/.test(tool): uri = await getSymfonyUri(version, os_version); url = github + 'symfony/cli/' + uri; script += await addArchive('symfony', url, os_version, 'version'); break; - case 'vapor-cli': - case 'vapor': + case /^vapor(-cli)?$/.test(tool): script += await addPackage( 'vapor-cli', release, @@ -528,11 +509,18 @@ export async function addTools( os_version ); break; - case 'wp': - case 'wp-cli': + case /^wp(-cli)?$/.test(tool): url = github + (await getWpCliUrl(version)); script += await addArchive('wp-cli', url, os_version, '"--version"'); break; + case /^[\w.-]+\/[\w.-]+$/.test(tool): + script += await addPackage( + tool.split('/')[1], + release.split('/')[1].replace(/\s+/, ''), + tool.split('/')[0] + '/', + os_version + ); + break; default: script += await utils.addLog( '$cross',