From 49f54b0f153639580e3b5f32f291c29b87b3709d Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Tue, 6 May 2025 23:32:45 +0300 Subject: [PATCH 01/40] filter out full coverage reports --- .github/workflows/build.yaml | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 .github/workflows/build.yaml diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml new file mode 100644 index 0000000..bda2191 --- /dev/null +++ b/.github/workflows/build.yaml @@ -0,0 +1,36 @@ +name: Build + +on: + push: + branches: + - 'develop' + - 'main' + - 'release/**' + pull_request: + branches: + - '**' + +jobs: + + build: + runs-on: ubuntu-latest + permissions: + contents: read + issues: read + checks: write + pull-requests: write + packages: write + + steps: + - name: Gen Badge + uses: emibcn/badge-action@v2.0.2 + with: + label: 'Test coverage' + status: '53.4%' + color: 'blue,555,daf' + path: 'coverage.svg' + + - name: Append Badge to Summary + run: | + echo "![Test coverage](coverage.svg)" >> $GITHUB_STEP_SUMMARY + echo "![Test coverage](coverage.svg)" >> $GITHUB_ENV From cc0926265a50fcc96f49ad6a43fab2309f83682a Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Tue, 6 May 2025 23:35:00 +0300 Subject: [PATCH 02/40] test badges --- .github/workflows/build.yaml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index bda2191..f9c2652 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -33,4 +33,13 @@ jobs: - name: Append Badge to Summary run: | echo "![Test coverage](coverage.svg)" >> $GITHUB_STEP_SUMMARY - echo "![Test coverage](coverage.svg)" >> $GITHUB_ENV + + - name: Append with script + uses: actions/github-script@v7 + with: + script: | + const fs = require('fs'); + const badge = fs.readFileSync('coverage.svg', 'utf8'); + const summary = `${{ github.step_summary }}`; + const newSummary = `${summary}\n${badge}`; + fs.writeFileSync('coverage.svg', newSummary); From 08fd76322fc02af48bfdfc76491cb6c60fe3a3b6 Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Tue, 6 May 2025 23:43:29 +0300 Subject: [PATCH 03/40] test badges --- .github/workflows/build.yaml | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index f9c2652..f95ec1f 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -34,12 +34,8 @@ jobs: run: | echo "![Test coverage](coverage.svg)" >> $GITHUB_STEP_SUMMARY - - name: Append with script - uses: actions/github-script@v7 + - name: Upload Artifact + uses: actions/upload-artifact@v3 with: - script: | - const fs = require('fs'); - const badge = fs.readFileSync('coverage.svg', 'utf8'); - const summary = `${{ github.step_summary }}`; - const newSummary = `${summary}\n${badge}`; - fs.writeFileSync('coverage.svg', newSummary); + name: 'artifact' + path: coverage.svg From ec2b6da073297b10bea50c6c2234377bb84895e8 Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Tue, 6 May 2025 23:45:06 +0300 Subject: [PATCH 04/40] test badges --- .github/workflows/build.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index f95ec1f..f3f6c1b 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -35,7 +35,7 @@ jobs: echo "![Test coverage](coverage.svg)" >> $GITHUB_STEP_SUMMARY - name: Upload Artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: 'artifact' + name: coverage.svg path: coverage.svg From 168ea0f422fe14e244044dd0c0a124392653a55b Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Tue, 6 May 2025 23:45:18 +0300 Subject: [PATCH 05/40] test badges --- .github/workflows/build.yaml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index f3f6c1b..e3fcc4a 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -30,12 +30,13 @@ jobs: color: 'blue,555,daf' path: 'coverage.svg' - - name: Append Badge to Summary - run: | - echo "![Test coverage](coverage.svg)" >> $GITHUB_STEP_SUMMARY - - name: Upload Artifact uses: actions/upload-artifact@v4 with: name: coverage.svg path: coverage.svg + + - name: Append Badge to Summary + run: | + echo "![Test coverage](coverage.svg)" >> $GITHUB_STEP_SUMMARY + From 774d5add4d52752ebbf12e6d7db590d5def308ab Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Tue, 6 May 2025 23:51:06 +0300 Subject: [PATCH 06/40] test badges --- .github/workflows/build.yaml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index e3fcc4a..3fe80e8 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -31,6 +31,7 @@ jobs: path: 'coverage.svg' - name: Upload Artifact + id: artifact uses: actions/upload-artifact@v4 with: name: coverage.svg @@ -38,5 +39,7 @@ jobs: - name: Append Badge to Summary run: | - echo "![Test coverage](coverage.svg)" >> $GITHUB_STEP_SUMMARY - + id='${{ steps.artifact.outputs.artifact-id }}' + url="https://api.github.com/repos/gw-kit/delta-coverage-action/actions/artifacts/$id/zip" + echo "Badge:" >> $GITHUB_STEP_SUMMARY + echo "![Test coverage]($url)" >> $GITHUB_STEP_SUMMARY From 091eca4d1d1217ace528a51cbeb6c253aedb9139 Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Tue, 6 May 2025 23:51:45 +0300 Subject: [PATCH 07/40] test badges --- .github/workflows/build.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 3fe80e8..3b1f6bf 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -42,4 +42,5 @@ jobs: id='${{ steps.artifact.outputs.artifact-id }}' url="https://api.github.com/repos/gw-kit/delta-coverage-action/actions/artifacts/$id/zip" echo "Badge:" >> $GITHUB_STEP_SUMMARY + echo "${{ steps.artifact.outputs.artifact-id }}" >> $GITHUB_STEP_SUMMARY echo "![Test coverage]($url)" >> $GITHUB_STEP_SUMMARY From 7a1368da667c26d7c692ea3059d9812c49353d01 Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Tue, 6 May 2025 23:52:32 +0300 Subject: [PATCH 08/40] test badges --- .github/workflows/build.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 3b1f6bf..434ea46 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -42,5 +42,5 @@ jobs: id='${{ steps.artifact.outputs.artifact-id }}' url="https://api.github.com/repos/gw-kit/delta-coverage-action/actions/artifacts/$id/zip" echo "Badge:" >> $GITHUB_STEP_SUMMARY - echo "${{ steps.artifact.outputs.artifact-id }}" >> $GITHUB_STEP_SUMMARY + echo "${{ steps.artifact.outputs.artifact-url }}" >> $GITHUB_STEP_SUMMARY echo "![Test coverage]($url)" >> $GITHUB_STEP_SUMMARY From e3c92ac0203f058e7ae5d8a698c8536094e56633 Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Wed, 7 May 2025 00:09:01 +0300 Subject: [PATCH 09/40] test badges --- .github/workflows/build.yaml | 44 +++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 434ea46..2aec170 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -22,25 +22,37 @@ jobs: packages: write steps: - - name: Gen Badge - uses: emibcn/badge-action@v2.0.2 + - name: install gradient-badge + run: npm install gradient-badge + + - name: create-badge + uses: actions/github-script@v7 with: - label: 'Test coverage' - status: '53.4%' - color: 'blue,555,daf' - path: 'coverage.svg' + script: | + const gradientBadge = require('gradient-badge'); + + const svgString = gradientBadge({ + subject: 'version', // + status: 'v1.2.3', // + style: 'flat', // 'flat' or undefined, optional + // And any other parameter supported by badgen (icon, scale...) + gradient: ['pink', 'F78642'], // array of colors (Hexadecimal or name) + }); + const fs = require('fs'); + fs.writeFileSync('coverage-gen.svg', svgString) + +# - name: Gen Badge +# uses: emibcn/badge-action@v2.0.2 +# with: +# label: 'Test coverage' +# status: '53.4%' +# color: 'blue,555,daf' +# path: 'coverage.svg' - name: Upload Artifact id: artifact uses: actions/upload-artifact@v4 with: - name: coverage.svg - path: coverage.svg - - - name: Append Badge to Summary - run: | - id='${{ steps.artifact.outputs.artifact-id }}' - url="https://api.github.com/repos/gw-kit/delta-coverage-action/actions/artifacts/$id/zip" - echo "Badge:" >> $GITHUB_STEP_SUMMARY - echo "${{ steps.artifact.outputs.artifact-url }}" >> $GITHUB_STEP_SUMMARY - echo "![Test coverage]($url)" >> $GITHUB_STEP_SUMMARY + name: coverage-gen.svg + path: coverage-gen.svg + From 2f6860bcaa4eb0e364fd87699f1c3f0aa0177f66 Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Wed, 7 May 2025 00:11:12 +0300 Subject: [PATCH 10/40] test badges --- .github/workflows/build.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 2aec170..edeb3cb 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -22,8 +22,8 @@ jobs: packages: write steps: - - name: install gradient-badge - run: npm install gradient-badge +# - name: install gradient-badge +# run: npm install gradient-badge - name: create-badge uses: actions/github-script@v7 From 2f42662105ff4a8ab1c636b30984d295f4a06c7f Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Wed, 7 May 2025 10:26:02 +0300 Subject: [PATCH 11/40] test badges --- .github/workflows/build.yaml | 4 +-- action.yaml | 24 ++++++++--------- src/generate-badges.js | 51 ++++++++++++++++++++++++++++++++++++ src/read-summaries.js | 22 ++++++++++++++++ 4 files changed, 87 insertions(+), 14 deletions(-) create mode 100644 src/generate-badges.js create mode 100644 src/read-summaries.js diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index edeb3cb..2aec170 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -22,8 +22,8 @@ jobs: packages: write steps: -# - name: install gradient-badge -# run: npm install gradient-badge + - name: install gradient-badge + run: npm install gradient-badge - name: create-badge uses: actions/github-script@v7 diff --git a/action.yaml b/action.yaml index 331fc3b..7fc7f3d 100644 --- a/action.yaml +++ b/action.yaml @@ -36,18 +36,18 @@ runs: with: github-token: ${{ inputs.github-token }} script: | - const fs = require('fs'); - const files = fs.readdirSync(`${{ inputs.summary-report-base-path }}`); - const summaryFiles = files.filter(file => file.includes('-summary.json')) - .filter(file => !file.includes('full-coverage-')); - - const summaries = summaryFiles.map(file => - JSON.parse(fs.readFileSync(`build/reports/coverage-reports/${file}`, 'utf8')) - ); - const allSummaries = JSON.stringify(summaries); - const allSummariesFile = 'all-summaries.json'; - fs.writeFileSync(allSummariesFile, allSummaries); - core.setOutput('file', allSummariesFile); + const readSummaries = require('${{ github.action_path }}/src/read-summaries.js'); + const summariesBaseDir = `${{ inputs.summary-report-base-path }}`; + const deltaSummariesFile = await readSummaries({ + isFullCoverageMode: false, + baseSummariesPath: summariesBaseDir, + }); + const fullCovSummariesFile = await readSummaries({ + isFullCoverageMode: true, + baseSummariesPath: summariesBaseDir, + }); + core.setOutput('delta', summariesFile); + core.setOutput('full', fullCovSummariesFile); - name: Fetch PR Labels id: fetch-labels diff --git a/src/generate-badges.js b/src/generate-badges.js new file mode 100644 index 0000000..2b88694 --- /dev/null +++ b/src/generate-badges.js @@ -0,0 +1,51 @@ +module.exports = async (ctx) => { + const fs = require('fs'); + const path = require('path'); + const gradientBadge = require('gradient-badge'); + + const badgesOutputDir = 'badges/'; + fs.mkdirSync(badgesOutputDir, { recursive: true }); + + const secondColor = '#11cbfa'; // blue + const firstColors = [ + '#ea00ff', // purple + '#00ff0d', // green + '#2200ff', // blue + '#ff1500', // red + '#ffcc00', // yellow + ]; + + const normalizeColor = (color) => color.replace('#', ''); + + const mapToBadgeInputs = (index, summary) => { + const lineCoverage = summary.coverageInfo.find(coverage => coverage.coverageEntity === 'LINE'); + const firstColor = firstColors[index % firstColors.length]; + return { + subject: summary.view, + status: `${lineCoverage.percents}%`, + gradient: [normalizeColor(firstColor), normalizeColor(secondColor)], + }; + }; + + const badgeData = ctx.summaries + .sort((a, b) => a.view.localeCompare(b.view)) + .map((summary, index) => { + return { + view: summary.view, + badgeInputs: mapToBadgeInputs(index, summary), + } + }) + .map(viewBadgeData => { + return { + view: viewBadgeData.view, + file: path.join(badgesOutputDir, `${viewBadgeData.view}.svg`), + badgeContent: gradientBadge(viewBadgeData.badgeInputs), + }; + }); + + badgeData.forEach(badge => { + fs.writeFileSync(badge.file, badge.badgeContent); + }); + + return badgeData; +}; diff --git a/src/read-summaries.js b/src/read-summaries.js new file mode 100644 index 0000000..82b2f68 --- /dev/null +++ b/src/read-summaries.js @@ -0,0 +1,22 @@ +module.exports = async (ctx) => { + const fs = require('fs'); + + + const fullCoverageFilter = file => file.includes('full-coverage-'); + const deltaCoverageFilter = file => !fullCoverageFilter(file); + + const allSummariesFile = ctx.isFullCoverageMode ? 'full-cov-summaries.json' : 'delta-cov-summaries.json'; + + const chosenFilter = ctx.isFullCoverageMode ? fullCoverageFilter : deltaCoverageFilter; + + const files = fs.readdirSync(ctx.baseSummariesPath); + const summaryFiles = files.filter(file => file.includes('-summary.json')).filter(chosenFilter); + console.log(`Reading summaries from ${ctx.baseSummariesPath}: ${summaryFiles}`); + + const summaries = summaryFiles.map(file => + JSON.parse(fs.readFileSync(`${ctx.baseSummariesPath}/${file}`, 'utf8')) + ); + fs.writeFileSync(allSummariesFile, JSON.stringify(summaries)); + + return allSummariesFile; +}; From 48103483bd99bce5fad1164be4a1f5723aded914 Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Wed, 7 May 2025 21:28:37 +0300 Subject: [PATCH 12/40] test badges --- .github/workflows/build.yaml | 29 ++----------------- action.yaml | 27 +++++++++++++++++ src/generate-badges.js | 3 +- src/render-badges-in-summaries.js | 15 ++++++++++ .../full-coverage-aggregated-summary.json | 29 +++++++++++++++++++ .../full-coverage-functionalTest-summary.json | 1 + summaries/full-coverage-test-summary.json | 1 + 7 files changed, 78 insertions(+), 27 deletions(-) create mode 100644 src/render-badges-in-summaries.js create mode 100644 summaries/full-coverage-aggregated-summary.json create mode 100644 summaries/full-coverage-functionalTest-summary.json create mode 100644 summaries/full-coverage-test-summary.json diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 2aec170..fceba43 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -22,32 +22,10 @@ jobs: packages: write steps: - - name: install gradient-badge - run: npm install gradient-badge - - - name: create-badge - uses: actions/github-script@v7 + - name: Delta Coverage Action + uses: gw-kit/delta-coverage-action@test-badges with: - script: | - const gradientBadge = require('gradient-badge'); - - const svgString = gradientBadge({ - subject: 'version', // - status: 'v1.2.3', // - style: 'flat', // 'flat' or undefined, optional - // And any other parameter supported by badgen (icon, scale...) - gradient: ['pink', 'F78642'], // array of colors (Hexadecimal or name) - }); - const fs = require('fs'); - fs.writeFileSync('coverage-gen.svg', svgString) - -# - name: Gen Badge -# uses: emibcn/badge-action@v2.0.2 -# with: -# label: 'Test coverage' -# status: '53.4%' -# color: 'blue,555,daf' -# path: 'coverage.svg' + summary-report-base-path: 'summaries/' - name: Upload Artifact id: artifact @@ -55,4 +33,3 @@ jobs: with: name: coverage-gen.svg path: coverage-gen.svg - diff --git a/action.yaml b/action.yaml index 7fc7f3d..9d616c4 100644 --- a/action.yaml +++ b/action.yaml @@ -49,6 +49,33 @@ runs: core.setOutput('delta', summariesFile); core.setOutput('full', fullCovSummariesFile); + - name: install gradient-badge + shell: bash + run: npm install gradient-badge + + - name: Generate Badges + id: generate-badges + continue-on-error: true + uses: actions/github-script@v7 + with: + script: | + const generate = require('${{ github.action_path }}/src/generate-badges.js'); + const badges = await generate({ + summariesFile: `${{ steps.all-summaries.outputs.full }}`, + }); + badges.forEach((badge) => { + core.setOutput(badge.view, badge.file); + }); + + - name: Render Badges in Summaries + continue-on-error: true + uses: actions/github-script@v7 + with: + script: | + const badgesFiles = JSON.parse(`${{ fromJson(steps.generate-badges.outputs) }}`); + const render = require('${{ github.action_path }}/src/render-badges-in-summaries.js'); + await render({ badgesFiles }); + - name: Fetch PR Labels id: fetch-labels if: ${{ !inputs.suppress-check-failures }} diff --git a/src/generate-badges.js b/src/generate-badges.js index 2b88694..67128de 100644 --- a/src/generate-badges.js +++ b/src/generate-badges.js @@ -27,7 +27,8 @@ module.exports = async (ctx) => { }; }; - const badgeData = ctx.summaries + const summaries = JSON.parse(fs.readFileSync(ctx.summariesFile, 'utf8')); + const badgeData = summaries .sort((a, b) => a.view.localeCompare(b.view)) .map((summary, index) => { return { diff --git a/src/render-badges-in-summaries.js b/src/render-badges-in-summaries.js new file mode 100644 index 0000000..741047e --- /dev/null +++ b/src/render-badges-in-summaries.js @@ -0,0 +1,15 @@ +module.exports = async (ctx) => { + const fs = require('fs'); + + ctx.badgeFiles + .map(file => fs.readFileSync(file, 'utf8')) + .map(badgeContent => Buffer.from(badgeContent).toString('base64')) + .map(base64Data => `![badge](data:image/svg+xml;base64,${base64Data})`) + .reduce( + (buffer, badge) => { + return buffer.addRaw(badge, true) + }, + core.summary.addHeading('Coverage Badges', '4').addEOL() + ); + +}; diff --git a/summaries/full-coverage-aggregated-summary.json b/summaries/full-coverage-aggregated-summary.json new file mode 100644 index 0000000..a3621b2 --- /dev/null +++ b/summaries/full-coverage-aggregated-summary.json @@ -0,0 +1,29 @@ +{ + "view": "aggregated", + "reportBound": "DELTA_REPORT", + "coverageRulesConfig": { + "failOnViolation": false, + "entitiesRules": {} + }, + "verifications": [], + "coverageInfo": [ + { + "coverageEntity": "INSTRUCTION", + "covered": 9406, + "total": 10775, + "percents": 87.29 + }, + { + "coverageEntity": "BRANCH", + "covered": 303, + "total": 377, + "percents": 80.37 + }, + { + "coverageEntity": "LINE", + "covered": 1943, + "total": 2209, + "percents": 87.96 + } + ] +} diff --git a/summaries/full-coverage-functionalTest-summary.json b/summaries/full-coverage-functionalTest-summary.json new file mode 100644 index 0000000..688f43d --- /dev/null +++ b/summaries/full-coverage-functionalTest-summary.json @@ -0,0 +1 @@ +{"view":"functionalTest","reportBound":"DELTA_REPORT","coverageRulesConfig":{"failOnViolation":false,"entitiesRules":{}},"verifications":[],"coverageInfo":[{"coverageEntity":"INSTRUCTION","covered":6843,"total":10775,"percents":63.51},{"coverageEntity":"BRANCH","covered":180,"total":377,"percents":47.75},{"coverageEntity":"LINE","covered":1395,"total":2196,"percents":63.52}]} \ No newline at end of file diff --git a/summaries/full-coverage-test-summary.json b/summaries/full-coverage-test-summary.json new file mode 100644 index 0000000..b4dac7a --- /dev/null +++ b/summaries/full-coverage-test-summary.json @@ -0,0 +1 @@ +{"view":"test","reportBound":"DELTA_REPORT","coverageRulesConfig":{"failOnViolation":false,"entitiesRules":{}},"verifications":[],"coverageInfo":[{"coverageEntity":"INSTRUCTION","covered":8860,"total":10775,"percents":82.23},{"coverageEntity":"BRANCH","covered":280,"total":371,"percents":75.47},{"coverageEntity":"LINE","covered":1800,"total":2187,"percents":82.3}]} \ No newline at end of file From 073060994ed08d7cc2e7bac7034fd2ccb225b480 Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Wed, 7 May 2025 21:29:43 +0300 Subject: [PATCH 13/40] test badges --- .github/workflows/build.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index fceba43..e65fb8e 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -22,6 +22,11 @@ jobs: packages: write steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Delta Coverage Action uses: gw-kit/delta-coverage-action@test-badges with: From ddd7b40339735b00511c17c7e2e078c7ae7f2d02 Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Wed, 7 May 2025 21:32:39 +0300 Subject: [PATCH 14/40] test badges --- action.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/action.yaml b/action.yaml index 9d616c4..dba329f 100644 --- a/action.yaml +++ b/action.yaml @@ -46,7 +46,7 @@ runs: isFullCoverageMode: true, baseSummariesPath: summariesBaseDir, }); - core.setOutput('delta', summariesFile); + core.setOutput('delta', deltaSummariesFile); core.setOutput('full', fullCovSummariesFile); - name: install gradient-badge From de40c551f8e26f331c5cf493f5f760b1d23af9bf Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Wed, 7 May 2025 21:45:41 +0300 Subject: [PATCH 15/40] test badges --- action.yaml | 17 ++------- src/generate-badges.js | 84 +++++++++++++++++++++--------------------- src/read-summaries.js | 3 +- 3 files changed, 46 insertions(+), 58 deletions(-) diff --git a/action.yaml b/action.yaml index dba329f..5f1415f 100644 --- a/action.yaml +++ b/action.yaml @@ -49,23 +49,14 @@ runs: core.setOutput('delta', deltaSummariesFile); core.setOutput('full', fullCovSummariesFile); - - name: install gradient-badge - shell: bash + - shell: bash run: npm install gradient-badge - name: Generate Badges id: generate-badges continue-on-error: true - uses: actions/github-script@v7 - with: - script: | - const generate = require('${{ github.action_path }}/src/generate-badges.js'); - const badges = await generate({ - summariesFile: `${{ steps.all-summaries.outputs.full }}`, - }); - badges.forEach((badge) => { - core.setOutput(badge.view, badge.file); - }); + shell: bash + run: node ${{ github.action_path }}/src/generate-badges.js ${{ steps.all-summaries.outputs.full }} - name: Render Badges in Summaries continue-on-error: true @@ -106,7 +97,7 @@ runs: script: | const createCheckRuns = require('${{ github.action_path }}/src/create-check-runs.js'); const checkRuns = await createCheckRuns({ - summaryReportPath: `${{ steps.all-summaries.outputs.file }}`, + summaryReportPath: `${{ steps.all-summaries.outputs.delta }}`, ignoreCoverageFailure: ${{ inputs.suppress-check-failures || steps.check-label.outputs.suppress_check_failures }}, core: core, context: context, diff --git a/src/generate-badges.js b/src/generate-badges.js index 67128de..9869dbd 100644 --- a/src/generate-badges.js +++ b/src/generate-badges.js @@ -1,52 +1,50 @@ -module.exports = async (ctx) => { - const fs = require('fs'); - const path = require('path'); - const gradientBadge = require('gradient-badge'); +const fs = require('fs'); +const path = require('path'); +const gradientBadge = require('gradient-badge'); +const core = require('@actions/core'); - const badgesOutputDir = 'badges/'; - fs.mkdirSync(badgesOutputDir, { recursive: true }); +const badgesOutputDir = 'badges/'; +fs.mkdirSync(badgesOutputDir, {recursive: true}); - const secondColor = '#11cbfa'; // blue - const firstColors = [ - '#ea00ff', // purple - '#00ff0d', // green - '#2200ff', // blue - '#ff1500', // red - '#ffcc00', // yellow - ]; +const secondColor = '#11cbfa'; // blue +const firstColors = [ + '#ea00ff', // purple + '#00ff0d', // green + '#2200ff', // blue + '#ff1500', // red + '#ffcc00', // yellow +]; - const normalizeColor = (color) => color.replace('#', ''); +const normalizeColor = (color) => color.replace('#', ''); - const mapToBadgeInputs = (index, summary) => { - const lineCoverage = summary.coverageInfo.find(coverage => coverage.coverageEntity === 'LINE'); - const firstColor = firstColors[index % firstColors.length]; - return { - subject: summary.view, - status: `${lineCoverage.percents}%`, - gradient: [normalizeColor(firstColor), normalizeColor(secondColor)], - }; +const mapToBadgeInputs = (index, summary) => { + const lineCoverage = summary.coverageInfo.find(coverage => coverage.coverageEntity === 'LINE'); + const firstColor = firstColors[index % firstColors.length]; + return { + subject: summary.view, + status: `${lineCoverage.percents}%`, + gradient: [normalizeColor(firstColor), normalizeColor(secondColor)], }; +}; - const summaries = JSON.parse(fs.readFileSync(ctx.summariesFile, 'utf8')); - const badgeData = summaries - .sort((a, b) => a.view.localeCompare(b.view)) - .map((summary, index) => { - return { - view: summary.view, - badgeInputs: mapToBadgeInputs(index, summary), - } - }) - .map(viewBadgeData => { - return { - view: viewBadgeData.view, - file: path.join(badgesOutputDir, `${viewBadgeData.view}.svg`), - badgeContent: gradientBadge(viewBadgeData.badgeInputs), - }; - }); - - badgeData.forEach(badge => { +const [, , summariesFile] = process.argv; +const summaries = JSON.parse(fs.readFileSync(summariesFile, 'utf8')); +summaries + .sort((a, b) => a.view.localeCompare(b.view)) + .map((summary, index) => { + return { + view: summary.view, + badgeInputs: mapToBadgeInputs(index, summary), + } + }) + .map(viewBadgeData => { + return { + view: viewBadgeData.view, + file: path.join(badgesOutputDir, `${viewBadgeData.view}.svg`), + badgeContent: gradientBadge(viewBadgeData.badgeInputs), + }; + }).forEach(badge => { fs.writeFileSync(badge.file, badge.badgeContent); + core.setOutput(badge.view, badge.file); }); - return badgeData; -}; diff --git a/src/read-summaries.js b/src/read-summaries.js index 82b2f68..6b8dbab 100644 --- a/src/read-summaries.js +++ b/src/read-summaries.js @@ -1,7 +1,6 @@ module.exports = async (ctx) => { const fs = require('fs'); - const fullCoverageFilter = file => file.includes('full-coverage-'); const deltaCoverageFilter = file => !fullCoverageFilter(file); @@ -11,7 +10,7 @@ module.exports = async (ctx) => { const files = fs.readdirSync(ctx.baseSummariesPath); const summaryFiles = files.filter(file => file.includes('-summary.json')).filter(chosenFilter); - console.log(`Reading summaries from ${ctx.baseSummariesPath}: ${summaryFiles}`); + console.log(`Reading summaries from ${ctx.baseSummariesPath}: ${JSON.stringify(summaryFiles, null, 2)}`); const summaries = summaryFiles.map(file => JSON.parse(fs.readFileSync(`${ctx.baseSummariesPath}/${file}`, 'utf8')) From a766d4fe4a7e4fdc37b9fff40fc1f5da76536a33 Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Wed, 7 May 2025 21:48:47 +0300 Subject: [PATCH 16/40] test badges --- src/generate-badges.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/generate-badges.js b/src/generate-badges.js index 9869dbd..3cb7796 100644 --- a/src/generate-badges.js +++ b/src/generate-badges.js @@ -1,7 +1,7 @@ const fs = require('fs'); const path = require('path'); -const gradientBadge = require('gradient-badge'); const core = require('@actions/core'); +const gradientBadge = require('gradient-badge'); const badgesOutputDir = 'badges/'; fs.mkdirSync(badgesOutputDir, {recursive: true}); From 0ecd33adb1f0e8296faf38ec4dcf81a940b2ead0 Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Wed, 7 May 2025 21:54:23 +0300 Subject: [PATCH 17/40] test badges --- action.yaml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/action.yaml b/action.yaml index 5f1415f..501461c 100644 --- a/action.yaml +++ b/action.yaml @@ -49,14 +49,15 @@ runs: core.setOutput('delta', deltaSummariesFile); core.setOutput('full', fullCovSummariesFile); - - shell: bash - run: npm install gradient-badge - - name: Generate Badges id: generate-badges continue-on-error: true shell: bash - run: node ${{ github.action_path }}/src/generate-badges.js ${{ steps.all-summaries.outputs.full }} + run: | + npm install gradient-badge + src_path="${{ github.action_path }}/src" + mv ./node_modules $src_path/ + node $src_path/generate-badges.js ${{ steps.all-summaries.outputs.full }} - name: Render Badges in Summaries continue-on-error: true From d341071ba21f329212a4a80d59f6596a3d95b326 Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Wed, 7 May 2025 21:55:11 +0300 Subject: [PATCH 18/40] test badges --- src/generate-badges.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/generate-badges.js b/src/generate-badges.js index 3cb7796..9869dbd 100644 --- a/src/generate-badges.js +++ b/src/generate-badges.js @@ -1,7 +1,7 @@ const fs = require('fs'); const path = require('path'); -const core = require('@actions/core'); const gradientBadge = require('gradient-badge'); +const core = require('@actions/core'); const badgesOutputDir = 'badges/'; fs.mkdirSync(badgesOutputDir, {recursive: true}); From 6abe52a51c9a0f2f4f9ff792f7cd9877fe1cbb1b Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Wed, 7 May 2025 21:55:25 +0300 Subject: [PATCH 19/40] test badges --- action.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/action.yaml b/action.yaml index 501461c..598416d 100644 --- a/action.yaml +++ b/action.yaml @@ -54,7 +54,7 @@ runs: continue-on-error: true shell: bash run: | - npm install gradient-badge + npm install gradient-badge @actions/core src_path="${{ github.action_path }}/src" mv ./node_modules $src_path/ node $src_path/generate-badges.js ${{ steps.all-summaries.outputs.full }} From 244da38dd05092e095cff274e6dc797827483b01 Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Wed, 7 May 2025 21:59:00 +0300 Subject: [PATCH 20/40] test badges --- action.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/action.yaml b/action.yaml index 598416d..e5711a0 100644 --- a/action.yaml +++ b/action.yaml @@ -64,7 +64,7 @@ runs: uses: actions/github-script@v7 with: script: | - const badgesFiles = JSON.parse(`${{ fromJson(steps.generate-badges.outputs) }}`); + const badgesFiles = JSON.parse(`${{ toJson(steps.generate-badges.outputs) }}`); const render = require('${{ github.action_path }}/src/render-badges-in-summaries.js'); await render({ badgesFiles }); From 7cd824a13689fbccdee436145463b46552592736 Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Wed, 7 May 2025 22:05:04 +0300 Subject: [PATCH 21/40] test badges --- action.yaml | 15 +++++++++------ src/render-badges-in-summaries.js | 5 ++--- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/action.yaml b/action.yaml index e5711a0..2a822ef 100644 --- a/action.yaml +++ b/action.yaml @@ -30,6 +30,13 @@ runs: steps: + - name: Install Deps + shell: bash + run: | + npm install gradient-badge @actions/core + src_path="${{ github.action_path }}/src" + mv ./node_modules $src_path/ + - name: Build All Summaries id: all-summaries uses: actions/github-script@v7 @@ -53,11 +60,7 @@ runs: id: generate-badges continue-on-error: true shell: bash - run: | - npm install gradient-badge @actions/core - src_path="${{ github.action_path }}/src" - mv ./node_modules $src_path/ - node $src_path/generate-badges.js ${{ steps.all-summaries.outputs.full }} + run: node $src_path/generate-badges.js ${{ steps.all-summaries.outputs.full }} - name: Render Badges in Summaries continue-on-error: true @@ -66,7 +69,7 @@ runs: script: | const badgesFiles = JSON.parse(`${{ toJson(steps.generate-badges.outputs) }}`); const render = require('${{ github.action_path }}/src/render-badges-in-summaries.js'); - await render({ badgesFiles }); + await render(badgesFiles); - name: Fetch PR Labels id: fetch-labels diff --git a/src/render-badges-in-summaries.js b/src/render-badges-in-summaries.js index 741047e..1a29df7 100644 --- a/src/render-badges-in-summaries.js +++ b/src/render-badges-in-summaries.js @@ -1,7 +1,7 @@ -module.exports = async (ctx) => { +module.exports = async (badgesFiles) => { const fs = require('fs'); - ctx.badgeFiles + Object.values(badgesFiles) .map(file => fs.readFileSync(file, 'utf8')) .map(badgeContent => Buffer.from(badgeContent).toString('base64')) .map(base64Data => `![badge](data:image/svg+xml;base64,${base64Data})`) @@ -11,5 +11,4 @@ module.exports = async (ctx) => { }, core.summary.addHeading('Coverage Badges', '4').addEOL() ); - }; From 4eda21a776c941204a588df8210a4242d4327903 Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Wed, 7 May 2025 22:05:50 +0300 Subject: [PATCH 22/40] test badges --- action.yaml | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/action.yaml b/action.yaml index 2a822ef..5647528 100644 --- a/action.yaml +++ b/action.yaml @@ -30,13 +30,6 @@ runs: steps: - - name: Install Deps - shell: bash - run: | - npm install gradient-badge @actions/core - src_path="${{ github.action_path }}/src" - mv ./node_modules $src_path/ - - name: Build All Summaries id: all-summaries uses: actions/github-script@v7 @@ -60,7 +53,11 @@ runs: id: generate-badges continue-on-error: true shell: bash - run: node $src_path/generate-badges.js ${{ steps.all-summaries.outputs.full }} + run: | + npm install gradient-badge @actions/core + src_path="${{ github.action_path }}/src" + mv ./node_modules $src_path/ + node $src_path/generate-badges.js ${{ steps.all-summaries.outputs.full }} - name: Render Badges in Summaries continue-on-error: true From c5c5864741a04c7d6d45b02f372016325812d581 Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Wed, 7 May 2025 22:08:31 +0300 Subject: [PATCH 23/40] test badges --- action.yaml | 2 +- src/render-badges-in-summaries.js | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/action.yaml b/action.yaml index 5647528..f5927bf 100644 --- a/action.yaml +++ b/action.yaml @@ -66,7 +66,7 @@ runs: script: | const badgesFiles = JSON.parse(`${{ toJson(steps.generate-badges.outputs) }}`); const render = require('${{ github.action_path }}/src/render-badges-in-summaries.js'); - await render(badgesFiles); + await render({ badgesFiles, core }); - name: Fetch PR Labels id: fetch-labels diff --git a/src/render-badges-in-summaries.js b/src/render-badges-in-summaries.js index 1a29df7..b1a830b 100644 --- a/src/render-badges-in-summaries.js +++ b/src/render-badges-in-summaries.js @@ -1,7 +1,7 @@ -module.exports = async (badgesFiles) => { +module.exports = async (ctx) => { const fs = require('fs'); - Object.values(badgesFiles) + Object.values(ctx.badgesFiles) .map(file => fs.readFileSync(file, 'utf8')) .map(badgeContent => Buffer.from(badgeContent).toString('base64')) .map(base64Data => `![badge](data:image/svg+xml;base64,${base64Data})`) @@ -9,6 +9,6 @@ module.exports = async (badgesFiles) => { (buffer, badge) => { return buffer.addRaw(badge, true) }, - core.summary.addHeading('Coverage Badges', '4').addEOL() + ctx.core.summary.addHeading('Coverage Badges', '4').addEOL() ); }; From f9108cf300c7e501545a9151864a799d245422c4 Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Wed, 7 May 2025 22:09:12 +0300 Subject: [PATCH 24/40] test badges --- src/render-badges-in-summaries.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/render-badges-in-summaries.js b/src/render-badges-in-summaries.js index b1a830b..a72a59b 100644 --- a/src/render-badges-in-summaries.js +++ b/src/render-badges-in-summaries.js @@ -10,5 +10,6 @@ module.exports = async (ctx) => { return buffer.addRaw(badge, true) }, ctx.core.summary.addHeading('Coverage Badges', '4').addEOL() - ); + ) + .write(); }; From 7def2461ab20690e62aacb4a3d331c22a95328a5 Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Wed, 7 May 2025 22:10:23 +0300 Subject: [PATCH 25/40] test badges --- .github/workflows/build.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index e65fb8e..e7fcdb5 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -37,4 +37,4 @@ jobs: uses: actions/upload-artifact@v4 with: name: coverage-gen.svg - path: coverage-gen.svg + path: ${{ steps.generate-badges.outputs.* }} From 15c06364378aa77a75834369c9bbfaa55ee22224 Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Wed, 7 May 2025 22:27:39 +0300 Subject: [PATCH 26/40] test badges --- .github/workflows/build.yaml | 7 ------- action.yaml | 11 ++++------- src/generate-badges.js | 14 ++++++++++---- src/render-badges-in-summaries.js | 15 --------------- 4 files changed, 14 insertions(+), 33 deletions(-) delete mode 100644 src/render-badges-in-summaries.js diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index e7fcdb5..7224c94 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -31,10 +31,3 @@ jobs: uses: gw-kit/delta-coverage-action@test-badges with: summary-report-base-path: 'summaries/' - - - name: Upload Artifact - id: artifact - uses: actions/upload-artifact@v4 - with: - name: coverage-gen.svg - path: ${{ steps.generate-badges.outputs.* }} diff --git a/action.yaml b/action.yaml index f5927bf..b8edf4d 100644 --- a/action.yaml +++ b/action.yaml @@ -59,14 +59,11 @@ runs: mv ./node_modules $src_path/ node $src_path/generate-badges.js ${{ steps.all-summaries.outputs.full }} - - name: Render Badges in Summaries - continue-on-error: true - uses: actions/github-script@v7 + - id: upload-badges + uses: actions/upload-artifact@v4 with: - script: | - const badgesFiles = JSON.parse(`${{ toJson(steps.generate-badges.outputs) }}`); - const render = require('${{ github.action_path }}/src/render-badges-in-summaries.js'); - await render({ badgesFiles, core }); + name: coverage-gen.svg + path: ${{ steps.generate-badges.outputs.all-files }} - name: Fetch PR Labels id: fetch-labels diff --git a/src/generate-badges.js b/src/generate-badges.js index 9869dbd..789f268 100644 --- a/src/generate-badges.js +++ b/src/generate-badges.js @@ -6,7 +6,7 @@ const core = require('@actions/core'); const badgesOutputDir = 'badges/'; fs.mkdirSync(badgesOutputDir, {recursive: true}); -const secondColor = '#11cbfa'; // blue +const secondColor = '#117efa'; // blue const firstColors = [ '#ea00ff', // purple '#00ff0d', // green @@ -29,7 +29,7 @@ const mapToBadgeInputs = (index, summary) => { const [, , summariesFile] = process.argv; const summaries = JSON.parse(fs.readFileSync(summariesFile, 'utf8')); -summaries +const allFiles = summaries .sort((a, b) => a.view.localeCompare(b.view)) .map((summary, index) => { return { @@ -43,8 +43,14 @@ summaries file: path.join(badgesOutputDir, `${viewBadgeData.view}.svg`), badgeContent: gradientBadge(viewBadgeData.badgeInputs), }; - }).forEach(badge => { + }).map(badge => { fs.writeFileSync(badge.file, badge.badgeContent); - core.setOutput(badge.view, badge.file); + return badge; }); +allFiles.forEach(badge => { + core.info(`Generated badge for ${badge.view} at ${badge.file}`); + core.setOutput(badge.view, badge.file); +}); + +core.setOutput('all-files', allBadges.join(' ')); diff --git a/src/render-badges-in-summaries.js b/src/render-badges-in-summaries.js deleted file mode 100644 index a72a59b..0000000 --- a/src/render-badges-in-summaries.js +++ /dev/null @@ -1,15 +0,0 @@ -module.exports = async (ctx) => { - const fs = require('fs'); - - Object.values(ctx.badgesFiles) - .map(file => fs.readFileSync(file, 'utf8')) - .map(badgeContent => Buffer.from(badgeContent).toString('base64')) - .map(base64Data => `![badge](data:image/svg+xml;base64,${base64Data})`) - .reduce( - (buffer, badge) => { - return buffer.addRaw(badge, true) - }, - ctx.core.summary.addHeading('Coverage Badges', '4').addEOL() - ) - .write(); -}; From b0b48f4157806ba1175d9e2d5e41419ce74d16b6 Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Wed, 7 May 2025 22:28:35 +0300 Subject: [PATCH 27/40] test badges --- src/generate-badges.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/generate-badges.js b/src/generate-badges.js index 789f268..6f6bdd2 100644 --- a/src/generate-badges.js +++ b/src/generate-badges.js @@ -29,7 +29,7 @@ const mapToBadgeInputs = (index, summary) => { const [, , summariesFile] = process.argv; const summaries = JSON.parse(fs.readFileSync(summariesFile, 'utf8')); -const allFiles = summaries +const allBadges = summaries .sort((a, b) => a.view.localeCompare(b.view)) .map((summary, index) => { return { @@ -48,7 +48,7 @@ const allFiles = summaries return badge; }); -allFiles.forEach(badge => { +allBadges.forEach(badge => { core.info(`Generated badge for ${badge.view} at ${badge.file}`); core.setOutput(badge.view, badge.file); }); From d1e3372134ebe58b1d6f7fc1b2d93b7ab462073d Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Wed, 7 May 2025 22:29:30 +0300 Subject: [PATCH 28/40] test badges --- src/generate-badges.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/generate-badges.js b/src/generate-badges.js index 6f6bdd2..77287d1 100644 --- a/src/generate-badges.js +++ b/src/generate-badges.js @@ -53,4 +53,4 @@ allBadges.forEach(badge => { core.setOutput(badge.view, badge.file); }); -core.setOutput('all-files', allBadges.join(' ')); +core.setOutput('all-files', allBadges.map(it => it.file).join(' ')); From 162c7acebb70a3d3d70935e30b00b3523caa6a98 Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Wed, 7 May 2025 22:31:09 +0300 Subject: [PATCH 29/40] test badges --- src/generate-badges.js | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/generate-badges.js b/src/generate-badges.js index 77287d1..1b67376 100644 --- a/src/generate-badges.js +++ b/src/generate-badges.js @@ -43,14 +43,10 @@ const allBadges = summaries file: path.join(badgesOutputDir, `${viewBadgeData.view}.svg`), badgeContent: gradientBadge(viewBadgeData.badgeInputs), }; - }).map(badge => { + }).forEach(badge => { fs.writeFileSync(badge.file, badge.badgeContent); - return badge; + core.info(`Generated badge for ${badge.view} at ${badge.file}`); + core.setOutput(badge.view, badge.file); }); -allBadges.forEach(badge => { - core.info(`Generated badge for ${badge.view} at ${badge.file}`); - core.setOutput(badge.view, badge.file); -}); - -core.setOutput('all-files', allBadges.map(it => it.file).join(' ')); +core.setOutput('all-files', badgesOutputDir); From 4882ce5094099f8b0d2cd486d056ecb1f55fac5a Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Wed, 7 May 2025 22:32:49 +0300 Subject: [PATCH 30/40] test badges --- src/generate-badges.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/generate-badges.js b/src/generate-badges.js index 1b67376..2e76283 100644 --- a/src/generate-badges.js +++ b/src/generate-badges.js @@ -9,7 +9,7 @@ fs.mkdirSync(badgesOutputDir, {recursive: true}); const secondColor = '#117efa'; // blue const firstColors = [ '#ea00ff', // purple - '#00ff0d', // green + '#16a41f', // green '#2200ff', // blue '#ff1500', // red '#ffcc00', // yellow @@ -29,7 +29,7 @@ const mapToBadgeInputs = (index, summary) => { const [, , summariesFile] = process.argv; const summaries = JSON.parse(fs.readFileSync(summariesFile, 'utf8')); -const allBadges = summaries +summaries .sort((a, b) => a.view.localeCompare(b.view)) .map((summary, index) => { return { From 19d374902296b26d2e3a64c65a90ff16db7ca081 Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Thu, 8 May 2025 10:19:52 +0300 Subject: [PATCH 31/40] test badges --- .github/workflows/build.yaml | 9 ++++++++- action.yaml | 11 +++++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 7224c94..70d3da9 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -27,7 +27,14 @@ jobs: with: fetch-depth: 0 - - name: Delta Coverage Action + - name: Publish Delta Coverage + id: render-delta-coverage uses: gw-kit/delta-coverage-action@test-badges with: summary-report-base-path: 'summaries/' + + - id: upload-badges + uses: actions/upload-artifact@v4 + with: + name: coverage-gen.svg + path: ${{ steps.render-delta-coverage.outputs.badges-dir }} diff --git a/action.yaml b/action.yaml index b8edf4d..b969d4b 100644 --- a/action.yaml +++ b/action.yaml @@ -25,6 +25,11 @@ inputs: required: false default: 'delta-coverage' +outputs: + badges-dir: + description: 'Directory with generated badges.' + value: ${{ steps.generate-badges.outputs.all-files }} + runs: using: "composite" @@ -59,12 +64,6 @@ runs: mv ./node_modules $src_path/ node $src_path/generate-badges.js ${{ steps.all-summaries.outputs.full }} - - id: upload-badges - uses: actions/upload-artifact@v4 - with: - name: coverage-gen.svg - path: ${{ steps.generate-badges.outputs.all-files }} - - name: Fetch PR Labels id: fetch-labels if: ${{ !inputs.suppress-check-failures }} From 9e7d8c3e121851e63d515bccec21b743f52fb60d Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Thu, 8 May 2025 10:23:52 +0300 Subject: [PATCH 32/40] test badges --- .github/workflows/build.yaml | 2 +- src/generate-badges.js | 2 +- {summaries => test/data}/full-coverage-aggregated-summary.json | 0 .../data}/full-coverage-functionalTest-summary.json | 0 {summaries => test/data}/full-coverage-test-summary.json | 0 5 files changed, 2 insertions(+), 2 deletions(-) rename {summaries => test/data}/full-coverage-aggregated-summary.json (100%) rename {summaries => test/data}/full-coverage-functionalTest-summary.json (100%) rename {summaries => test/data}/full-coverage-test-summary.json (100%) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 70d3da9..d74a765 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -31,7 +31,7 @@ jobs: id: render-delta-coverage uses: gw-kit/delta-coverage-action@test-badges with: - summary-report-base-path: 'summaries/' + summary-report-base-path: 'test/data/' - id: upload-badges uses: actions/upload-artifact@v4 diff --git a/src/generate-badges.js b/src/generate-badges.js index 2e76283..28fb398 100644 --- a/src/generate-badges.js +++ b/src/generate-badges.js @@ -10,7 +10,7 @@ const secondColor = '#117efa'; // blue const firstColors = [ '#ea00ff', // purple '#16a41f', // green - '#2200ff', // blue + '#16019f', // blue '#ff1500', // red '#ffcc00', // yellow ]; diff --git a/summaries/full-coverage-aggregated-summary.json b/test/data/full-coverage-aggregated-summary.json similarity index 100% rename from summaries/full-coverage-aggregated-summary.json rename to test/data/full-coverage-aggregated-summary.json diff --git a/summaries/full-coverage-functionalTest-summary.json b/test/data/full-coverage-functionalTest-summary.json similarity index 100% rename from summaries/full-coverage-functionalTest-summary.json rename to test/data/full-coverage-functionalTest-summary.json diff --git a/summaries/full-coverage-test-summary.json b/test/data/full-coverage-test-summary.json similarity index 100% rename from summaries/full-coverage-test-summary.json rename to test/data/full-coverage-test-summary.json From 6620ac704c00308e9361c21c5cc1fd6baa7764b0 Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Sun, 11 May 2025 17:37:00 +0300 Subject: [PATCH 33/40] readme --- CHANGELOG.md | 6 ++++++ README.md | 24 ++++++++++++++++++++++++ action.yaml | 1 - 3 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..ee94de5 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,6 @@ +# Delta Coverage Action + +## 1.0 + +- Now the action generates coverage badges for each test view. + For details see [readme](./README.md#coverage-badges). diff --git a/README.md b/README.md index 01a77fd..c5815cf 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,10 @@ Also, the action creates a comment in the pull request with links to the check r If `title` is not blank then the previous comment generated by this action will be updated with the new report, otherwise a new comment will be created. +## Outputs + +- `badges-dir` - The directory where the coverage badges are stored. + ## Pre-requisites Required permissions: @@ -40,3 +44,23 @@ jobs: with: github-token: ${{ secrets.GITHUB_TOKEN }} ``` + +## Coverage Badges + +The action generates coverage badges for each [coverage view](https://github.com/gw-kit/delta-coverage-plugin/blob/main/README.md#report-views). +The badges are generated based on _full coverage summary_ data files created by [Delta-Coverage plugin](https://github.com/gw-kit/delta-coverage-plugin). + +⚠️ Enabling of full coverage report is required: +```kts +deltaCoverageReport { + reports { + fullCoverageReport = true + } +} +``` + +### Badges example + +![aggregated.svg](https://raw.githubusercontent.com/gw-kit/coverage-badges/refs/heads/main/delta-coverage-plugin/badges/aggregated.svg) +![functionalTest.svg](https://raw.githubusercontent.com/gw-kit/coverage-badges/refs/heads/main/delta-coverage-plugin/badges/functionalTest.svg) +![test.svg](https://raw.githubusercontent.com/gw-kit/coverage-badges/refs/heads/main/delta-coverage-plugin/badges/test.svg) diff --git a/action.yaml b/action.yaml index 3e107dd..2c1a887 100644 --- a/action.yaml +++ b/action.yaml @@ -55,7 +55,6 @@ runs: core.setOutput('full', fullCovSummariesFile); - name: Generate Badges - id: generate-badges continue-on-error: true shell: bash run: | From f401a745d3912db44e401bcea201c1a5ac1c2ca4 Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Sun, 11 May 2025 17:39:18 +0300 Subject: [PATCH 34/40] readme --- .github/workflows/build.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index d74a765..e0bfda7 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -29,7 +29,7 @@ jobs: - name: Publish Delta Coverage id: render-delta-coverage - uses: gw-kit/delta-coverage-action@test-badges + uses: gw-kit/delta-coverage-action@${{ github.head_ref }} with: summary-report-base-path: 'test/data/' From b34d2c89c5c0a28ad55b206c452716655383f319 Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Sun, 11 May 2025 17:46:32 +0300 Subject: [PATCH 35/40] readme --- .github/workflows/build.yaml | 2 +- action.yaml | 2 +- src/generate-badges.js | 4 ++-- version.properties | 1 + 4 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 version.properties diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index e0bfda7..2f299e8 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -29,7 +29,7 @@ jobs: - name: Publish Delta Coverage id: render-delta-coverage - uses: gw-kit/delta-coverage-action@${{ github.head_ref }} + uses: gw-kit/delta-coverage-action@v1 with: summary-report-base-path: 'test/data/' diff --git a/action.yaml b/action.yaml index 2c1a887..bafc3ec 100644 --- a/action.yaml +++ b/action.yaml @@ -28,7 +28,7 @@ inputs: outputs: badges-dir: description: 'Directory with generated badges.' - value: ${{ steps.generate-badges.outputs.all-files }} + value: ${{ steps.generate-badges.outputs.badges-dir }} runs: using: "composite" diff --git a/src/generate-badges.js b/src/generate-badges.js index 28fb398..64b57ca 100644 --- a/src/generate-badges.js +++ b/src/generate-badges.js @@ -45,8 +45,8 @@ summaries }; }).forEach(badge => { fs.writeFileSync(badge.file, badge.badgeContent); - core.info(`Generated badge for ${badge.view} at ${badge.file}`); + core.info(`🏷️ Generated badge for ${badge.view} at ${badge.file}`); core.setOutput(badge.view, badge.file); }); -core.setOutput('all-files', badgesOutputDir); +core.setOutput('badges-dir', badgesOutputDir); diff --git a/version.properties b/version.properties new file mode 100644 index 0000000..aef125e --- /dev/null +++ b/version.properties @@ -0,0 +1 @@ +version=1.0.0 From 7ac33256ada25cb297c128345ce030dbb97cb9cd Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Sun, 11 May 2025 17:47:12 +0300 Subject: [PATCH 36/40] readme --- action.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/action.yaml b/action.yaml index bafc3ec..469b32e 100644 --- a/action.yaml +++ b/action.yaml @@ -55,6 +55,7 @@ runs: core.setOutput('full', fullCovSummariesFile); - name: Generate Badges + id: generate-badges continue-on-error: true shell: bash run: | From 910a3f414c94cafcfe6d12f554f39ff672c4f793 Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Sun, 11 May 2025 17:49:37 +0300 Subject: [PATCH 37/40] empty From f169273743521f0badb04228d2b68cad02aa47be Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Sun, 11 May 2025 17:54:41 +0300 Subject: [PATCH 38/40] readme --- .github/workflows/build.yaml | 6 +++++- action.yaml | 4 ++++ src/generate-badges.js | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 2f299e8..ff961d5 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -29,10 +29,14 @@ jobs: - name: Publish Delta Coverage id: render-delta-coverage - uses: gw-kit/delta-coverage-action@v1 + uses: gw-kit/delta-coverage-action@test-badges with: summary-report-base-path: 'test/data/' + - name: Debug + shell: bash + run: echo 'output_ ${{ steps.render-delta-coverage.outputs.badges-dir }}' + - id: upload-badges uses: actions/upload-artifact@v4 with: diff --git a/action.yaml b/action.yaml index 469b32e..a138014 100644 --- a/action.yaml +++ b/action.yaml @@ -64,6 +64,10 @@ runs: mv ./node_modules $src_path/ node $src_path/generate-badges.js ${{ steps.all-summaries.outputs.full }} + - name: Debug + shell: bash + run: echo 'output_ ${{ steps.generate-badges.outputs.badges-dir }}' + - name: Fetch PR Labels id: fetch-labels if: ${{ github.event_name == 'pull_request' }} diff --git a/src/generate-badges.js b/src/generate-badges.js index 64b57ca..c37b8ae 100644 --- a/src/generate-badges.js +++ b/src/generate-badges.js @@ -50,3 +50,4 @@ summaries }); core.setOutput('badges-dir', badgesOutputDir); +core.info(`🏷 Generated badges in ${badgesOutputDir}`); From f5533a614f09bc315523407f38fe83c65f4b8212 Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Sun, 11 May 2025 17:56:26 +0300 Subject: [PATCH 39/40] readme --- .github/workflows/build.yaml | 4 ---- action.yaml | 4 ---- src/generate-badges.js | 1 - 3 files changed, 9 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index ff961d5..d74a765 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -33,10 +33,6 @@ jobs: with: summary-report-base-path: 'test/data/' - - name: Debug - shell: bash - run: echo 'output_ ${{ steps.render-delta-coverage.outputs.badges-dir }}' - - id: upload-badges uses: actions/upload-artifact@v4 with: diff --git a/action.yaml b/action.yaml index a138014..469b32e 100644 --- a/action.yaml +++ b/action.yaml @@ -64,10 +64,6 @@ runs: mv ./node_modules $src_path/ node $src_path/generate-badges.js ${{ steps.all-summaries.outputs.full }} - - name: Debug - shell: bash - run: echo 'output_ ${{ steps.generate-badges.outputs.badges-dir }}' - - name: Fetch PR Labels id: fetch-labels if: ${{ github.event_name == 'pull_request' }} diff --git a/src/generate-badges.js b/src/generate-badges.js index c37b8ae..64b57ca 100644 --- a/src/generate-badges.js +++ b/src/generate-badges.js @@ -50,4 +50,3 @@ summaries }); core.setOutput('badges-dir', badgesOutputDir); -core.info(`🏷 Generated badges in ${badgesOutputDir}`); From b2f5d89764b34c2127f210fad2a5f624db849baa Mon Sep 17 00:00:00 2001 From: Sergii Gnatiuk Date: Sun, 11 May 2025 17:59:30 +0300 Subject: [PATCH 40/40] readme --- .github/workflows/build.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index d74a765..2f299e8 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -29,7 +29,7 @@ jobs: - name: Publish Delta Coverage id: render-delta-coverage - uses: gw-kit/delta-coverage-action@test-badges + uses: gw-kit/delta-coverage-action@v1 with: summary-report-base-path: 'test/data/'