require 'net/http' require 'json' require 'digest/md5' STASH_URI = URI.parse("http://stash") STASH_USER = 'username' STASH_PWD = 'password' PROJECT_API = "/rest/api/1.0/projects/" REPO_API = "/rest/api/1.0/projects/%s/repos" PULL_API = "/rest/api/1.0/projects/%s/repos/%s/pull-requests" SCHEDULER.every '30m', :first_in => 0 do |job| req = Net::HTTP::Get.new(STASH_URI.to_s + PROJECT_API) # Connect to stash, even behind self-signed SSL servers... WARNING: not necessarily secure response = Net::HTTP.start(STASH_URI.host, STASH_URI.port, :use_ssl => STASH_URI.scheme == 'https', :verify_mode => OpenSSL::SSL::VERIFY_NONE) do |https| #Comment out the following if you are using a public stash project req.basic_auth STASH_USER, STASH_PWD https.request(req) end summary = Array.new projects= JSON.parse(response.body)['values'] projects.each do |project| project['key'].downcase! puts "Getting repo list from %s" % project['key'] req = Net::HTTP::Get.new(STASH_URI.to_s + REPO_API % project['key']) # Connect to stash, even behind self-signed SSL servers... WARNING: not necessarily secure response = Net::HTTP.start(STASH_URI.host, STASH_URI.port, :use_ssl => STASH_URI.scheme == 'https', :verify_mode => OpenSSL::SSL::VERIFY_NONE) do |https| #Comment out the following if you are using a public stash project req.basic_auth STASH_USER, STASH_PWD https.request(req) end repos = JSON.parse(response.body)['values'] if repos repos.each do |repo| puts " Getting pull requests for %s:%s" % [project['key'], repo['slug'] ] req = Net::HTTP::Get.new(STASH_URI.to_s + PULL_API % [project['key'], repo['slug']]) response = Net::HTTP.start(STASH_URI.host, STASH_URI.port, :use_ssl => STASH_URI.scheme == 'https', :verify_mode => OpenSSL::SSL::VERIFY_NONE) do |https| req.basic_auth STASH_USER, STASH_PWD https.request(req ) end pulls = JSON.parse(response.body)['values'] if pulls summary << { project: project, name: repo['slug'], pulls: pulls.count } # Do you have lots of pull requests? If so, uncomment this to limit to 8 # pulls = pulls[0..7] # Build a gravatar link to pass to the UI. # NOTE: Stash allows you to specify your own gravatar servers; if you use this # functionality, ensure you change this path too. pulls.each do |pull| pull['reviewers'].each do |reviewer| digest = Digest::MD5.hexdigest( reviewer['user']['emailAddress']).to_s reviewer['user']['gravatar'] = '//secure.gravatar.com/avatar/%s.jpg' % digest end end puts " Sending event for %s " % 'stash-pull-requests-%s-%s' % [ project['key'], repo['slug'] ] send_event('stash-pull-requests-%s-%s' % [ project['key'], repo['slug'] ], { pullRequests: pulls }) end end # pull loop end # repo loop end # project loop puts "Sending summary event for stash-pull-requests" send_event('stash-pull-requests' , { summary: summary}) end