package_cloud 0.3.05 → 0.3.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- checksums.yaml.gz.sig +0 -0
- data/README.md +18 -0
- data/lib/package_cloud/cli/distro.rb +1 -1
- data/lib/package_cloud/cli/entry.rb +41 -5
- data/lib/package_cloud/config_file.rb +16 -6
- data/lib/package_cloud/validator.rb +15 -2
- data/lib/package_cloud/version.rb +1 -1
- data/package_cloud.gemspec +4 -4
- data.tar.gz.sig +0 -0
- metadata +41 -22
- metadata.gz.sig +2 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: d491d33c62c74e03dde03e4befd3275b54e7ce3e534745b5fc6499dbb6616aab
|
4
|
+
data.tar.gz: ded90eb0fedeea5494ed879fef5d53b2e9ca80f3f39533e625129bbe38013feb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9d32155e5a921709dce335ac92cc013322c10cbf1e77c9612628094aa0fb6a4f69f1ce07136677ac271c10880d09e9a1ad05fa598b98a8dbed3c036700294195
|
7
|
+
data.tar.gz: 5922fd817b64d24facc5a23139f1a7165f7ba9fa8718a7c127e93f9f44cea9441605441be0ceaa0d6be996af4d4d10318d144b4debd46b3b0a99cb88ba72ea76
|
checksums.yaml.gz.sig
ADDED
Binary file
|
data/README.md
CHANGED
@@ -164,6 +164,24 @@ repository owned by `example-user` as a RubyGem package.
|
|
164
164
|
Note that unlike all other package types, RubyGems do not require any
|
165
165
|
additional specification on upload.
|
166
166
|
|
167
|
+
#### Uploading a arbitrary file
|
168
|
+
|
169
|
+
NOTE:
|
170
|
+
|
171
|
+
Currently supported files:
|
172
|
+
|
173
|
+
* .asc (armored ascii signature file)
|
174
|
+
|
175
|
+
You can upload a Anyfile package found at the path `/tmp/example.asc` by
|
176
|
+
running:
|
177
|
+
|
178
|
+
```
|
179
|
+
package_cloud push example-user/example-repository/anyfile /tmp/example.asc
|
180
|
+
```
|
181
|
+
|
182
|
+
This command will upload `/tmp/example.asc` to the `example-repository`
|
183
|
+
repository owned by `example-user` as an Anyfile package.
|
184
|
+
|
167
185
|
#### Uploading a Python package
|
168
186
|
|
169
187
|
You can upload a Python package found at the path `/tmp/example.whl` by
|
@@ -12,7 +12,7 @@ module PackageCloud
|
|
12
12
|
if distros
|
13
13
|
puts "Listing distributions for #{package_type}:"
|
14
14
|
distros.each do |distro|
|
15
|
-
next if distro["index_name"] == "any"
|
15
|
+
next if (distro["index_name"] == "any" || distro["index_name"] == "rpm_any")
|
16
16
|
puts "\n #{parse_display_name(distro["display_name"])} (#{distro["index_name"]}):\n\n"
|
17
17
|
distro["versions"].each do |ver|
|
18
18
|
puts " #{parse_version_name(ver["display_name"])} (#{ver["index_name"]})"
|
@@ -1,9 +1,11 @@
|
|
1
1
|
module PackageCloud
|
2
2
|
module CLI
|
3
3
|
JAVA_EXTS = ["jar", "aar", "war"]
|
4
|
-
PY_EXTS = ["gz", "bz2", "z", "tar", "egg-info", "
|
5
|
-
|
6
|
-
|
4
|
+
PY_EXTS = ["gz", "bz2", "z", "tar", "egg-info", "whl", "egg"]
|
5
|
+
ANYFILE_EXTS = ["asc"]
|
6
|
+
NODE_EXTS = []
|
7
|
+
AMBIGUOUS_EXTS = ["tgz", "apk", "zip"]
|
8
|
+
SUPPORTED_EXTS = JAVA_EXTS + PY_EXTS + ANYFILE_EXTS + AMBIGUOUS_EXTS + ["gem", "deb", "rpm", "dsc"]
|
7
9
|
|
8
10
|
class Entry < Base
|
9
11
|
desc "repository SUBCMD ...ARGS", "manage repositories"
|
@@ -101,6 +103,9 @@ module PackageCloud
|
|
101
103
|
option "skip-errors", :type => :boolean,
|
102
104
|
:desc => "Skip errors encountered during a package push and continue pushing the next package."
|
103
105
|
|
106
|
+
option "skip-duplicates", :type => :boolean,
|
107
|
+
:desc => "Skip packages which already exist and continue pushing the next package."
|
108
|
+
|
104
109
|
option "coordinates", :type => :string,
|
105
110
|
:desc => "Specify the exact maven coordinates to use for a JAR. Useful for JARs without coordinates, 'fat JARs', and WARs."
|
106
111
|
|
@@ -128,7 +133,8 @@ module PackageCloud
|
|
128
133
|
invalid_packages.each do |p|
|
129
134
|
message << " #{p}\n"
|
130
135
|
end
|
131
|
-
message << "\npackage_cloud only supports node.js, deb, gem, java, python,
|
136
|
+
message << "\npackage_cloud only supports node.js, deb, gem, java, python, "\
|
137
|
+
"rpm, alpine, helm, anyfile (.zip, .asc) packages".color(:red)
|
132
138
|
abort(message)
|
133
139
|
end
|
134
140
|
|
@@ -145,11 +151,15 @@ module PackageCloud
|
|
145
151
|
validator = Validator.new(client)
|
146
152
|
if PY_EXTS.include?(exts.first.downcase)
|
147
153
|
dist_id = validator.distribution_id(repo, package_files, 'py')
|
154
|
+
elsif ANYFILE_EXTS.include?(exts.first.downcase)
|
155
|
+
dist_id = validator.distribution_id(repo, package_files, 'anyfile')
|
148
156
|
elsif NODE_EXTS.include?(exts.first.downcase)
|
149
157
|
dist_id = validator.distribution_id(repo, package_files, 'node')
|
150
158
|
elsif JAVA_EXTS.include?(exts.first.downcase)
|
151
159
|
abort_if_snapshot!(package_files)
|
152
160
|
dist_id = validator.distribution_id(repo, package_files, 'jar')
|
161
|
+
elsif AMBIGUOUS_EXTS.include?(exts.first.downcase)
|
162
|
+
dist_id = validator.distribution_id_from_repo_url(repo, package_files)
|
153
163
|
else
|
154
164
|
dist_id = validator.distribution_id(repo, package_files, exts.first)
|
155
165
|
end
|
@@ -178,6 +188,8 @@ module PackageCloud
|
|
178
188
|
measurement = Benchmark.measure do
|
179
189
|
if options.has_key?("skip-errors")
|
180
190
|
create_package_skip_errors(client_repo, f, dist_id, files, ext, options["coordinates"])
|
191
|
+
elsif options.has_key?("skip-duplicates")
|
192
|
+
create_package_skip_duplicates(client_repo, f, dist_id, files, ext, options["coordinates"])
|
181
193
|
else
|
182
194
|
create_package(client_repo, f, dist_id, files, ext, options["coordinates"])
|
183
195
|
end
|
@@ -201,6 +213,8 @@ module PackageCloud
|
|
201
213
|
'java/maven2'
|
202
214
|
when 'python'
|
203
215
|
'python/1'
|
216
|
+
when 'anyfile'
|
217
|
+
'anyfile/1'
|
204
218
|
when 'node'
|
205
219
|
'node/1'
|
206
220
|
else
|
@@ -237,6 +251,28 @@ module PackageCloud
|
|
237
251
|
end
|
238
252
|
end
|
239
253
|
|
254
|
+
def create_package_skip_duplicates(client_repo, f, dist_id, files, ext, coordinates=nil)
|
255
|
+
begin
|
256
|
+
client_repo.create_package(f, dist_id, files, ext, coordinates=nil)
|
257
|
+
rescue RestClient::UnprocessableEntity => e
|
258
|
+
json = JSON.parse(e.response)
|
259
|
+
if json == { "filename" => ["has already been taken"] }
|
260
|
+
print "skipping, already exists.\n".color(:yellow)
|
261
|
+
else
|
262
|
+
print "error:\n".color(:red)
|
263
|
+
json.each do |k,v|
|
264
|
+
if v.is_a? String
|
265
|
+
puts "\n\t#{k}: #{v}\n"
|
266
|
+
elsif v.is_a? Array
|
267
|
+
puts "\n\t#{k}: #{v.join(", ")}\n"
|
268
|
+
end
|
269
|
+
end
|
270
|
+
puts ""
|
271
|
+
exit(1)
|
272
|
+
end
|
273
|
+
end
|
274
|
+
end
|
275
|
+
|
240
276
|
def create_package(client_repo, f, dist_id, files, ext, coordinates=nil)
|
241
277
|
begin
|
242
278
|
client_repo.create_package(f, dist_id, files, ext, coordinates)
|
@@ -265,7 +301,7 @@ module PackageCloud
|
|
265
301
|
file_paths = []
|
266
302
|
files.each do |f|
|
267
303
|
filepath = File.join(dir, f["filename"])
|
268
|
-
if !File.
|
304
|
+
if !File.exist?(filepath)
|
269
305
|
print "Unable to find file name: #{f["filename"]} for source package: #{filepath}\n".color(:red)
|
270
306
|
abort("Aborting...".color(:red))
|
271
307
|
end
|
@@ -62,14 +62,24 @@ module PackageCloud
|
|
62
62
|
|
63
63
|
def login_from_console
|
64
64
|
e = ask("Email:")
|
65
|
+
puts "If you signed up via social login (Github, Bitbucket etc.), and/or do not have a password, input: NIL"
|
65
66
|
p = ask("Password:") { |q| q.echo = false }
|
66
67
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
68
|
+
if p == "NIL"
|
69
|
+
puts "Copy your API Token from https://packagecloud.io/api_token and input below."
|
70
|
+
puts "(Note: An incorrectly inputted token will require deletion of the incorrectly generated $HOME/.packagecloud config file before rerunning the last command.)"
|
71
|
+
api_token = ask("Your API Token:") { |q| q.echo = false }
|
72
|
+
else
|
73
|
+
begin
|
74
|
+
api_token = PackageCloud::Auth.get_token(base_url(e, p))
|
75
|
+
rescue RestClient::Unauthorized => e
|
76
|
+
puts "Sorry, but we couldn't find you. Give it another try."
|
77
|
+
puts "(Or skip the login? Go to https://packagecloud.io/api_token to see instructions on downloading your $HOME/.packagecloud config file.)"
|
78
|
+
login_from_console
|
79
|
+
end
|
72
80
|
end
|
81
|
+
|
82
|
+
return api_token
|
73
83
|
end
|
74
84
|
|
75
85
|
def write
|
@@ -86,7 +96,7 @@ module PackageCloud
|
|
86
96
|
## config where the url is used verbatim as the key, instead of "url",
|
87
97
|
## this attempts to fix the config file
|
88
98
|
def fix_config_file!
|
89
|
-
if File.
|
99
|
+
if File.exist?(@filename) && File.writable?(@filename)
|
90
100
|
attrs = JSON.parse(File.read(@filename))
|
91
101
|
if !attrs.has_key?("url")
|
92
102
|
## overwrite the config file if "url" key not found
|
@@ -4,12 +4,25 @@ module PackageCloud
|
|
4
4
|
@client = client
|
5
5
|
end
|
6
6
|
|
7
|
+
def distribution_id_from_repo_url(repo, filenames)
|
8
|
+
_,_,dist_sel,ver_sel = repo.split("/")
|
9
|
+
package_type = dist_sel
|
10
|
+
puts "ambiguous extensions, so using repo url to deduce package_type, package_type: #{package_type}".color(:red)
|
11
|
+
|
12
|
+
# NOTE: The distributions pulled from API uses "py" (package_type) as key for "python"
|
13
|
+
# so we need to map "python" to "py"
|
14
|
+
# See PackageCloud::Validator#distributions
|
15
|
+
package_type = package_type == "python" ? "py": package_type
|
16
|
+
|
17
|
+
distribution_id(repo, filenames, package_type)
|
18
|
+
end
|
19
|
+
|
7
20
|
def distribution_id(repo, filenames, package_type)
|
8
21
|
if distributions[package_type]
|
9
22
|
_,_,dist_sel,ver_sel = repo.split("/")
|
10
23
|
|
11
24
|
# These are all 'single version' distros
|
12
|
-
if (dist_sel == "python" || dist_sel == "java" || dist_sel == "node")
|
25
|
+
if (dist_sel == "python" || dist_sel == "java" || dist_sel == "node" || dist_sel == "anyfile")
|
13
26
|
dist = distributions[package_type].detect { |d| d["index_name"] == dist_sel }
|
14
27
|
dist["versions"].first["id"]
|
15
28
|
elsif dist_sel && ver_sel
|
@@ -69,7 +82,7 @@ module PackageCloud
|
|
69
82
|
puts "If you don't see your OS or version here, send us an email at support@packagecloud.io:\n\n"
|
70
83
|
all_distros = distributions[package_type]
|
71
84
|
|
72
|
-
filtered_distros = all_distros.select {|dist| dist["index_name"] != "any"}
|
85
|
+
filtered_distros = all_distros.select {|dist| dist["index_name"] != "any" && dist["index_name"] != "rpm_any" }
|
73
86
|
|
74
87
|
filtered_distros.each_with_index do |dist, index|
|
75
88
|
puts "\t#{index}. #{dist["display_name"]}"
|
data/package_cloud.gemspec
CHANGED
@@ -19,13 +19,13 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
20
20
|
spec.require_paths = ["lib"]
|
21
21
|
|
22
|
-
spec.add_runtime_dependency "thor", "~>
|
23
|
-
spec.add_runtime_dependency "highline", "
|
22
|
+
spec.add_runtime_dependency "thor", "~> 1.2"
|
23
|
+
spec.add_runtime_dependency "highline", "~> 2.0.0"
|
24
24
|
spec.add_runtime_dependency "rest-client", "~> 2.0"
|
25
|
-
spec.add_runtime_dependency "json_pure", "
|
25
|
+
spec.add_runtime_dependency "json_pure", "~> 2.3.0"
|
26
26
|
spec.add_runtime_dependency "rainbow", "2.2.2"
|
27
27
|
|
28
|
-
spec.add_development_dependency "bundler"
|
28
|
+
spec.add_development_dependency "bundler"
|
29
29
|
spec.add_development_dependency "rake"
|
30
30
|
spec.add_development_dependency "mdl"
|
31
31
|
end
|
data.tar.gz.sig
ADDED
Binary file
|
metadata
CHANGED
@@ -1,14 +1,34 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: package_cloud
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.14
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joe Damato
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
|
-
cert_chain:
|
11
|
-
|
10
|
+
cert_chain:
|
11
|
+
- |
|
12
|
+
-----BEGIN CERTIFICATE-----
|
13
|
+
MIIDKDCCAhCgAwIBAgIBAjANBgkqhkiG9w0BAQsFADA6MQ0wCwYDVQQDDARzajI2
|
14
|
+
MRQwEgYKCZImiZPyLGQBGRYEc2oyNjETMBEGCgmSJomT8ixkARkWA2NvbTAeFw0y
|
15
|
+
MzA3MTIwODU1NTFaFw0yNDA3MTEwODU1NTFaMDoxDTALBgNVBAMMBHNqMjYxFDAS
|
16
|
+
BgoJkiaJk/IsZAEZFgRzajI2MRMwEQYKCZImiZPyLGQBGRYDY29tMIIBIjANBgkq
|
17
|
+
hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr60Eo/ttCk8GMTMFiPr3GoYMIMFvLak
|
18
|
+
xSmTk9YGCB6UiEePB4THSSA5w6IPyeaCF/nWkDp3/BAam0eZMWG1IzYQB23TqIM0
|
19
|
+
1xzcNRvFsn0aQoQ00k+sj+G83j3T5OOV5OZIlu8xAChMkQmiPd1NXc6uFv+Iacz7
|
20
|
+
kj+CMsI9YUFdNoU09QY0b+u+Rb6wDYdpyvN60YC30h0h1MeYbvYZJx/iZK4XY5zu
|
21
|
+
4O/FL2ChjL2CPCpLZW55ShYyrzphWJwLOJe+FJ/ZBl6YXwrzQM9HKnt4titSNvyU
|
22
|
+
KzE3L63A3PZvExzLrN9u09kuWLLJfXB2sGOlw3n9t72rJiuBr3/OQQIDAQABozkw
|
23
|
+
NzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU99dfRjEKFyczTeIz
|
24
|
+
m3ZsDWrNC80wDQYJKoZIhvcNAQELBQADggEBAHplXTmXnsLZKl6th6Twlbpl3iBl
|
25
|
+
7aRpOrLc7g8WIEirjiWlYZXjhdG6XoiIQAQtV3XniQ6npRPw7Np8AhSR1LOlvbOs
|
26
|
+
hEdArvs/OZy9cN7fQNduZFK1dkbYCF4waBTycsQFvrzcJzRmjhS9BJd0rroetldo
|
27
|
+
nmPzAzlAl9rIOQC/c763FVfdbPQu+mxcj4JCfVElUzxK+4igyB6SFMckMPSZIJbi
|
28
|
+
cxvXzM34LVue8vISlf/2VKpawD3kQinfo1I53MP3Hv3EihDc4p14E4hdAILtHd5r
|
29
|
+
k6d9rkvRe0/YFTLB1hzK6scdAUcD91NOylY8s4cypQv/mk+OTbQ9+Xy7tyU=
|
30
|
+
-----END CERTIFICATE-----
|
31
|
+
date: 2023-08-09 00:00:00.000000000 Z
|
12
32
|
dependencies:
|
13
33
|
- !ruby/object:Gem::Dependency
|
14
34
|
name: thor
|
@@ -16,28 +36,28 @@ dependencies:
|
|
16
36
|
requirements:
|
17
37
|
- - "~>"
|
18
38
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
39
|
+
version: '1.2'
|
20
40
|
type: :runtime
|
21
41
|
prerelease: false
|
22
42
|
version_requirements: !ruby/object:Gem::Requirement
|
23
43
|
requirements:
|
24
44
|
- - "~>"
|
25
45
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
46
|
+
version: '1.2'
|
27
47
|
- !ruby/object:Gem::Dependency
|
28
48
|
name: highline
|
29
49
|
requirement: !ruby/object:Gem::Requirement
|
30
50
|
requirements:
|
31
|
-
- -
|
51
|
+
- - "~>"
|
32
52
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
53
|
+
version: 2.0.0
|
34
54
|
type: :runtime
|
35
55
|
prerelease: false
|
36
56
|
version_requirements: !ruby/object:Gem::Requirement
|
37
57
|
requirements:
|
38
|
-
- -
|
58
|
+
- - "~>"
|
39
59
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
60
|
+
version: 2.0.0
|
41
61
|
- !ruby/object:Gem::Dependency
|
42
62
|
name: rest-client
|
43
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -56,16 +76,16 @@ dependencies:
|
|
56
76
|
name: json_pure
|
57
77
|
requirement: !ruby/object:Gem::Requirement
|
58
78
|
requirements:
|
59
|
-
- -
|
79
|
+
- - "~>"
|
60
80
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
81
|
+
version: 2.3.0
|
62
82
|
type: :runtime
|
63
83
|
prerelease: false
|
64
84
|
version_requirements: !ruby/object:Gem::Requirement
|
65
85
|
requirements:
|
66
|
-
- -
|
86
|
+
- - "~>"
|
67
87
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
88
|
+
version: 2.3.0
|
69
89
|
- !ruby/object:Gem::Dependency
|
70
90
|
name: rainbow
|
71
91
|
requirement: !ruby/object:Gem::Requirement
|
@@ -84,16 +104,16 @@ dependencies:
|
|
84
104
|
name: bundler
|
85
105
|
requirement: !ruby/object:Gem::Requirement
|
86
106
|
requirements:
|
87
|
-
- - "
|
107
|
+
- - ">="
|
88
108
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
109
|
+
version: '0'
|
90
110
|
type: :development
|
91
111
|
prerelease: false
|
92
112
|
version_requirements: !ruby/object:Gem::Requirement
|
93
113
|
requirements:
|
94
|
-
- - "
|
114
|
+
- - ">="
|
95
115
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
116
|
+
version: '0'
|
97
117
|
- !ruby/object:Gem::Dependency
|
98
118
|
name: rake
|
99
119
|
requirement: !ruby/object:Gem::Requirement
|
@@ -163,7 +183,7 @@ homepage: https://packagecloud.io
|
|
163
183
|
licenses:
|
164
184
|
- MIT
|
165
185
|
metadata: {}
|
166
|
-
post_install_message:
|
186
|
+
post_install_message:
|
167
187
|
rdoc_options: []
|
168
188
|
require_paths:
|
169
189
|
- lib
|
@@ -178,9 +198,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
178
198
|
- !ruby/object:Gem::Version
|
179
199
|
version: '0'
|
180
200
|
requirements: []
|
181
|
-
|
182
|
-
|
183
|
-
signing_key:
|
201
|
+
rubygems_version: 3.4.16
|
202
|
+
signing_key:
|
184
203
|
specification_version: 4
|
185
204
|
summary: The https://packagecloud.io CLI for uploading Node.js, Debian, RPM, RubyGem,
|
186
205
|
Python, and Java packages. Check our website or the RubyDoc documentation for detailed
|
metadata.gz.sig
ADDED