|
| 1 | +"use strict"; |
| 2 | +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { |
| 3 | + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } |
| 4 | + return new (P || (P = Promise))(function (resolve, reject) { |
| 5 | + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } |
| 6 | + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } |
| 7 | + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } |
| 8 | + step((generator = generator.apply(thisArg, _arguments || [])).next()); |
| 9 | + }); |
| 10 | +}; |
| 11 | +Object.defineProperty(exports, "__esModule", { value: true }); |
| 12 | +const fs = require("fs"); |
| 13 | +const https = require("https"); |
| 14 | +const bagdeBuilderUrl = 'https://img.shields.io/badge'; |
| 15 | +const downloadBadge = (url, output) => new Promise((resolve, reject) => { |
| 16 | + const badge = fs.createWriteStream(output); |
| 17 | + https |
| 18 | + .get(url, (response) => { |
| 19 | + response.pipe(badge); |
| 20 | + badge.on('finish', () => { |
| 21 | + badge.close(); |
| 22 | + resolve(); |
| 23 | + }); |
| 24 | + }) |
| 25 | + .on('error', reject); |
| 26 | +}); |
| 27 | +exports.default = (context) => __awaiter(void 0, void 0, void 0, function* () { |
| 28 | + const { logger, inputs } = context; |
| 29 | + const { input, output, label } = inputs; |
| 30 | + logger.step('Analyze coverage'); |
| 31 | + logger.info(`Read ${input}`, 2); |
| 32 | + const coverageData = JSON.parse(fs.readFileSync(input).toString()); |
| 33 | + const coverageMembers = Object.keys(coverageData.total).filter((n) => n !== 'branchesTrue'); |
| 34 | + const coverageAmount = coverageMembers.map((n) => coverageData.total[n].pct).reduce((a, b) => a + b); |
| 35 | + const coverageValue = Math.round((coverageAmount / coverageMembers.length) * 100) / 100; |
| 36 | + coverageMembers.forEach((n) => logger.info(`- ${n}: ${coverageData.total[n].pct}%`, 2)); |
| 37 | + logger.info('-----------------------', 2); |
| 38 | + logger.info(`TOTAL: ${coverageValue}%`, 2); |
| 39 | + let color = 'red'; |
| 40 | + if (coverageValue >= 95) { |
| 41 | + color = 'brightgreen'; |
| 42 | + } |
| 43 | + else if (coverageValue >= 90) { |
| 44 | + color = 'green'; |
| 45 | + } |
| 46 | + else if (coverageValue >= 80) { |
| 47 | + color = 'lightgreen'; |
| 48 | + } |
| 49 | + else if (coverageValue >= 70) { |
| 50 | + color = 'yellow'; |
| 51 | + } |
| 52 | + else if (coverageValue >= 60) { |
| 53 | + color = 'orange'; |
| 54 | + } |
| 55 | + logger.step('Create badge'); |
| 56 | + const url = `${bagdeBuilderUrl}/${label}-${coverageValue}${encodeURI('%')}-${color}.svg`; |
| 57 | + logger.info(`Make request to ${url}`, 2); |
| 58 | + return downloadBadge(url, output).then(() => { |
| 59 | + logger.info(`Content uploaded in ${output}`, 2); |
| 60 | + logger.success('Successfully generated'); |
| 61 | + }); |
| 62 | +}); |
0 commit comments