Files
iptvnator/tools/coverage/merge-coverage.mjs
T
4grayand4gray ef900d0f2a [codex] Add scoped coverage reporting (#1024)
* add scoped coverage reporting

* fix coverage review feedback

---------

Co-authored-by: 4gray <fourgray@proton.me>
2026-06-06 17:41:40 +02:00

63 lines
2.0 KiB
JavaScript

#!/usr/bin/env node
import { createRequire } from 'node:module';
import {
existsSync,
mkdirSync,
readFileSync,
rmSync,
writeFileSync,
} from 'node:fs';
import path from 'node:path';
import process from 'node:process';
const require = createRequire(import.meta.url);
const { createCoverageMap } = require('istanbul-lib-coverage');
const libReport = require('istanbul-lib-report');
const reports = require('istanbul-reports');
const workspaceRoot = process.cwd();
const policy = JSON.parse(
readFileSync(path.join(workspaceRoot, 'tools/coverage/coverage-policy.json'), 'utf8')
);
const outputDir = path.join(workspaceRoot, policy.reporting.mergedCoverageDir);
const coverageFiles = policy.unitCoverage.tierA
.map((project) => path.join(workspaceRoot, 'coverage', project.root, 'coverage-final.json'))
.filter((coverageFile) => existsSync(coverageFile));
if (coverageFiles.length === 0) {
console.error('No Tier A coverage-final.json files found under coverage/.');
process.exit(1);
}
rmSync(outputDir, { recursive: true, force: true });
mkdirSync(outputDir, { recursive: true });
const coverageMap = createCoverageMap({});
for (const coverageFile of coverageFiles) {
const data = JSON.parse(readFileSync(coverageFile, 'utf8'));
coverageMap.merge(data);
}
const context = libReport.createContext({
dir: outputDir,
coverageMap,
});
for (const reporter of ['json', 'json-summary', 'lcovonly', 'cobertura', 'html', 'text-summary']) {
reports.create(reporter).execute(context);
}
const summary = coverageMap.getCoverageSummary().toJSON();
writeFileSync(
path.join(outputDir, 'coverage-summary.pretty.json'),
`${JSON.stringify(summary, null, 4)}\n`
);
console.log(`Merged ${coverageFiles.length} coverage files into ${policy.reporting.mergedCoverageDir}`);
console.log(
`Statements: ${summary.statements.pct}% | Branches: ${summary.branches.pct}% | Functions: ${summary.functions.pct}% | Lines: ${summary.lines.pct}%`
);