rosa-build/app/services/abf_worker_service/container.rb

81 lines
2.4 KiB
Ruby

module AbfWorkerService
class Container < Base
attr_accessor :build_list
def initialize(build_list)
@build_list = build_list
end
def create!
cleanup_folder
if filter_build_lists_without_packages(build_list).blank?
build_list.fail_publish_container
return
end
Sidekiq::Client.push(
'queue' => 'publish_worker', # Low priority
'class' => 'AbfWorker::PublishWorker',
'args' => [{
id: build_list.id,
cmd_params: cmd_params,
main_script: 'build.sh',
rollback_script: 'rollback.sh',
platform: {
platform_path: platform_path,
type: distrib_type,
name: build_list.build_for_platform.name,
arch: build_list.arch.name
},
repository: {id: build_list.save_to_repository_id},
time_living: 9600, # 160 min
packages: packages,
old_packages: packages_structure,
build_list_ids: [build_list.id],
projects_for_cleanup: [],
extra: {create_container: true}
}]
)
end
def destroy!
system "rm -rf #{platform_path}"
end
protected
def cmd_params
{
'RELEASED' => false,
'REPOSITORY_NAME' => build_list.save_to_repository.name,
'TYPE' => distrib_type,
'IS_CONTAINER' => true,
'ID' => build_list.id,
'SAVE_TO_PLATFORM' => build_list.save_to_platform.name,
'BUILD_FOR_PLATFORM' => build_list.build_for_platform.name
}.map{ |k, v| "#{k}=#{v}" }.join(' ')
end
def cleanup_folder
system "rm -rf #{platform_path} && mkdir -p #{platform_path}"
end
def platform_path
@platform_path ||= "#{build_list.save_to_platform.path}/container/#{build_list.id}"
end
def distrib_type
@distrib_type ||= build_list.build_for_platform.distrib_type
end
def packages
structure = packages_structure
structure[:sources] = build_list.packages.by_package_type('source').pluck(:sha1).compact
structure[:binaries][build_list.arch.name.to_sym] = build_list.packages.by_package_type('binary').pluck(:sha1).compact
structure
end
end
end