Files
setup-php/src/coverage.ts

150 lines
3.6 KiB
TypeScript
Raw Normal View History

2019-10-08 18:12:54 +05:30
import * as utils from './utils';
import * as extensions from './extensions';
import * as config from './config';
export async function checkXdebugError(
extension: string,
version: string
): Promise<string> {
if (
(/^5\.[3-6]$|^7\.[0-1]$/.test(version) && extension == 'xdebug3') ||
(/^8\.[0-9]$/.test(version) && extension == 'xdebug2')
) {
return extension + ' is not supported on PHP ' + version;
}
return '';
}
2019-10-11 23:09:05 +05:30
/**
* Function to set up Xdebug
2019-10-11 23:09:05 +05:30
*
2020-06-20 06:25:19 +05:30
* @param extension
2019-10-11 23:09:05 +05:30
* @param version
2022-01-29 05:29:58 +05:30
* @param os
2019-12-26 18:31:18 +05:30
* @param pipe
2019-10-11 23:09:05 +05:30
*/
2019-11-24 02:04:12 +05:30
export async function addCoverageXdebug(
2020-06-20 06:25:19 +05:30
extension: string,
2019-10-08 18:12:54 +05:30
version: string,
2022-01-29 05:29:58 +05:30
os: string,
2019-12-26 18:31:18 +05:30
pipe: string
2019-10-08 18:12:54 +05:30
): Promise<string> {
2021-03-23 06:50:05 +05:30
let script = '\n';
const error: string = await checkXdebugError(extension, version);
if (!error) {
script +=
2022-01-29 05:29:58 +05:30
(await extensions.addExtension(':pcov:false', version, os, true)) + pipe;
extension = extension == 'xdebug3' ? 'xdebug' : extension;
script +=
2022-01-29 05:29:58 +05:30
(await extensions.addExtension(extension, version, os, true)) + pipe;
2022-06-30 17:36:40 +05:30
script += await utils.setVariable(
'xdebug_version',
'php -r "echo phpversion(\'xdebug\');"',
os
);
script +=
(await utils.getCommand(os, 'extension_log')) +
'xdebug "Xdebug $xdebug_version enabled as coverage driver"';
} else {
script += await utils.addLog('$cross', extension, error, os);
}
2021-03-23 06:50:05 +05:30
return script;
2019-10-08 18:12:54 +05:30
}
2019-10-11 23:09:05 +05:30
/**
* Function to set up PCOV
2019-10-11 23:09:05 +05:30
*
* @param version
2022-01-29 05:29:58 +05:30
* @param os
2019-12-26 18:31:18 +05:30
* @param pipe
2019-10-11 23:09:05 +05:30
*/
2019-11-24 02:04:12 +05:30
export async function addCoveragePCOV(
version: string,
2022-01-29 05:29:58 +05:30
os: string,
2019-12-26 18:31:18 +05:30
pipe: string
2019-11-24 02:04:12 +05:30
): Promise<string> {
let script = '\n';
switch (true) {
2019-10-08 18:12:54 +05:30
default:
2021-03-23 06:50:05 +05:30
script +=
2022-01-29 05:29:58 +05:30
(await extensions.addExtension(':xdebug:false', version, os, true)) +
2021-03-23 06:50:05 +05:30
pipe;
2019-10-17 01:41:13 +05:30
script +=
2022-01-29 05:29:58 +05:30
(await extensions.addExtension('pcov', version, os, true)) + pipe;
script += (await config.addINIValues('pcov.enabled=1', os, true)) + '\n';
2022-06-30 17:36:40 +05:30
script += await utils.setVariable(
'pcov_version',
'php -r "echo phpversion(\'pcov\');"',
os
);
script +=
(await utils.getCommand(os, 'extension_log')) +
'pcov "PCOV $pcov_version enabled as coverage driver"';
2019-10-08 18:12:54 +05:30
break;
case /5\.[3-6]|7\.0/.test(version):
2019-10-17 01:41:13 +05:30
script += await utils.addLog(
'$cross',
'pcov',
'PHP 7.1 or newer is required',
2022-01-29 05:29:58 +05:30
os
2019-10-08 18:12:54 +05:30
);
break;
}
return script;
}
2019-10-11 23:09:05 +05:30
/**
* Function to disable Xdebug and PCOV
*
* @param version
2022-01-29 05:29:58 +05:30
* @param os
2019-12-26 18:31:18 +05:30
* @param pipe
2019-10-11 23:09:05 +05:30
*/
2019-11-24 02:04:12 +05:30
export async function disableCoverage(
version: string,
2022-01-29 05:29:58 +05:30
os: string,
2019-12-26 18:31:18 +05:30
pipe: string
2019-11-24 02:04:12 +05:30
): Promise<string> {
let script = '\n';
2021-03-23 06:50:05 +05:30
script +=
2022-01-29 05:29:58 +05:30
(await extensions.addExtension(':pcov:false', version, os, true)) + pipe;
script +=
2022-01-29 05:29:58 +05:30
(await extensions.addExtension(':xdebug:false', version, os, true)) + pipe;
script += await utils.addLog('$tick', 'none', 'Disabled Xdebug and PCOV', os);
2019-10-08 18:12:54 +05:30
return script;
}
2019-11-24 02:04:12 +05:30
/**
* Function to set coverage driver
*
* @param coverage_driver
* @param version
2022-01-29 05:29:58 +05:30
* @param os
2019-11-24 02:04:12 +05:30
*/
export async function addCoverage(
coverage_driver: string,
version: string,
2022-01-29 05:29:58 +05:30
os: string
2019-11-24 02:04:12 +05:30
): Promise<string> {
2020-01-26 16:15:39 +05:30
coverage_driver = coverage_driver.toLowerCase();
2022-01-29 05:29:58 +05:30
const script: string = '\n' + (await utils.stepLog('Setup Coverage', os));
const pipe: string = (await utils.suppressOutput(os)) + '\n';
2019-11-24 02:04:12 +05:30
switch (coverage_driver) {
case 'pcov':
2022-01-29 05:29:58 +05:30
return script + (await addCoveragePCOV(version, os, pipe));
2019-11-24 02:04:12 +05:30
case 'xdebug':
2020-12-24 18:20:42 +05:30
case 'xdebug2':
case 'xdebug3':
2020-12-24 18:20:42 +05:30
return (
2022-01-29 05:29:58 +05:30
script + (await addCoverageXdebug(coverage_driver, version, os, pipe))
2020-06-20 06:25:19 +05:30
);
2019-11-24 02:04:12 +05:30
case 'none':
2022-01-29 05:29:58 +05:30
return script + (await disableCoverage(version, os, pipe));
2019-11-24 02:04:12 +05:30
default:
return '';
}
}