Merge pull request #7453 from bayandin/mirror-use-bintray

dev-cmd/mirror: use Bintray wrapper
This commit is contained in:
Mike McQuaid 2020-04-28 08:59:19 +01:00 committed by GitHub
commit e2bc0fa687
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 22 deletions

View File

@ -34,6 +34,7 @@ class Bintray
def open_api(url, *extra_curl_args, auth: true) def open_api(url, *extra_curl_args, auth: true)
args = extra_curl_args args = extra_curl_args
args += ["--user", "#{@bintray_user}:#{@bintray_key}"] if auth args += ["--user", "#{@bintray_user}:#{@bintray_key}"] if auth
args += ["--output", "/dev/null"] unless Homebrew.args.verbose?
curl(*args, url, curl(*args, url,
show_output: Homebrew.args.verbose?, show_output: Homebrew.args.verbose?,
secrets: @bintray_key) secrets: @bintray_key)
@ -66,7 +67,7 @@ class Bintray
def package_exists?(repo:, package:) def package_exists?(repo:, package:)
url = "#{API_URL}/packages/#{@bintray_org}/#{repo}/#{package}" url = "#{API_URL}/packages/#{@bintray_org}/#{repo}/#{package}"
begin begin
open_api url, "--fail", "--silent", "--output", "/dev/null", auth: false open_api url, "--fail", "--silent", auth: false
rescue ErrorDuringExecution => e rescue ErrorDuringExecution => e
stderr = e.output stderr = e.output
.select { |type,| type == :stderr } .select { |type,| type == :stderr }

View File

@ -1,5 +1,6 @@
# frozen_string_literal: true # frozen_string_literal: true
require "bintray"
require "cli/parser" require "cli/parser"
module Homebrew module Homebrew
@ -12,6 +13,8 @@ module Homebrew
Reupload the stable URL of a formula to Bintray for use as a mirror. Reupload the stable URL of a formula to Bintray for use as a mirror.
EOS EOS
flag "--bintray-org=",
description: "Upload to the specified Bintray organisation (default: homebrew)."
switch :verbose switch :verbose
switch :debug switch :debug
hide_from_man_page! hide_from_man_page!
@ -22,25 +25,16 @@ module Homebrew
def mirror def mirror
mirror_args.parse mirror_args.parse
bintray_user = Homebrew::EnvConfig.bintray_user bintray_org = args.bintray_org || "homebrew"
bintray_key = Homebrew::EnvConfig.bintray_key bintray_repo = "mirror"
raise "Missing HOMEBREW_BINTRAY_USER or HOMEBREW_BINTRAY_KEY variables!" if !bintray_user || !bintray_key
bintray = Bintray.new(org: bintray_org)
args.formulae.each do |f| args.formulae.each do |f|
bintray_package = Utils::Bottles::Bintray.package f.name bintray_package = Utils::Bottles::Bintray.package f.name
bintray_repo_url = "https://api.bintray.com/packages/homebrew/mirror"
package_url = "#{bintray_repo_url}/#{bintray_package}"
unless system curl_executable, "--silent", "--fail", "--output", "/dev/null", package_url unless bintray.package_exists?(repo: bintray_repo, package: bintray_package)
package_blob = <<~JSON bintray.create_package repo: bintray_repo, package: bintray_package
{"name": "#{bintray_package}",
"public_download_numbers": true,
"public_stats": true}
JSON
curl "--silent", "--fail", "--user", "#{bintray_user}:#{bintray_key}",
"--header", "Content-Type: application/json",
"--data", package_blob, bintray_repo_url
puts
end end
downloader = f.downloader downloader = f.downloader
@ -49,14 +43,18 @@ module Homebrew
filename = downloader.basename filename = downloader.basename
destination_url = "https://dl.bintray.com/homebrew/mirror/#{filename}" destination_url = "https://dl.bintray.com/#{bintray_org}/#{bintray_repo}/#{filename}"
ohai "Uploading to #{destination_url}" ohai "Uploading to #{destination_url}"
content_url = bintray.upload(
"https://api.bintray.com/content/homebrew/mirror/#{bintray_package}/#{f.pkg_version}/#{filename}?publish=1" downloader.cached_location,
curl "--silent", "--fail", "--user", "#{bintray_user}:#{bintray_key}", repo: bintray_repo,
"--upload-file", downloader.cached_location, content_url package: bintray_package,
puts version: f.pkg_version,
sha256: f.stable.checksum,
remote_file: filename,
)
bintray.publish(repo: bintray_repo, package: bintray_package, version: f.pkg_version)
ohai "Mirrored #{filename}!" ohai "Mirrored #{filename}!"
end end
end end