From 6f616fc58d2c7aa6ea25292f45268839157bf9c7 Mon Sep 17 00:00:00 2001 From: TBS Date: Sun, 13 Jul 2014 02:30:31 +0000 Subject: [PATCH 1/4] add jenkins integration --- server.js | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/server.js b/server.js index 010f6fa..44e8d7d 100644 --- a/server.js +++ b/server.js @@ -1267,6 +1267,81 @@ cache(function(data, match, sendBadge) { }); })); +// Jenkins build status integration +camp.route(/^\/jenkins(-ci)?\/s\/(http(s)?)\/([^\/]+)(\/.+?)?\/([^\/]+)\.(svg|png|gif|jpg)$/, +cache(function(data, match, sendBadge) { + var scheme = match[2]; // eg, espadrine/sc + var host = match[4]; + var path = match[5]; + var job = match[6]; + var format = match[7]; + var options = { + json: true, + uri: scheme + '://' + host + '/' + (path || '') + '/job/' + job + '/lastBuild/api/json?tree=result' + }; + + var badgeData = getBadgeData('build', data); + request(options, function(err, res, json) { + if (err != null) { + badgeData.text[1] = 'inaccessible'; + sendBadge(format, badgeData); + return; + } + + console.log(json); + badgeData.text[1] = 'unbuilt'; + + if (json.result === 'SUCCESS') { + badgeData.colorscheme = 'brightgreen'; + badgeData.text[1] = 'passing'; + } else if (json.result === 'FAILURE') { + badgeData.colorscheme = 'red'; + badgeData.text[1] = 'failing'; + } else if (json.result === 'UNSTABLE') { + badgeData.colorscheme = 'yellow'; + badgeData.text[1] = 'unstable'; + } + sendBadge(format, badgeData); + }); +})); +// Jenkins tests integration +camp.route(/^\/jenkins(-ci)?\/t\/(http(s)?)\/([^\/]+)(\/.+?)?\/([^\/]+)\.(svg|png|gif|jpg)$/, +cache(function(data, match, sendBadge) { + var scheme = match[2]; // eg, espadrine/sc + var host = match[4]; + var path = match[5]; + var job = match[6]; + var format = match[7]; + var options = { + json: true, + uri: scheme + '://' + host + '/' + (path || '') + '/job/' + job + '/lastBuild/api/json?tree=actions[failCount,skipCount,totalCount]' + }; + + var badgeData = getBadgeData('tests', data); + request(options, function(err, res, json) { + if (err !== null) { + badgeData.text[1] = 'inaccessible'; + sendBadge(format, badgeData); + return; + } + var testsObject = json.actions.filter(function (obj) { + return obj.hasOwnProperty('failCount'); + })[0]; + + var successfulTests = testsObject.totalCount - (testsObject.failCount + testsObject.skipCount); + var percent = successfulTests / testsObject.totalCount; + badgeData.text[1] = successfulTests + ' / ' + testsObject.totalCount; + if (percent === 1) { + badgeData.colorscheme = 'brightgreen'; + } else if (percent === 0) { + badgeData.colorscheme = 'red'; + } else { + badgeData.colorscheme = 'yellow'; + } + sendBadge(format, badgeData); + }); +})); + // Any badge. camp.route(/^\/(:|badge\/)(([^-]|--)+)-(([^-]|--)+)-(([^-]|--)+)\.(svg|png|gif|jpg)$/, function(data, match, end, ask) { From ab8ec9a5857ed442d5188658ca42fb23907c1fd3 Mon Sep 17 00:00:00 2001 From: TBS Date: Sun, 13 Jul 2014 03:04:50 +0000 Subject: [PATCH 2/4] fix test implementation --- server.js | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/server.js b/server.js index 44e8d7d..f78fc89 100644 --- a/server.js +++ b/server.js @@ -1270,14 +1270,14 @@ cache(function(data, match, sendBadge) { // Jenkins build status integration camp.route(/^\/jenkins(-ci)?\/s\/(http(s)?)\/([^\/]+)(\/.+?)?\/([^\/]+)\.(svg|png|gif|jpg)$/, cache(function(data, match, sendBadge) { - var scheme = match[2]; // eg, espadrine/sc + var scheme = match[2]; var host = match[4]; var path = match[5]; var job = match[6]; var format = match[7]; var options = { json: true, - uri: scheme + '://' + host + '/' + (path || '') + '/job/' + job + '/lastBuild/api/json?tree=result' + uri: scheme + '://' + host + '/' + (path || '') + '/job/' + job + '/api/json?tree=color' }; var badgeData = getBadgeData('build', data); @@ -1289,25 +1289,28 @@ cache(function(data, match, sendBadge) { } console.log(json); - badgeData.text[1] = 'unbuilt'; + badgeData.text[1] = 'building'; - if (json.result === 'SUCCESS') { + if (json.color === 'blue') { badgeData.colorscheme = 'brightgreen'; badgeData.text[1] = 'passing'; - } else if (json.result === 'FAILURE') { + } else if (json.color === 'red') { badgeData.colorscheme = 'red'; badgeData.text[1] = 'failing'; - } else if (json.result === 'UNSTABLE') { + } else if (json.color === 'yellow') { badgeData.colorscheme = 'yellow'; badgeData.text[1] = 'unstable'; - } + } else if (json.color === 'grey' || json.color === 'disabled' || json.color === 'aborted' || json.color === 'notbuilt') { + badgeData.colorscheme = 'lightgrey'; + badgeData.text[1] = 'not built'; + } sendBadge(format, badgeData); }); })); // Jenkins tests integration camp.route(/^\/jenkins(-ci)?\/t\/(http(s)?)\/([^\/]+)(\/.+?)?\/([^\/]+)\.(svg|png|gif|jpg)$/, cache(function(data, match, sendBadge) { - var scheme = match[2]; // eg, espadrine/sc + var scheme = match[2]; var host = match[4]; var path = match[5]; var job = match[6]; @@ -1327,7 +1330,11 @@ cache(function(data, match, sendBadge) { var testsObject = json.actions.filter(function (obj) { return obj.hasOwnProperty('failCount'); })[0]; - + if (testsObject === undefined) { + badgeData.text[1] = 'inaccessible'; + sendBadge(format, badgeData); + return; + } var successfulTests = testsObject.totalCount - (testsObject.failCount + testsObject.skipCount); var percent = successfulTests / testsObject.totalCount; badgeData.text[1] = successfulTests + ' / ' + testsObject.totalCount; From 11643dbf7e6dfccb6ef31d789bdf9ed653232ea8 Mon Sep 17 00:00:00 2001 From: TBS Date: Sun, 13 Jul 2014 03:37:36 +0000 Subject: [PATCH 3/4] add documentation --- index.html | 8 ++++++++ try.html | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/index.html b/index.html index 4da525d..887960e 100644 --- a/index.html +++ b/index.html @@ -164,6 +164,14 @@ I made the GitHub Badge Service. Scrutinizer Coverage: http://img.shields.io/scrutinizer/coverage/g/filp/whoops.svg + Jenkins: + + http://img.shields.io/jenkins/s/https/jenkins.qa.ubuntu.com/precise-desktop-amd64_default.svg + + Jenkins tests: + + http://img.shields.io/jenkins/t/https/jenkins.qa.ubuntu.com/precise-desktop-amd64_default.svg +

Downloads

diff --git a/try.html b/try.html index 58994c8..4f0c9bc 100644 --- a/try.html +++ b/try.html @@ -164,6 +164,14 @@ I made the GitHub Badge Service. + + + + + + + +
Scrutinizer Coverage: http://img.shields.io/scrutinizer/coverage/g/filp/whoops.svg
Jenkins: http://img.shields.io/jenkins/s/https/jenkins.qa.ubuntu.com/precise-desktop-amd64_default.svg
Jenkins tests: http://img.shields.io/jenkins/t/https/jenkins.qa.ubuntu.com/precise-desktop-amd64_default.svg

Downloads

From 0fbc191679c89ff572898e3112a43f85e142b270 Mon Sep 17 00:00:00 2001 From: TBS Date: Sun, 13 Jul 2014 14:00:44 +0000 Subject: [PATCH 4/4] merge host and path into one match --- server.js | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/server.js b/server.js index f78fc89..ef6d0c3 100644 --- a/server.js +++ b/server.js @@ -1268,21 +1268,20 @@ cache(function(data, match, sendBadge) { })); // Jenkins build status integration -camp.route(/^\/jenkins(-ci)?\/s\/(http(s)?)\/([^\/]+)(\/.+?)?\/([^\/]+)\.(svg|png|gif|jpg)$/, +camp.route(/^\/jenkins(-ci)?\/s\/(http(s)?)\/((?:[^\/]+)(?:\/.+?)?)\/([^\/]+)\.(svg|png|gif|jpg)$/, cache(function(data, match, sendBadge) { var scheme = match[2]; var host = match[4]; - var path = match[5]; - var job = match[6]; - var format = match[7]; + var job = match[5]; + var format = match[6]; var options = { json: true, - uri: scheme + '://' + host + '/' + (path || '') + '/job/' + job + '/api/json?tree=color' + uri: scheme + '://' + host + '/job/' + job + '/api/json?tree=color' }; var badgeData = getBadgeData('build', data); request(options, function(err, res, json) { - if (err != null) { + if (err !== null) { badgeData.text[1] = 'inaccessible'; sendBadge(format, badgeData); return; @@ -1308,16 +1307,15 @@ cache(function(data, match, sendBadge) { }); })); // Jenkins tests integration -camp.route(/^\/jenkins(-ci)?\/t\/(http(s)?)\/([^\/]+)(\/.+?)?\/([^\/]+)\.(svg|png|gif|jpg)$/, +camp.route(/^\/jenkins(-ci)?\/t\/(http(s)?)\/((?:[^\/]+)(?:\/.+?)?)\/([^\/]+)\.(svg|png|gif|jpg)$/, cache(function(data, match, sendBadge) { var scheme = match[2]; var host = match[4]; - var path = match[5]; - var job = match[6]; - var format = match[7]; + var job = match[5]; + var format = match[6]; var options = { json: true, - uri: scheme + '://' + host + '/' + (path || '') + '/job/' + job + '/lastBuild/api/json?tree=actions[failCount,skipCount,totalCount]' + uri: scheme + '://' + host + '/job/' + job + '/lastBuild/api/json?tree=actions[failCount,skipCount,totalCount]' }; var badgeData = getBadgeData('tests', data);