UNPKG

testbeats

Version:

Publish test results to Microsoft Teams, Google Chat, Slack and InfluxDB

65 lines (50 loc) 1.9 kB
const fs = require('fs'); const path = require('path'); const logger = require('../utils/logger'); const { BaseTarget } = require('./base.target'); const context = require('../utils/context.utils'); const DEFAULT_INPUTS = { output_file: process.env.GITHUB_OUTPUT, // Path to output file, defaults to GITHUB_OUTPUT env var key: 'testbeats' // Key name for the output }; const default_options = { condition: 'passOrFail' }; class GitHubOutputTarget extends BaseTarget { constructor({ target }) { super({ target }); } async run({ result, target }) { this.result = result; this.setTargetInputs(target); logger.info(`🔔 Writing results to GitHub Actions outputs...`); return await this.writeToGitHubOutput({ target, result }); } setTargetInputs(target) { target.inputs = Object.assign({}, DEFAULT_INPUTS, target.inputs); } async writeToGitHubOutput({ target, result }) { const outputFile = target.inputs.output_file || process.env.GITHUB_OUTPUT; if (!outputFile) { throw new Error('GitHub output file path is required. Set GITHUB_OUTPUT environment variable or provide output_file in target inputs.'); } // Ensure the directory exists const outputDir = path.dirname(outputFile); if (!fs.existsSync(outputDir)) { fs.mkdirSync(outputDir, { recursive: true }); } const lines = [] lines.push(`${target.inputs.key}_results=${JSON.stringify(result)}`) lines.push(`${target.inputs.key}_stores=${JSON.stringify(context.stores)}`) const outputContent = lines.join('\n'); fs.appendFileSync(outputFile, outputContent); logger.info(`✅ Successfully wrote results to ${outputFile}`); return { success: true, key: target.inputs.key }; } async handleErrors({ target, errors }) { logger.error('GitHub Output target errors:', errors); } } module.exports = { GitHubOutputTarget };