This commit adds a pull request to gather stats on a count off all open pull requests for all projects.
		
			
				
	
	
		
			82 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
#
 | 
						|
# Rakefile to make management of module easier (I hope :) )
 | 
						|
#
 | 
						|
# I did not do this in puppet b/c it requires the vcsrepo!!
 | 
						|
#
 | 
						|
#
 | 
						|
 | 
						|
begin
 | 
						|
  require 'yaml'
 | 
						|
  require 'puppetlabs_spec_helper/rake_tasks'
 | 
						|
rescue LoadError
 | 
						|
  puts "!!!!!"
 | 
						|
  puts "puppetlabs_spec_helper not found. This may cause some rake tasks to be unavailable."
 | 
						|
  puts "!!!!!"
 | 
						|
end
 | 
						|
 | 
						|
repo_file = 'other_repos.yaml'
 | 
						|
default_modulepath = '/etc/puppet/modules'
 | 
						|
 | 
						|
namespace :modules do
 | 
						|
  desc 'clone all required modules'
 | 
						|
  task :clone do
 | 
						|
    repo_hash = YAML.load_file(File.join(File.dirname(__FILE__), repo_file))
 | 
						|
    repos = (repo_hash['repos'] || {})
 | 
						|
    modulepath = (repo_hash['modulepath'] || default_modulepath)
 | 
						|
    repos_to_clone = (repos['repo_paths'] || {})
 | 
						|
    branches_to_checkout = (repos['checkout_branches'] || {})
 | 
						|
    repos_to_clone.each do |remote, local|
 | 
						|
      # I should check to see if the file is there?
 | 
						|
      outpath = File.join(modulepath, local)
 | 
						|
      output = `git clone #{remote} #{outpath}`
 | 
						|
      puts output
 | 
						|
    end
 | 
						|
    branches_to_checkout.each do |local, branch|
 | 
						|
      Dir.chdir(File.join(modulepath, local)) do
 | 
						|
        output = `git checkout #{branch}`
 | 
						|
      end
 | 
						|
      # Puppet.debug(output)
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  desc 'see if any of the modules are not up-to-date'
 | 
						|
  task 'status' do
 | 
						|
    repo_hash = YAML.load_file(File.join(File.dirname(__FILE__), repo_file))
 | 
						|
    repos = (repo_hash['repos'] || {})
 | 
						|
    modulepath = (repo_hash['modulepath'] || default_modulepath)
 | 
						|
    repos_to_clone = (repos['repo_paths'] || {})
 | 
						|
    branches_to_checkout = (repos['checkout_branches'] || {})
 | 
						|
    repos_to_clone.each do |remote, local|
 | 
						|
      # I should check to see if the file is there?
 | 
						|
      Dir.chdir(File.join(modulepath, local)) do
 | 
						|
        puts "Checking status of #{local}"
 | 
						|
        puts `git status`
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 | 
						|
 | 
						|
namespace :github do
 | 
						|
  desc 'check all dependeny projects and generate a report about open pull requests'
 | 
						|
  task 'pull_request_stats' do
 | 
						|
    require 'net/https'
 | 
						|
    require 'uri'
 | 
						|
    require 'puppet'
 | 
						|
    repo_hash = YAML.load_file(File.join(File.dirname(__FILE__), repo_file))
 | 
						|
    (repo_hash['repos'] || {})['repo_paths'].keys.each do |url|
 | 
						|
      if url =~ /\w+:\/\/github\.com\/(\S+)?\/(\S+)/
 | 
						|
        uri = URI.parse("https://api.github.com/repos/#{$1}/#{$2}/pulls")
 | 
						|
        http = Net::HTTP.new(uri.host, uri.port)
 | 
						|
        http.use_ssl = true
 | 
						|
        http.verify_mode = OpenSSL::SSL::VERIFY_NONE
 | 
						|
        request = Net::HTTP::Get.new(uri.request_uri)
 | 
						|
        response = http.request(request)
 | 
						|
        pull_requests = PSON.parse(response.body).size
 | 
						|
        puts "repo: #{$1}-#{$2}=#{pull_requests}"
 | 
						|
      else
 | 
						|
        puts "repo: #{url} does not seem to be valid"
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |