Improve workflow and lint the code

This commit is contained in:
Shivam Mathur
2019-11-24 02:04:12 +05:30
parent 2b938d931a
commit 3f6c88dec7
18 changed files with 1531 additions and 474 deletions

View File

@ -1,5 +1,44 @@
import * as utils from './utils';
/**
* Add script to set custom ini values for unix
*
* @param ini_values_csv
*/
export async function addINIValuesUnix(
ini_values_csv: string
): Promise<string> {
const ini_values: Array<string> = await utils.INIArray(ini_values_csv);
let script = '\n';
await utils.asyncForEach(ini_values, async function(line: string) {
script +=
(await utils.addLog('$tick', line, 'Added to php.ini', 'linux')) + '\n';
});
return 'echo "' + ini_values.join('\n') + '" >> $ini_file' + script;
}
/**
* Add script to set custom ini values for windows
*
* @param ini_values_csv
*/
export async function addINIValuesWindows(
ini_values_csv: string
): Promise<string> {
const ini_values: Array<string> = await utils.INIArray(ini_values_csv);
let script = '\n';
await utils.asyncForEach(ini_values, async function(line: string) {
script +=
(await utils.addLog('$tick', line, 'Added to php.ini', 'win32')) + '\n';
});
return (
'Add-Content C:\\tools\\php\\php.ini "' +
ini_values.join('\n') +
'"' +
script
);
}
/**
* Function to add custom ini values
*
@ -11,7 +50,7 @@ export async function addINIValues(
os_version: string,
no_step = false
): Promise<string> {
let script: string = '\n';
let script = '\n';
switch (no_step) {
case true:
script +=
@ -38,42 +77,3 @@ export async function addINIValues(
);
}
}
/**
* Add script to set custom ini values for unix
*
* @param ini_values_csv
*/
export async function addINIValuesUnix(
ini_values_csv: string
): Promise<string> {
let ini_values: Array<string> = await utils.INIArray(ini_values_csv);
let script: string = '\n';
await utils.asyncForEach(ini_values, async function(line: string) {
script +=
(await utils.addLog('$tick', line, 'Added to php.ini', 'linux')) + '\n';
});
return 'echo "' + ini_values.join('\n') + '" >> $ini_file' + script;
}
/**
* Add script to set custom ini values for windows
*
* @param ini_values_csv
*/
export async function addINIValuesWindows(
ini_values_csv: string
): Promise<string> {
let ini_values: Array<string> = await utils.INIArray(ini_values_csv);
let script: string = '\n';
await utils.asyncForEach(ini_values, async function(line: string) {
script +=
(await utils.addLog('$tick', line, 'Added to php.ini', 'win32')) + '\n';
});
return (
'Add-Content C:\\tools\\php\\php.ini "' +
ini_values.join('\n') +
'"' +
script
);
}

View File

