in dev/release/binary-task.rb [1632:1785]
def define_apt_rc_tasks
namespace :apt do
namespace :rc do
base_dir = "#{apt_rc_repositories_dir}/base"
incoming_dir = "#{apt_rc_repositories_dir}/incoming"
merged_dir = "#{apt_rc_repositories_dir}/merged"
upload_dir = "#{apt_rc_repositories_dir}/upload"
desc "Copy .deb packages"
task :copy do
apt_targets.each do |distribution, code_name, component|
progress_label = "Copying: #{distribution} #{code_name}"
progress_reporter = ProgressReporter.new(progress_label)
distribution_dir = "#{incoming_dir}/#{distribution}"
pool_dir = "#{distribution_dir}/pool/#{code_name}"
rm_rf(pool_dir, verbose: verbose?)
mkdir_p(pool_dir, verbose: verbose?)
source_dir_prefix = "#{artifacts_dir}/#{distribution}-#{code_name}"
Dir.glob("#{source_dir_prefix}*/*") do |path|
base_name = File.basename(path)
package_name = ENV["DEB_PACKAGE_NAME"]
if package_name.nil? or package_name.empty?
if base_name.start_with?("apache-arrow-apt-source")
package_name = "apache-arrow-apt-source"
else
package_name = "apache-arrow"
end
end
destination_path = [
pool_dir,
component,
package_name[0],
package_name,
base_name,
].join("/")
copy_artifact(path,
destination_path,
progress_reporter)
case base_name
when /\A[^_]+-apt-source_.*\.deb\z/
latest_apt_source_package_path = [
distribution_dir,
"#{package_name}-latest-#{code_name}.deb"
].join("/")
copy_artifact(path,
latest_apt_source_package_path,
progress_reporter)
end
end
progress_reporter.finish
end
end
desc "Download dists/ for RC APT repositories"
task :download do
apt_targets.each do |distribution, code_name, component|
not_checksum_pattern = /.+(?<!\.asc|\.sha512)\z/
base_distribution_dir =
"#{base_dir}/#{distribution}/dists/#{code_name}"
pattern = not_checksum_pattern
download_distribution(:artifactory,
distribution,
base_distribution_dir,
:base,
pattern: pattern,
prefix: "dists/#{code_name}")
end
end
desc "Sign .deb packages"
task :sign do
apt_distributions.each do |distribution|
distribution_dir = "#{incoming_dir}/#{distribution}"
Dir.glob("#{distribution_dir}/**/*.dsc") do |path|
begin
sh({"LANG" => "C"},
"gpg",
"--verify",
path,
out: IO::NULL,
err: IO::NULL,
verbose: false)
rescue
sh("debsign",
"--no-re-sign",
"-k#{gpg_key_id}",
path,
out: default_output,
verbose: verbose?)
end
end
sign_dir(distribution, distribution_dir)
end
end
desc "Update RC APT repositories"
task :update do
apt_update(base_dir, incoming_dir, merged_dir)
apt_targets.each do |distribution, code_name, component|
dists_dir = "#{merged_dir}/#{distribution}/dists/#{code_name}"
next unless File.exist?(dists_dir)
sign_dir("#{distribution} #{code_name}",
dists_dir)
end
end
desc "Upload .deb packages and RC APT repositories"
task :upload do
apt_distributions.each do |distribution|
upload_distribution_dir = "#{upload_dir}/#{distribution}"
incoming_distribution_dir = "#{incoming_dir}/#{distribution}"
merged_dists_dir = "#{merged_dir}/#{distribution}/dists"
rm_rf(upload_distribution_dir, verbose: verbose?)
mkdir_p(upload_distribution_dir, verbose: verbose?)
Dir.glob("#{incoming_distribution_dir}/*") do |path|
next if File.basename(path) == "dists"
cp_r(path,
upload_distribution_dir,
preserve: true,
verbose: verbose?)
end
cp_r(merged_dists_dir,
upload_distribution_dir,
preserve: true,
verbose: verbose?)
write_uploaded_files(upload_distribution_dir)
uploader = ArtifactoryUploader.new(api_key: artifactory_api_key,
distribution: distribution,
rc: rc,
source: upload_distribution_dir,
staging: staging?)
uploader.upload
end
end
end
desc "Release RC APT repositories"
apt_rc_tasks = [
"apt:rc:copy",
"apt:rc:download",
"apt:rc:sign",
"apt:rc:update",
"apt:rc:upload",
]
apt_rc_tasks.unshift("apt:staging:prepare") if staging?
task :rc => apt_rc_tasks
end
end