setup-php/src/extensions.ts

159 lines
4.1 KiB
TypeScript
Raw Normal View History

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
* @param version
2019-09-20 09:41:20 +07:00
*/
export async function addExtensionDarwin(
extension_csv: string,
2019-10-17 03:11:13 +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) {
extension = extension.toLowerCase();
2019-09-20 09:41:20 +07:00
// add script to enable extension is already installed along with php
2019-11-24 03:34:12 +07:00
let install_command = '';
2019-10-11 06:11:25 +07:00
switch (version + extension) {
case '5.6xdebug':
install_command = 'sudo pecl install xdebug-2.5.5 >/dev/null 2>&1';
break;
default:
2019-10-11 06:11:25 +07:00
install_command = 'sudo pecl install ' + extension + ' >/dev/null 2>&1';
break;
2019-09-20 09:41:20 +07:00
}
2019-10-11 06:11:25 +07:00
script +=
2019-10-17 03:11:13 +07:00
'\nadd_extension ' +
2019-10-11 06:11:25 +07:00
extension +
' "' +
install_command +
'" ' +
2019-10-17 03:11:13 +07:00
(await utils.getExtensionPrefix(extension));
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,
2019-10-17 03:11:13 +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) {
// add script to enable extension is already installed along with php
script += '\nAdd-Extension ' + extension;
2019-09-20 09:41:20 +07:00
});
return script;
}
/**
* Install and enable extensions for linux
*
* @param extension_csv
* @param version
*/
export async function addExtensionLinux(
extension_csv: string,
2019-10-17 03:11:13 +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) {
extension = extension.toLowerCase();
2019-09-20 09:41:20 +07:00
// add script to enable extension is already installed along with php
2019-11-24 03:34:12 +07:00
let install_command = '';
switch (version + extension) {
2019-10-13 11:18:29 +07:00
case '7.2phalcon3':
case '7.3phalcon3':
2019-10-27 07:12:49 +07:00
install_command =
'sh ' +
path.join(__dirname, '../src/scripts/phalcon.sh') +
' master ' +
version +
' >/dev/null 2>&1';
2019-10-13 11:18:29 +07:00
break;
case '7.2phalcon4':
case '7.3phalcon4':
2019-10-27 07:12:49 +07:00
case '7.4phalcon4':
install_command =
'sh ' +
path.join(__dirname, '../src/scripts/phalcon.sh') +
' 4.0.x ' +
version +
' >/dev/null 2>&1';
2019-10-13 11:18:29 +07:00
break;
default:
install_command =
2019-11-07 12:41:35 +07:00
'sudo DEBIAN_FRONTEND=noninteractive apt-get install -y php' +
version +
'-' +
2019-11-13 07:59:58 +07:00
extension.replace('pdo_', '').replace('pdo-', '') +
2019-11-07 12:41:35 +07:00
' >/dev/null 2>&1 || sudo pecl install ' +
extension +
' >/dev/null 2>&1';
break;
}
2019-09-20 09:41:20 +07:00
script +=
2019-10-17 03:11:13 +07:00
'\nadd_extension ' +
2019-09-20 09:41:20 +07:00
extension +
2019-10-11 06:11:25 +07:00
' "' +
install_command +
2019-10-11 06:11:25 +07:00
'" ' +
2019-10-17 03:11:13 +07:00
(await utils.getExtensionPrefix(extension));
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
* @param log_prefix
*/
export async function addExtension(
extension_csv: string,
version: string,
os_version: string,
no_step = false
): Promise<string> {
let script = '\n';
switch (no_step) {
case true:
script +=
(await utils.stepLog('Setup Extensions', os_version)) +
(await utils.suppressOutput(os_version));
break;
case false:
default:
script += await utils.stepLog('Setup Extensions', os_version);
break;
}
switch (os_version) {
case 'win32':
return script + (await addExtensionWindows(extension_csv, version));
case 'darwin':
return script + (await addExtensionDarwin(extension_csv, version));
case 'linux':
return script + (await addExtensionLinux(extension_csv, version));
default:
return await utils.log(
'Platform ' + os_version + ' is not supported',
os_version,
'error'
);
}
}