diff --git a/server.js b/server.js index 82637e8..6f54147 100644 --- a/server.js +++ b/server.js @@ -2240,7 +2240,7 @@ mapNugetFeed('myget\\/(.*)', 1, function(match) { }; }); -// Puppet Forge +// Puppet Forge modules camp.route(/^\/puppetforge\/([^\/]+)\/([^\/]+)\/([^\/]+)\.(svg|png|gif|jpg|json)$/, cache(function(data, match, sendBadge, request) { var info = match[1]; // either `v`, `dt`, `e` or `f` @@ -2327,6 +2327,62 @@ cache(function(data, match, sendBadge, request) { }); })); +// Puppet Forge users +camp.route(/^\/puppetforge\/([^\/]+)\/([^\/]+)\.(svg|png|gif|jpg|json)$/, +cache(function(data, match, sendBadge, request) { + var info = match[1]; // either `rc` or `mc` + var user = match[2]; + var format = match[3]; + var options = { + json: true, + uri: 'https://forgeapi.puppetlabs.com/v3/users/'+user + }; + var badgeData = getBadgeData('puppetforge', data); + request(options, function dealWithData(err, res, json) { + if (err != null || (json.length !== undefined && json.length === 0)) { + badgeData.text[1] = 'inaccessible'; + sendBadge(format, badgeData); + return; + } + try { + if (info == 'rc') { + var releases = json['release_count']; + if (releases === 0) { + badgeData.colorscheme = 'red'; + } else if (releases < 10) { + badgeData.colorscheme = 'yellow'; + } else if (releases < 50) { + badgeData.colorscheme = 'yellowgreen'; + } else if (releases < 100) { + badgeData.colorscheme = 'green'; + } else { + badgeData.colorscheme = 'brightgreen'; + } + badgeData.text[1] = metric(releases) + ' releases'; + } else if (info == 'mc') { + var modules = json['module_count']; + if (modules === 0) { + badgeData.colorscheme = 'red'; + } else if (modules < 5) { + badgeData.colorscheme = 'yellow'; + } else if (modules < 10) { + badgeData.colorscheme = 'yellowgreen'; + } else if (modules < 50) { + badgeData.colorscheme = 'green'; + } else { + badgeData.colorscheme = 'brightgreen'; + } + badgeData.text[1] = metric(modules) + ' modules'; + } + sendBadge(format, badgeData); + + } catch(e) { + badgeData.text[1] = 'invalid'; + sendBadge(format, badgeData); + } + }); +})); + // Jenkins build status integration camp.route(/^\/jenkins(-ci)?\/s\/(http(s)?)\/((?:[^\/]+)(?:\/.+?)?)\/([^\/]+)\.(svg|png|gif|jpg|json)$/, cache(function(data, match, sendBadge, request) { diff --git a/try.html b/try.html index 9a22a0b..a64d0c0 100644 --- a/try.html +++ b/try.html @@ -498,6 +498,14 @@ Pixel-perfect   Retina-ready   Fast   Consistent   Hackable https://img.shields.io/puppetforge/f/camptocamp/openssl.svg + Puppet Forge: + + https://img.shields.io/puppetforge/rc/camptocamp.svg + + Puppet Forge: + + https://img.shields.io/puppetforge/mc/camptocamp.svg +

Your Badge