From cb625f018a2a88f386d29eb18d4ab690b03afaa5 Mon Sep 17 00:00:00 2001 From: James Harris Date: Sun, 12 Jan 2014 13:44:57 +1000 Subject: [PATCH] Added support for specific Travis CI branches. --- Makefile | 2 +- server.js | 62 ++++++++++++++++++++++++-------------------------- web/index.html | 6 ++++- 3 files changed, 36 insertions(+), 34 deletions(-) diff --git a/Makefile b/Makefile index 5c2ffbb..2b12e18 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ all: deploy: git add Verdana.ttf git commit -m'MUST NOT BE ON GITHUB' - git push -f heroku master + git push -f heroku HEAD:master git reset HEAD~1 .PHONY: all deploy diff --git a/server.js b/server.js index d1826a3..9ad6a64 100644 --- a/server.js +++ b/server.js @@ -7,44 +7,42 @@ var badge = require('./badge.js'); var svg2img = require('./svg-to-img.js'); var serverStartTime = new Date((new Date()).toGMTString()); -// Travis integration. -camp.route(/^\/travis\/(.*)\.(svg|png|gif|jpg)$/, +// Travis integration +camp.route(/^\/travis\/([^\/]+\/[^\/]+)(?:\/(.+))?\.(svg|png|gif|jpg)$/, function(data, match, end, ask) { - var userRepo = match[1]; // eg, `joyent/node`. - var format = match[2]; - var apiUrl = 'https://api.travis-ci.org/repositories/' + userRepo + '.json'; + var userRepo = match[1]; + var branch = match[2]; + var format = match[3]; + var options = { + method: 'HEAD', + hostname: 'api.travis-ci.org', + path: '/' + userRepo + '.png' + }; + if (branch) { + options.path += '?branch=' + branch; + } var badgeData = {text:['build', 'n/a'], colorscheme:'lightgrey'}; - https.get(apiUrl, function(res) { - var buffer = ''; - res.on('data', function(chunk) { buffer += ''+chunk; }); - res.on('end', function(chunk) { - if (chunk) { buffer += ''+chunk; } - try { - var data = JSON.parse(buffer); - } catch(e) { - badgeData.text[1] = 'invalid'; - badge(badgeData, makeSend(format, ask.res, end)); - return; - } - if (data.last_build_status === 0) { - badgeData.text[1] = 'passing'; - badgeData.colorscheme = 'green'; - } else if (data.last_build_status === 1) { - badgeData.text[1] = 'failing'; - badgeData.colorscheme = 'red'; - } else if (data.last_build_status === null) { - badgeData.text[1] = 'pending'; - badgeData.colorscheme = 'yellow'; - } else { - badgeData.text[1] = 'n/a'; - badgeData.colorscheme = 'lightgrey'; - } + var req = https.request(options, function(res) { + var statusMatch = res.headers['content-disposition'].match(/filename="(.+)\.png"/); + if (!statusMatch) { + badgeData.text[1] = 'unknown'; badge(badgeData, makeSend(format, ask.res, end)); - }); - }).on('error', function(e) { + return; + } + var state = statusMatch[1]; + badgeData.text[1] = state; + if (state === 'passing') { + badgeData.colorscheme = 'green'; + } else if (state === 'failing') { + badgeData.colorscheme = 'red'; + } + badge(badgeData, makeSend(format, ask.res, end)); + }); + req.on('error', function(e) { badgeData.text[1] = 'inaccessible'; badge(badgeData, makeSend(format, ask.res, end)); }); + req.end(); }); // Gittip integration. diff --git a/web/index.html b/web/index.html index 38fe95e..2583a9a 100644 --- a/web/index.html +++ b/web/index.html @@ -86,10 +86,14 @@ Use an underscore _ if you want a space. Or, you know, use a space.

Supported Services

- + + + + +
Travis:
Travis (repo): Travis-CI http://b.adge.me/travis/joyent/node.svg
Travis (branch): Travis-CIhttp://b.adge.me/travis/joyent/node/v0.6.svg
Gittip: Gittip http://b.adge.me/gittip/JSFiddle.svg