pilot 1.9.2 → 1.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +6 -7
- data/lib/pilot.rb +4 -1
- data/lib/pilot/build_manager.rb +47 -8
- data/lib/pilot/commands_generator.rb +11 -0
- data/lib/pilot/features.rb +2 -0
- data/lib/pilot/tester_manager.rb +10 -2
- data/lib/pilot/version.rb +1 -1
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 193709deab5ca85cba1eec5d0f6c32adc3d3a899
|
4
|
+
data.tar.gz: dc5688ea2356540eabe2c297b828fd645a7e6079
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4f118118001033f5962498f3d0379f942c1907a8c4ec94ef9c079e283b9eee90692f027f8e220bf34390b1a64f6bb5d7f62ac99136f26c784374a87d9bb7a80e
|
7
|
+
data.tar.gz: 3f4999fb02b090d4283df340411f608de3bf4aabb63ca7561c999229104dac2fecd05f18575d6fcb17d31477e9c3b0b29f84ff5212caf425194eaef3ec862dc3
|
data/README.md
CHANGED
@@ -35,13 +35,12 @@ Pilot
|
|
35
35
|
|
36
36
|
###### The best way to manage your TestFlight testers and builds from your terminal
|
37
37
|
|
38
|
-
|
38
|
+
Pilot makes it easier to manage your app on Apple’s TestFlight. You can:
|
39
39
|
|
40
|
-
- Upload
|
41
|
-
-
|
42
|
-
-
|
43
|
-
-
|
44
|
-
- Export and import all your testers
|
40
|
+
- Upload & distribute builds
|
41
|
+
- Add & remove testers
|
42
|
+
- Retrieve information about testers & devices
|
43
|
+
- Import/export all available testers
|
45
44
|
|
46
45
|
Get in contact with the developer on Twitter: [@FastlaneTools](https://twitter.com/FastlaneTools)
|
47
46
|
|
@@ -158,7 +157,7 @@ The output will look like this:
|
|
158
157
|
|
159
158
|
### Add a new tester
|
160
159
|
|
161
|
-
To add a new tester to both your iTunes Connect account and to your app (if given), use the `pilot add` command. This will create a new tester (if
|
160
|
+
To add a new tester to both your iTunes Connect account and to your app (if given), use the `pilot add` command. This will create a new tester (if necessary) or add an existing tester to the app to test.
|
162
161
|
|
163
162
|
```
|
164
163
|
pilot add email@invite.com
|
data/lib/pilot.rb
CHANGED
@@ -1,5 +1,9 @@
|
|
1
|
+
# fastlane_core must be required before 'pilot/features' which depends on it for FastlaneCore::Feature
|
2
|
+
require "fastlane_core"
|
3
|
+
|
1
4
|
require "json"
|
2
5
|
require "pilot/version"
|
6
|
+
require 'pilot/features'
|
3
7
|
require "pilot/options"
|
4
8
|
require "pilot/manager"
|
5
9
|
require "pilot/build_manager"
|
@@ -7,7 +11,6 @@ require "pilot/tester_manager"
|
|
7
11
|
require "pilot/tester_importer"
|
8
12
|
require "pilot/tester_exporter"
|
9
13
|
|
10
|
-
require "fastlane_core"
|
11
14
|
require "spaceship"
|
12
15
|
require "terminal-table"
|
13
16
|
|
data/lib/pilot/build_manager.rb
CHANGED
@@ -33,14 +33,44 @@ module Pilot
|
|
33
33
|
UI.message("If you want to skip waiting for the processing to be finished, use the `skip_waiting_for_build_processing` option")
|
34
34
|
uploaded_build = wait_for_processing_build # this might take a while
|
35
35
|
|
36
|
+
distribute(options, uploaded_build)
|
37
|
+
end
|
38
|
+
|
39
|
+
def distribute(options, build = nil)
|
40
|
+
start(options)
|
41
|
+
if config[:apple_id].to_s.length == 0 and config[:app_identifier].to_s.length == 0
|
42
|
+
config[:app_identifier] = ask("App Identifier: ")
|
43
|
+
end
|
44
|
+
|
45
|
+
if build.nil?
|
46
|
+
builds = app.all_processing_builds + app.builds
|
47
|
+
# sort by upload_date
|
48
|
+
builds.sort! { |a, b| a.upload_date <=> b.upload_date }
|
49
|
+
build = builds.last
|
50
|
+
if build.nil?
|
51
|
+
UI.user_error!("No builds found.")
|
52
|
+
return
|
53
|
+
end
|
54
|
+
if build.processing
|
55
|
+
UI.user_error!("Build #{build.train_version}(#{build.build_version}) is still processing.")
|
56
|
+
return
|
57
|
+
end
|
58
|
+
if build.testing_status == "External"
|
59
|
+
UI.user_error!("Build #{build.train_version}(#{build.build_version}) has already been distributed.")
|
60
|
+
return
|
61
|
+
end
|
62
|
+
|
63
|
+
UI.message("Distributing build #{build.train_version}(#{build.build_version}) from #{build.testing_status} -> External")
|
64
|
+
end
|
65
|
+
|
36
66
|
# First, set the changelog (if necessary)
|
37
67
|
if options[:changelog].to_s.length > 0
|
38
|
-
|
68
|
+
build.update_build_information!(whats_new: options[:changelog])
|
39
69
|
UI.success "Successfully set the changelog for build"
|
40
70
|
end
|
41
71
|
|
42
72
|
return if config[:skip_submission]
|
43
|
-
distribute_build(
|
73
|
+
distribute_build(build, options)
|
44
74
|
UI.message("Successfully distributed build to beta testers 🚀")
|
45
75
|
end
|
46
76
|
|
@@ -52,7 +82,7 @@ module Pilot
|
|
52
82
|
|
53
83
|
builds = app.all_processing_builds + app.builds
|
54
84
|
# sort by upload_date
|
55
|
-
builds.sort! {|a, b| a.upload_date <=> b.upload_date }
|
85
|
+
builds.sort! { |a, b| a.upload_date <=> b.upload_date }
|
56
86
|
rows = builds.collect { |build| describe_build(build) }
|
57
87
|
|
58
88
|
puts Terminal::Table.new(
|
@@ -79,17 +109,26 @@ module Pilot
|
|
79
109
|
def wait_for_processing_build
|
80
110
|
# the upload date of the new buid
|
81
111
|
# we use it to identify the build
|
82
|
-
|
83
112
|
start = Time.now
|
84
113
|
wait_processing_interval = config[:wait_processing_interval].to_i
|
85
114
|
latest_build = nil
|
86
115
|
UI.message("Waiting for iTunes Connect to process the new build")
|
87
116
|
loop do
|
88
117
|
sleep wait_processing_interval
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
118
|
+
|
119
|
+
# before we look for processing builds, we need to ensure that there
|
120
|
+
# is a build train for this application; new applications don't
|
121
|
+
# build trains right away, and if we don't do this check, we will
|
122
|
+
# get break out of this loop and then generate an error later when we
|
123
|
+
# have a nil build
|
124
|
+
if FastlaneCore::Feature.enabled?('PILOT_WAIT_FOR_NEW_BUILD_TRAINS_ON_ITUNES_CONNECT') && app.build_trains.count == 0
|
125
|
+
UI.message("New application; waiting for build train to appear on iTunes Connect")
|
126
|
+
else
|
127
|
+
builds = app.all_processing_builds
|
128
|
+
break if builds.count == 0
|
129
|
+
latest_build = builds.last
|
130
|
+
UI.message("Waiting for iTunes Connect to finish processing the new build (#{latest_build.train_version} - #{latest_build.build_version})")
|
131
|
+
end
|
93
132
|
end
|
94
133
|
|
95
134
|
UI.user_error!("Error receiving the newly uploaded binary, please check iTunes Connect") if latest_build.nil?
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# rubocop:disable Metrics/MethodLength
|
2
|
+
# rubocop:disable Metrics/AbcSize
|
2
3
|
require "commander"
|
3
4
|
require "pilot/options"
|
4
5
|
require "fastlane_core"
|
@@ -61,6 +62,16 @@ module Pilot
|
|
61
62
|
end
|
62
63
|
end
|
63
64
|
|
65
|
+
command :distribute do |c|
|
66
|
+
c.syntax = "pilot distribute"
|
67
|
+
c.description = "Distribute a previously uploaded binary to Apple TestFlight"
|
68
|
+
c.action do |args, options|
|
69
|
+
config = FastlaneCore::Configuration.create(Pilot::Options.available_options, convert_options(options))
|
70
|
+
config[:distribute_external] = true
|
71
|
+
Pilot::BuildManager.new.distribute(config)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
64
75
|
command :builds do |c|
|
65
76
|
c.syntax = "pilot builds"
|
66
77
|
c.description = "Lists all builds for given application"
|
data/lib/pilot/tester_manager.rb
CHANGED
@@ -103,8 +103,16 @@ module Pilot
|
|
103
103
|
end
|
104
104
|
|
105
105
|
def list_testers_global
|
106
|
-
|
107
|
-
|
106
|
+
begin
|
107
|
+
int_testers = Spaceship::Tunes::Tester::Internal.all
|
108
|
+
ext_testers = Spaceship::Tunes::Tester::External.all
|
109
|
+
rescue => ex
|
110
|
+
if ex.to_s.include?("Forbidden")
|
111
|
+
UI.user_error!("You don't have the permission to list the testers of your whole team. Please provide an app identifier to list all testers of a specific application.")
|
112
|
+
else
|
113
|
+
raise ex
|
114
|
+
end
|
115
|
+
end
|
108
116
|
|
109
117
|
list_global(int_testers, "Internal Testers")
|
110
118
|
puts ""
|
data/lib/pilot/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pilot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Felix Krause
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-07-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fastlane_core
|
@@ -36,7 +36,7 @@ dependencies:
|
|
36
36
|
requirements:
|
37
37
|
- - ">="
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: 0.
|
39
|
+
version: 0.29.0
|
40
40
|
- - "<"
|
41
41
|
- !ruby/object:Gem::Version
|
42
42
|
version: 1.0.0
|
@@ -46,7 +46,7 @@ dependencies:
|
|
46
46
|
requirements:
|
47
47
|
- - ">="
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
version: 0.
|
49
|
+
version: 0.29.0
|
50
50
|
- - "<"
|
51
51
|
- !ruby/object:Gem::Version
|
52
52
|
version: 1.0.0
|
@@ -232,6 +232,7 @@ files:
|
|
232
232
|
- lib/pilot.rb
|
233
233
|
- lib/pilot/build_manager.rb
|
234
234
|
- lib/pilot/commands_generator.rb
|
235
|
+
- lib/pilot/features.rb
|
235
236
|
- lib/pilot/manager.rb
|
236
237
|
- lib/pilot/options.rb
|
237
238
|
- lib/pilot/tester_exporter.rb
|
@@ -259,7 +260,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
259
260
|
version: '0'
|
260
261
|
requirements: []
|
261
262
|
rubyforge_project:
|
262
|
-
rubygems_version: 2.
|
263
|
+
rubygems_version: 2.2.2
|
263
264
|
signing_key:
|
264
265
|
specification_version: 4
|
265
266
|
summary: The best way to manage your TestFlight testers and builds from your terminal
|