2019-10-27 07:12:49 +07:00
|
|
|
import * as path from 'path';
|
2019-09-20 09:41:20 +07:00
|
|
|
import * as utils from './utils';
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Install and enable extensions for darwin
|
|
|
|
*
|
|
|
|
* @param extension_csv
|
2019-09-26 04:03:39 +07:00
|
|
|
* @param version
|
2019-12-26 20:01:18 +07:00
|
|
|
* @param pipe
|
2019-09-20 09:41:20 +07:00
|
|
|
*/
|
|
|
|
export async function addExtensionDarwin(
|
2019-09-26 04:03:39 +07:00
|
|
|
extension_csv: string,
|
2019-12-26 20:01:18 +07:00
|
|
|
version: string,
|
|
|
|
pipe: string
|
2019-09-20 09:41:20 +07:00
|
|
|
): Promise<string> {
|
2019-11-24 03:34:12 +07:00
|
|
|
const extensions: Array<string> = await utils.extensionArray(extension_csv);
|
|
|
|
let script = '\n';
|
2019-09-20 09:41:20 +07:00
|
|
|
await utils.asyncForEach(extensions, async function(extension: string) {
|
2019-12-26 20:01:18 +07:00
|
|
|
const version_extension: string = version + extension;
|
2020-02-16 01:55:50 +07:00
|
|
|
const [ext_name, ext_version]: string[] = extension.split('-');
|
2020-03-12 06:17:52 +07:00
|
|
|
const ext_prefix = await utils.getExtensionPrefix(ext_name);
|
|
|
|
const command_prefix = 'sudo pecl install -f ';
|
|
|
|
let command = '';
|
2019-12-24 00:49:38 +07:00
|
|
|
switch (true) {
|
2020-02-28 14:49:12 +07:00
|
|
|
// match 5.3blackfire...5.6blackfire, 7.0blackfire...7.4blackfire
|
|
|
|
// match 5.3blackfire-1.31.0...5.6blackfire-1.31.0, 7.0blackfire-1.31.0...7.4blackfire-1.31.0
|
2020-02-27 18:55:54 +07:00
|
|
|
case /^(5\.[3-6]|7\.[0-4])blackfire(-\d+\.\d+\.\d+)?$/.test(
|
|
|
|
version_extension
|
|
|
|
):
|
2020-03-12 06:17:52 +07:00
|
|
|
command =
|
2020-02-27 18:55:54 +07:00
|
|
|
'bash ' +
|
2020-02-27 15:19:30 +07:00
|
|
|
path.join(__dirname, '../src/scripts/ext/blackfire_darwin.sh') +
|
|
|
|
' ' +
|
|
|
|
version +
|
|
|
|
' ' +
|
2020-02-27 18:55:54 +07:00
|
|
|
(await utils.getBlackfireVersion(ext_version));
|
|
|
|
break;
|
2020-03-12 06:17:52 +07:00
|
|
|
// match pre-release versions. For example - xdebug-beta
|
2020-01-26 02:34:09 +07:00
|
|
|
case /.*-(beta|alpha|devel|snapshot)/.test(version_extension):
|
2020-01-30 13:33:30 +07:00
|
|
|
script +=
|
|
|
|
'\nadd_unstable_extension ' +
|
2020-02-16 01:55:50 +07:00
|
|
|
ext_name +
|
2020-01-30 13:33:30 +07:00
|
|
|
' ' +
|
2020-02-16 01:55:50 +07:00
|
|
|
ext_version +
|
2020-01-30 13:33:30 +07:00
|
|
|
' ' +
|
2020-03-12 06:17:52 +07:00
|
|
|
ext_prefix;
|
2020-01-30 13:33:30 +07:00
|
|
|
return;
|
2020-03-12 06:17:52 +07:00
|
|
|
// match semver
|
2020-02-23 20:30:40 +07:00
|
|
|
case /.*-\d+\.\d+\.\d+.*/.test(version_extension):
|
|
|
|
script +=
|
2020-03-12 06:17:52 +07:00
|
|
|
'\nadd_pecl_extension ' +
|
|
|
|
ext_name +
|
|
|
|
' ' +
|
|
|
|
ext_version +
|
|
|
|
' ' +
|
|
|
|
ext_prefix;
|
2020-02-23 20:30:40 +07:00
|
|
|
return;
|
2020-03-12 06:17:52 +07:00
|
|
|
// match 5.3xdebug
|
2020-02-05 22:28:44 +07:00
|
|
|
case /5\.3xdebug/.test(version_extension):
|
2020-03-12 06:17:52 +07:00
|
|
|
command = command_prefix + 'xdebug-2.2.7' + pipe;
|
2020-02-05 22:28:44 +07:00
|
|
|
break;
|
2020-03-12 06:17:52 +07:00
|
|
|
// match 5.4xdebug
|
2020-02-05 22:28:44 +07:00
|
|
|
case /5\.4xdebug/.test(version_extension):
|
2020-03-12 06:17:52 +07:00
|
|
|
command = command_prefix + 'xdebug-2.4.1' + pipe;
|
2020-02-05 22:28:44 +07:00
|
|
|
break;
|
2020-03-12 06:17:52 +07:00
|
|
|
// match 5.5xdebug and 5.6xdebug
|
2020-02-05 22:28:44 +07:00
|
|
|
case /5\.[5-6]xdebug/.test(version_extension):
|
2020-03-12 06:17:52 +07:00
|
|
|
command = command_prefix + 'xdebug-2.5.5' + pipe;
|
2019-09-26 04:03:39 +07:00
|
|
|
break;
|
2020-03-12 06:17:52 +07:00
|
|
|
// match 7.0redis
|
2020-01-17 07:21:46 +07:00
|
|
|
case /7\.0xdebug/.test(version_extension):
|
2020-03-12 06:17:52 +07:00
|
|
|
command = command_prefix + 'xdebug-2.9.0' + pipe;
|
2020-01-17 07:21:46 +07:00
|
|
|
break;
|
2020-03-12 06:17:52 +07:00
|
|
|
// match 5.6redis
|
2019-12-26 20:01:18 +07:00
|
|
|
case /5\.6redis/.test(version_extension):
|
2020-03-12 06:17:52 +07:00
|
|
|
command = command_prefix + 'redis-2.2.8' + pipe;
|
2019-12-26 20:01:18 +07:00
|
|
|
break;
|
2020-03-12 06:17:52 +07:00
|
|
|
// match imagick
|
|
|
|
case /imagick/.test(extension):
|
|
|
|
command =
|
2020-01-21 02:36:31 +07:00
|
|
|
'brew install pkg-config imagemagick' +
|
|
|
|
pipe +
|
2020-03-12 06:17:52 +07:00
|
|
|
' && ' +
|
|
|
|
command_prefix +
|
|
|
|
'imagick' +
|
2020-01-21 02:36:31 +07:00
|
|
|
pipe;
|
|
|
|
break;
|
2020-03-12 06:17:52 +07:00
|
|
|
// match sqlite
|
|
|
|
case /sqlite/.test(extension):
|
|
|
|
extension = 'sqlite3';
|
|
|
|
command = command_prefix + extension + pipe;
|
|
|
|
break;
|
|
|
|
// match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4
|
2019-12-26 20:01:18 +07:00
|
|
|
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension):
|
2020-02-16 00:21:02 +07:00
|
|
|
script +=
|
2019-12-26 20:01:18 +07:00
|
|
|
'sh ' +
|
|
|
|
path.join(__dirname, '../src/scripts/ext/phalcon_darwin.sh') +
|
|
|
|
' ' +
|
|
|
|
extension +
|
2019-12-31 07:16:33 +07:00
|
|
|
' ' +
|
2020-02-16 00:21:02 +07:00
|
|
|
version;
|
|
|
|
return;
|
2019-09-26 04:03:39 +07:00
|
|
|
default:
|
2020-03-12 06:17:52 +07:00
|
|
|
command = command_prefix + extension + pipe;
|
2019-09-26 04:03:39 +07:00
|
|
|
break;
|
2019-09-20 09:41:20 +07:00
|
|
|
}
|
2019-10-11 06:11:25 +07:00
|
|
|
script +=
|
2020-03-12 06:17:52 +07:00
|
|
|
'\nadd_extension ' + extension + ' "' + command + '" ' + ext_prefix;
|
2019-09-20 09:41:20 +07:00
|
|
|
});
|
|
|
|
return script;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Install and enable extensions for windows
|
|
|
|
*
|
|
|
|
* @param extension_csv
|
|
|
|
* @param version
|
|
|
|
*/
|
|
|
|
export async function addExtensionWindows(
|
|
|
|
extension_csv: string,
|
2020-03-12 09:27:40 +07:00
|
|
|
version: string
|
2019-09-20 09:41:20 +07:00
|
|
|
): Promise<string> {
|
2019-11-24 03:34:12 +07:00
|
|
|
const extensions: Array<string> = await utils.extensionArray(extension_csv);
|
|
|
|
let script = '\n';
|
2019-09-20 09:41:20 +07:00
|
|
|
await utils.asyncForEach(extensions, async function(extension: string) {
|
2020-02-16 01:55:50 +07:00
|
|
|
const [ext_name, ext_version]: string[] = extension.split('-');
|
2019-12-26 20:01:18 +07:00
|
|
|
const version_extension: string = version + extension;
|
2020-02-16 01:55:50 +07:00
|
|
|
let matches: RegExpExecArray;
|
2019-12-24 00:49:38 +07:00
|
|
|
switch (true) {
|
2020-02-28 14:49:12 +07:00
|
|
|
// match 5.4blackfire...5.6blackfire, 7.0blackfire...7.4blackfire
|
|
|
|
// match 5.4blackfire-1.31.0...5.6blackfire-1.31.0, 7.0blackfire-1.31.0...7.4blackfire-1.31.0
|
2020-02-27 18:55:54 +07:00
|
|
|
case /^(5\.[4-6]|7\.[0-4])blackfire(-\d+\.\d+\.\d+)?$/.test(
|
|
|
|
version_extension
|
|
|
|
):
|
2020-02-27 05:59:45 +07:00
|
|
|
script +=
|
2020-02-27 15:19:30 +07:00
|
|
|
'\n& ' +
|
2020-02-27 05:59:45 +07:00
|
|
|
path.join(__dirname, '../src/scripts/ext/blackfire.ps1') +
|
|
|
|
' ' +
|
2020-02-27 18:55:54 +07:00
|
|
|
version +
|
|
|
|
' ' +
|
|
|
|
(await utils.getBlackfireVersion(ext_version));
|
2020-02-27 05:59:45 +07:00
|
|
|
return;
|
2020-03-12 06:17:52 +07:00
|
|
|
// match pre-release versions. For example - xdebug-beta
|
2020-01-26 02:34:09 +07:00
|
|
|
case /.*-(beta|alpha|devel|snapshot)/.test(version_extension):
|
2020-02-16 01:55:50 +07:00
|
|
|
script += '\nAdd-Extension ' + ext_name + ' ' + ext_version;
|
2020-01-26 02:34:09 +07:00
|
|
|
break;
|
2020-03-12 06:17:52 +07:00
|
|
|
// match semver without state
|
2020-02-16 01:55:50 +07:00
|
|
|
case /.*-\d+\.\d+\.\d+$/.test(version_extension):
|
|
|
|
script += '\nAdd-Extension ' + ext_name + ' stable ' + ext_version;
|
|
|
|
return;
|
2020-03-12 06:17:52 +07:00
|
|
|
// match semver with state
|
|
|
|
case /.*-(\d+\.\d+\.\d)(beta|alpha|devel|snapshot)\d*/.test(
|
2020-02-16 01:55:50 +07:00
|
|
|
version_extension
|
|
|
|
):
|
2020-03-12 06:17:52 +07:00
|
|
|
matches = /.*-(\d+\.\d+\.\d)(beta|alpha|devel|snapshot)\d*/.exec(
|
2020-02-16 01:55:50 +07:00
|
|
|
version_extension
|
|
|
|
) as RegExpExecArray;
|
|
|
|
script +=
|
|
|
|
'\nAdd-Extension ' + ext_name + ' ' + matches[2] + ' ' + matches[1];
|
2020-02-14 00:09:00 +07:00
|
|
|
return;
|
2020-03-12 06:17:52 +07:00
|
|
|
// match sqlite
|
|
|
|
case /sqlite/.test(extension):
|
|
|
|
extension = 'sqlite3';
|
|
|
|
script += '\nAdd-Extension ' + extension;
|
|
|
|
break;
|
2019-12-24 00:49:38 +07:00
|
|
|
// match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4
|
2019-12-26 20:01:18 +07:00
|
|
|
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension):
|
|
|
|
script +=
|
|
|
|
'\n& ' +
|
|
|
|
path.join(__dirname, '../src/scripts/ext/phalcon.ps1') +
|
|
|
|
' ' +
|
|
|
|
extension +
|
|
|
|
' ' +
|
|
|
|
version +
|
|
|
|
'\n';
|
2019-12-02 22:13:45 +07:00
|
|
|
break;
|
|
|
|
default:
|
|
|
|
script += '\nAdd-Extension ' + extension;
|
|
|
|
break;
|
|
|
|
}
|
2019-09-20 09:41:20 +07:00
|
|
|
});
|
|
|
|
return script;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Install and enable extensions for linux
|
|
|
|
*
|
|
|
|
* @param extension_csv
|
|
|
|
* @param version
|
2019-12-26 20:01:18 +07:00
|
|
|
* @param pipe
|
2019-09-20 09:41:20 +07:00
|
|
|
*/
|
|
|
|
export async function addExtensionLinux(
|
|
|
|
extension_csv: string,
|
2019-12-26 20:01:18 +07:00
|
|
|
version: string,
|
|
|
|
pipe: string
|
2019-09-20 09:41:20 +07:00
|
|
|
): Promise<string> {
|
2019-11-24 03:34:12 +07:00
|
|
|
const extensions: Array<string> = await utils.extensionArray(extension_csv);
|
|
|
|
let script = '\n';
|
2019-09-20 09:41:20 +07:00
|
|
|
await utils.asyncForEach(extensions, async function(extension: string) {
|
2019-12-26 20:01:18 +07:00
|
|
|
const version_extension: string = version + extension;
|
2020-02-16 01:55:50 +07:00
|
|
|
const [ext_name, ext_version]: string[] = extension.split('-');
|
2020-03-12 06:17:52 +07:00
|
|
|
const ext_prefix = await utils.getExtensionPrefix(ext_name);
|
|
|
|
const command_prefix = 'sudo $debconf_fix apt-get install -y php';
|
|
|
|
let command = '';
|
2019-12-24 00:49:38 +07:00
|
|
|
switch (true) {
|
2020-02-28 14:49:12 +07:00
|
|
|
// match 5.3blackfire...5.6blackfire, 7.0blackfire...7.4blackfire
|
|
|
|
// match 5.3blackfire-1.31.0...5.6blackfire-1.31.0, 7.0blackfire-1.31.0...7.4blackfire-1.31.0
|
2020-02-27 18:55:54 +07:00
|
|
|
case /^(5\.[3-6]|7\.[0-4])blackfire(-\d+\.\d+\.\d+)?$/.test(
|
|
|
|
version_extension
|
|
|
|
):
|
2020-03-12 06:17:52 +07:00
|
|
|
command =
|
2020-02-27 18:55:54 +07:00
|
|
|
'bash ' +
|
2020-02-26 04:09:10 +07:00
|
|
|
path.join(__dirname, '../src/scripts/ext/blackfire.sh') +
|
|
|
|
' ' +
|
|
|
|
version +
|
|
|
|
' ' +
|
2020-02-27 18:55:54 +07:00
|
|
|
(await utils.getBlackfireVersion(ext_version));
|
|
|
|
break;
|
2020-03-12 06:17:52 +07:00
|
|
|
// match pre-release versions. For example - xdebug-beta
|
2020-01-26 02:34:09 +07:00
|
|
|
case /.*-(beta|alpha|devel|snapshot)/.test(version_extension):
|
2020-01-30 13:33:30 +07:00
|
|
|
script +=
|
|
|
|
'\nadd_unstable_extension ' +
|
2020-02-16 01:55:50 +07:00
|
|
|
ext_name +
|
2020-01-30 13:33:30 +07:00
|
|
|
' ' +
|
2020-02-16 01:55:50 +07:00
|
|
|
ext_version +
|
2020-01-30 13:33:30 +07:00
|
|
|
' ' +
|
2020-03-12 06:17:52 +07:00
|
|
|
ext_prefix;
|
2020-01-30 13:33:30 +07:00
|
|
|
return;
|
2020-03-12 06:17:52 +07:00
|
|
|
// match semver versions
|
2020-02-16 01:55:50 +07:00
|
|
|
case /.*-\d+\.\d+\.\d+.*/.test(version_extension):
|
2020-02-23 20:30:40 +07:00
|
|
|
script +=
|
2020-03-12 06:17:52 +07:00
|
|
|
'\nadd_pecl_extension ' +
|
|
|
|
ext_name +
|
|
|
|
' ' +
|
|
|
|
ext_version +
|
|
|
|
' ' +
|
|
|
|
ext_prefix;
|
2020-02-14 00:09:00 +07:00
|
|
|
return;
|
2019-12-24 00:49:38 +07:00
|
|
|
// match 5.6gearman..7.4gearman
|
2019-12-26 20:01:18 +07:00
|
|
|
case /^((5\.6)|(7\.[0-4]))gearman$/.test(version_extension):
|
2020-03-12 06:17:52 +07:00
|
|
|
command =
|
2019-10-27 07:12:49 +07:00
|
|
|
'sh ' +
|
2019-12-26 20:01:18 +07:00
|
|
|
path.join(__dirname, '../src/scripts/ext/gearman.sh') +
|
2019-12-24 00:49:38 +07:00
|
|
|
' ' +
|
2019-10-27 07:12:49 +07:00
|
|
|
version +
|
2019-12-26 20:01:18 +07:00
|
|
|
pipe;
|
2019-10-13 11:18:29 +07:00
|
|
|
break;
|
2020-01-22 02:30:13 +07:00
|
|
|
// match 7.0phalcon3...7.3phalcon3 or 7.2phalcon4...7.4phalcon4
|
2020-01-21 19:28:09 +07:00
|
|
|
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension):
|
|
|
|
script +=
|
|
|
|
'\nsh ' +
|
|
|
|
path.join(__dirname, '../src/scripts/ext/phalcon.sh') +
|
|
|
|
' ' +
|
|
|
|
extension +
|
|
|
|
' ' +
|
|
|
|
version;
|
|
|
|
return;
|
2020-01-14 08:27:04 +07:00
|
|
|
// match 7.0xdebug..7.4xdebug
|
|
|
|
case /^7\.[0-4]xdebug$/.test(version_extension):
|
2020-01-17 17:48:00 +07:00
|
|
|
script +=
|
2020-03-12 06:17:52 +07:00
|
|
|
'\nupdate_extension xdebug 2.9.2' +
|
2020-01-17 17:48:00 +07:00
|
|
|
pipe +
|
|
|
|
'\n' +
|
|
|
|
(await utils.addLog('$tick', 'xdebug', 'Enabled', 'linux'));
|
2020-01-14 08:27:04 +07:00
|
|
|
return;
|
2020-03-05 07:28:24 +07:00
|
|
|
// match pdo extensions
|
|
|
|
case /.*pdo[_-].*/.test(version_extension):
|
2020-03-12 06:17:52 +07:00
|
|
|
extension = extension.replace('pdo_', '').replace('pdo-', '');
|
|
|
|
script += '\nadd_pdo_extension ' + extension;
|
2020-03-05 07:28:24 +07:00
|
|
|
return;
|
2020-03-12 06:17:52 +07:00
|
|
|
// match sqlite
|
|
|
|
case /sqlite/.test(extension):
|
|
|
|
extension = 'sqlite3';
|
|
|
|
command = command_prefix + version + '-' + extension + pipe;
|
|
|
|
break;
|
2019-09-28 21:39:05 +07:00
|
|
|
default:
|
2020-03-12 06:17:52 +07:00
|
|
|
command = command_prefix + version + '-' + extension + pipe;
|
2019-09-28 21:39:05 +07:00
|
|
|
break;
|
|
|
|
}
|
2019-09-20 09:41:20 +07:00
|
|
|
script +=
|
2020-03-12 06:17:52 +07:00
|
|
|
'\nadd_extension ' + extension + ' "' + command + '" ' + ext_prefix;
|
2019-09-20 09:41:20 +07:00
|
|
|
});
|
|
|
|
return script;
|
|
|
|
}
|
2019-11-24 03:34:12 +07:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Install and enable extensions
|
|
|
|
*
|
|
|
|
* @param extension_csv
|
|
|
|
* @param version
|
|
|
|
* @param os_version
|
2020-03-12 06:17:52 +07:00
|
|
|
* @param no_step
|
2019-11-24 03:34:12 +07:00
|
|
|
*/
|
|
|
|
export async function addExtension(
|
|
|
|
extension_csv: string,
|
|
|
|
version: string,
|
|
|
|
os_version: string,
|
|
|
|
no_step = false
|
|
|
|
): Promise<string> {
|
2019-12-26 20:01:18 +07:00
|
|
|
const pipe: string = await utils.suppressOutput(os_version);
|
2019-11-24 03:34:12 +07:00
|
|
|
let script = '\n';
|
|
|
|
switch (no_step) {
|
|
|
|
case true:
|
2019-12-26 20:01:18 +07:00
|
|
|
script += (await utils.stepLog('Setup Extensions', os_version)) + pipe;
|
2019-11-24 03:34:12 +07:00
|
|
|
break;
|
|
|
|
case false:
|
|
|
|
default:
|
|
|
|
script += await utils.stepLog('Setup Extensions', os_version);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (os_version) {
|
|
|
|
case 'win32':
|
2020-03-12 09:27:40 +07:00
|
|
|
return script + (await addExtensionWindows(extension_csv, version));
|
2019-11-24 03:34:12 +07:00
|
|
|
case 'darwin':
|
2019-12-26 20:01:18 +07:00
|
|
|
return script + (await addExtensionDarwin(extension_csv, version, pipe));
|
2019-11-24 03:34:12 +07:00
|
|
|
case 'linux':
|
2019-12-26 20:01:18 +07:00
|
|
|
return script + (await addExtensionLinux(extension_csv, version, pipe));
|
2019-11-24 03:34:12 +07:00
|
|
|
default:
|
|
|
|
return await utils.log(
|
|
|
|
'Platform ' + os_version + ' is not supported',
|
|
|
|
os_version,
|
|
|
|
'error'
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|