diff --git a/__tests__/features.test.ts b/__tests__/features.test.ts index b900b95e..7a029296 100644 --- a/__tests__/features.test.ts +++ b/__tests__/features.test.ts @@ -22,11 +22,9 @@ describe('Features tests', () => { ); win32 = await features.addExtension('xdebug, pcov', '7.4', 'win32'); expect(win32).toContain( - 'Install-PhpExtension xdebug -MinimumStability alpha' - ); - expect(win32).toContain( - 'Install-PhpExtension pcov -MinimumStability alpha' + 'Install-PhpExtension xdebug -Version 2.8 -MinimumStability beta' ); + expect(win32).toContain('Install-PhpExtension pcov -MinimumStability beta'); win32 = await features.addExtension('does_not_exist', '7.2', 'win32'); expect(win32).toContain('Could not find does_not_exist for PHP7.2 on PECL'); @@ -61,9 +59,18 @@ describe('Features tests', () => { expect(darwin).toContain('sudo pecl install xdebug'); expect(darwin).toContain('sudo pecl install pcov'); + darwin = await features.addExtension('pcov', '5.6', 'darwin'); + expect(darwin).toContain('sudo pecl install pcov'); + + darwin = await features.addExtension('pcov', '7.2', 'darwin'); + expect(darwin).toContain('sudo pecl install pcov'); + darwin = await features.addExtension('xdebug', '5.6', 'darwin'); expect(darwin).toContain('sudo pecl install xdebug-2.5.5'); + darwin = await features.addExtension('xdebug', '7.2', 'darwin'); + expect(darwin).toContain('sudo pecl install xdebug'); + darwin = await features.addExtension('does_not_exist', '7.2', 'darwin'); expect(darwin).toContain( 'Could not find does_not_exist for PHP7.2 on PECL' @@ -130,7 +137,7 @@ describe('Features tests', () => { it('checking addCoverage on windows', async () => { let win32: string = await features.addCoverage('xdebug', '7.4', 'win32'); expect(win32).toContain( - 'Install-PhpExtension xdebug -MinimumStability alpha' + 'Install-PhpExtension xdebug -Version 2.8 -MinimumStability beta' ); win32 = await features.addCoverage('xdebug', '7.3', 'win32'); @@ -139,9 +146,7 @@ describe('Features tests', () => { ); win32 = await features.addCoverage('pcov', '7.4', 'win32'); - expect(win32).toContain( - 'Install-PhpExtension pcov -MinimumStability alpha' - ); + expect(win32).toContain('Install-PhpExtension pcov -MinimumStability beta'); expect(win32).toContain( 'if(php -m | findstr -i xdebug) { Disable-PhpExtension xdebug C:\\tools\\php' ); diff --git a/__tests__/utils.test.ts b/__tests__/utils.test.ts index e74c3bea..c7a14471 100644 --- a/__tests__/utils.test.ts +++ b/__tests__/utils.test.ts @@ -129,6 +129,16 @@ describe('Utils tests', () => { expect(success_log).toEqual('echo -e "\\033[32;1m' + message + '\\033[0m"'); }); + it('checking getExtensionPrefix', async () => { + expect(await utils.getExtensionPrefix('extensionDoesNotExist')).toEqual( + 'extension' + ); + expect(await utils.getExtensionPrefix('xsl')).toEqual('extension'); + expect(await utils.getExtensionPrefix('xdebug')).toEqual('zend_extension'); + expect(await utils.getExtensionPrefix('opcache')).toEqual('zend_extension'); + }); +}); +describe('pecl tests', () => { it('checking checkPECLExtension', async () => { expect(await pecl.checkPECLExtension('extensionDoesNotExist')).toBe(false); expect(await pecl.checkPECLExtension('xdebug')).toBe(true); diff --git a/lib/features.js b/lib/features.js index 2e39b4b3..e9dfed76 100644 --- a/lib/features.js +++ b/lib/features.js @@ -57,7 +57,7 @@ function enableExtensionWindows(extension) { return (`try { $exist = Test-Path -Path $ext_dir\\php_${extension}.dll if(!(php -m | findstr -i ${extension}) -and $exist) { - Add-Content C:\\tools\\php\\php.ini "extension=php_${extension}.dll"\n` + + Add-Content C:\\tools\\php\\php.ini "${yield utils.getExtensionPrefix(extension)}=php_${extension}.dll"\n` + (yield utils.log('Enabled ' + extension, 'win32', 'success')) + ` } elseif(php -m | findstr -i ${extension}) {\n` + (yield utils.log('Extension ' + extension + ' was already enabled', 'win32', 'success')) + @@ -76,8 +76,8 @@ exports.enableExtensionWindows = enableExtensionWindows; */ function enableExtensionUnix(extension, os_version) { return __awaiter(this, void 0, void 0, function* () { - return (`if [ ! "$(php -m | grep -i ${extension})" ] && [ -e "$ext_dir/${extension}.so" ]; then - echo "extension=${extension}.so" >> 'php -i | grep "Loaded Configuration" | sed -e "s|.*=>\s*||"'\n` + + return (`if [ ! "$(php -m | grep -i ${extension})" ] && [ -e "$ext_dir/php_${extension}.so" ]; then + echo "${yield utils.getExtensionPrefix(extension)}=php_${extension}.so" >> 'php -i | grep "Loaded Configuration" | sed -e "s|.*=>\s*||"'\n` + (yield utils.log('Enabled ' + extension, os_version, 'success')) + `;\n elif [ "$(php -m | grep -i ${extension})" ]; then \n` + (yield utils.log('Extension ' + extension + ' was already enabled', os_version, 'success')) + @@ -102,15 +102,25 @@ function addExtensionDarwin(extension_csv, version) { script += yield enableExtensionUnix(extension, 'darwin'); switch (yield pecl.checkPECLExtension(extension)) { case true: - let extension_version = version === '5.6' && extension === 'xdebug' - ? 'xdebug-2.5.5' - : extension; + let extension_version = extension; + switch (version + extension) { + case '5.6xdebug': + extension_version = 'xdebug-2.5.5'; + break; + case '7.4xdebug': + extension_version = 'xdebug-2.8.0beta2'; + break; + case '7.2xdebug': + default: + extension_version = extension; + break; + } script += 'if [ ! "$(php -m | grep -i ' + extension + ')" ]; then sudo pecl install ' + extension_version + - ' >/dev/null 2>&1 && ' + + ' >/dev/null 2>&1 && ' + (yield utils.log('Installed and enabled ' + extension, 'darwin', 'success')) + ' || ' + (yield utils.log('Could not install ' + extension + ' on PHP' + version, 'darwin', 'error')) + @@ -147,26 +157,36 @@ function addExtensionWindows(extension_csv, version) { extension = extension.toLowerCase(); // add script to enable extension is already installed along with php script += yield enableExtensionWindows(extension); - let extension_version = ''; + let extension_stability = ''; switch (version) { case '7.4': - extension_version = 'alpha'; + extension_stability = 'beta'; break; case '7.2': default: - extension_version = 'stable'; + extension_stability = 'stable'; break; } switch (yield pecl.checkPECLExtension(extension)) { case true: + let extension_version = extension; + switch (version + extension) { + case '7.4xdebug': + extension_version = 'xdebug -Version 2.8'; + break; + case '7.2xdebug': + default: + extension_version = extension; + break; + } script += 'if(!(php -m | findstr -i ' + extension + ')) { ' + 'try { Install-PhpExtension ' + - extension + - ' -MinimumStability ' + extension_version + + ' -MinimumStability ' + + extension_stability + '\n' + (yield utils.log('Installed and enabled ' + extension, 'win32', 'success')) + ' } catch [Exception] { ' + @@ -211,10 +231,18 @@ function addExtensionLinux(extension_csv, version) { version + '-' + extension + + ' >/dev/null 2>&1 || sudo DEBIAN_FRONTEND=noninteractive apt install -y php-' + + extension + ' >/dev/null 2>&1 && ' + (yield utils.log('Installed and enabled ' + extension, 'linux', 'success')) + ' || ' + - (yield utils.log('Could not find php' + version + '-' + extension + ' on APT repository', 'linux', 'error')) + + (yield utils.log('Could not find php-' + + extension + + ' or php' + + version + + '-' + + extension + + ' on APT repository', 'linux', 'error')) + '; fi\n'; }); }); diff --git a/lib/utils.js b/lib/utils.js index 001b79bd..e8ec6a85 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -141,3 +141,17 @@ function log(message, os_version, log_type) { }); } exports.log = log; +function getExtensionPrefix(extension) { + return __awaiter(this, void 0, void 0, function* () { + let zend = ['xdebug', 'opcache']; + switch (zend.indexOf(extension)) { + case 0: + case 1: + return 'zend_extension'; + case -1: + default: + return 'extension'; + } + }); +} +exports.getExtensionPrefix = getExtensionPrefix; diff --git a/src/features.ts b/src/features.ts index 104869cb..e720ccd4 100644 --- a/src/features.ts +++ b/src/features.ts @@ -48,7 +48,9 @@ export async function enableExtensionWindows(extension: string) { `try { $exist = Test-Path -Path $ext_dir\\php_${extension}.dll if(!(php -m | findstr -i ${extension}) -and $exist) { - Add-Content C:\\tools\\php\\php.ini "extension=php_${extension}.dll"\n` + + Add-Content C:\\tools\\php\\php.ini "${await utils.getExtensionPrefix( + extension + )}=php_${extension}.dll"\n` + (await utils.log('Enabled ' + extension, 'win32', 'success')) + ` } elseif(php -m | findstr -i ${extension}) {\n` + (await utils.log( @@ -74,8 +76,10 @@ export async function enableExtensionUnix( os_version: string ) { return ( - `if [ ! "$(php -m | grep -i ${extension})" ] && [ -e "$ext_dir/${extension}.so" ]; then - echo "extension=${extension}.so" >> 'php -i | grep "Loaded Configuration" | sed -e "s|.*=>\s*||"'\n` + + `if [ ! "$(php -m | grep -i ${extension})" ] && [ -e "$ext_dir/php_${extension}.so" ]; then + echo "${await utils.getExtensionPrefix( + extension + )}=php_${extension}.so" >> 'php -i | grep "Loaded Configuration" | sed -e "s|.*=>\s*||"'\n` + (await utils.log('Enabled ' + extension, os_version, 'success')) + `;\n elif [ "$(php -m | grep -i ${extension})" ]; then \n` + (await utils.log( @@ -105,16 +109,25 @@ export async function addExtensionDarwin( script += await enableExtensionUnix(extension, 'darwin'); switch (await pecl.checkPECLExtension(extension)) { case true: - let extension_version: string = - version === '5.6' && extension === 'xdebug' - ? 'xdebug-2.5.5' - : extension; + let extension_version: string = extension; + switch (version + extension) { + case '5.6xdebug': + extension_version = 'xdebug-2.5.5'; + break; + case '7.4xdebug': + extension_version = 'xdebug-2.8.0beta2'; + break; + case '7.2xdebug': + default: + extension_version = extension; + break; + } script += 'if [ ! "$(php -m | grep -i ' + extension + ')" ]; then sudo pecl install ' + extension_version + - ' >/dev/null 2>&1 && ' + + ' >/dev/null 2>&1 && ' + (await utils.log( 'Installed and enabled ' + extension, 'darwin', @@ -162,27 +175,37 @@ export async function addExtensionWindows( extension = extension.toLowerCase(); // add script to enable extension is already installed along with php script += await enableExtensionWindows(extension); - let extension_version: string = ''; + let extension_stability: string = ''; switch (version) { case '7.4': - extension_version = 'alpha'; + extension_stability = 'beta'; break; case '7.2': default: - extension_version = 'stable'; + extension_stability = 'stable'; break; } switch (await pecl.checkPECLExtension(extension)) { case true: + let extension_version: string = extension; + switch (version + extension) { + case '7.4xdebug': + extension_version = 'xdebug -Version 2.8'; + break; + case '7.2xdebug': + default: + extension_version = extension; + break; + } script += 'if(!(php -m | findstr -i ' + extension + ')) { ' + 'try { Install-PhpExtension ' + - extension + - ' -MinimumStability ' + extension_version + + ' -MinimumStability ' + + extension_stability + '\n' + (await utils.log( 'Installed and enabled ' + extension, @@ -238,6 +261,8 @@ export async function addExtensionLinux( version + '-' + extension + + ' >/dev/null 2>&1 || sudo DEBIAN_FRONTEND=noninteractive apt install -y php-' + + extension + ' >/dev/null 2>&1 && ' + (await utils.log( 'Installed and enabled ' + extension, @@ -246,7 +271,13 @@ export async function addExtensionLinux( )) + ' || ' + (await utils.log( - 'Could not find php' + version + '-' + extension + ' on APT repository', + 'Could not find php-' + + extension + + ' or php' + + version + + '-' + + extension + + ' on APT repository', 'linux', 'error' )) + diff --git a/src/linux.sh b/src/linux.sh index a74f5575..e522aec5 100644 --- a/src/linux.sh +++ b/src/linux.sh @@ -28,7 +28,7 @@ fi composer global require hirak/prestissimo >/dev/null 2>&1 ini_file=$(php --ini | grep "Loaded Configuration" | sed -e "s|.*:s*||" | sed "s/ //g") -ext_dir=$(/usr/bin/php -i | grep "extension_dir => /usr" | sed -e "s|.*=> s*||") +ext_dir=$(php -i | grep "extension_dir => /usr" | sed -e "s|.*=> s*||") sudo chmod 777 "$ini_file" sudo mkdir -p /run/php php -v diff --git a/src/utils.ts b/src/utils.ts index d576239a..bce0a3f6 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -146,3 +146,15 @@ export async function log( ); } } + +export async function getExtensionPrefix(extension: string): Promise { + let zend: Array = ['xdebug', 'opcache']; + switch (zend.indexOf(extension)) { + case 0: + case 1: + return 'zend_extension'; + case -1: + default: + return 'extension'; + } +}