Skip to content

Commit 2d7135d

Browse files
authored
Moved to json reporter (ArtiomTr#34)
* Refactored code, moved to json reporter * Updated default test script * Updated node version in dockerfile * Fixed coverage formatting * Rebuild * Added line coverage info in report * Fixed line counter * Added logging * Additional logging * Additional counting * Bug fix * Covered lines counter fix * covered lines counter fix * Removed logging * Altered report format * Bug fixes * Bug fixes * logging context * Altered report heading * Added possibility to report to multiple directories * commit sha fix
1 parent fc0f2f3 commit 2d7135d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+11026
-299
lines changed

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM node:12
1+
FROM node:14
22

33
COPY dist/index.js /index.js
44

action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ inputs:
1111
test_script:
1212
required: false
1313
description: 'A custom npm script to get coverage'
14-
default: npx jest --silent --ci --coverage --coverageReporters="text" --coverageReporters="text-summary"
14+
default: npx jest --silent --ci --coverage --testLocationInResults --json --outputFile="report.json"
1515
threshold:
1616
required: false
1717
description: 'Coverage threshold. If total coverage is less than threshold, PR will be rejected'

dist/index.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

index.d.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
declare module '*.md' {
2+
const text: string;
3+
4+
export default text;
5+
}

jest.config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,5 @@ module.exports = {
1212
collectCoverage: true,
1313
collectCoverageFrom: ['src/**/*.ts'],
1414
coveragePathIgnorePatterns: ['/node_modules/'],
15-
coverageReporters: ['text-summary'],
15+
coverageReporters: [],
1616
};

package-lock.json

Lines changed: 8041 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"main": "index.js",
77
"scripts": {
88
"test": "jest",
9-
"test:coverage": "jest --silent --coverage --coverageReporters=\"text\" --coverageReporters=\"text-summary\"",
9+
"test:coverage": "jest --silent --testLocationInResults --coverage --json --outputFile=\"report.json\"",
1010
"test:watch": "jest --watch",
1111
"start": "webpack --watch --mode development",
1212
"build": "webpack --mode production",
@@ -19,9 +19,11 @@
1919
"@actions/core": "^1.2.6",
2020
"@actions/exec": "^1.0.4",
2121
"@actions/github": "^4.0.0",
22+
"fs-extra": "^10.0.0",
2223
"markdown-table": "^2.0.0"
2324
},
2425
"devDependencies": {
26+
"@types/fs-extra": "^9.0.11",
2527
"@types/jest": "^26.0.20",
2628
"@types/markdown-table": "^2.0.0",
2729
"@types/node": "^14.14.20",
@@ -33,6 +35,7 @@
3335
"eslint-plugin-simple-import-sort": "^7.0.0",
3436
"jest": "^26.6.3",
3537
"prettier": "^2.2.1",
38+
"raw-loader": "^4.0.2",
3639
"ts-jest": "^26.4.4",
3740
"ts-loader": "^8.0.14",
3841
"typescript": "^4.1.3",

src/collect/collectCoverage.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import { getRawCoverage } from './getRawCoverage';
22
import { parseCoverage } from './parseCoverage';
3-
import { ReportData } from '../report/generateReport';
3+
import { Report } from '../typings/Report';
44

55
export const collectCoverage = async (
66
testCommand: string,
77
branch?: string,
88
workingDirectory?: string
9-
): Promise<ReportData> => {
9+
): Promise<Report> => {
1010
const source = await getRawCoverage(testCommand, branch, workingDirectory);
1111

1212
if (typeof source === 'string') {

src/collect/counters.ts

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import { FileCoverage } from '../typings/JsonReport';
2+
3+
export const standardTotalCounter = (key: keyof FileCoverage) => (
4+
value: FileCoverage
5+
) => Object.values(value[key]).length;
6+
7+
export const standardCoveredCounter = (key: keyof FileCoverage) => (
8+
value: FileCoverage
9+
) => Object.values(value[key]).filter((hits) => hits > 0).length;
10+
11+
export const totalBranchesCounter = (value: FileCoverage) =>
12+
Object.values(value.b).reduce((acc, branch) => acc + branch.length, 0);
13+
14+
export const coveredBranchesCounter = (value: FileCoverage) =>
15+
Object.values(value.b).reduce(
16+
(acc, branch) => acc + branch.filter((hits) => hits > 0).length,
17+
0
18+
);
19+
20+
const lineDiff = (startLine: number, endLine: number, lastEndLine: number) =>
21+
Math.max(endLine - Math.max(startLine, lastEndLine), 0);
22+
23+
export const totalLinesCounter = (value: FileCoverage) => {
24+
let lastEndLine = 0;
25+
26+
return Object.values(value.statementMap).reduce((acc, statement) => {
27+
const newLines = lineDiff(
28+
statement.start.line,
29+
statement.end.line,
30+
lastEndLine
31+
);
32+
33+
lastEndLine = Math.max(statement.end.line, lastEndLine);
34+
35+
return acc + newLines;
36+
}, 0);
37+
};
38+
39+
export const coveredLinesCounter = (value: FileCoverage) => {
40+
let lastEndLine = 0;
41+
42+
const totalLines = totalLinesCounter(value);
43+
44+
const notCoveredLines = Object.entries(value.statementMap).reduce(
45+
(acc, [key, statement]) => {
46+
if (value.s[+key] <= 0) {
47+
const newLines = lineDiff(
48+
statement.start.line,
49+
statement.end.line,
50+
lastEndLine
51+
);
52+
lastEndLine = Math.max(statement.end.line, lastEndLine);
53+
54+
return acc + newLines;
55+
}
56+
57+
return acc;
58+
},
59+
0
60+
);
61+
62+
return Math.max(0, totalLines - notCoveredLines);
63+
};

src/collect/getPercents.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export const getPercents = (covered: number, total: number): number => {
2+
if (total === 0) return 100;
3+
4+
return (covered / total) * 100;
5+
};

0 commit comments

Comments
 (0)