Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
KMSCAKKSCFKA AKFACAMADCAS
brew
Commits
6b067167
Commit
6b067167
authored
Nov 21, 2020
by
Jonathan Chang
Browse files
bintray: add type signatures
parent
d1295ae4
Changes
1
Hide whitespace changes
Inline
Side-by-side
Library/Homebrew/bintray.rb
View file @
6b067167
...
...
@@ -11,6 +11,7 @@ class Bintray
extend
T
::
Sig
include
Context
include
Utils
::
Curl
API_URL
=
"https://api.bintray.com"
...
...
@@ -22,6 +23,7 @@ class Bintray
"#<Bintray: org=
#{
@bintray_org
}
>"
end
sig
{
params
(
org:
T
.
nilable
(
String
)).
void
}
def
initialize
(
org:
"homebrew"
)
@bintray_org
=
org
...
...
@@ -30,9 +32,7 @@ class Bintray
ENV
[
"HOMEBREW_FORCE_HOMEBREW_ON_LINUX"
]
=
"1"
if
@bintray_org
==
"homebrew"
&&
!
OS
.
mac?
end
def
open_api
(
url
,
*
extra_curl_args
,
auth:
true
)
args
=
extra_curl_args
def
open_api
(
url
,
*
args
,
auth:
true
)
if
auth
raise
UsageError
,
"HOMEBREW_BINTRAY_USER is unset."
unless
(
user
=
Homebrew
::
EnvConfig
.
bintray_user
)
raise
UsageError
,
"HOMEBREW_BINTRAY_KEY is unset."
unless
(
key
=
Homebrew
::
EnvConfig
.
bintray_key
)
...
...
@@ -40,11 +40,18 @@ class Bintray
args
+=
[
"--user"
,
"
#{
user
}
:
#{
key
}
"
]
end
curl
(
*
args
,
url
,
print_stdout:
false
,
secrets:
key
)
curl
(
*
args
,
url
,
print_stdout:
false
,
secrets:
key
)
end
sig
do
params
(
local_file:
String
,
repo:
String
,
package:
String
,
version:
String
,
remote_file:
String
,
sha256:
T
.
nilable
(
String
),
warn_on_error:
T
.
nilable
(
T
::
Boolean
)).
void
end
def
upload
(
local_file
,
repo
:,
package
:,
version
:,
remote_file
:,
sha256:
nil
,
warn_on_error:
false
)
unless
File
.
exist?
local_file
msg
=
"
#{
local_file
}
for upload doesn't exist!"
...
...
@@ -59,24 +66,30 @@ class Bintray
args
=
[
"--upload-file"
,
local_file
]
args
+=
[
"--header"
,
"X-Checksum-Sha2:
#{
sha256
}
"
]
unless
sha256
.
blank?
args
<<
"--fail"
unless
warn_on_error
result
=
open_api
(
url
,
*
args
)
result
=
T
.
unsafe
(
self
).
open_api
(
url
,
*
args
)
json
=
JSON
.
parse
(
result
.
stdout
)
if
json
[
"message"
]
!=
"success"
msg
=
"Bottle upload failed:
#{
json
[
"message"
]
}
"
raise
msg
unless
warn_on_error
return
if
json
[
"message"
]
==
"success"
opoo
msg
end
msg
=
"Bottle upload failed:
#{
json
[
"message"
]
}
"
raise
msg
unless
warn_on_error
result
opoo
msg
end
sig
do
params
(
repo:
String
,
package:
String
,
version:
String
,
file_count:
T
.
nilable
(
Integer
),
warn_on_error:
T
.
nilable
(
T
::
Boolean
)).
void
end
def
publish
(
repo
:,
package
:,
version
:,
file_count
:,
warn_on_error:
false
)
url
=
"
#{
API_URL
}
/content/
#{
@bintray_org
}
/
#{
repo
}
/
#{
package
}
/
#{
version
}
/publish"
upload_args
=
%w[--request POST]
upload_args
<<
"--fail"
unless
warn_on_error
result
=
open_api
(
url
,
*
upload_args
)
upload_args
+=
[
"--fail"
]
unless
warn_on_error
result
=
T
.
unsafe
(
self
).
open_api
(
url
,
*
upload_args
)
json
=
JSON
.
parse
(
result
.
stdout
)
if
file_count
.
present?
&&
json
[
"files"
]
!=
file_count
message
=
"Bottle publish failed: expected
#{
file_count
}
bottles, but published
#{
json
[
"files"
]
}
instead."
...
...
@@ -86,19 +99,26 @@ class Bintray
end
odebug
"Published
#{
json
[
"files"
]
}
bottles"
result
end
sig
{
params
(
org:
T
.
nilable
(
String
)).
returns
(
T
::
Boolean
)
}
def
official_org?
(
org:
@bintray_org
)
%w[homebrew linuxbrew]
.
include?
org
end
sig
{
params
(
url:
String
).
returns
(
T
::
Boolean
)
}
def
stable_mirrored?
(
url
)
headers
,
=
curl_output
(
"--connect-timeout"
,
"15"
,
"--location"
,
"--head"
,
url
)
status_code
=
headers
.
scan
(
%r{^HTTP/.* (
\d
+)}
).
last
.
first
status_code
.
start_with?
(
"2"
)
end
sig
do
params
(
formula:
Formula
,
repo:
String
,
publish_package:
T
::
Boolean
,
warn_on_error:
T
::
Boolean
).
returns
(
String
)
end
def
mirror_formula
(
formula
,
repo:
"mirror"
,
publish_package:
false
,
warn_on_error:
false
)
package
=
Utils
::
Bottles
::
Bintray
.
package
formula
.
name
...
...
@@ -129,18 +149,19 @@ class Bintray
destination_url
end
def
create_package
(
repo
:,
package
:,
**
extra_data_args
)
sig
{
params
(
repo:
String
,
package:
String
).
void
}
def
create_package
(
repo
:,
package
:)
url
=
"
#{
API_URL
}
/packages/
#{
@bintray_org
}
/
#{
repo
}
"
data
=
{
name:
package
,
public_download_numbers:
true
}
data
[
:public_stats
]
=
official_org?
data
.
merge!
extra_data_args
open_api
url
,
"--header"
,
"Content-Type: application/json"
,
"--request"
,
"POST"
,
"--data"
,
data
.
to_json
open_api
(
url
,
"--header"
,
"Content-Type: application/json"
,
"--request"
,
"POST"
,
"--data"
,
data
.
to_json
)
end
sig
{
params
(
repo:
String
,
package:
String
).
returns
(
T
::
Boolean
)
}
def
package_exists?
(
repo
:,
package
:)
url
=
"
#{
API_URL
}
/packages/
#{
@bintray_org
}
/
#{
repo
}
/
#{
package
}
"
begin
open_api
url
,
"--fail"
,
"--silent"
,
"--output"
,
"/dev/null"
,
auth:
false
open_api
(
url
,
"--fail"
,
"--silent"
,
"--output"
,
"/dev/null"
,
auth:
false
)
rescue
ErrorDuringExecution
=>
e
stderr
=
e
.
output
.
select
{
|
type
,
|
type
==
:stderr
}
...
...
@@ -156,8 +177,8 @@ class Bintray
# Gets the SHA-256 checksum of the specified remote file.
#
# @return the empty string if the file
exists but
doesn't have a checksum
.
# @return [nil] if the file doesn't exist.
# @return the
checksum, the
empty string
(
if the file doesn't have a checksum
), nil (if the file doesn't exist)
sig
{
params
(
repo:
String
,
remote_file:
String
).
returns
(
T
.
nilable
(
String
))
}
def
remote_checksum
(
repo
:,
remote_file
:)
url
=
"https://dl.bintray.com/
#{
@bintray_org
}
/
#{
repo
}
/
#{
remote_file
}
"
result
=
curl_output
"--fail"
,
"--silent"
,
"--head"
,
url
...
...
@@ -170,6 +191,7 @@ class Bintray
end
end
sig
{
params
(
bintray_repo:
String
,
bintray_package:
String
,
filename:
String
).
returns
(
String
)
}
def
file_delete_instructions
(
bintray_repo
,
bintray_package
,
filename
)
<<~
EOS
Remove this file manually in your web browser:
...
...
@@ -180,6 +202,11 @@ class Bintray
EOS
end
sig
do
params
(
bottles_hash:
T
::
Hash
[
String
,
T
.
untyped
],
publish_package:
T
::
Boolean
,
warn_on_error:
T
.
nilable
(
T
::
Boolean
)).
void
end
def
upload_bottles
(
bottles_hash
,
publish_package:
false
,
warn_on_error:
false
)
formula_packaged
=
{}
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment