class Bellows::Tasks
Public Instance Methods
comment(project=nil, options=(options or {}))
click to toggle source
# File lib/bellows/tasks.rb, line 126 def comment(project=nil, options=(options or {})) projects = Util.projects(project) test = options[:test] cache_file = options[:cache_file] jobs = Bellows::SmokeStack.jobs configs=Util.load_configs if cache_file.nil? or cache_file.empty? puts "ERROR: cache_file is required." exit 1 end cached_hashes = Set.new if File.exists?(cache_file) then IO.read(cache_file).each_line do |line| cached_hashes << line.chomp end end File.open(cache_file, 'a') do |file| projects.each do |project| Bellows::Gerrit.reviews(project) do |review| revision = review['currentPatchSet']['revision'][0,7] desc = review['owner']['name'] + ": " +review['subject'] if not cached_hashes.include? revision refspec = review['currentPatchSet']['ref'] patchset_num = review['currentPatchSet']['number'] jobs_for_rev = Bellows::SmokeStack.jobs_with_hash(revision, jobs) if jobs_for_rev.count > 0 then comment_configs = Bellows::SmokeStack.comment_configs(project) job_datas = [] comment_configs.each do |comment_config| job_data=Bellows::SmokeStack.job_data_for_comments(jobs_for_rev, comment_config) job_datas << [comment_config, job_data] end if Bellows::SmokeStack.complete?(job_datas) then puts "Commenting ... " + desc if not options[:quiet] message = "SmokeStack Results (patch set #{patchset_num}):\n" verify_vote = 1 job_datas.each do |arr| comment_config = arr[0] job_data = arr[1] status = 'UNKNOWN' if job_data['status'] == 'Success' then status = 'SUCCESS' elsif ['Failed', 'BuildFail', 'TestFail'].include?(job_data['status']) then status = 'FAILED' verify_vote = -1 end message += "- #{comment_config['description']} #{configs['smokestack_url']}/?go=/jobs/#{job_data['id']} : #{status} #{job_data['msg']}\n" end puts message if not options[:quiet] out = Bellows::Gerrit.comment(review['currentPatchSet']['revision'], message, verify_vote) if not test puts out if not options[:quiet] and not test file.write revision + "\n" if not test end end end end # reviews end # projects end # file end
fire(project=nil, options=(options or {}))
click to toggle source
# File lib/bellows/tasks.rb, line 80 def fire(project=nil, options=(options or {})) projects = Util.projects(project) test = options[:test] limit = options[:limit] || 5 jobs = Set.new Bellows::SmokeStack.jobs.each do |job| projects.each do |project| data = job.values[0] if data revision = data[Bellows::SmokeStack::PROJ_REVISIONS[project]] if revision and not revision.empty? jobs.add(revision[0,7]) end end end end smoke_tests = Bellows::SmokeStack.smoke_tests(projects) count=0 projects.each do |project| Bellows::Gerrit.reviews(project) do |review| revision = review['currentPatchSet']['revision'][0,7] desc = review['owner']['name'] + ": " +review['subject'] if not jobs.include? revision puts "Running ... " + desc if not options[:quiet] refspec = review['currentPatchSet']['ref'] review_id = Bellows::Util.short_spec(refspec) smoke_test = smoke_tests[review_id] if smoke_test then count += 1 Bellows::HTTP.post("/smoke_tests/#{smoke_test['id']}/run_jobs", {}) if not test else puts "WARNING: no smoke test exists for: #{refspec}" if not options[:quiet] end if count >= limit.to_i then break end end end # reviews end # project end
purge(project=nil, options=(options or {}))
click to toggle source
# File lib/bellows/tasks.rb, line 50 def purge(project=nil, options=(options or {})) projects = Util.projects(project) test = options[:test] smoke_tests = Bellows::SmokeStack.smoke_tests(projects) projects.each do |project| reviews = Bellows::Gerrit.reviews(project, "merged") reviews += Bellows::Gerrit.reviews(project, "abandoned") reviews.each do |review| refspec = review['currentPatchSet']['ref'] review_id = Bellows::Util.short_spec(refspec) smoke_test = smoke_tests[review_id] desc = "" if review['owner']['name'] then desc = review['owner']['name'] end if review['subject'] then desc += ": " +review['subject'] end if smoke_test puts "Deleting... " + desc if not options[:quiet] Bellows::HTTP.delete("/smoke_tests/#{smoke_test['id']}") if not test end end end #projects end
stream(options=(options or {}))
click to toggle source
# File lib/bellows/tasks.rb, line 200 def stream(options=(options or {})) test = options[:test] fire = options[:fire] branch = options[:branch] || "master" configs=Util.load_configs projects = Util.projects Bellows::Gerrit.stream_events('patchset-created') do |patchset| project = patchset['change']['project'] patch_branch = patchset['change']['branch'] if projects.include?(project) and patch_branch == branch then owner = patchset['change']['owner']['name'] refspec = patchset['patchSet']['ref'] review_id = Bellows::Util.short_spec(refspec) smoke_tests = Bellows::SmokeStack.smoke_tests(projects) smoke_test = smoke_tests[review_id] desc = owner + ": " +patchset['change']['subject'] test_suite_ids, config_template_ids = Util.test_configs(project) smoke_test_id = nil if not smoke_test # create new smoke test puts "Creating... " + desc smoke_test_id = Bellows::SmokeStack.create_smoke_test(project, desc, refspec, config_template_ids, test_suite_ids) if not test else # update existing smoke test puts "Updating... " + desc if not options[:quiet] puts "refspec: " + refspec if not options[:quiet] Bellows::SmokeStack.update_smoke_test(smoke_test['id'], {Bellows::SmokeStack::OBJECT_NAMES[project] => { "branch" => refspec}, "description" => desc, "status" => "Updated", "test_suite_ids" => test_suite_ids, "config_template_ids" => config_template_ids}) if not test smoke_test_id = smoke_test['id'] end # fire off tests if not test and fire then Bellows::HTTP.post("/smoke_tests/#{smoke_test_id}/run_jobs", {}) end end # reviews end # stream_events end
sync(project=nil, options=(options or {}))
click to toggle source
# File lib/bellows/tasks.rb, line 15 def sync(project=nil, options=(options or {})) projects = Util.projects(project) test = options[:test] all = options[:all] smoke_tests = Bellows::SmokeStack.smoke_tests(projects) configs=Util.load_configs projects.each do |project| Bellows::Gerrit.reviews(project) do |review| owner = review['owner']['name'] refspec = review['currentPatchSet']['ref'] review_id = Bellows::Util.short_spec(refspec) smoke_test = smoke_tests[review_id] desc = owner + ": " +review['subject'] test_suite_ids, config_template_ids = Util.test_configs(project) if not smoke_test puts "Creating... " + desc Bellows::SmokeStack.create_smoke_test(project, desc, refspec, config_template_ids, test_suite_ids) if not test else if smoke_test[Bellows::SmokeStack::OBJECT_NAMES[project]]['branch'] != refspec then puts "Updating... " + desc if not options[:quiet] puts "refspec: " + refspec if not options[:quiet] Bellows::SmokeStack.update_smoke_test(smoke_test['id'], {Bellows::SmokeStack::OBJECT_NAMES[project] => { "branch" => refspec}, "description" => desc, "status" => "Updated", "test_suite_ids" => test_suite_ids, "config_template_ids" => config_template_ids}) if not test elsif all then puts "Updating (all)... " + desc if not options[:quiet] Bellows::SmokeStack.update_smoke_test(smoke_test['id'], {Bellows::SmokeStack::OBJECT_NAMES[project] => { "branch" => refspec}, "description" => desc, "test_suite_ids" => test_suite_ids, "config_template_ids" => config_template_ids}) if not test end end end # reviews end # projects end