mirror of
https://github.com/shivammathur/setup-php.git
synced 2025-09-07 21:34:08 +07:00
Add coverage support, improve logs and fix bugs
This commit is contained in:
236
src/features.ts
236
src/features.ts
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
65
src/utils.ts
65
src/utils.ts
@ -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"'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user