in dev/release/binary-task.rb [2030:2190]
def define_yum_rc_tasks
namespace :yum do
namespace :rc do
base_dir = "#{yum_rc_repositories_dir}/base"
incoming_dir = "#{yum_rc_repositories_dir}/incoming"
upload_dir = "#{yum_rc_repositories_dir}/upload"
desc "Copy RPM packages"
task :copy do
yum_targets.each do |distribution, distribution_version|
progress_label = "Copying: #{distribution} #{distribution_version}"
progress_reporter = ProgressReporter.new(progress_label)
destination_prefix = [
incoming_dir,
distribution,
distribution_version,
].join("/")
rm_rf(destination_prefix, verbose: verbose?)
source_dir_prefix =
"#{artifacts_dir}/#{distribution}-#{distribution_version}"
Dir.glob("#{source_dir_prefix}*/*.rpm") do |path|
base_name = File.basename(path)
type = base_name.split(".")[-2]
destination_paths = []
case type
when "src"
destination_paths << [
destination_prefix,
"Source",
"SPackages",
base_name,
].join("/")
when "noarch"
yum_architectures.each do |architecture|
destination_paths << [
destination_prefix,
architecture,
"Packages",
base_name,
].join("/")
end
else
destination_paths << [
destination_prefix,
type,
"Packages",
base_name,
].join("/")
end
destination_paths.each do |destination_path|
copy_artifact(path,
destination_path,
progress_reporter)
end
case base_name
when /\A(apache-arrow-release)-.*\.noarch\.rpm\z/
package_name = $1
latest_release_package_path = [
destination_prefix,
"#{package_name}-latest.rpm"
].join("/")
copy_artifact(path,
latest_release_package_path,
progress_reporter)
end
end
progress_reporter.finish
end
end
desc "Download repodata for RC Yum repositories"
task :download do
yum_distributions.each do |distribution|
distribution_dir = "#{base_dir}/#{distribution}"
download_distribution(:artifactory,
distribution,
distribution_dir,
:base,
pattern: /\/repodata\//)
end
end
desc "Sign RPM packages"
task :sign do
rpm_sign(incoming_dir)
yum_targets.each do |distribution, distribution_version|
source_dir = [
incoming_dir,
distribution,
distribution_version,
].join("/")
sign_dir("#{distribution}-#{distribution_version}",
source_dir)
end
end
desc "Update RC Yum repositories"
task :update do
yum_update(base_dir, incoming_dir)
yum_targets.each do |distribution, distribution_version|
target_dir = [
incoming_dir,
distribution,
distribution_version,
].join("/")
target_dir = Pathname(target_dir)
next unless target_dir.directory?
target_dir.glob("*") do |arch_dir|
next unless arch_dir.directory?
sign_label =
"#{distribution}-#{distribution_version} #{arch_dir.basename}"
sign_dir(sign_label,
arch_dir.to_s)
end
end
end
desc "Upload RC Yum repositories"
task :upload => yum_rc_repositories_dir do
yum_distributions.each do |distribution|
incoming_target_dir = "#{incoming_dir}/#{distribution}"
upload_target_dir = "#{upload_dir}/#{distribution}"
rm_rf(upload_target_dir, verbose: verbose?)
mkdir_p(upload_target_dir, verbose: verbose?)
cp_r(Dir.glob("#{incoming_target_dir}/*"),
upload_target_dir.to_s,
preserve: true,
verbose: verbose?)
write_uploaded_files(upload_target_dir)
uploader = ArtifactoryUploader.new(api_key: artifactory_api_key,
distribution: distribution,
rc: rc,
source: upload_target_dir,
staging: staging?,
sync: false,
sync_pattern: /\/repodata\//)
uploader.upload
end
end
end
desc "Release RC Yum packages"
yum_rc_tasks = [
"yum:rc:copy",
"yum:rc:download",
"yum:rc:sign",
"yum:rc:update",
"yum:rc:upload",
]
yum_rc_tasks.unshift("yum:staging:prepare") if staging?
task :rc => yum_rc_tasks
end
end