rosa-build/lib/abf_worker/rpm_worker_observer.rb

62 lines
1.8 KiB
Ruby
Raw Normal View History

2012-11-26 18:00:29 +00:00
module AbfWorker
class RpmWorkerObserver
extend AbfWorker::ObserverHelper
2012-11-26 18:00:29 +00:00
@queue = :rpm_worker_observer
def self.perform(options)
bl = BuildList.find options['id']
status = options['status'].to_i
item = find_or_create_item(bl)
case status
2012-12-06 15:22:27 +00:00
when BUILD_COMPLETED
2012-11-26 18:00:29 +00:00
bl.build_success
item.update_attributes({:status => BuildServer::SUCCESS})
2012-12-06 15:22:27 +00:00
when BUILD_FAILED
2012-11-26 18:00:29 +00:00
bl.build_error
item.update_attributes({:status => BuildServer::BUILD_ERROR})
2012-12-06 15:22:27 +00:00
when BUILD_STARTED
bl.bs_id = bl.id
bl.save!
2012-11-26 18:00:29 +00:00
bl.start_build
2012-12-06 15:22:27 +00:00
when BUILD_CANCELED
bl.build_canceled
item.update_attributes({:status => BuildList::BUILD_CANCELED})
2012-11-26 18:00:29 +00:00
end
2012-12-06 15:22:27 +00:00
if status != BUILD_STARTED
fill_container_data bl, options
end
end
class << self
protected
def find_or_create_item(bl)
bl.items.first || bl.items.create({
:version => bl.commit_hash,
:name => bl.project.name,
:status => BuildServer::BUILD_STARTED,
:level => 0
})
end
def fill_container_data(bl, options)
packages = options['packages'] || []
packages.each do |package|
package = bl.packages.build(package)
package.package_type = package['fullname'] =~ /.*\.src\.rpm$/ ? 'source' : 'binary'
package.project_id = bl.project_id
package.platform_id = bl.save_to_platform_id
package.save!
end
container = (options['results'] || []).
select{ |r| r['file_name'] !~ /.*\.log$/ }.first
sha1 = container ? container['sha1'] : nil
bl.results = options['results']
bl.container_path = "#{APP_CONFIG['file_store_url']}/#{sha1}" if sha1
bl.save!
end
2012-11-26 18:00:29 +00:00
end
end
end