Travis: rely on SVG badges delivered

Fixes #288.
This commit is contained in:
Thaddee Tyl 2014-10-26 22:52:58 +01:00
parent c6719399ae
commit ce2c244fe4

View File

@ -270,40 +270,25 @@ cache(function(data, match, sendBadge, request) {
var userRepo = match[2]; // eg, espadrine/sc var userRepo = match[2]; // eg, espadrine/sc
var branch = match[3]; var branch = match[3];
var format = match[4]; var format = match[4];
var options = { var url = 'https://api.travis-ci.org/' + userRepo + '.svg';
json: true, if (branch != null) {
uri: 'https://api.travis-ci.org/repos/' + userRepo + '/builds.json' url += '?branch=' + branch;
}; }
branch = branch || 'master';
var badgeData = getBadgeData('build', data); var badgeData = getBadgeData('build', data);
request(options, function(err, res, json) { fetchFromSvg(request, url, function(err, res) {
if (err != null) { if (err != null) {
badgeData.text[1] = 'inaccessible'; badgeData.text[1] = 'inaccessible';
sendBadge(format, badgeData); sendBadge(format, badgeData);
return; return;
} }
try { try {
// Find the latest push on this branch. badgeData.text[1] = res;
var build = null; if (res === 'passing') {
for (var i = 0; i < json.length; i++) {
if ((json[i].state === 'finished')
&& (json[i].event_type === 'push')
&& (json[i].branch === branch)) {
build = json[i];
break;
}
}
badgeData.text[1] = 'pending';
if (build === null) {
sendBadge(format, badgeData);
return;
}
if (build.result === 0) {
badgeData.colorscheme = 'brightgreen'; badgeData.colorscheme = 'brightgreen';
badgeData.text[1] = 'passing'; } else if (res === 'failing') {
} else if (build.result === 1) {
badgeData.colorscheme = 'red'; badgeData.colorscheme = 'red';
badgeData.text[1] = 'failing'; } else {
badgeData.text[1] = 'pending';
} }
sendBadge(format, badgeData); sendBadge(format, badgeData);
@ -2299,6 +2284,20 @@ function metric(n) {
} }
// Get data from a svg-style badge.
// cb: function(err, string)
function fetchFromSvg(request, url, cb) {
request(url, function(err, res, buffer) {
if (err != null) { return cb(err); }
try {
var match = />([^<>]+)<\/text><\/g>/.exec(buffer);
cb(null, match[1]);
} catch(e) {
cb(e);
}
});
}
function coveragePercentageColor(percentage) { function coveragePercentageColor(percentage) {
if (percentage < 80) { if (percentage < 80) {
return 'red'; return 'red';