diff --git a/server.js b/server.js index 7ed0d2d..bf8f060 100644 --- a/server.js +++ b/server.js @@ -394,6 +394,51 @@ cache(function(data, match, sendBadge, request) { }); })); +// NetflixOSS metadata integration +camp.route(/^\/osslifecycle?\/([^\/]+\/[^\/]+)(?:\/(.+))?\.(svg|png|gif|jpg|json)$/, + cache(function(data, match, sendBadge, request) { + var orgOrUserAndRepo = match[1]; + var branch = match[2]; + var format = match[3]; + var url = 'https://raw.githubusercontent.com/' + orgOrUserAndRepo; + if (branch != null) { + url += "/" + branch + "/OSSMETADATA" + } + else { + url += "/master/OSSMETADATA"; + } + var options = { + method: 'GET', + uri: url + }; + var badgeData = getBadgeData('OSS Lifecycle', data); + request(options, function(err, res, body) { + if (err != null) { + console.error('NetflixOSS error: ' + err.stack); + if (res) { console.error(''+res); } + badgeData.text[1] = 'invalid'; + sendBadge(format, badgeData); + return; + } + try { + var matchStatus = body.match(/osslifecycle\=([a-z]+)/im); + if (matchStatus === null) { + badgeData.text[1] = 'inaccessible'; + sendBadge(format, badgeData); + return; + } else { + badgeData.text[1] = matchStatus[1]; + sendBadge(format, badgeData); + return; + } + } catch(e) { + console.log(e); + badgeData.text[1] = 'inaccessible'; + sendBadge(format, badgeData); + } + }); +})); + // Shippable integration camp.route(/^\/shippable\/([^\/]+)(?:\/(.+))?\.(svg|png|gif|jpg|json)$/, cache(function (data, match, sendBadge, request) { diff --git a/try.html b/try.html index 9fc3709..481ebdc 100644 --- a/try.html +++ b/try.html @@ -913,6 +913,10 @@ Pixel-perfect Retina-ready Fast Consistent Hackable
https://img.shields.io/stackexchange/stackoverflow/t/augeas.svg
https://img.shields.io/osslifecycle/Netflix/osstracker.svg