in infra/build.ts [87:142]
private _report() {
const output = this._outputs.sort((a, b) => {
const ares = +a.message.success;
const bres = +b.message.success;
return bres - ares;
});
let result = '';
let totalSuccess = 0;
const regressed: string[] = [];
const newPasses: string[] = [];
output.forEach(row => {
if (row.message.success) totalSuccess += 1;
if (failingProjects.has(row.project) && row.message.success) {
newPasses.push(row.project);
} else if (!failingProjects.has(row.project) && !row.message.success) {
regressed.push(row.project);
}
result += chalk.yellow('### ' + row.project + ' ###') + '\n';
result +=
'Status: ' +
(row.message.success ? chalk.green('Tests passed') : chalk.red('Tests failed')) +
'\n\n';
result += row.message.success
? row.message.out
: chalk.red(row.message.out);
result += '\n\n';
});
console.log('\n');
console.log(result);
console.log(
`Total: ${output.length}, ${chalk.green(
'Success: ' + totalSuccess
)}, ${chalk.red('Failed: ' + (output.length - totalSuccess))}`
);
if (regressed.length) {
console.log(chalk.red('Regressions: ' + regressed.join(', ')));
}
if (newPasses.length) {
console.log(chalk.green('New successes: ' + newPasses.join(', ')));
console.log(' (Please remove these projects from \'failing-projects.json\'.)');
}
// Additionally, ensure `failingProjectsList` does not contain non-existent projects.
const nonExistentFailingProjects =
failingProjectsList.filter(name => !allProjectNames.includes(name));
if (nonExistentFailingProjects.length > 0) {
console.log(chalk.red(
`\'failing-projects.json\' contains ${nonExistentFailingProjects.length} non-existent project(s): ` +
nonExistentFailingProjects.join(', ')));
}
process.exit((regressed.length + newPasses.length + nonExistentFailingProjects.length > 0) ? 1 : 0);
}