class PullRequestBuilder::ObsPullRequestPackage
Constants
- PullRequest
Attributes
logger[RW]
obs_package_name[RW]
obs_project_name[RW]
obs_project_name_prefix[RW]
obs_project_pr_name[RW]
osc[RW]
pull_request[RW]
template_directory[RW]
Public Class Methods
all(logger, obs_project_name_prefix, osc = OSC.new)
click to toggle source
# File lib/pull_request_builder/obs_pull_request_package.rb, line 10 def self.all(logger, obs_project_name_prefix, osc = OSC.new) result = osc.search_project(obs_project_name_prefix) xml = Nokogiri::XML(result) xml.xpath('//project').map do |project| pull_request_number = project.attribute('name').to_s.split('-').last.to_i ObsPullRequestPackage.new(pull_request: PullRequest.new(pull_request_number), logger: logger) end end
Public Instance Methods
==(other)
click to toggle source
# File lib/pull_request_builder/obs_pull_request_package.rb, line 23 def ==(other) pull_request.number == other.pull_request.number end
commit_sha()
click to toggle source
# File lib/pull_request_builder/obs_pull_request_package.rb, line 39 def commit_sha pull_request.head.sha end
create()
click to toggle source
# File lib/pull_request_builder/obs_pull_request_package.rb, line 68 def create if last_commited_sha == commit_sha logger.info('Pull request did not change, skipping ...') return end create_project create_package copy_files end
delete()
click to toggle source
# File lib/pull_request_builder/obs_pull_request_package.rb, line 19 def delete osc.delete_project("source/#{obs_project_name}") end
eql?(other)
click to toggle source
# File lib/pull_request_builder/obs_pull_request_package.rb, line 27 def eql?(other) pull_request.number.eql(other.pull_request.number) end
hash()
click to toggle source
# File lib/pull_request_builder/obs_pull_request_package.rb, line 31 def hash pull_request.number.hash end
last_commited_sha()
click to toggle source
# File lib/pull_request_builder/obs_pull_request_package.rb, line 58 def last_commited_sha # if its a new PR, get_history will fail with a 404 and we have to ignore it result = osc.get_history("#{obs_project_pr_name}/#{obs_package_name}") node = Nokogiri::XML(result).root node.xpath('.//revision/comment').last.content rescue StandardError, Cheetah::ExecutionFailed '' end
merge_sha()
click to toggle source
# File lib/pull_request_builder/obs_pull_request_package.rb, line 43 def merge_sha # github test merge commit pull_request.merge_commit_sha end
pull_request_number()
click to toggle source
# File lib/pull_request_builder/obs_pull_request_package.rb, line 35 def pull_request_number pull_request.number end
url()
click to toggle source
TODO address must be configurable
# File lib/pull_request_builder/obs_pull_request_package.rb, line 54 def url "https://build.opensuse.org/package/show/#{obs_project_pr_name}/#{obs_package_name}" end
Private Instance Methods
copy_files()
click to toggle source
# File lib/pull_request_builder/obs_pull_request_package.rb, line 137 def copy_files Dir.mktmpdir do |dir| osc.checkout(File.join(obs_project_name, obs_package_name), File.join(dir, 'template')) osc.checkout(File.join(obs_project_pr_name, obs_package_name), File.join(dir, obs_project_pr_name)) copy_package_files(dir) osc.add_remove(File.join(dir, obs_project_pr_name)) osc.commit(File.join(dir, obs_project_pr_name), commit_sha) end end
copy_package_files(dir)
click to toggle source
# File lib/pull_request_builder/obs_pull_request_package.rb, line 147 def copy_package_files(dir) Dir.entries("#{dir}/template").reject { |name| name.start_with?('.') }.each do |file| path = File.join(dir, 'template', file) target_path = File.join(dir, obs_project_pr_name, file) if file == '_service' copy_service_file(path, target_path) else FileUtils.cp path, target_path end end end
copy_service_file(path, target_path)
click to toggle source
# File lib/pull_request_builder/obs_pull_request_package.rb, line 159 def copy_service_file(path, target_path) File.open(target_path, 'w') do |f| f.write(service_file(path)) end end
create_package()
click to toggle source
TODO package name should be configurable
# File lib/pull_request_builder/obs_pull_request_package.rb, line 129 def create_package send_meta_file("#{obs_package_name}-meta", operation: :pkg) end
create_project()
click to toggle source
# File lib/pull_request_builder/obs_pull_request_package.rb, line 102 def create_project send_meta_file("#{pull_request_number}-meta", operation: :prj) end
new_package_template()
click to toggle source
# File lib/pull_request_builder/obs_pull_request_package.rb, line 133 def new_package_template PackageTemplate.new(package_name = obs_package_name).to_xml end
osc_meta(tmpfile, operation)
click to toggle source
# File lib/pull_request_builder/obs_pull_request_package.rb, line 91 def osc_meta(tmpfile, operation) case operation when :prj osc.meta_prj(obs_project_pr_name, tmpfile.path) when :pkg osc.meta_pkg(obs_project_pr_name, obs_package_name, tmpfile.path) else raise ArgumentError, "#{operation} not vaild" end end
package_meta()
click to toggle source
# File lib/pull_request_builder/obs_pull_request_package.rb, line 106 def package_meta PackageTemplate.new(obs_package_name, obs_project_pr_name).to_xml end
project_meta()
click to toggle source
# File lib/pull_request_builder/obs_pull_request_package.rb, line 110 def project_meta ProjectMeta.new(obs_project_pr_name, project_title, repositories_to_build).to_xml end
project_title()
click to toggle source
# File lib/pull_request_builder/obs_pull_request_package.rb, line 114 def project_title pull_request.html_url end
repositories_to_build()
click to toggle source
TODO make it configurable
# File lib/pull_request_builder/obs_pull_request_package.rb, line 120 def repositories_to_build [ OpenStruct.new(name: 'SLE_15', path: 'OBS:Server:Unstable', arches: ['x86_64']), OpenStruct.new(name: 'SLE_12_SP4', path: 'OBS:Server:Unstable', arches: ['x86_64']) ] end
send_meta_file(filename, operation: :prj)
click to toggle source
# File lib/pull_request_builder/obs_pull_request_package.rb, line 80 def send_meta_file(filename, operation: :prj) tmp_meta_file = Tempfile.open(filename) begin tmp_meta_file.puts(operation == :prj ? project_meta : package_meta) tmp_meta_file.close osc_meta(tmp_meta_file, operation) ensure tmp_meta_file.unlink end end
service_file(path)
click to toggle source
# File lib/pull_request_builder/obs_pull_request_package.rb, line 165 def service_file(path) content = File.read(path) xml = Nokogiri::XML(content) node = xml.root.at_xpath(".//param[@name='revision']") node.content = merge_sha xml.to_s end