UNPKG

@hyperse/vitest-coverage-reporter

Version:

Using gitHub action for creating markdown coverage report, badges from Istanbul json report

1 lines 55.8 kB
{"version":3,"sources":["../node_modules/wrappy/wrappy.js","../node_modules/once/once.js","../src/constants.ts","../src/inputs/getVitestJsonPath.ts","../src/inputs/parseVitestJsonFinalReport.ts","../src/report/generateBadges.ts","../node_modules/deprecation/dist-web/index.js","../node_modules/@octokit/request-error/dist-src/index.js","../src/inputs/getGithubToken.ts","../src/utils/getOctokit.ts","../src/inputs/getPullChanges.ts","../src/inputs/getWorkspacePackages.ts","../src/inputs/getChangedPackages.ts","../src/inputs/getViteConfigPath.ts","../src/inputs/parseCoverageThresholds.ts","../src/inputs/getVitestThresholds.ts","../src/report/generateFileCoverageHtml.ts","../src/report/generateHeadline.ts","../src/report/generateSummaryTableHtml.ts","../src/report/generateCoverageSummary.ts","../src/utils/updateReadmeEntry.ts","../src/utils/writeSummaryToReadMe.ts","../src/main.mts"],"names":["cb","once","core2","resolve","core3","core4","getOctokit","github","github2","core6","fs","core7","stripIndent","readFile","core8","oneLine","summary","core9","existsSync","github4","core10"],"mappings":"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","file":"main.mjs","sourcesContent":["// Returns a wrapper function that returns a wrapped callback\n// The wrapper function should do some stuff, and return a\n// presumably different callback function.\n// This makes sure that own properties are retained, so that\n// decorations and such are not lost along the way.\nmodule.exports = wrappy\nfunction wrappy (fn, cb) {\n if (fn && cb) return wrappy(fn)(cb)\n\n if (typeof fn !== 'function')\n throw new TypeError('need wrapper function')\n\n Object.keys(fn).forEach(function (k) {\n wrapper[k] = fn[k]\n })\n\n return wrapper\n\n function wrapper() {\n var args = new Array(arguments.length)\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i]\n }\n var ret = fn.apply(this, args)\n var cb = args[args.length-1]\n if (typeof ret === 'function' && ret !== cb) {\n Object.keys(cb).forEach(function (k) {\n ret[k] = cb[k]\n })\n }\n return ret\n }\n}\n","var wrappy = require('wrappy')\nmodule.exports = wrappy(once)\nmodule.exports.strict = wrappy(onceStrict)\n\nonce.proto = once(function () {\n Object.defineProperty(Function.prototype, 'once', {\n value: function () {\n return once(this)\n },\n configurable: true\n })\n\n Object.defineProperty(Function.prototype, 'onceStrict', {\n value: function () {\n return onceStrict(this)\n },\n configurable: true\n })\n})\n\nfunction once (fn) {\n var f = function () {\n if (f.called) return f.value\n f.called = true\n return f.value = fn.apply(this, arguments)\n }\n f.called = false\n return f\n}\n\nfunction onceStrict (fn) {\n var f = function () {\n if (f.called)\n throw new Error(f.onceError)\n f.called = true\n return f.value = fn.apply(this, arguments)\n }\n var name = fn.name || 'Function wrapped with `once`'\n f.onceError = name + \" shouldn't be called more than once\"\n f.called = false\n return f\n}\n","export const icons = {\n red: '🔴',\n green: '🟢',\n blue: '🔵',\n increase: '⬆️',\n decrease: '⬇️',\n equal: '🟰',\n target: '🎯',\n};\n\nexport const COVERAGE_README_MARKER = `<!-- hyperse-vitest-coverage-reporter-marker-readme -->`;\n\nexport const defaultJsonSummaryPath = 'coverage/coverage-summary.json';\nexport const defaultJsonFinalPath = 'coverage/coverage-final.json';\n","import { resolve } from 'node:path';\nimport * as core from '@actions/core';\nimport { defaultJsonFinalPath, defaultJsonSummaryPath } from '../constants';\n\nexport const getVitestJsonPath = (projectCwd: string) => {\n const jsonSummaryPath = resolve(\n projectCwd,\n core.getInput('json-summary-path') || defaultJsonSummaryPath\n );\n const jsonFinalPath = resolve(\n projectCwd,\n core.getInput('json-final-path') || defaultJsonFinalPath\n );\n\n const jsonSummaryCompareInput = core.getInput('json-summary-compare-path');\n let jsonSummaryComparePath: string | null = null;\n if (jsonSummaryCompareInput) {\n jsonSummaryComparePath = resolve(projectCwd, jsonSummaryCompareInput);\n }\n\n return {\n jsonFinalPath,\n jsonSummaryPath,\n jsonSummaryComparePath,\n };\n};\n","import { stripIndent } from 'common-tags';\nimport { readFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport * as core from '@actions/core';\nimport type { JsonFinal } from '../types/JsonFinal.js';\nimport type { JsonSummary } from '../types/JsonSummary.js';\n\nconst parseVitestCoverageReport = async <type extends JsonSummary | JsonFinal>(\n jsonPath: string\n): Promise<type> => {\n const resolvedJsonSummaryPath = resolve(process.cwd(), jsonPath);\n const jsonSummaryRaw = await readFile(resolvedJsonSummaryPath);\n return JSON.parse(jsonSummaryRaw.toString()) as type;\n};\n\nexport const parseVitestJsonSummaryReport = async (\n jsonSummaryPath: string\n): Promise<JsonSummary> => {\n try {\n return await parseVitestCoverageReport<JsonSummary>(jsonSummaryPath);\n } catch (err: unknown) {\n const stack = err instanceof Error ? err.stack : '';\n core.setFailed(stripIndent`\n Failed to parse the json-summary at path \"${jsonSummaryPath}.\"\n Make sure to run vitest before this action and to include the \"json-summary\" reporter.\n\n Original Error:\n ${stack}\n `);\n\n // Rethrow to abort the entire workflow\n throw err;\n }\n};\n\nexport const parseVitestJsonFinalReport = async (\n jsonFinalPath: string\n): Promise<JsonFinal> => {\n try {\n return await parseVitestCoverageReport<JsonFinal>(jsonFinalPath);\n } catch (err: unknown) {\n const stack = err instanceof Error ? err.stack : '';\n core.warning(stripIndent`\n Failed to parse JSON Final at path \"${jsonFinalPath}\".\n Line coverage will be empty. To include it, make sure to include the \"json\" reporter in your vitest execution.\n\n Original Error:\n ${stack}\n `);\n return {};\n }\n};\n","import { createWriteStream, existsSync, mkdirSync } from 'node:fs';\nimport https from 'node:https';\nimport { resolve } from 'node:path';\nimport type { CoverageReport } from '../types/JsonSummary.js';\n\n/**\n * Generate a shields.io URL for a badge.\n * Change the color of the badge based on the percentage.\n *\n * @param summaryData The coverage summary report data.\n * @param summaryKey The summary key to display on the badge.\n * @returns The shields.io URL.\n */\nconst generateUrl = (\n summaryData: CoverageReport,\n summaryKey: keyof CoverageReport\n) => {\n const percentage = summaryData[summaryKey].pct;\n let color = 'brightgreen';\n if (percentage < 70) {\n color = 'red';\n } else if (percentage < 80) {\n color = 'yellow';\n } else if (percentage < 90) {\n color = 'orange';\n }\n return `https://img.shields.io/badge/coverage%3A${summaryKey}-${percentage}%25-${color}.svg`;\n};\n\n/**\n * Download a badge from shields.io.\n * @param url The shields.io URL.\n * @param filename The filename to save the badge to.\n * @return Promise<void>\n */\nconst downloadBadge = (url: string, filename: string) => {\n return new Promise<void>((resolve, reject) => {\n https.get(url, (res) => {\n if (res.statusCode !== 200) {\n const newError = new Error(\n `Error downloading badge: ${res.statusMessage}`\n );\n console.error(newError);\n return reject(newError);\n }\n\n const file = createWriteStream(filename);\n res.pipe(file);\n file.on('finish', () => {\n file.close();\n resolve();\n });\n file.on('error', (err) => {\n console.error(`Error saving badge: ${err}`);\n reject(err);\n });\n });\n });\n};\n\n/**\n * Generate badges for code coverage.\n */\nexport type GenerateBadgesOptions = {\n /**\n * The path to the coverage json file.\n */\n totalCoverageReport: CoverageReport;\n /**\n * The directory to save the badges to.\n */\n badgesSavedTo: string;\n};\n\n/**\n * Generate badges for code coverage.\n */\nexport const generateBadges = async (options: GenerateBadgesOptions) => {\n const { badgesSavedTo, totalCoverageReport } = options;\n\n // Construct the shields.io URL for each badge.\n const statementsBadgeUrl = generateUrl(totalCoverageReport, 'statements');\n const branchesBadgeUrl = generateUrl(totalCoverageReport, 'branches');\n const functionsBadgeUrl = generateUrl(totalCoverageReport, 'functions');\n const linesBadgeUrl = generateUrl(totalCoverageReport, 'lines');\n\n // Create the badges directory if it does not exist.\n if (!existsSync(badgesSavedTo)) {\n mkdirSync(badgesSavedTo);\n }\n\n // Download each badge and save it to the badges directory.\n await downloadBadge(\n statementsBadgeUrl,\n resolve(badgesSavedTo, 'statements.svg')\n );\n await downloadBadge(\n functionsBadgeUrl,\n resolve(badgesSavedTo, 'functions.svg')\n );\n await downloadBadge(linesBadgeUrl, resolve(badgesSavedTo, 'lines.svg'));\n await downloadBadge(branchesBadgeUrl, resolve(badgesSavedTo, 'branches.svg'));\n\n console.log('Code coverage badges created successfully.');\n};\n","class Deprecation extends Error {\n constructor(message) {\n super(message); // Maintains proper stack trace (only available on V8)\n\n /* istanbul ignore next */\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n\n this.name = 'Deprecation';\n }\n\n}\n\nexport { Deprecation };\n","import { Deprecation } from \"deprecation\";\nimport once from \"once\";\nconst logOnceCode = once((deprecation) => console.warn(deprecation));\nconst logOnceHeaders = once((deprecation) => console.warn(deprecation));\nclass RequestError extends Error {\n constructor(message, statusCode, options) {\n super(message);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n this.name = \"HttpError\";\n this.status = statusCode;\n let headers;\n if (\"headers\" in options && typeof options.headers !== \"undefined\") {\n headers = options.headers;\n }\n if (\"response\" in options) {\n this.response = options.response;\n headers = options.response.headers;\n }\n const requestCopy = Object.assign({}, options.request);\n if (options.request.headers.authorization) {\n requestCopy.headers = Object.assign({}, options.request.headers, {\n authorization: options.request.headers.authorization.replace(\n /(?<! ) .*$/,\n \" [REDACTED]\"\n )\n });\n }\n requestCopy.url = requestCopy.url.replace(/\\bclient_secret=\\w+/g, \"client_secret=[REDACTED]\").replace(/\\baccess_token=\\w+/g, \"access_token=[REDACTED]\");\n this.request = requestCopy;\n Object.defineProperty(this, \"code\", {\n get() {\n logOnceCode(\n new Deprecation(\n \"[@octokit/request-error] `error.code` is deprecated, use `error.status`.\"\n )\n );\n return statusCode;\n }\n });\n Object.defineProperty(this, \"headers\", {\n get() {\n logOnceHeaders(\n new Deprecation(\n \"[@octokit/request-error] `error.headers` is deprecated, use `error.response.headers`.\"\n )\n );\n return headers || {};\n }\n });\n }\n}\nexport {\n RequestError\n};\n","import * as core from '@actions/core';\n\n/**\n * Get the GitHub token from action input `github-token`\n * @returns\n */\nexport const getGithubToken = () => {\n const gitHubToken = core.getInput('github-token').trim();\n return gitHubToken;\n};\n","import * as github from '@actions/github';\nimport { getGithubToken } from '../inputs/getGithubToken.js';\n\nexport type Octokit = ReturnType<typeof github.getOctokit>;\n\n/**\n * Get the Octokit instance\n * @returns The Octokit instance\n */\nexport const getOctokit = () => {\n const gitHubToken = getGithubToken();\n const octokit: Octokit = github.getOctokit(gitHubToken);\n return octokit;\n};\n","import * as core from '@actions/core';\nimport * as github from '@actions/github';\nimport { RequestError } from '@octokit/request-error';\nimport { getOctokit } from '../utils/getOctokit.js';\nimport { FileCoverageMode } from './getCoverageModeFrom.js';\n\nexport async function getPullChanges(\n fileCoverageMode: FileCoverageMode\n): Promise<string[]> {\n // Skip Changes collection if we don't need it\n if (fileCoverageMode === FileCoverageMode.None) {\n return [];\n }\n\n // Skip Changes collection if we can't do it\n if (!github.context.payload?.pull_request) {\n return [];\n }\n\n const prNumber = github.context.payload.pull_request.number;\n try {\n const paths: string[] = [];\n const octokit = getOctokit();\n\n core.startGroup(\n `Fetching list of changed files for PR#${prNumber} from Github API`\n );\n\n const iterator = octokit.paginate.iterator(octokit.rest.pulls.listFiles, {\n owner: github.context.repo.owner,\n repo: github.context.repo.repo,\n pull_number: prNumber,\n per_page: 100,\n });\n\n for await (const response of iterator) {\n core.info(`Received ${response.data.length} items`);\n\n for (const file of response.data) {\n core.debug(`[${file.status}] ${file.filename}`);\n if (['added', 'modified'].includes(file.status)) {\n paths.push(file.filename);\n }\n }\n }\n return paths;\n } catch (error) {\n if (\n error instanceof RequestError &&\n (error.status === 404 || error.status === 403)\n ) {\n core.warning(\n `Couldn't fetch changes of PR due to error:\\n[${error.name}]\\n${error.message}`\n );\n return [];\n }\n\n throw error;\n } finally {\n core.endGroup();\n }\n}\n","import { getPackages } from '@manypkg/get-packages';\n\n/**\n * Get the workspace packages\n * @param cwd The current working directory, repo root\n * @returns\n */\nexport async function getWorkspacePackages(\n cwd: string\n): Promise<\n Map<string, { name: string; relativeDir: string; version: string }>\n> {\n const { packages } = await getPackages(cwd);\n const sortedPackages: Array<\n [string, { name: string; relativeDir: string; version: string }]\n > = packages.map((x) => [\n x.dir,\n {\n name: x.packageJson.name,\n version: x.packageJson.version,\n relativeDir: x.relativeDir,\n },\n ]);\n // sort by package name\n sortedPackages.sort((a, b) => {\n if (a[1].name < b[1].name) {\n return -1;\n }\n if (a[1].name > b[1].name) {\n return 1;\n }\n return 0;\n });\n\n return new Map(sortedPackages);\n}\n","import * as core from '@actions/core';\nimport type { Package } from '@manypkg/get-packages';\nimport { FileCoverageMode } from './getCoverageModeFrom';\nimport { getPullChanges } from './getPullChanges';\nimport { getWorkspacePackages } from './getWorkspacePackages';\n\nexport async function getChangedPackages(\n repoCwd: string,\n includeAllProjects = false\n) {\n const workspacePackages = await getWorkspacePackages(repoCwd);\n const changedPackages = new Set<Package>();\n // if all project don't need to check changes\n const allChangedFiles = includeAllProjects\n ? []\n : await getPullChanges(FileCoverageMode.All);\n core.debug(`allChangedFiles: ${JSON.stringify(allChangedFiles, null, 2)}`);\n for (const [dir, { name, relativeDir, version }] of workspacePackages) {\n const includeThisProject =\n includeAllProjects ||\n allChangedFiles.find((s) => !!~s.indexOf(relativeDir));\n\n core.info(`package(${name}: ${relativeDir}) is: ${includeThisProject}`);\n if (includeThisProject) {\n changedPackages.add({\n dir,\n relativeDir,\n packageJson: {\n name,\n version,\n },\n });\n }\n }\n\n return [...changedPackages];\n}\n","import { stripIndent } from 'common-tags';\nimport { constants, promises as fs } from 'node:fs';\nimport { resolve } from 'node:path';\nimport * as core from '@actions/core';\n\nconst testFilePath = async (workingDirectory: string, filePath: string) => {\n const resolvedPath = resolve(workingDirectory, filePath);\n await fs.access(resolvedPath, constants.R_OK);\n return resolvedPath;\n};\n\nconst defaultPaths = [\n 'vitest.config.ts',\n 'vitest.config.mts',\n 'vitest.config.cts',\n 'vitest.config.js',\n 'vitest.config.mjs',\n 'vitest.config.cjs',\n 'vite.config.ts',\n 'vite.config.mts',\n 'vite.config.cts',\n 'vite.config.js',\n 'vite.config.mjs',\n 'vite.config.cjs',\n 'vitest.workspace.ts',\n 'vitest.workspace.mts',\n 'vitest.workspace.cts',\n 'vitest.workspace.js',\n 'vitest.workspace.mjs',\n 'vitest.workspace.cjs',\n];\n\n/**\n * Get the path to the vite config file\n * @param workingDirectory The working directory, repo root\n * @param configPath The vite config path, optional, if not provided will try to find the vite config file in the default paths\n * @returns\n */\nexport const getViteConfigPath = async (\n workingDirectory: string,\n configPath: string = ''\n) => {\n try {\n if (configPath === '') {\n return await Promise.any(\n defaultPaths.map((filePath) => testFilePath(workingDirectory, filePath))\n );\n }\n\n return await testFilePath(workingDirectory, configPath);\n } catch {\n const searchPath = configPath\n ? resolve(workingDirectory, configPath)\n : `any default location in \"${workingDirectory}\"`;\n\n core.warning(stripIndent`\n Failed to read vite config file at ${searchPath}.\n Make sure you provide the vite-config-path option if you're using a non-default location or name of your config file.\n\n Will not include thresholds in the final report.\n `);\n return null;\n }\n};\n","import { readFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport * as core from '@actions/core';\nimport type { Thresholds } from '../types/Threshold.js';\n\nconst regex100 = /100\"?\\s*:\\s*true/;\nconst regexStatements = /statements\\s*:\\s*(\\d+)/;\nconst regexLines = /lines:\\s*(\\d+)/;\nconst regexBranches = /branches\\s*:\\s*(\\d+)/;\nconst regexFunctions = /functions\\s*:\\s*(\\d+)/;\n\n/**\n * Parse the coverage thresholds from the vite config file, supports all vite config file formats\n * @param vitestConfigPath The path to the vite config file\n * @returns\n */\nexport const parseCoverageThresholds = async (\n vitestConfigPath: string\n): Promise<Thresholds> => {\n try {\n const resolvedViteConfigPath = resolve(process.cwd(), vitestConfigPath);\n const rawContent = await readFile(resolvedViteConfigPath, 'utf8');\n\n const has100Value = rawContent.match(regex100);\n\n if (has100Value) {\n return {\n lines: 100,\n branches: 100,\n functions: 100,\n statements: 100,\n };\n }\n\n const lines = rawContent.match(regexLines);\n const branches = rawContent.match(regexBranches);\n const functions = rawContent.match(regexFunctions);\n const statements = rawContent.match(regexStatements);\n\n return {\n lines: lines ? Number.parseInt(lines[1]) : undefined,\n branches: branches ? Number.parseInt(branches[1]) : undefined,\n functions: functions ? Number.parseInt(functions[1]) : undefined,\n statements: statements ? Number.parseInt(statements[1]) : undefined,\n };\n } catch (err: unknown) {\n core.warning(\n `Could not read vite config file for tresholds due to an error:\\n ${err}`\n );\n return {};\n }\n};\n","import type { Thresholds } from '../types/Threshold.js';\nimport { getViteConfigPath } from './getViteConfigPath.js';\nimport { parseCoverageThresholds } from './parseCoverageThresholds.js';\n\nexport const getVitestThresholds = async (\n projectCwd: string,\n viteConfigPath: string = ''\n): Promise<Thresholds> => {\n // ViteConfig is optional, as it is only required for thresholds. If no vite config is provided, we will not include thresholds in the final report.\n const finalViteConfigPath = await getViteConfigPath(\n projectCwd,\n viteConfigPath\n );\n\n const thresholds = finalViteConfigPath\n ? await parseCoverageThresholds(finalViteConfigPath)\n : {};\n return thresholds;\n};\n","import { oneLine } from 'common-tags';\nimport * as path from 'node:path';\nimport { FileCoverageMode } from '../inputs/getCoverageModeFrom.js';\nimport type { JsonFinal } from '../types/JsonFinal.js';\nimport type { JsonSummary } from '../types/JsonSummary.js';\nimport { generateBlobFileUrl } from './generateFileUrl.js';\nimport {\n getUncoveredLinesFromStatements,\n type LineRange,\n} from './getUncoveredLinesFromStatements.js';\n\ntype FileCoverageInputs = {\n jsonSummary: JsonSummary;\n jsonFinal: JsonFinal;\n fileCoverageMode: FileCoverageMode;\n pullChanges: string[];\n};\n\nconst workspacePath = process.cwd();\n\nexport const generateFileCoverageHtml = ({\n jsonSummary,\n jsonFinal,\n fileCoverageMode,\n pullChanges,\n}: FileCoverageInputs) => {\n const filePaths = Object.keys(jsonSummary).filter((key) => key !== 'total');\n\n const formatFileLine = (filePath: string) => {\n const coverageSummary = jsonSummary[filePath];\n const lineCoverage = jsonFinal[filePath];\n\n // LineCoverage might be empty if coverage-final.json was not provided.\n const uncoveredLines = lineCoverage\n ? getUncoveredLinesFromStatements(jsonFinal[filePath])\n : [];\n const relativeFilePath = path.relative(workspacePath, filePath);\n const url = generateBlobFileUrl(relativeFilePath);\n\n return `\n <tr>\n <td align=\"left\"><a href=\"${url}\">${relativeFilePath}</a></td>\n <td align=\"right\">${coverageSummary.statements.pct}%</td>\n <td align=\"right\">${coverageSummary.branches.pct}%</td>\n <td align=\"right\">${coverageSummary.functions.pct}%</td>\n <td align=\"right\">${coverageSummary.lines.pct}%</td>\n <td align=\"left\">${createRangeURLs(uncoveredLines, url)}</td>\n </tr>`;\n };\n\n let reportData = '';\n\n const [changedFiles, unchangedFiles] = splitFilesByChangeStatus(\n filePaths,\n pullChanges\n );\n\n if (\n fileCoverageMode === FileCoverageMode.Changes &&\n changedFiles.length === 0\n ) {\n return 'No changed files found.';\n }\n\n if (changedFiles.length > 0) {\n reportData += `\n\t\t\t${formatGroupLine('Changed Files')} \n\t\t\t${changedFiles.map(formatFileLine).join('')}\n\t\t`;\n }\n\n if (fileCoverageMode === FileCoverageMode.All && unchangedFiles.length > 0) {\n reportData += `\n\t\t\t${formatGroupLine('Unchanged Files')}\n\t\t\t${unchangedFiles.map(formatFileLine).join('')}\n\t\t`;\n }\n\n return oneLine`\n <table>\n <thead>\n <tr>\n <th align=\"left\">File</th>\n <th align=\"right\">Stmts</th>\n <th align=\"right\">% Branch</th>\n <th align=\"right\">% Funcs</th>\n <th align=\"right\">% Lines</th>\n <th align=\"left\">Uncovered Lines</th>\n </tr>\n </thead>\n <tbody>\n ${reportData}\n </tbody>\n </table>\n `;\n};\n\nfunction formatGroupLine(caption: string): string {\n return `\n\t\t<tr>\n\t\t\t<td align=\"left\" colspan=\"6\"><b>${caption}</b></td>\n\t\t</tr>\n\t`;\n}\n\nfunction createRangeURLs(uncoveredLines: LineRange[], url: string): string {\n return uncoveredLines\n .map((range) => {\n let linkText = `${range.start}`;\n let urlHash = `#L${range.start}`;\n\n if (range.start !== range.end) {\n linkText += `-${range.end}`;\n urlHash += `-L${range.end}`;\n }\n\n return `<a href=\"${url}${urlHash}\" class=\"text-red\">${linkText}</a>`;\n })\n .join(', ');\n}\n\nfunction splitFilesByChangeStatus(\n filePaths: string[],\n pullChanges: string[]\n): [string[], string[]] {\n return filePaths.reduce(\n ([changedFiles, unchangedFiles], filePath) => {\n // Pull Changes has filePaths relative to the git repository, whereas the jsonSummary has filePaths relative to the workspace.\n // So we have to convert the filePaths to be relative to the workspace.\n const comparePath = path.relative(workspacePath, filePath);\n if (pullChanges.includes(comparePath)) {\n changedFiles.push(filePath);\n } else {\n unchangedFiles.push(filePath);\n }\n return [changedFiles, unchangedFiles];\n },\n [[], []] as [string[], string[]]\n );\n}\n","type HeadlineArgs = {\n name?: string;\n relativeDir?: string;\n};\n\nexport function generateHeadline(options: HeadlineArgs) {\n const relativeDir = options.relativeDir;\n\n if (options.name && relativeDir) {\n return `Coverage Report for ${options.name} (${relativeDir})`;\n }\n\n if (options.name) {\n return `Coverage Report for ${options.name}`;\n }\n\n if (relativeDir) {\n return `Coverage Report for ${relativeDir}`;\n }\n\n return 'Coverage Report';\n}\n","import { oneLine } from 'common-tags';\nimport { icons } from '../constants.js';\nimport type { CoverageReport, ReportNumbers } from '../types/JsonSummary.js';\nimport type { Thresholds } from '../types/Threshold.js';\n\nexport function generateSummaryTableHtml(\n jsonReport: CoverageReport,\n thresholds: Thresholds = {},\n jsonCompareReport: CoverageReport | undefined = undefined\n): string {\n return oneLine`\n\t\t<table>\n\t\t\t<thead>\n\t\t\t\t<tr>\n\t\t\t\t <th align=\"center\">Status</th>\n\t\t\t\t <th align=\"left\">Category</th>\n\t\t\t\t <th align=\"right\">Percentage</th>\n\t\t\t\t <th align=\"right\">Covered / Total</th>\n\t\t\t\t</tr>\n\t\t\t</thead>\n\t\t\t<tbody>\n\t\t\t\t<tr>\n\t\t\t\t\t${generateTableRow({ reportNumbers: jsonReport.lines, category: 'Lines', threshold: thresholds.lines, reportCompareNumbers: jsonCompareReport?.lines })}\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t${generateTableRow({ reportNumbers: jsonReport.statements, category: 'Statements', threshold: thresholds.statements, reportCompareNumbers: jsonCompareReport?.statements })}\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t${generateTableRow({ reportNumbers: jsonReport.functions, category: 'Functions', threshold: thresholds.functions, reportCompareNumbers: jsonCompareReport?.functions })}\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t${generateTableRow({ reportNumbers: jsonReport.branches, category: 'Branches', threshold: thresholds.branches, reportCompareNumbers: jsonCompareReport?.branches })}\n\t\t\t\t</tr>\n\t\t\t</tbody>\n\t\t</table>\n\t`;\n}\n\nfunction generateTableRow({\n reportNumbers,\n category,\n threshold,\n reportCompareNumbers,\n}: {\n reportNumbers: ReportNumbers;\n category: string;\n threshold?: number;\n reportCompareNumbers?: ReportNumbers;\n}): string {\n let status = icons.blue;\n let percent = `${reportNumbers.pct}%`;\n\n if (threshold) {\n percent = `${percent} (${icons.target} ${threshold}%)`;\n status = reportNumbers.pct >= threshold ? icons.green : icons.red;\n }\n\n if (reportCompareNumbers) {\n const percentDiff = reportNumbers.pct - reportCompareNumbers.pct;\n const compareString = getCompareString(percentDiff);\n percent = `${percent}<br/>${compareString}`;\n }\n\n return `\n <td align=\"center\">${status}</td>\n <td align=\"left\">${category}</td>\n\t\t<td align=\"right\">${percent}</td>\n <td align=\"right\">${reportNumbers.covered} / ${reportNumbers.total}</td>\n `;\n}\n\nfunction getCompareString(percentDiff: number): string {\n if (percentDiff === 0) {\n return `${icons.equal} <em>±0%</em>`;\n }\n\n if (percentDiff > 0) {\n return `${icons.increase} <em>+${percentDiff.toFixed(2)}%</em>`;\n }\n\n // The - char is already included in a negative number\n return `${icons.decrease} <em>${percentDiff.toFixed(2)}%</em>`;\n}\n","import { existsSync } from 'node:fs';\nimport * as core from '@actions/core';\nimport * as github from '@actions/github';\nimport { getChangedPackages } from '../inputs/getChangedPackages.js';\nimport { FileCoverageMode } from '../inputs/getCoverageModeFrom.js';\nimport { getPullChanges } from '../inputs/getPullChanges.js';\nimport { getVitestJsonPath } from '../inputs/getVitestJsonPath.js';\nimport { getVitestThresholds } from '../inputs/getVitestThresholds.js';\nimport {\n parseVitestJsonFinalReport,\n parseVitestJsonSummaryReport,\n} from '../inputs/parseVitestJsonFinalReport.js';\nimport type { JsonSummary } from '../types/JsonSummary.js';\nimport { generateFileCoverageHtml } from './generateFileCoverageHtml.js';\nimport { generateHeadline } from './generateHeadline.js';\nimport { generateSummaryTableHtml } from './generateSummaryTableHtml.js';\n\ntype GenerateCoverageSummaryOptions = {\n name: string;\n repoCwd: string;\n hideHeadline?: boolean;\n fileCoverageMode: FileCoverageMode;\n includeAllProjects: boolean;\n};\n\nexport const generateCoverageSummary = async (\n options: GenerateCoverageSummaryOptions\n): Promise<typeof core.summary> => {\n const changedPackages = await getChangedPackages(\n options.repoCwd,\n options.includeAllProjects\n );\n const summary = !options.hideHeadline\n ? core.summary.addHeading(\n generateHeadline({\n name: options.name,\n relativeDir: '',\n }),\n 2\n )\n : core.summary;\n\n for (const packageItem of changedPackages) {\n const projectCwd = packageItem.dir;\n core.info(`generating coverage summary from: ${projectCwd}`);\n const { jsonSummaryPath, jsonSummaryComparePath, jsonFinalPath } =\n getVitestJsonPath(projectCwd);\n\n if (!existsSync(jsonSummaryPath)) {\n core.warning(`No summary report json file found, skip ${projectCwd}`);\n continue;\n }\n\n const jsonSummary = await parseVitestJsonSummaryReport(jsonSummaryPath);\n const thresholds = await getVitestThresholds(projectCwd);\n\n let jsonSummaryCompare: JsonSummary | undefined;\n if (jsonSummaryComparePath) {\