Add coverage support, improve logs and fix bugs

This commit is contained in:
Shivam Mathur
2019-09-26 02:33:39 +05:30
parent 36104f0983
commit 9134867822
26 changed files with 762 additions and 284 deletions

View File

@ -2,24 +2,40 @@ import * as utils from './utils';
import * as pecl from './pecl';
export async function addExtension(
extensions: string,
extension_csv: string,
version: string,
os_version: string
): Promise<string> {
if (os_version === 'win32') {
return await addExtensionWindows(extensions, version);
} else if (os_version === 'linux') {
return await addExtensionLinux(extensions, version);
switch (os_version) {
case 'win32':
return await addExtensionWindows(extension_csv, version);
case 'darwin':
return await addExtensionDarwin(extension_csv, version);
case 'linux':
return await addExtensionLinux(extension_csv, version);
default:
return await utils.log(
'Platform ' + os_version + ' is not supported',
os_version,
'error'
);
}
return await addExtensionDarwin(extensions);
}
export async function addINIValues(ini_values_csv: string, os_version: string) {
if (os_version === 'win32') {
return await addINIValuesWindows(ini_values_csv);
switch (os_version) {
case 'win32':
return await addINIValuesWindows(ini_values_csv);
case 'darwin':
case 'linux':
return await addINIValuesUnix(ini_values_csv);
default:
return await utils.log(
'Platform ' + os_version + ' is not supported',
os_version,
'error'
);
}
return await addINIValuesUnix(ini_values_csv);
}
/**
@ -28,14 +44,17 @@ export async function addINIValues(ini_values_csv: string, os_version: string) {
* @param extension
*/
export async function enableExtensionWindows(extension: string) {
return `try {
return (
`try {
$exist = Test-Path -Path $ext_dir\\php_${extension}.dll
if(!(php -m | findstr -i ${extension}) -and $exist) {
Enable-PhpExtension ${extension} C:\\tools\\php
}
} catch [Exception] {
echo $_
}\n`;
Enable-PhpExtension ${extension} C:\\tools\\php\n` +
(await utils.log(extension + ' enabled', 'win32', 'success')) +
`}
} catch [Exception] {\n` +
(await utils.log(extension + ' could not be installed', 'win32', 'error')) +
` }\n`
);
}
/**
@ -44,34 +63,58 @@ export async function enableExtensionWindows(extension: string) {
* @param extension
*/
export async function enableExtensionUnix(extension: string) {
return `if [ ! "$(php -m | grep ${extension})" ] && [ -e "$ext_dir/${extension}.so" ]; then
echo "extension=${extension}.so" >> 'php -i | grep "Loaded Configuration" | sed -e "s|.*=>\s*||"'
echo "${extension} enabled"
fi\n`;
return (
`if [ ! "$(php -m | grep ${extension})" ] && [ -e "$ext_dir/${extension}.so" ]; then
echo "extension=${extension}.so" >> 'php -i | grep "Loaded Configuration" | sed -e "s|.*=>\s*||"'\n` +
(await utils.log(extension + ' enabled', 'unix', 'success')) +
`; fi\n`
);
}
/**
* Install and enable extensions for darwin
*
* @param extension_csv
* @param version
*/
export async function addExtensionDarwin(
extension_csv: string
extension_csv: string,
version: string
): Promise<string> {
let extensions: Array<string> = await utils.extensionArray(extension_csv);
let script: string = '\n';
await utils.asyncForEach(extensions, async function(extension: string) {
extension = extension.toLowerCase();
// add script to enable extension is already installed along with php
script += await enableExtensionUnix(extension);
if (await pecl.checkPECLExtension(extension)) {
script +=
'if [ ! "$(php -m | grep ' +
extension +
')" ]; then sudo pecl install ' +
extension +
' || echo "Couldn\'t find extension: ' +
extension +
'"; fi\n';
switch (await pecl.checkPECLExtension(extension)) {
case true:
extension =
version === '5.6' && extension === 'xdebug'
? 'xdebug-2.5.5'
: extension;
script +=
'if [ ! "$(php -m | grep ' +
extension +
')" ]; then sudo pecl install ' +
extension +
' || ' +
(await utils.log(
"Couldn't install extension: " + extension,
'darwin',
'error'
)) +
'; fi\n';
break;
case false:
default:
script +=
(await utils.log(
'Could not find extension: ' + extension,
'darwin',
'error'
)) + '\n';
break;
}
});
return script;
@ -90,24 +133,47 @@ export async function addExtensionWindows(
let extensions: Array<string> = await utils.extensionArray(extension_csv);
let script: string = '\n';
await utils.asyncForEach(extensions, async function(extension: string) {
extension = extension.toLowerCase();
// add script to enable extension is already installed along with php
script += await enableExtensionWindows(extension);
let extension_version = 'stable';
if (version == '7.4') {
extension_version = 'alpha';
let extension_version: string = '';
switch (version) {
case '7.4':
extension_version = 'alpha';
break;
case '7.2':
default:
extension_version = 'stable';
break;
}
if (await pecl.checkPECLExtension(extension)) {
script +=
'if(!(php -m | findstr -i ' +
extension +
')) { ' +
'try { Install-PhpExtension ' +
extension +
' -MinimumStability ' +
extension_version +
' } catch [Exception] { echo $_; echo "Could not install extension: "' +
extension +
' } }\n';
switch (await pecl.checkPECLExtension(extension)) {
case true:
script +=
'if(!(php -m | findstr -i ' +
extension +
')) { ' +
'try { Install-PhpExtension ' +
extension +
' -MinimumStability ' +
extension_version +
' } catch [Exception] { ' +
(await utils.log(
'Could not install extension: ' + extension,
'win32',
'error'
)) +
' } }\n';
break;
case false:
default:
script +=
(await utils.log(
'Could not find extension: ' + extension,
'win32',
'error'
)) + '\n';
break;
}
});
return script;
@ -126,6 +192,7 @@ export async function addExtensionLinux(
let extensions: Array<string> = await utils.extensionArray(extension_csv);
let script: string = '\n';
await utils.asyncForEach(extensions, async function(extension: string) {
extension = extension.toLowerCase();
// add script to enable extension is already installed along with php
script += await enableExtensionUnix(extension);
script +=
@ -135,11 +202,13 @@ export async function addExtensionLinux(
version +
'-' +
extension +
' || echo "Couldn\'t find extension php' +
version +
'-' +
extension +
'"; fi\n';
' || ' +
(await utils.log(
"Couldn't find extension php" + version + '-' + extension,
'linux',
'error'
)) +
'; fi\n';
});
return script;
}
@ -177,3 +246,70 @@ export async function addINIValuesWindows(
});
return script;
}
export async function addCoverage(
coverage: string,
version: string,
os_version: string
): Promise<string> {
let script: string = '';
script += '\n';
coverage = coverage.toLowerCase();
// pcov
switch (coverage) {
case 'pcov':
// if version is 7.1 or newer
switch (version) {
default:
script += await addExtension(coverage, version, os_version);
script += await addINIValues('pcov.enabled=1', os_version);
// add command to disable xdebug and enable pcov
switch (os_version) {
case 'linux':
script +=
"sudo phpdismod xdebug || echo 'xdebug not installed'\n";
script += "sudo phpenmod pcov || echo 'pcov not installed'\n";
break;
case 'darwin':
script += 'sudo sed -i \'\' "/xdebug/d" $ini_file\n';
break;
case 'win32':
script +=
'if(php -m | findstr -i xdebug) { Disable-PhpExtension xdebug C:\\tools\\php }\n';
break;
}
// success
script += await utils.log(
'pcov enabled as coverage driver',
os_version,
'success'
);
// version is not supported
break;
case '5.6':
case '7.0':
script += await utils.log(
'pcov requires php 7.1 or newer',
os_version,
'warning'
);
break;
}
break;
//xdebug
case 'xdebug':
script += await addExtension(coverage, version, os_version);
script += await utils.log(
'Xdebug enabled as coverage driver',
os_version,
'success'
);
break;
// unknown coverage driver
default:
script = '';
}
return script;
}

View File

@ -12,6 +12,7 @@ async function run() {
let version: string = await utils.getInput('php-version', true);
let extension_csv: string = await utils.getInput('extension-csv', false);
let ini_values_csv: string = await utils.getInput('ini-values-csv', false);
let coverage: string = await utils.getInput('coverage', false);
let os_version: string = process.platform;
// check the os version and run the respective script
@ -23,6 +24,7 @@ async function run() {
);
darwin += await features.addExtension(extension_csv, version, os_version);
darwin += await features.addINIValues(ini_values_csv, os_version);
darwin += await features.addCoverage(coverage, version, os_version);
await utils.writeScript('darwin.sh', version, darwin);
await exec('sh -x ./' + version + 'darwin.sh ' + version);
} else if (os_version == 'win32') {
@ -37,6 +39,7 @@ async function run() {
os_version
);
windows += await features.addINIValues(ini_values_csv, os_version);
windows += await features.addCoverage(coverage, version, os_version);
await utils.writeScript('win32.ps1', version, windows);
await exec('powershell .\\' + version + 'win32.ps1 -version ' + version);
} else if (os_version == 'linux') {
@ -47,6 +50,7 @@ async function run() {
);
linux += await features.addExtension(extension_csv, version, os_version);
linux += await features.addINIValues(ini_values_csv, os_version);
linux += await features.addCoverage(coverage, version, os_version);
await utils.writeScript('linux.sh', version, linux);
await exec('./' + version + 'linux.sh ' + version);
}

View File

@ -7,11 +7,13 @@ export async function getInput(
mandatory: boolean
): Promise<string> {
let input = process.env[name];
if (!input) {
input = core.getInput(name, {required: mandatory});
switch (input) {
case '':
case undefined:
return core.getInput(name, {required: mandatory});
default:
return input;
}
return input;
}
/**
@ -42,10 +44,31 @@ export async function readScript(
version: string,
os_version: string
): Promise<string> {
if (version === '7.4' && os_version === 'darwin') {
return fs.readFileSync(path.join(__dirname, '../src/7.4.sh'), 'utf8');
switch (os_version) {
case 'darwin':
switch (version) {
case '7.4':
return fs.readFileSync(path.join(__dirname, '../src/7.4.sh'), 'utf8');
case '7.3':
default:
return fs.readFileSync(
path.join(__dirname, '../src/' + filename),
'utf8'
);
}
case 'win32':
case 'linux':
return fs.readFileSync(
path.join(__dirname, '../src/' + filename),
'utf8'
);
default:
return await log(
'Platform ' + os_version + ' is not supported',
os_version,
'error'
);
}
return fs.readFileSync(path.join(__dirname, '../src/' + filename), 'utf8');
}
/**
@ -89,3 +112,31 @@ export async function INIArray(ini_values_csv: string): Promise<Array<string>> {
return ini_value.trim();
});
}
export async function log(
message: string,
os_version: string,
log_type: string
): Promise<string> {
switch (os_version) {
case 'win32':
const color: any = {
error: 'red',
success: 'green',
warning: 'yellow'
};
return "Write-Host '" + message + "' -ForegroundColor " + color[log_type];
case 'linux':
case 'darwin':
default:
const unix_color: any = {
error: '31',
success: '32',
warning: '33'
};
return (
'echo -e "\\033[' + unix_color[log_type] + ';1m' + message + '\\033[0m"'
);
}
}