From 0b20bb4eac574e35c5a0c93c5a7bb594d50bdc18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20L=C3=B6thberg?= Date: Wed, 8 Apr 2015 15:22:46 +0200 Subject: [PATCH] Add Scrutinizer Build integration Closes #312 --- server.js | 46 ++++++++++++++++++++++++++++++++++++++++++++++ try.html | 4 ++++ 2 files changed, 50 insertions(+) diff --git a/server.js b/server.js index 08cda12..d81af26 100644 --- a/server.js +++ b/server.js @@ -1570,6 +1570,52 @@ cache(function(data, match, sendBadge, request) { }); })); +// Scrutinizer build integration. +camp.route(/^\/scrutinizer\/build\/(.*)\.(svg|png|gif|jpg|json)$/, +cache(function(data, match, sendBadge, request) { + var repo = match[1]; // eg, g/phpmyadmin/phpmyadmin + var format = match[2]; + // The repo may contain a branch, which would be unsuitable. + var repoParts = repo.split('/'); + var branch = null; + // Normally, there are 2 slashes in `repo` when the branch isn't specified. + var slashesInRepo = 2; + if (repoParts[0] === 'gp') { slashesInRepo = 1; } + if ((repoParts.length - 1) > slashesInRepo) { + branch = repoParts[repoParts.length - 1]; + repo = repoParts.slice(0, -1).join('/'); + } + var apiUrl = 'https://scrutinizer-ci.com/api/repositories/' + repo; + var badgeData = getBadgeData('build', data); + request(apiUrl, {}, function(err, res, buffer) { + if (err !== null) { + badgeData.text[1] = 'inaccessible'; + sendBadge(format, badgeData); + } + try { + var data = JSON.parse(buffer); + // Which branch are we dealing with? + if (branch === null) { branch = data.default_branch; } + var res = data.applications[branch].build_status.status; + badgeData.text[1] = res; + if (res === 'passed') { + badgeData.colorscheme = 'brightgreen'; + } else if (res === 'failed' || res === 'error') { + badgeData.colorscheme = 'red'; + } else if (res === 'pending') { + badgeData.colorscheme = 'orange'; + } else if (res === 'unknown') { + badgeData.colorscheme = 'gray'; + } + sendBadge(format, badgeData); + + } catch(e) { + badgeData.text[1] = 'invalid'; + sendBadge(format, badgeData); + } + }); +})); + // Scrutinizer integration. camp.route(/^\/scrutinizer\/(.*)\.(svg|png|gif|jpg|json)$/, cache(function(data, match, sendBadge, request) { diff --git a/try.html b/try.html index 605866b..369433a 100644 --- a/try.html +++ b/try.html @@ -148,6 +148,10 @@ Pixel-perfect   Retina-ready   Fast   Consistent   Hackable https://img.shields.io/scrutinizer/coverage/g/phpmyadmin/phpmyadmin/master.svg + Scrutinizer Build: + + https://img.shields.io/scrutinizer/build/g/filp/whoops.svg + Codecov: https://img.shields.io/codecov/c/github/codecov/example-python.svg