From 8b346abd951f24f5a90323a3dd3000b81c2783ee Mon Sep 17 00:00:00 2001 From: Sergey Petrov Date: Tue, 26 Aug 2014 21:08:39 +0400 Subject: [PATCH] Simplified TeamCity support code. Added support for simple and full badge format --- server.js | 67 +++++++++++++++++++++---------------------------------- try.html | 10 ++++++--- 2 files changed, 33 insertions(+), 44 deletions(-) diff --git a/server.js b/server.js index e8510e3..2146b07 100644 --- a/server.js +++ b/server.js @@ -284,12 +284,8 @@ cache(function(data, match, sendBadge) { }); })); -// TeamCity CodeBetter integration. -camp.route(/^\/teamcity\/codebetter\/(.*)\.(svg|png|gif|jpg)$/, -cache(function(data, match, sendBadge) { - var buildType = match[1]; // eg, `bt428`. - var format = match[2]; - var apiUrl = 'http://teamcity.codebetter.com/app/rest/builds/buildType:(id:' + buildType + ')?guest=1'; +function teamcity_badge(url, buildId, advanced, format, data, sendBadge) { + var apiUrl = url + '/app/rest/builds/buildType:(id:' + buildId + ')?guest=1'; var badgeData = getBadgeData('build', data); request(apiUrl, { headers: { 'Accept': 'application/json' } }, function(err, res, buffer) { if (err != null) { @@ -298,9 +294,11 @@ cache(function(data, match, sendBadge) { } try { var data = JSON.parse(buffer); - var status = data.status; - badgeData.text[1] = (status || '').toLowerCase(); - if (status === 'SUCCESS') { + if (advanced) + badgeData.text[1] = (data.statusText || data.status || '').toLowerCase(); + else + badgeData.text[1] = (data.status || '').toLowerCase(); + if (data.status === 'SUCCESS') { badgeData.colorscheme = 'brightgreen'; } else { badgeData.colorscheme = 'red'; @@ -311,6 +309,25 @@ cache(function(data, match, sendBadge) { sendBadge(format, badgeData); } }); +} + +// Old url for CodeBetter TeamCity instance. +camp.route(/^\/teamcity\/codebetter\/(.*)\.(svg|png|gif|jpg)$/, +cache(function(data, match, sendBadge) { + var buildType = match[1]; // eg, `bt428`. + var format = match[2]; + teamcity_badge('http://teamcity.codebetter.com', buildType, false, format, data, sendBadge); +})); + +// Generic TeamCity instance +camp.route(/^\/teamcity\/(http|https)\/(.*)\/(s|e)\/(.*)\.(svg|png|gif|jpg)$/, +cache(function(data, match, sendBadge) { + var scheme = match[1]; + var serverUrl = match[2]; + var advanced = (match[3] == 's'); + var buildType = match[4]; // eg, `bt428`. + var format = match[5]; + teamcity_badge(scheme + '://' + serverUrl, buildType, advanced, format, data, sendBadge); })); // TeamCity CodeBetter code coverage @@ -355,38 +372,6 @@ cache(function(data, match, sendBadge) { }); })); -// Another TeamCity instance -camp.route(/^\/teamcity\/(http|https)\/(.*)\/(.*)\.(svg|png|gif|jpg)$/, -cache(function(data, match, sendBadge) { - var scheme = match[1]; - var serverUrl = match[2]; - var buildType = match[3]; // eg, `bt428`. - var format = match[4]; - var apiUrl = scheme + '://' + serverUrl + '/app/rest/builds/buildType:(id:' + buildType + ')?guest=1'; - var badgeData = getBadgeData('build', data); - request(apiUrl, { headers: { 'Accept': 'application/json' } }, function(err, res, buffer) { - if (err != null) { - badgeData.text[1] = 'inaccessible'; - sendBadge(format, badgeData); - } - try { - var data = JSON.parse(buffer); - var status = data.status; - badgeData.text[1] = (data.statusText || data.status || '').toLowerCase(); - if (status === 'SUCCESS') { - badgeData.colorscheme = 'brightgreen'; - } else { - badgeData.colorscheme = 'red'; - } - sendBadge(format, badgeData); - } catch(e) { - badgeData.text[1] = 'invalid'; - sendBadge(format, badgeData); - } - }); -})); - - // Gittip integration. camp.route(/^\/gittip\/(.*)\.(svg|png|gif|jpg)$/, cache(function(data, match, sendBadge) { diff --git a/try.html b/try.html index ffadc14..0449765 100644 --- a/try.html +++ b/try.html @@ -159,9 +159,13 @@ I made the GitHub Badge Service. http://img.shields.io/teamcity/codebetter/bt428.svg - TeamCity: - - http://img.shields.io/teamcity/http/teamcity.jetbrains.com/bt345.svg + TeamCity (simple build status): + + http://img.shields.io/teamcity/http/teamcity.jetbrains.com/s/bt345.svg + + TeamCity (full build status): + + http://img.shields.io/teamcity/http/teamcity.jetbrains.com/e/bt345.svg AppVeyor: