Skip to content

Commit dcf7dba

Browse files
sanjeev9160SANJEEV KUMAR SINGH
andauthored
Adding a tolerance/delta of drop of test coverage. (anuraag016#5)
* Fail Action If percentage diff between old and new goes below delta * Adding delta parameter * adding the changes to index.js * Making the tolerance to 100 Co-authored-by: SANJEEV KUMAR SINGH <[email protected]>
1 parent 2bec764 commit dcf7dba

File tree

4 files changed

+25
-8
lines changed

4 files changed

+25
-8
lines changed

action.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ inputs:
1111
runCommand:
1212
description: 'custom command to get json-summary'
1313
default: 'npx jest --coverage --coverageReporters="json-summary" --coverageDirectory="./"'
14+
delta:
15+
description: 'Difference between the old and final test coverage'
16+
default: 100
1417
branding:
1518
color: red
1619
icon: git-pull-request

dist/index.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2030,6 +2030,7 @@ function run() {
20302030
const githubToken = core.getInput('accessToken');
20312031
const fullCoverage = JSON.parse(core.getInput('fullCoverageDiff'));
20322032
const commandToRun = core.getInput('runCommand');
2033+
const delta = Number(core.getInput('delta'));
20332034
const githubClient = github.getOctokit(githubToken);
20342035
const prNumber = github.context.issue.number;
20352036
const branchNameBase = (_a = github.context.payload.pull_request) === null || _a === void 0 ? void 0 : _a.base.ref;
@@ -2046,7 +2047,7 @@ function run() {
20462047
.trim();
20472048
const diffChecker = new DiffChecker_1.DiffChecker(codeCoverageNew, codeCoverageOld);
20482049
let messageToPost = `Code coverage diff between base branch:${branchNameBase} and head branch: ${branchNameHead} \n`;
2049-
const coverageDetails = diffChecker.getCoverageDetails(!fullCoverage, `${currentDirectory}/`);
2050+
const coverageDetails = diffChecker.getCoverageDetails(!fullCoverage, `${currentDirectory}/`, delta);
20502051
if (coverageDetails.length === 0) {
20512052
messageToPost =
20522053
'No changes to code coverage between the base branch and the head branch';
@@ -6710,11 +6711,11 @@ class DiffChecker {
67106711
}
67116712
}
67126713
}
6713-
getCoverageDetails(diffOnly, currentDirectory) {
6714+
getCoverageDetails(diffOnly, currentDirectory, delta) {
67146715
const keys = Object.keys(this.diffCoverageReport);
67156716
const returnStrings = [];
67166717
for (const key of keys) {
6717-
if (this.compareCoverageValues(this.diffCoverageReport[key]) !== 0) {
6718+
if (this.compareCoverageValues(this.diffCoverageReport[key], delta) !== 0) {
67186719
returnStrings.push(this.createDiffLine(key.replace(currentDirectory, ''), this.diffCoverageReport[key]));
67196720
}
67206721
else {
@@ -6734,10 +6735,15 @@ class DiffChecker {
67346735
}
67356736
return `${name} | ~~${diffFileCoverageData.statements.oldPct}~~ **${diffFileCoverageData.statements.newPct}** | ~~${diffFileCoverageData.branches.oldPct}~~ **${diffFileCoverageData.branches.newPct}** | ~~${diffFileCoverageData.functions.oldPct}~~ **${diffFileCoverageData.functions.newPct}** | ~~${diffFileCoverageData.lines.oldPct}~~ **${diffFileCoverageData.lines.newPct}**`;
67366737
}
6737-
compareCoverageValues(diffCoverageData) {
6738+
compareCoverageValues(diffCoverageData, delta) {
67386739
const keys = Object.keys(diffCoverageData);
67396740
for (const key of keys) {
67406741
if (diffCoverageData[key].oldPct !== diffCoverageData[key].newPct) {
6742+
const oldValue = Number(diffCoverageData[key].oldPct);
6743+
const newValue = Number(diffCoverageData[key].newPct);
6744+
if (oldValue - newValue > delta) {
6745+
throw Error(`Current PR reduces the test percentage by ${delta}`);
6746+
}
67416747
return 1;
67426748
}
67436749
}

src/DiffChecker.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,11 @@ export class DiffChecker {
6060
}
6161
}
6262

63-
getCoverageDetails(diffOnly: boolean, currentDirectory: string): string[] {
63+
getCoverageDetails(diffOnly: boolean, currentDirectory: string, delta: number): string[] {
6464
const keys = Object.keys(this.diffCoverageReport)
6565
const returnStrings: string[] = []
6666
for (const key of keys) {
67-
if (this.compareCoverageValues(this.diffCoverageReport[key]) !== 0) {
67+
if (this.compareCoverageValues(this.diffCoverageReport[key], delta) !== 0) {
6868
returnStrings.push(
6969
this.createDiffLine(
7070
key.replace(currentDirectory, ''),
@@ -99,13 +99,19 @@ export class DiffChecker {
9999
}
100100

101101
private compareCoverageValues(
102-
diffCoverageData: DiffFileCoverageData
102+
diffCoverageData: DiffFileCoverageData,
103+
delta: number
103104
): number {
104105
const keys: ('lines' | 'statements' | 'branches' | 'functions')[] = <
105106
('lines' | 'statements' | 'branches' | 'functions')[]
106107
>Object.keys(diffCoverageData)
107108
for (const key of keys) {
108109
if (diffCoverageData[key].oldPct !== diffCoverageData[key].newPct) {
110+
const oldValue: number = Number(diffCoverageData[key].oldPct)
111+
const newValue: number = Number(diffCoverageData[key].newPct)
112+
if (oldValue - newValue > delta) {
113+
throw Error(`Current PR reduces the test percentage by ${delta}`)
114+
}
109115
return 1
110116
}
111117
}

src/main.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ async function run(): Promise<void> {
1212
const githubToken = core.getInput('accessToken')
1313
const fullCoverage = JSON.parse(core.getInput('fullCoverageDiff'))
1414
const commandToRun = core.getInput('runCommand')
15+
const delta = Number(core.getInput('delta'))
1516
const githubClient = github.getOctokit(githubToken)
1617
const prNumber = github.context.issue.number
1718
const branchNameBase = github.context.payload.pull_request?.base.ref
@@ -37,7 +38,8 @@ async function run(): Promise<void> {
3738
let messageToPost = `Code coverage diff between base branch:${branchNameBase} and head branch: ${branchNameHead} \n`
3839
const coverageDetails = diffChecker.getCoverageDetails(
3940
!fullCoverage,
40-
`${currentDirectory}/`
41+
`${currentDirectory}/`,
42+
delta,
4143
)
4244
if (coverageDetails.length === 0) {
4345
messageToPost =

0 commit comments

Comments
 (0)