Skip to content

Commit

Permalink
Add a flag so that only classes for which coverage changed are listed (
Browse files Browse the repository at this point in the history
  • Loading branch information
tm1000 committed May 17, 2024
1 parent 15dd081 commit 49812b8
Show file tree
Hide file tree
Showing 9 changed files with 80 additions and 6 deletions.
26 changes: 26 additions & 0 deletions __tests__/__snapshots__/functions.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -266,3 +266,29 @@ exports[`Generate Diffed Cobertura Markdown 2`] = `
_Minimum allowed coverage is_ \`0%\`_, this run produced_ \`49.83%\`"
`;

exports[`Only list changed files 1`] = `
[
"::debug::headCoverage: 49\\n",
"::debug::baseCoverage: 50.51\\n",
"::debug::overallDifferencePercentage: -1.51\\n",
"::debug::negativeDifferenceThreshold: 0\\n",
"Writing results to code-coverage-results.md\\n",
"\\n",
"::set-output name=file::code-coverage-results.md\\n",
"\\n",
"::set-output name=coverage::49\\n",
"Writing job summary\\n",
]
`;

exports[`Only list changed files 2`] = `
"# Code Coverage Report: Only Changed Files listed
| Package | Base Coverage | New Coverage | Difference |
| ------- | ------------- | ------------ | ---------- |
| utils.ts | 🟠 70.94% | 🟠 69% | 🔴 -1.94% |
| **Overall Coverage** | **🟢 50.51%** | **🟢 49%** | **🔴 -1.51%** |
_Minimum allowed coverage is_ \`0%\`_, this run produced_ \`49%\`"
`;
15 changes: 15 additions & 0 deletions __tests__/functions.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,21 @@ test('Fail if negative_difference_threshold is set and exceeded', async () => {
expect(await getGithubStepSummary()).toMatchSnapshot()
})

test('Only list changed files', async () => {
process.env.INPUT_ONLY_LIST_CHANGED_FILES = 'true'

const coverage = await loadJSONFixture('clover-parsed.json')
const coverageFail = JSON.parse(JSON.stringify(coverage))
coverageFail.files[
'7583809507a13391057c3aee722e422d50d961a87e2a3dbf05ea492dc6465c94'
].coverage = 69
coverageFail.coverage = 49

await generateMarkdown(coverageFail, coverage)
expect(getStdoutWriteCalls()).toMatchSnapshot()
expect(await getGithubStepSummary()).toMatchSnapshot()
})

async function getGithubStepSummary(): Promise<string> {
const tempFileName = process.env.GITHUB_STEP_SUMMARY as string
return fs.promises.readFile(tempFileName, 'utf8')
Expand Down
1 change: 1 addition & 0 deletions __tests__/utils.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,7 @@ test('getInputs', () => {
negativeDifferenceBy: 'package',
negativeDifferenceThreshold: -0,
retention: undefined,
onlyListChangedFiles: false,
//This is a cheat
withBaseCoverageTemplate: f.withBaseCoverageTemplate,
withoutBaseCoverageTemplate: f.withoutBaseCoverageTemplate
Expand Down
4 changes: 4 additions & 0 deletions action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@ inputs:
description: 'GitHub token. This is sometimes needed on private repositories'
required: false
default: ${{ github.token }}
only_list_changed_files:
description: 'Only list changed files'
required: false
default: 'false'
markdown_filename:
description: 'The filename (without extension) for the resulting markdown file. Default is code-coverage-results.'
required: false
Expand Down
28 changes: 25 additions & 3 deletions src/functions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ export async function generateMarkdown(
headCoverage: Coverage,
baseCoverage: Coverage | null = null
): Promise<void> {
const inputs = getInputs()
const {
overallCoverageFailThreshold,
failOnNegativeDifference,
Expand All @@ -118,8 +119,9 @@ export async function generateMarkdown(
negativeDifferenceBy,
withBaseCoverageTemplate,
withoutBaseCoverageTemplate,
negativeDifferenceThreshold
} = getInputs()
negativeDifferenceThreshold,
onlyListChangedFiles
} = inputs
const overallDifferencePercentage = baseCoverage
? roundPercentage(headCoverage.coverage - baseCoverage.coverage)
: null
Expand Down Expand Up @@ -179,6 +181,25 @@ export async function generateMarkdown(
minimum_allowed_coverage: `${overallCoverageFailThreshold}%`,
new_coverage: `${headCoverage.coverage}%`,
coverage: Object.entries(headCoverage.files)
.filter(([hash, file]) => {
if (baseCoverage === null) {
return !onlyListChangedFiles
}

const baseCoveragePercentage = baseCoverage.files[hash]
? baseCoverage.files[hash].coverage
: 0

const differencePercentage = baseCoveragePercentage
? roundPercentage(file.coverage - baseCoveragePercentage)
: roundPercentage(file.coverage)

if (onlyListChangedFiles && differencePercentage === 0) {
return false
}

return true
})
.map(([hash, file]) => {
if (baseCoverage === null) {
return {
Expand Down Expand Up @@ -229,7 +250,8 @@ export async function generateMarkdown(
.sort((a, b) =>
a.package < b.package ? -1 : a.package > b.package ? 1 : 0
),
overall_coverage: addOverallRow(headCoverage, baseCoverage)
overall_coverage: addOverallRow(headCoverage, baseCoverage),
inputs
}

if (badge) {
Expand Down
2 changes: 2 additions & 0 deletions src/interfaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ export interface Inputs {
withBaseCoverageTemplate: string
withoutBaseCoverageTemplate: string
negativeDifferenceThreshold: number
onlyListChangedFiles: boolean
}

export interface Files {
Expand All @@ -46,4 +47,5 @@ export interface HandlebarContext {
new_coverage?: string
coverage: HandlebarContextCoverage[]
overall_coverage: HandlebarContextCoverage
inputs: Inputs
}
6 changes: 5 additions & 1 deletion src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -347,6 +347,9 @@ export function getInputs(): Inputs {
const failOnNegativeDifference =
core.getInput('fail_on_negative_difference') === 'true' ? true : false

const onlyListChangedFiles =
core.getInput('only_list_changed_files') === 'true' ? true : false

const negativeDifferenceBy =
core.getInput('negative_difference_by') === 'overall'
? 'overall'
Expand Down Expand Up @@ -393,7 +396,8 @@ export function getInputs(): Inputs {
retention: retentionDays,
withoutBaseCoverageTemplate,
withBaseCoverageTemplate,
negativeDifferenceThreshold
negativeDifferenceThreshold,
onlyListChangedFiles
}
}

Expand Down
2 changes: 1 addition & 1 deletion templates/with-base-coverage.hbs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Code Coverage Report
# Code Coverage Report{{#if inputs.onlyListChangedFiles}}: Only Changed Files listed{{/if}}

{{#if coverage_badge}}
![Code Coverage]({{{coverage_badge}}})
Expand Down
2 changes: 1 addition & 1 deletion templates/without-base-coverage.hbs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Code Coverage Report
# Code Coverage Report{{#if inputs.onlyListChangedFiles}}: Only Changed Files listed{{/if}}

{{#if coverage_badge}}
![Code Coverage]({{{coverage_badge}}})
Expand Down

0 comments on commit 49812b8

Please sign in to comment.