foreach-cli
Version:
CLI util to execute a command for each file matching a glob
60 lines (38 loc) • 1.69 kB
text/coffeescript
fs = require 'fs-extra'
fs.createOutputStream = require 'create-output-stream'
lcovParse = require 'lcov-parse'
request = require 'request'
svg2png = require 'svg2png'
genBadgeUrl = (label, value, color)->
"https://img.shields.io/badge/#{encodeURIComponent(label)}-#{encodeURIComponent(value)}-#{color}.svg"
## ==========================================================================
## Coverage
## ==========================================================================
calcCoverage = (lcov)->
percentages =
'functions': lcov.functions.hit / lcov.functions.found
'lines': lcov.lines.hit / lcov.lines.found
average = (percentages.functions + percentages.lines) / 2
coverage = (average*100).toString().split('.')[0]+'%'
percent = parseFloat(coverage)
color = switch
when percent is 100 then 'brightgreen'
when percent > 97 then 'green'
when percent > 93 then 'yellowgreen'
when percent > 90 then 'yellow'
when percent > 85 then 'orange'
else 'red'
{coverage, color}
downloadBadge = (name)->
lcovDirPath = "test/coverage/#{name}"
destPath = ".config/badges/coverage-#{name}"
fs.ensureDir lcovDirPath, ()->
lcovParse "#{lcovDirPath}/lcov.info", (err, parsed)-> if err then console.warn(err) else
values = calcCoverage(parsed[0])
request genBadgeUrl("coverage (#{name})", values.coverage, values.color)
.pipe fs.createOutputStream("#{destPath}.svg")
.on 'finish', (err)-> if err then console.error(err) else
fs.readFile "#{destPath}.svg", (err, svgBuffer)-> if err then console.error(err) else
svg2png(svgBuffer).then (pngBuffer)->
fs.outputFile "#{destPath}.png", pngBuffer
downloadBadge('node')