UNPKG

node-reporter-gha

Version:
66 lines 2.4 kB
import { appendFile } from 'node:fs/promises'; import { issueCommand } from './command.mjs'; import { generateSummary, getLocationInfo, isSubtestsFailedError } from './utils.mjs'; /* c8 ignore start */ async function writeSummary(stats) { if (process.env['GITHUB_STEP_SUMMARY']) { const summary = generateSummary(stats); try { await appendFile(process.env['GITHUB_STEP_SUMMARY'], summary); } catch (error) { console.warn(`Failed to write summary: ${error.message}`); } } } /* c8 ignore stop */ function* handleEvent(event, failedTests, stats) { if (event.type === 'test:fail') { const { name, details: { error, error: { message }, }, } = event.data; if (!isSubtestsFailedError(error)) { const [line, column, file] = getLocationInfo(event); failedTests.push({ name, file, line, column, message }); } } else if (event.type === 'test:diagnostic') { const [line, column, file] = getLocationInfo(event); const { message } = event.data; if (line === undefined && column === undefined && file === undefined) { const statsRegex = /^(tests|suites|pass|fail|cancelled|skipped|todo|duration_ms) /u; if (statsRegex.test(message)) { const [key, value] = message.split(' '); stats[key] = value; } } else { yield issueCommand('notice', { file, line, col: column }, message); } } } function* handleFailedTests(failedTests) { if (failedTests.length > 0) { yield issueCommand('group', {}, 'Test Failures'); for (const { name: title, file, line, column: col, message } of failedTests) { yield issueCommand('error', { title, file, line, col }, message); } yield issueCommand('endgroup'); } } export default async function* ghaReporter(source) { const failedTests = []; const stats = {}; const isGHA = process.env['GITHUB_ACTIONS'] === 'true'; if (!isGHA) { for await (const _ of source) { // drain the source } } else { for await (const event of source) { yield* handleEvent(event, failedTests, stats); } yield* handleFailedTests(failedTests); await writeSummary(stats); } } //# sourceMappingURL=index.mjs.map