diff --git a/__tests__/utils.test.ts b/__tests__/utils.test.ts index a062518..5a90f67 100644 --- a/__tests__/utils.test.ts +++ b/__tests__/utils.test.ts @@ -130,6 +130,7 @@ test('getInputs', () => { artifactDownloadWorkflowNames: null, artifactName: 'coverage-%name%', negativeDifferenceBy: 'package', + negativeDifferenceThreshold: -0, retention: undefined, //This is a cheat withBaseCoverageTemplate: f.withBaseCoverageTemplate, diff --git a/src/interfaces.ts b/src/interfaces.ts index 12c91f1..45b2f27 100644 --- a/src/interfaces.ts +++ b/src/interfaces.ts @@ -26,6 +26,7 @@ export interface Inputs { retention: number | undefined withBaseCoverageTemplate: string withoutBaseCoverageTemplate: string + negativeDifferenceThreshold: number } export interface Files { diff --git a/src/main.ts b/src/main.ts index aae1349..9710211 100644 --- a/src/main.ts +++ b/src/main.ts @@ -117,7 +117,8 @@ async function generateMarkdown( markdownFilename, negativeDifferenceBy, withBaseCoverageTemplate, - withoutBaseCoverageTemplate + withoutBaseCoverageTemplate, + negativeDifferenceThreshold } = getInputs() const overallDifferencePercentage = baseCoverage ? roundPercentage(headCoverage.coverage - baseCoverage.coverage) @@ -126,16 +127,18 @@ async function generateMarkdown( core.debug(`headCoverage: ${headCoverage.coverage}`) core.debug(`baseCoverage: ${baseCoverage?.coverage}`) core.debug(`overallDifferencePercentage: ${overallDifferencePercentage}`) + core.debug(`negativeDifferenceThreshold: ${negativeDifferenceThreshold}`) if ( failOnNegativeDifference && negativeDifferenceBy === 'overall' && overallDifferencePercentage !== null && overallDifferencePercentage < 0 && + overallDifferencePercentage < negativeDifferenceThreshold && baseCoverage ) { core.setFailed( - `FAIL: Overall coverage of dropped ${overallDifferencePercentage}%, from ${baseCoverage.coverage}% to ${headCoverage.coverage}%.` + `FAIL: Overall coverage of dropped ${overallDifferencePercentage}%, from ${baseCoverage.coverage}% to ${headCoverage.coverage}% which is below minimum threshold of ${-negativeDifferenceThreshold}%` ) } @@ -200,10 +203,11 @@ async function generateMarkdown( failOnNegativeDifference && negativeDifferenceBy === 'package' && differencePercentage !== null && - differencePercentage < 0 + differencePercentage < 0 && + differencePercentage < negativeDifferenceThreshold ) { core.setFailed( - `${headCoverage.files[hash].relative} coverage difference was ${differencePercentage}%` + `${headCoverage.files[hash].relative} coverage difference was ${differencePercentage}% which is below threshold of ${-negativeDifferenceThreshold}%` ) } diff --git a/src/utils.ts b/src/utils.ts index 4101893..27d01ba 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -343,6 +343,9 @@ export function getInputs(): Inputs { core.getInput('file_coverage_warning_max') || '75' ) + const negativeDifferenceThreshold = + parseFloat(core.getInput('negative_difference_threshold') || '0') * -100 + const failOnNegativeDifference = core.getInput('fail_on_negative_difference') === 'true' ? true : false @@ -389,7 +392,8 @@ export function getInputs(): Inputs { negativeDifferenceBy, retention: retentionDays, withoutBaseCoverageTemplate, - withBaseCoverageTemplate + withBaseCoverageTemplate, + negativeDifferenceThreshold } return inputs