@ -2,40 +2,16 @@ import * as utils from './utils';
import * as extensions from './extensions';
import * as config from './config';
/**
* Function to set coverage driver
*
* @param coverage_driver
* @param version
* @param os_version
*/
export async function addCoverage(
coverage_driver: string,
version: string,
os_version: string
): Promise<string> {
coverage_driver.toLowerCase();
let script: string =
'\n' + (await utils.stepLog('Setup Coverage', os_version));
switch (coverage_driver) {
case 'pcov':
return script + (await addCoveragePCOV(version, os_version));
case 'xdebug':
return script + (await addCoverageXdebug(version, os_version));
case 'none':
return script + (await disableCoverage(version, os_version));
default:
return '';
}
}
/**
* Function to setup Xdebug
*
* @param version
* @param os_version
*/
export async function addCoverageXdebug(version: string, os_version: string) {
export async function addCoverageXdebug(
version: string,
os_version: string
): Promise<string> {
return (
(await extensions.addExtension('xdebug', version, os_version, true)) +
(await utils.suppressOutput(os_version)) +
@ -55,8 +31,11 @@ export async function addCoverageXdebug(version: string, os_version: string) {
* @param version
* @param os_version
*/
export async function addCoveragePCOV(version: string, os_version: string) {
let script: string = '\n';
export async function addCoveragePCOV(
version: string,
os_version: string
): Promise<string> {
let script = '\n';
switch (version) {
default:
script +=
@ -115,8 +94,11 @@ export async function addCoveragePCOV(version: string, os_version: string) {
* @param version
* @param os_version
*/
export async function disableCoverage(version: string, os_version: string) {
let script: string = '\n';
export async function disableCoverage(
version: string,
os_version: string
): Promise<string> {
let script = '\n';
switch (os_version) {
case 'linux':
script +=
@ -154,3 +136,30 @@ export async function disableCoverage(version: string, os_version: string) {
return script;
}
/**
* Function to set coverage driver
*
* @param coverage_driver
* @param version
* @param os_version
*/
export async function addCoverage(
coverage_driver: string,
version: string,
os_version: string
): Promise<string> {
coverage_driver.toLowerCase();
const script: string =
'\n' + (await utils.stepLog('Setup Coverage', os_version));
switch (coverage_driver) {
case 'pcov':
return script + (await addCoveragePCOV(version, os_version));
case 'xdebug':
return script + (await addCoverageXdebug(version, os_version));
case 'none':
return script + (await disableCoverage(version, os_version));
default:
return '';
}
}

View File

@ -1,49 +1,6 @@
import * as path from 'path';
import * as utils from './utils';
/**
* 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: string = '\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'
);
}
}
/**
* Install and enable extensions for darwin
*
@ -54,12 +11,12 @@ export async function addExtensionDarwin(
extension_csv: string,
version: string
): Promise<string> {
let extensions: Array<string> = await utils.extensionArray(extension_csv);
let script: string = '\n';
const extensions: Array<string> = await utils.extensionArray(extension_csv);
let script = '\n';
await utils.asyncForEach(extensions, async function(extension: string) {
extension = extension.toLowerCase();
// add script to enable extension is already installed along with php
let install_command: string = '';
let install_command = '';
switch (version + extension) {
case '5.6xdebug':
install_command = 'sudo pecl install xdebug-2.5.5 >/dev/null 2>&1';
@ -89,16 +46,16 @@ export async function addExtensionWindows(
extension_csv: string,
version: string
): Promise<string> {
let extensions: Array<string> = await utils.extensionArray(extension_csv);
let script: string = '\n';
const extensions: Array<string> = await utils.extensionArray(extension_csv);
let script = '\n';
await utils.asyncForEach(extensions, async function(extension: string) {
extension = extension.toLowerCase();
// add script to enable extension is already installed along with php
let install_command: string = '';
let install_command = '';
switch (version + extension) {
case '7.4xdebug':
const extension_url: string =
case '7.4xdebug': {
const extension_url =
'https://xdebug.org/files/php_xdebug-2.8.0-7.4-vc15.dll';
install_command =
'Invoke-WebRequest -Uri ' +
@ -106,6 +63,7 @@ export async function addExtensionWindows(
' -OutFile C:\\tools\\php\\ext\\php_xdebug.dll\n';
install_command += 'Enable-PhpExtension xdebug';
break;
}
case '7.2xdebug':
default:
install_command = 'Install-PhpExtension ' + extension;
@ -132,13 +90,13 @@ export async function addExtensionLinux(
extension_csv: string,
version: string
): Promise<string> {
let extensions: Array<string> = await utils.extensionArray(extension_csv);
let script: string = '\n';
const extensions: Array<string> = await utils.extensionArray(extension_csv);
let script = '\n';
await utils.asyncForEach(extensions, async function(extension: string) {
extension = extension.toLowerCase();
// add script to enable extension is already installed along with php
let install_command: string = '';
let install_command = '';
switch (version + extension) {
case '7.2phalcon3':
case '7.3phalcon3':
@ -180,3 +138,46 @@ export async function addExtensionLinux(
});
return script;
}
/**
* 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'
);
}
}

View File

@ -18,9 +18,9 @@ export async function build(
os_version: string
): Promise<string> {
// taking inputs
let extension_csv: string = await utils.getInput('extension-csv', false);
let ini_values_csv: string = await utils.getInput('ini-values-csv', false);
let coverage_driver: string = await utils.getInput('coverage', false);
const extension_csv: string = await utils.getInput('extension-csv', false);
const ini_values_csv: string = await utils.getInput('ini-values-csv', false);
const coverage_driver: string = await utils.getInput('coverage', false);
let script: string = await utils.readScript(filename, version, os_version);
if (extension_csv) {
@ -39,22 +39,23 @@ export async function build(
/**
* Run the script
*/
export async function run() {
export async function run(): Promise<void> {
try {
let os_version: string = process.platform;
let version: string = await utils.getInput('php-version', true);
const os_version: string = process.platform;
const version: string = await utils.getInput('php-version', true);
// check the os version and run the respective script
let script_path: string = '';
let script_path = '';
switch (os_version) {
case 'darwin':
script_path = await build(os_version + '.sh', version, os_version);
await exec('sh ' + script_path + ' ' + version + ' ' + __dirname);
break;
case 'linux':
let pecl: string = await utils.getInput('pecl', false);
case 'linux': {
const pecl: string = await utils.getInput('pecl', false);
script_path = await build(os_version + '.sh', version, os_version);
await exec('sh ' + script_path + ' ' + version + ' ' + pecl);
break;
}
case 'win32':
script_path = await build('win32.ps1', version, os_version);
await exec(

View File

@ -12,7 +12,7 @@ export async function getInput(
name: string,
mandatory: boolean
): Promise<string> {
let input = process.env[name];
const input = process.env[name];
switch (input) {
case '':
case undefined:
@ -30,111 +30,67 @@ export async function getInput(
* @param callback
*/
export async function asyncForEach(
array: Array<any>,
callback: any
): Promise<any> {
for (let index: number = 0; index < array.length; index++) {
array: Array<string>,
callback: (
element: string,
index: number,
array: Array<string>
) => Promise<void>
): Promise<void> {
for (let index = 0; index < array.length; index++) {
await callback(array[index], index, array);
}
}
/**
* Read the scripts
* Get color index
*
* @param filename
* @param version
* @param os_version
* @param type
*/
export async function readScript(
filename: string,
version: string,
os_version: string
export async function color(type: string): Promise<string> {
switch (type) {
case 'error':
return '31';
default:
case 'success':
return '32';
case 'warning':
return '33';
}
}
/**
* Log to console
*
* @param message
* @param os_version
* @param log_type
* @param prefix
*/
export async function log(
message: string,
os_version: string,
log_type: string
): Promise<string> {
switch (os_version) {
case 'darwin':
switch (version) {
case '7.4':
return fs.readFileSync(
path.join(__dirname, '../src/scripts/7.4.sh'),
'utf8'
);
}
return fs.readFileSync(
path.join(__dirname, '../src/scripts/' + filename),
'utf8'
);
case 'linux':
case 'win32':
return fs.readFileSync(
path.join(__dirname, '../src/scripts/' + filename),
'utf8'
return (
'printf "\\033[' +
(await color(log_type)) +
';1m' +
message +
' \\033[0m"'
);
case 'linux':
case 'darwin':
default:
return await log(
'Platform ' + os_version + ' is not supported',
os_version,
'error'
return (
'echo "\\033[' + (await color(log_type)) + ';1m' + message + '\\033[0m"'
);
}
}
/**
* Write final script which runs
*
* @param filename
* @param version
* @param script
*/
export async function writeScript(
filename: string,
script: string
): Promise<string> {
let runner_dir: string = await getInput('RUNNER_TOOL_CACHE', false);
let script_path: string = path.join(runner_dir, filename);
fs.writeFileSync(script_path, script, {mode: 0o755});
return script_path;
}
/**
* Function to break extension csv into an array
*
* @param extension_csv
*/
export async function extensionArray(
extension_csv: string
): Promise<Array<string>> {
switch (extension_csv) {
case '':
case ' ':
return [];
default:
return extension_csv.split(',').map(function(extension: string) {
return extension
.trim()
.replace('php-', '')
.replace('php_', '');
});
}
}
/**
* Function to break ini values csv into an array
*
* @param ini_values_csv
* @constructor
*/
export async function INIArray(ini_values_csv: string): Promise<Array<string>> {
switch (ini_values_csv) {
case '':
case ' ':
return [];
default:
return ini_values_csv.split(',').map(function(ini_value: string) {
return ini_value.trim();
});
}
}
/**
* Function to log a step
*
@ -188,34 +144,99 @@ export async function addLog(
}
/**
* Log to console
* Read the scripts
*
* @param message
* @param filename
* @param version
* @param os_version
* @param log_type
* @param prefix
*/
export async function log(
message: string,
os_version: string,
log_type: string
export async function readScript(
filename: string,
version: string,
os_version: string
): Promise<string> {
const color: any = {
error: '31',
success: '32',
warning: '33'
};
switch (os_version) {
case 'win32':
return (
'printf "\\033[' + color[log_type] + ';1m' + message + ' \\033[0m"'
);
case 'linux':
case 'darwin':
switch (version) {
case '7.4':
return fs.readFileSync(
path.join(__dirname, '../src/scripts/7.4.sh'),
'utf8'
);
}
return fs.readFileSync(
path.join(__dirname, '../src/scripts/' + filename),
'utf8'
);
case 'linux':
case 'win32':
return fs.readFileSync(
path.join(__dirname, '../src/scripts/' + filename),
'utf8'
);
default:
return 'echo "\\033[' + color[log_type] + ';1m' + message + '\\033[0m"';
return await log(
'Platform ' + os_version + ' is not supported',
os_version,
'error'
);
}
}
/**
* Write final script which runs
*
* @param filename
* @param version
* @param script
*/
export async function writeScript(
filename: string,
script: string
): Promise<string> {
const runner_dir: string = await getInput('RUNNER_TOOL_CACHE', false);
const script_path: string = path.join(runner_dir, filename);
fs.writeFileSync(script_path, script, {mode: 0o755});
return script_path;
}
/**
* Function to break extension csv into an array
*
* @param extension_csv
*/
export async function extensionArray(
extension_csv: string
): Promise<Array<string>> {
switch (extension_csv) {
case '':
case ' ':
return [];
default:
return extension_csv.split(',').map(function(extension: string) {
return extension
.trim()
.replace('php-', '')
.replace('php_', '');
});
}
}
/**
* Function to break ini values csv into an array
*
* @param ini_values_csv
* @constructor
*/
export async function INIArray(ini_values_csv: string): Promise<Array<string>> {
switch (ini_values_csv) {
case '':
case ' ':
return [];
default:
return ini_values_csv.split(',').map(function(ini_value: string) {
return ini_value.trim();
});
}
}
@ -225,7 +246,7 @@ export async function log(
* @param extension
*/
export async function getExtensionPrefix(extension: string): Promise<string> {
let zend: Array<string> = ['xdebug', 'opcache', 'ioncube', 'eaccelerator'];
const zend: Array<string> = ['xdebug', 'opcache', 'ioncube', 'eaccelerator'];
switch (zend.indexOf(extension)) {
case 0:
case 1: