test-gem-push 2016.08.09.02.02.43 → 2016.08.09.02.27.01
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app.rb +25 -15
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6338ffa0b1b774341b9584ef84cbad9ceb967362
|
4
|
+
data.tar.gz: db3fdc71ee4551966de2aed3ae6524df23039504
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a0f7f8541755361a9f79eb43e076ec070596a27f0e7cc40073c9667d090d1e458aca2f043f608c5312d2fb75793c648143ae4b248f13ba8b01028a1f29032c7e
|
7
|
+
data.tar.gz: 5e8fafec594c71e8c0c7d84a99faa09b63c2cc094fcb4eb1db2ac1b7949dc97a7d014c26b026b60b65322154c851d2b24b5936a0845513579309873c19f682b4
|
data/app.rb
CHANGED
@@ -19,13 +19,14 @@ rescue
|
|
19
19
|
raise "Failed to load JSON from #{host}/#{path}:\n#{json}"
|
20
20
|
end
|
21
21
|
|
22
|
-
def push!(name, version)
|
22
|
+
def push!(name, version, platform)
|
23
23
|
spec = Gem::Specification.new do |s|
|
24
24
|
s.name = name
|
25
25
|
s.version = version
|
26
26
|
s.authors = ['example@example.com']
|
27
27
|
s.files = [__FILE__]
|
28
28
|
s.summary = 'test'
|
29
|
+
s.platform = platform
|
29
30
|
s.required_ruby_version = '~> 2.0'
|
30
31
|
s.required_rubygems_version = '~> 2.6'
|
31
32
|
s.add_dependency 'foo', '~> 1.0'
|
@@ -53,42 +54,51 @@ post '/' do
|
|
53
54
|
|
54
55
|
version = params.fetch('version') { Time.now.strftime('%Y.%m.%d.%H.%M.%S') }
|
55
56
|
gem_name = ENV.fetch('GEM_NAME')
|
57
|
+
platform = params.fetch('platform') { 'ruby' }
|
58
|
+
platform_string = platform == 'ruby' ? '' : "-#{platform}"
|
56
59
|
|
57
60
|
dependency_endpoint = get_dependency_api(gem_name)
|
58
61
|
versions = get_versions.lines
|
59
62
|
info = get_info(gem_name).lines
|
60
63
|
|
61
|
-
if dependency_endpoint.find { |g| g['version'] == version }
|
62
|
-
halt 422, "#{gem_name}-#{version} already was pushed"
|
64
|
+
if dependency_endpoint.find { |g| g['version'] == version && g['platform'] == platform }
|
65
|
+
halt 422, "#{gem_name}-#{version}-#{platform} already was pushed"
|
63
66
|
end
|
64
67
|
|
65
68
|
begin
|
66
|
-
push!(gem_name, version)
|
69
|
+
push!(gem_name, version, platform)
|
67
70
|
rescue Gem::SystemExitException
|
68
71
|
halt 500, "Failed to push: #{$ERROR_INFO}"
|
69
72
|
end
|
70
73
|
|
74
|
+
errors = []
|
75
|
+
|
71
76
|
new_gem = get_dependency_api(gem_name) - dependency_endpoint
|
72
77
|
case new_gem.size
|
73
|
-
when 0 then
|
78
|
+
when 0 then errors << 'gem not added to dependency API'
|
74
79
|
when 1
|
75
|
-
unless new_gem.first.values_at('name', 'number', 'platform', 'dependencies') == [gem_name, version,
|
76
|
-
|
80
|
+
unless new_gem.first.values_at('name', 'number', 'platform', 'dependencies') == [gem_name, version, platform, [['foo', '~> 1.0']]]
|
81
|
+
errors << "wrong gem added: #{new_gem}"
|
77
82
|
end
|
78
|
-
else
|
83
|
+
else errors << "too many new gems added: #{new_gem}"
|
79
84
|
end
|
80
85
|
|
81
|
-
new_versions =
|
82
|
-
unless new_versions.find { |l| l.start_with?("#{gem_name} #{version}") }
|
83
|
-
|
86
|
+
new_versions = get_versions.lines - versions
|
87
|
+
unless new_versions.find { |l| l.start_with?("#{gem_name} #{version}#{platform_string}") }
|
88
|
+
errors << "gem not added to versions file, new versions: #{new_versions}"
|
84
89
|
end
|
85
90
|
|
86
91
|
new_info = get_info(gem_name).lines - info
|
87
92
|
case new_info.size
|
88
|
-
when 0 then
|
89
|
-
when 1 then
|
90
|
-
else
|
93
|
+
when 0 then errors << 'gem not added to info'
|
94
|
+
when 1 then errors << "wrong gem added: #{new_info}" unless new_info.first =~ /^#{version}#{platform_string} /
|
95
|
+
else errors << "too many new gems added: #{new_info}"
|
91
96
|
end
|
92
97
|
|
93
|
-
|
98
|
+
if errors.empty?
|
99
|
+
halt "successfully pushed #{gem_name}-#{version}-#{platform}"
|
100
|
+
else
|
101
|
+
errors.unshift "failed to push #{gem_name}-#{version}-#{platform}"
|
102
|
+
halt 404, errors.join("\n")
|
103
|
+
end
|
94
104
|
end
|