diff --git a/server.js b/server.js index acf870e..bdf198e 100644 --- a/server.js +++ b/server.js @@ -3363,6 +3363,59 @@ cache(function(data, match, sendBadge, request) { }); })); +// Jenkins coverage integration +camp.route(/^\/jenkins(-ci)?\/c\/(http(s)?)\/((?:[^\/]+)(?:\/.+?)?)\/([^\/]+)\.(svg|png|gif|jpg|json)$/, +cache(function(data, match, sendBadge, request) { + var scheme = match[2]; // http(s) + var host = match[4]; // jenkins.qa.ubuntu.com + var job = match[5]; // precise-desktop-amd64_default + var format = match[6]; + var options = { + json: true, + uri: scheme + '://' + host + '/job/' + job + + '/lastBuild/cobertura/api/json?tree=results[elements[name,denominator,numerator,ratio]]' + }; + + if (serverSecrets && serverSecrets.jenkins_user) { + options.auth = { + user: serverSecrets.jenkins_user, + pass: serverSecrets.jenkins_pass + }; + } + + var badgeData = getBadgeData('coverage', data); + request(options, function(err, res, json) { + if (err !== null) { + badgeData.text[1] = 'inaccessible'; + sendBadge(format, badgeData); + return; + } + + try { + var coverageObject = json.results.elements.filter(function (obj) { + return obj.name === 'Lines'; + })[0]; + if (coverageObject === undefined) { + badgeData.text[1] = 'inaccessible'; + sendBadge(format, badgeData); + return; + } + var coverage = coverageObject.ratio; + if (+coverage !== +coverage) { + badgeData.text[1] = 'unknown'; + sendBadge(format, badgeData); + return; + } + badgeData.text[1] = coverage.toFixed(0) + '%'; + badgeData.colorscheme = coveragePercentageColor(coverage); + sendBadge(format, badgeData); + } catch(e) { + badgeData.text[1] = 'invalid'; + sendBadge(format, badgeData); + } + }); +})); + // Ansible integration camp.route(/^\/ansible\/(role)\/([^\/]+)\.(svg|png|gif|jpg|json)$/, cache(function(data, match, sendBadge, request) { diff --git a/try.html b/try.html index 0f8efff..15fba5e 100644 --- a/try.html +++ b/try.html @@ -136,6 +136,10 @@ Pixel-perfect   Retina-ready   Fast   Consistent   Hackable https://img.shields.io/jenkins/t/https/jenkins.qa.ubuntu.com/precise-desktop-amd64_default.svg + Jenkins coverage: + + https://img.shields.io/jenkins/c/https/jenkins.qa.ubuntu.com/address-book-service-utopic-i386-ci.svg + Coveralls: https://img.shields.io/coveralls/jekyll/jekyll.svg