spaceship 0.3.4 → 0.4.0
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 +4 -4
- data/README.md +16 -15
- data/lib/spaceship.rb +2 -1
- data/lib/spaceship/base.rb +0 -1
- data/lib/spaceship/client.rb +71 -69
- data/lib/spaceship/helper/net_http_generic_request.rb +1 -1
- data/lib/spaceship/launcher.rb +19 -14
- data/lib/spaceship/portal/app.rb +23 -9
- data/lib/spaceship/portal/app_group.rb +77 -0
- data/lib/spaceship/portal/app_service.rb +222 -0
- data/lib/spaceship/portal/certificate.rb +2 -2
- data/lib/spaceship/portal/device.rb +7 -7
- data/lib/spaceship/portal/portal.rb +3 -1
- data/lib/spaceship/portal/portal_base.rb +1 -1
- data/lib/spaceship/portal/portal_client.rb +64 -10
- data/lib/spaceship/portal/provisioning_profile.rb +28 -54
- data/lib/spaceship/portal/spaceship.rb +27 -9
- data/lib/spaceship/portal/ui/select_team.rb +6 -8
- data/lib/spaceship/tunes/app_screenshot.rb +1 -1
- data/lib/spaceship/tunes/app_status.rb +5 -6
- data/lib/spaceship/tunes/app_submission.rb +24 -23
- data/lib/spaceship/tunes/app_version.rb +27 -34
- data/lib/spaceship/tunes/application.rb +24 -25
- data/lib/spaceship/tunes/build.rb +6 -7
- data/lib/spaceship/tunes/build_train.rb +2 -2
- data/lib/spaceship/tunes/language_converter.rb +14 -13
- data/lib/spaceship/tunes/language_item.rb +1 -1
- data/lib/spaceship/tunes/processing_build.rb +1 -1
- data/lib/spaceship/tunes/spaceship.rb +5 -5
- data/lib/spaceship/tunes/tester.rb +14 -15
- data/lib/spaceship/tunes/tunes_client.rb +61 -61
- data/lib/spaceship/ui.rb +1 -2
- data/lib/spaceship/version.rb +2 -2
- metadata +18 -2
@@ -17,7 +17,7 @@ module Spaceship
|
|
17
17
|
def login_url
|
18
18
|
cache_path = "/tmp/spaceship_itc_login_url.txt"
|
19
19
|
begin
|
20
|
-
cached = File.read(cache_path)
|
20
|
+
cached = File.read(cache_path)
|
21
21
|
rescue Errno::ENOENT
|
22
22
|
end
|
23
23
|
return cached if cached
|
@@ -61,7 +61,7 @@ module Spaceship
|
|
61
61
|
# User Credentials are wrong
|
62
62
|
raise InvalidUserCredentialsError.new(response)
|
63
63
|
end
|
64
|
-
|
64
|
+
|
65
65
|
return @client
|
66
66
|
else
|
67
67
|
# User Credentials are wrong
|
@@ -71,30 +71,30 @@ module Spaceship
|
|
71
71
|
|
72
72
|
def handle_itc_response(raw)
|
73
73
|
return unless raw
|
74
|
-
return unless raw.kind_of?Hash
|
74
|
+
return unless raw.kind_of? Hash
|
75
75
|
|
76
76
|
data = raw['data'] || raw # sometimes it's with data, sometimes it isn't
|
77
|
-
|
77
|
+
|
78
78
|
if data.fetch('sectionErrorKeys', []).count == 0 and
|
79
|
-
data.fetch('sectionInfoKeys', []).count == 0 and
|
79
|
+
data.fetch('sectionInfoKeys', []).count == 0 and
|
80
80
|
data.fetch('sectionWarningKeys', []).count == 0
|
81
|
-
|
81
|
+
|
82
82
|
logger.debug("Request was successful")
|
83
83
|
end
|
84
84
|
|
85
|
-
|
85
|
+
handle_response_hash = lambda do |hash|
|
86
86
|
errors = []
|
87
|
-
if hash.kind_of?Hash
|
87
|
+
if hash.kind_of? Hash
|
88
88
|
hash.each do |key, value|
|
89
|
-
errors = errors + handle_response_hash(value)
|
89
|
+
errors = errors + handle_response_hash.call(value)
|
90
90
|
|
91
|
-
if key == 'errorKeys' and value.kind_of?Array and value.count > 0
|
91
|
+
if key == 'errorKeys' and value.kind_of? Array and value.count > 0
|
92
92
|
errors = errors + value
|
93
93
|
end
|
94
94
|
end
|
95
|
-
elsif hash.kind_of?Array
|
95
|
+
elsif hash.kind_of? Array
|
96
96
|
hash.each do |value|
|
97
|
-
errors = errors + handle_response_hash(value)
|
97
|
+
errors = errors + handle_response_hash.call(value)
|
98
98
|
end
|
99
99
|
else
|
100
100
|
# We don't care about simple values
|
@@ -102,7 +102,7 @@ module Spaceship
|
|
102
102
|
return errors
|
103
103
|
end
|
104
104
|
|
105
|
-
errors = handle_response_hash(data)
|
105
|
+
errors = handle_response_hash.call(data)
|
106
106
|
errors = errors + data.fetch('sectionErrorKeys') if data['sectionErrorKeys']
|
107
107
|
|
108
108
|
# Sometimes there is a different kind of error in the JSON response
|
@@ -120,7 +120,6 @@ module Spaceship
|
|
120
120
|
return data
|
121
121
|
end
|
122
122
|
|
123
|
-
|
124
123
|
#####################################################
|
125
124
|
# @!group Applications
|
126
125
|
#####################################################
|
@@ -131,14 +130,14 @@ module Spaceship
|
|
131
130
|
end
|
132
131
|
|
133
132
|
# Creates a new application on iTunes Connect
|
134
|
-
# @param name (String): The name of your app as it will appear on the App Store.
|
133
|
+
# @param name (String): The name of your app as it will appear on the App Store.
|
135
134
|
# This can't be longer than 255 characters.
|
136
|
-
# @param primary_language (String): If localized app information isn't available in an
|
135
|
+
# @param primary_language (String): If localized app information isn't available in an
|
137
136
|
# App Store territory, the information from your primary language will be used instead.
|
138
|
-
# @param version (String): The version number is shown on the App Store and should
|
137
|
+
# @param version (String): The version number is shown on the App Store and should
|
139
138
|
# match the one you used in Xcode.
|
140
139
|
# @param sku (String): A unique ID for your app that is not visible on the App Store.
|
141
|
-
# @param bundle_id (String): The bundle ID must match the one you used in Xcode. It
|
140
|
+
# @param bundle_id (String): The bundle ID must match the one you used in Xcode. It
|
142
141
|
# can't be changed after you submit your first build.
|
143
142
|
def create_application!(name: nil, primary_language: nil, version: nil, sku: nil, bundle_id: nil, bundle_id_suffix: nil, company_name: nil)
|
144
143
|
# First, we need to fetch the data from Apple, which we then modify with the user's values
|
@@ -160,7 +159,7 @@ module Spaceship
|
|
160
159
|
req.body = data.to_json
|
161
160
|
req.headers['Content-Type'] = 'application/json'
|
162
161
|
end
|
163
|
-
|
162
|
+
|
164
163
|
data = parse_response(r, 'data')
|
165
164
|
handle_itc_response(data)
|
166
165
|
end
|
@@ -203,7 +202,7 @@ module Spaceship
|
|
203
202
|
req.body = data.to_json
|
204
203
|
req.headers['Content-Type'] = 'application/json'
|
205
204
|
end
|
206
|
-
|
205
|
+
|
207
206
|
handle_itc_response(r.body)
|
208
207
|
end
|
209
208
|
|
@@ -239,10 +238,10 @@ module Spaceship
|
|
239
238
|
handle_itc_response(r.body)
|
240
239
|
end
|
241
240
|
|
242
|
-
def submit_testflight_build_for_review!(# Required:
|
243
|
-
app_id: nil,
|
244
|
-
train: nil,
|
245
|
-
build_number: nil,
|
241
|
+
def submit_testflight_build_for_review!( # Required:
|
242
|
+
app_id: nil,
|
243
|
+
train: nil,
|
244
|
+
build_number: nil,
|
246
245
|
cancel_other_submissions: false,
|
247
246
|
|
248
247
|
# Required Metadata:
|
@@ -271,7 +270,7 @@ module Spaceship
|
|
271
270
|
|
272
271
|
build_info = r.body['data']
|
273
272
|
# Now fill in the values provided by the user
|
274
|
-
|
273
|
+
|
275
274
|
# First the localised values:
|
276
275
|
build_info['testInfo']['details'].each do |current|
|
277
276
|
current['whatsNew']['value'] = changelog
|
@@ -310,11 +309,11 @@ module Spaceship
|
|
310
309
|
handle_itc_response(r.body)
|
311
310
|
end
|
312
311
|
end
|
313
|
-
|
312
|
+
|
314
313
|
#####################################################
|
315
314
|
# @!group Submit for Review
|
316
315
|
#####################################################
|
317
|
-
|
316
|
+
|
318
317
|
def send_app_submission(app_id, data, stage)
|
319
318
|
raise "app_id is required" unless app_id
|
320
319
|
|
@@ -323,7 +322,7 @@ module Spaceship
|
|
323
322
|
req.body = data.to_json
|
324
323
|
req.headers['Content-Type'] = 'application/json'
|
325
324
|
end
|
326
|
-
|
325
|
+
|
327
326
|
handle_itc_response(r.body)
|
328
327
|
parse_response(r, 'data')
|
329
328
|
end
|
@@ -337,20 +336,20 @@ module Spaceship
|
|
337
336
|
parse_response(r, 'data')['testers']
|
338
337
|
end
|
339
338
|
|
340
|
-
def testers_by_app(tester, app_id)
|
339
|
+
def testers_by_app(tester, app_id)
|
341
340
|
url = tester.url(app_id)[:index_by_app]
|
342
341
|
r = request(:get, url)
|
343
342
|
parse_response(r, 'data')['users']
|
344
343
|
end
|
345
344
|
|
346
|
-
def create_tester!(tester: nil, email: nil, first_name: nil, last_name: nil)
|
345
|
+
def create_tester!(tester: nil, email: nil, first_name: nil, last_name: nil)
|
347
346
|
url = tester.url[:create]
|
348
347
|
raise "Action not provided for this tester type." unless url
|
349
348
|
|
350
349
|
tester_data = {
|
351
350
|
emailAddress: {
|
352
351
|
value: email
|
353
|
-
},
|
352
|
+
},
|
354
353
|
firstName: {
|
355
354
|
value: first_name
|
356
355
|
},
|
@@ -382,7 +381,7 @@ module Spaceship
|
|
382
381
|
{
|
383
382
|
emailAddress: {
|
384
383
|
value: tester.email
|
385
|
-
},
|
384
|
+
},
|
386
385
|
firstName: {
|
387
386
|
value: tester.first_name
|
388
387
|
},
|
@@ -415,36 +414,37 @@ module Spaceship
|
|
415
414
|
update_tester_from_app!(tester, app_id, false)
|
416
415
|
end
|
417
416
|
|
418
|
-
private
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
417
|
+
private
|
418
|
+
|
419
|
+
def update_tester_from_app!(tester, app_id, testing)
|
420
|
+
url = tester.class.url(app_id)[:update_by_app]
|
421
|
+
data = {
|
422
|
+
users: [
|
423
|
+
{
|
424
|
+
emailAddress: {
|
425
|
+
value: tester.email
|
426
|
+
},
|
427
|
+
firstName: {
|
428
|
+
value: tester.first_name
|
429
|
+
},
|
430
|
+
lastName: {
|
431
|
+
value: tester.last_name
|
432
|
+
},
|
433
|
+
testing: {
|
434
|
+
value: testing
|
436
435
|
}
|
437
|
-
|
438
|
-
|
436
|
+
}
|
437
|
+
]
|
438
|
+
}
|
439
439
|
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
end
|
445
|
-
|
446
|
-
data = parse_response(r, 'data')
|
447
|
-
handle_itc_response(data)
|
440
|
+
r = request(:post) do |req|
|
441
|
+
req.url url
|
442
|
+
req.body = data.to_json
|
443
|
+
req.headers['Content-Type'] = 'application/json'
|
448
444
|
end
|
445
|
+
|
446
|
+
data = parse_response(r, 'data')
|
447
|
+
handle_itc_response(data)
|
448
|
+
end
|
449
449
|
end
|
450
|
-
end
|
450
|
+
end
|
data/lib/spaceship/ui.rb
CHANGED
data/lib/spaceship/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
module Spaceship
|
2
|
-
VERSION = "0.
|
3
|
-
end
|
2
|
+
VERSION = "0.4.0"
|
3
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spaceship
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stefan Natchev
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-07
|
12
|
+
date: 2015-08-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: credentials_manager
|
@@ -193,6 +193,20 @@ dependencies:
|
|
193
193
|
- - ">="
|
194
194
|
- !ruby/object:Gem::Version
|
195
195
|
version: '0'
|
196
|
+
- !ruby/object:Gem::Dependency
|
197
|
+
name: rubocop
|
198
|
+
requirement: !ruby/object:Gem::Requirement
|
199
|
+
requirements:
|
200
|
+
- - "~>"
|
201
|
+
- !ruby/object:Gem::Version
|
202
|
+
version: 0.32.1
|
203
|
+
type: :development
|
204
|
+
prerelease: false
|
205
|
+
version_requirements: !ruby/object:Gem::Requirement
|
206
|
+
requirements:
|
207
|
+
- - "~>"
|
208
|
+
- !ruby/object:Gem::Version
|
209
|
+
version: 0.32.1
|
196
210
|
description: Because you would rather spend your time building stuff than fighting
|
197
211
|
provisioning
|
198
212
|
email:
|
@@ -213,6 +227,8 @@ files:
|
|
213
227
|
- lib/spaceship/helper/plist_middleware.rb
|
214
228
|
- lib/spaceship/launcher.rb
|
215
229
|
- lib/spaceship/portal/app.rb
|
230
|
+
- lib/spaceship/portal/app_group.rb
|
231
|
+
- lib/spaceship/portal/app_service.rb
|
216
232
|
- lib/spaceship/portal/certificate.rb
|
217
233
|
- lib/spaceship/portal/device.rb
|
218
234
|
- lib/spaceship/portal/portal.rb
|