Files
setup-php/src/extensions.ts

255 lines
7.6 KiB
TypeScript
Raw Normal View History

2019-10-27 05:42:49 +05:30
import * as path from 'path';
2019-09-20 08:11:20 +05:30
import * as utils from './utils';
/**
* Install and enable extensions for darwin
*
* @param extension_csv
* @param version
2019-12-26 18:31:18 +05:30
* @param pipe
2019-09-20 08:11:20 +05:30
*/
export async function addExtensionDarwin(
extension_csv: string,
2019-12-26 18:31:18 +05:30
version: string,
pipe: string
2019-09-20 08:11:20 +05:30
): Promise<string> {
2019-11-24 02:04:12 +05:30
const extensions: Array<string> = await utils.extensionArray(extension_csv);
let script = '\n';
2019-09-20 08:11:20 +05:30
await utils.asyncForEach(extensions, async function(extension: string) {
extension = extension.toLowerCase();
2019-12-26 18:31:18 +05:30
const version_extension: string = version + extension;
2020-02-16 00:25:50 +05:30
const [ext_name, ext_version]: string[] = extension.split('-');
const prefix = await utils.getExtensionPrefix(ext_name);
2019-11-24 02:04:12 +05:30
let install_command = '';
switch (true) {
// match pre-release versions
case /.*-(beta|alpha|devel|snapshot)/.test(version_extension):
2020-01-30 12:03:30 +05:30
script +=
'\nadd_unstable_extension ' +
2020-02-16 00:25:50 +05:30
ext_name +
2020-01-30 12:03:30 +05:30
' ' +
2020-02-16 00:25:50 +05:30
ext_version +
2020-01-30 12:03:30 +05:30
' ' +
prefix;
return;
case /5\.3xdebug/.test(version_extension):
install_command = 'sudo pecl install -f xdebug-2.2.7' + pipe;
break;
case /5\.4xdebug/.test(version_extension):
install_command = 'sudo pecl install -f xdebug-2.4.1' + pipe;
break;
case /5\.[5-6]xdebug/.test(version_extension):
install_command = 'sudo pecl install -f xdebug-2.5.5' + pipe;
break;
2020-01-17 05:51:46 +05:30
case /7\.0xdebug/.test(version_extension):
install_command = 'sudo pecl install -f xdebug-2.9.0' + pipe;
2020-01-17 05:51:46 +05:30
break;
2019-12-26 18:31:18 +05:30
case /5\.6redis/.test(version_extension):
install_command = 'sudo pecl install -f redis-2.2.8' + pipe;
2019-12-26 18:31:18 +05:30
break;
2020-01-21 01:06:31 +05:30
case /[5-9]\.\dimagick/.test(version_extension):
install_command =
'brew install pkg-config imagemagick' +
pipe +
' && sudo pecl install -f imagick' +
2020-01-21 01:06:31 +05:30
pipe;
break;
2019-12-26 18:31:18 +05:30
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension):
2020-02-15 22:51:02 +05:30
script +=
2019-12-26 18:31:18 +05:30
'sh ' +
path.join(__dirname, '../src/scripts/ext/phalcon_darwin.sh') +
' ' +
extension +
' ' +
2020-02-15 22:51:02 +05:30
version;
return;
default:
install_command = 'sudo pecl install -f ' + extension + pipe;
break;
2019-09-20 08:11:20 +05:30
}
2019-10-11 04:41:25 +05:30
script +=
2019-10-17 01:41:13 +05:30
'\nadd_extension ' +
2019-10-11 04:41:25 +05:30
extension +
' "' +
install_command +
'" ' +
2019-10-17 01:41:13 +05:30
(await utils.getExtensionPrefix(extension));
2019-09-20 08:11:20 +05:30
});
return script;
}
/**
* Install and enable extensions for windows
*
* @param extension_csv
* @param version
2019-12-26 18:31:18 +05:30
* @param pipe
2019-09-20 08:11:20 +05:30
*/
export async function addExtensionWindows(
extension_csv: string,
2019-12-26 18:31:18 +05:30
version: string,
pipe: string
2019-09-20 08:11:20 +05:30
): Promise<string> {
2019-11-24 02:04:12 +05:30
const extensions: Array<string> = await utils.extensionArray(extension_csv);
let script = '\n';
2019-09-20 08:11:20 +05:30
await utils.asyncForEach(extensions, async function(extension: string) {
extension = extension.toLowerCase();
2020-02-16 00:25:50 +05:30
const [ext_name, ext_version]: string[] = extension.split('-');
2019-12-26 18:31:18 +05:30
const version_extension: string = version + extension;
2020-02-16 00:25:50 +05:30
let matches: RegExpExecArray;
switch (true) {
// match pre-release versions
case /.*-(beta|alpha|devel|snapshot)/.test(version_extension):
2020-02-16 00:25:50 +05:30
script += '\nAdd-Extension ' + ext_name + ' ' + ext_version;
break;
// match exact versions
2020-02-16 00:25:50 +05:30
case /.*-\d+\.\d+\.\d+$/.test(version_extension):
script += '\nAdd-Extension ' + ext_name + ' stable ' + ext_version;
return;
case /.*-(\d+\.\d+\.\d)+(beta|alpha|devel|snapshot)\d*/.test(
version_extension
):
matches = /.*-(\d+\.\d+\.\d)+(beta|alpha|devel|snapshot)\d*/.exec(
version_extension
) as RegExpExecArray;
script +=
'\nAdd-Extension ' + ext_name + ' ' + matches[2] + ' ' + matches[1];
return;
// match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4
2019-12-26 18:31:18 +05:30
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 20:43:45 +05:30
break;
default:
script += '\nAdd-Extension ' + extension;
break;
}
2019-09-20 08:11:20 +05:30
});
return script;
}
/**
* Install and enable extensions for linux
*
* @param extension_csv
* @param version
2019-12-26 18:31:18 +05:30
* @param pipe
2019-09-20 08:11:20 +05:30
*/
export async function addExtensionLinux(
extension_csv: string,
2019-12-26 18:31:18 +05:30
version: string,
pipe: string
2019-09-20 08:11:20 +05:30
): Promise<string> {
2019-11-24 02:04:12 +05:30
const extensions: Array<string> = await utils.extensionArray(extension_csv);
let script = '\n';
2019-09-20 08:11:20 +05:30
await utils.asyncForEach(extensions, async function(extension: string) {
extension = extension.toLowerCase();
2019-12-26 18:31:18 +05:30
const version_extension: string = version + extension;
2020-02-16 00:25:50 +05:30
const [ext_name, ext_version]: string[] = extension.split('-');
const prefix = await utils.getExtensionPrefix(ext_name);
2019-11-24 02:04:12 +05:30
let install_command = '';
switch (true) {
// match pre-release versions
case /.*-(beta|alpha|devel|snapshot)/.test(version_extension):
2020-01-30 12:03:30 +05:30
script +=
'\nadd_unstable_extension ' +
2020-02-16 00:25:50 +05:30
ext_name +
2020-01-30 12:03:30 +05:30
' ' +
2020-02-16 00:25:50 +05:30
ext_version +
2020-01-30 12:03:30 +05:30
' ' +
prefix;
return;
// match exact versions
2020-02-16 00:25:50 +05:30
case /.*-\d+\.\d+\.\d+.*/.test(version_extension):
script += '\nadd_pecl_extension ' + ext_name + ' ' + ext_version;
return;
// match 5.6gearman..7.4gearman
2019-12-26 18:31:18 +05:30
case /^((5\.6)|(7\.[0-4]))gearman$/.test(version_extension):
2019-10-27 05:42:49 +05:30
install_command =
'sh ' +
2019-12-26 18:31:18 +05:30
path.join(__dirname, '../src/scripts/ext/gearman.sh') +
' ' +
2019-10-27 05:42:49 +05:30
version +
2019-12-26 18:31:18 +05:30
pipe;
2019-10-13 09:48:29 +05:30
break;
2020-01-22 01:00:13 +05:30
// match 7.0phalcon3...7.3phalcon3 or 7.2phalcon4...7.4phalcon4
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;
// match 7.0xdebug..7.4xdebug
case /^7\.[0-4]xdebug$/.test(version_extension):
2020-01-17 16:18:00 +05:30
script +=
'\nupdate_extension xdebug 2.9.1' +
2020-01-17 16:18:00 +05:30
pipe +
'\n' +
(await utils.addLog('$tick', 'xdebug', 'Enabled', 'linux'));
return;
default:
install_command =
2019-11-07 11:11:35 +05:30
'sudo DEBIAN_FRONTEND=noninteractive apt-get install -y php' +
version +
'-' +
2019-11-13 06:29:58 +05:30
extension.replace('pdo_', '').replace('pdo-', '') +
2019-12-26 18:31:18 +05:30
pipe;
break;
}
2019-09-20 08:11:20 +05:30
script +=
2020-01-30 12:03:30 +05:30
'\nadd_extension ' + extension + ' "' + install_command + '" ' + prefix;
2019-09-20 08:11:20 +05:30
});
return script;
}
2019-11-24 02:04:12 +05:30
/**
* Install and enable extensions
*
* @param extension_csv
* @param version
* @param os_version
* @param log_prefix
*/
export async function addExtension(
extension_csv: string,
version: string,
os_version: string,
no_step = false
): Promise<string> {
2019-12-26 18:31:18 +05:30
const pipe: string = await utils.suppressOutput(os_version);
2019-11-24 02:04:12 +05:30
let script = '\n';
switch (no_step) {
case true:
2019-12-26 18:31:18 +05:30
script += (await utils.stepLog('Setup Extensions', os_version)) + pipe;
2019-11-24 02:04:12 +05:30
break;
case false:
default:
script += await utils.stepLog('Setup Extensions', os_version);
break;
}
switch (os_version) {
case 'win32':
2019-12-26 18:31:18 +05:30
return script + (await addExtensionWindows(extension_csv, version, pipe));
2019-11-24 02:04:12 +05:30
case 'darwin':
2019-12-26 18:31:18 +05:30
return script + (await addExtensionDarwin(extension_csv, version, pipe));
2019-11-24 02:04:12 +05:30
case 'linux':
2019-12-26 18:31:18 +05:30
return script + (await addExtensionLinux(extension_csv, version, pipe));
2019-11-24 02:04:12 +05:30
default:
return await utils.log(
'Platform ' + os_version + ' is not supported',
os_version,
'error'
);
}
}