diff --git a/action.yaml b/action.yaml index 998eb93..f2bdcbe 100644 --- a/action.yaml +++ b/action.yaml @@ -59,15 +59,24 @@ runs: core.setOutput('delta', deltaSummariesFile); core.setOutput('full', fullCovSummariesFile); - - name: Generate Badges - id: generate-badges + - name: Install Badge Dependencies 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 }} + npm install gradient-badge + mv ./node_modules "${{ github.action_path }}/src/" + + - name: Generate Badges + id: generate-badges + continue-on-error: true + uses: actions/github-script@v7 + with: + script: | + const generateBadges = require('${{ github.action_path }}/src/generate-badges.js'); + await generateBadges({ + summariesFile: '${{ steps.all-summaries.outputs.full }}', + core: core + }); - name: Fetch PR Labels id: fetch-labels diff --git a/src/generate-badges.js b/src/generate-badges.js index 64b57ca..6a27fa7 100644 --- a/src/generate-badges.js +++ b/src/generate-badges.js @@ -1,10 +1,8 @@ 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 secondColor = '#117efa'; // blue const firstColors = [ @@ -27,26 +25,31 @@ const mapToBadgeInputs = (index, summary) => { }; }; -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.info(`🏷️ Generated badge for ${badge.view} at ${badge.file}`); - core.setOutput(badge.view, badge.file); - }); - -core.setOutput('badges-dir', badgesOutputDir); +module.exports = async (ctx) => { + const { core, summariesFile } = ctx; + + fs.mkdirSync(badgesOutputDir, {recursive: true}); + + 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.info(`🏷️ Generated badge for ${badge.view} at ${badge.file}`); + core.setOutput(badge.view, badge.file); + }); + + core.setOutput('badges-dir', badgesOutputDir); +};