fastlane 2.29.0.beta.20170421010107 → 2.29.0.beta.20170422010059
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/deliver/lib/assets/summary.html.erb +3 -0
- data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +16 -10
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane_core/lib/fastlane_core/helper.rb +7 -0
- data/fastlane_core/lib/fastlane_core/print_table.rb +4 -9
- data/fastlane_core/lib/fastlane_core/project.rb +7 -2
- data/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb +7 -7
- data/gym/lib/gym/options.rb +5 -0
- data/gym/lib/gym/runner.rb +2 -0
- data/gym/lib/gym/xcode.rb +1 -3
- data/pilot/lib/pilot/commands_generator.rb +2 -1
- data/pilot/lib/pilot/tester_manager.rb +55 -27
- data/spaceship/lib/spaceship/test_flight/client.rb +2 -2
- metadata +14 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f85a8ff166aada2f5880282f788d5ca55570c8e8
|
4
|
+
data.tar.gz: 77e4d79e50faa96548ad1c3d66c00254d1c3dd03
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d1b022a57aafbe041d6bed0e82309916051986c0884e29b56349b67244a309eb221d4e2dabe9c0589e0642827626d672d6d0ebb8145d0bddbe3c9d9bff11d5b1
|
7
|
+
data.tar.gz: cd676af5aba1efa09c616b158ae72009970d99d50fd4d2b6cedfa718f66695dd1a8d101c830c80ef3f360699e1d35c91e4bfd06f036745850ac0aead6b7e5987
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Style/PercentLiteralDelimiters:
|
2
2
|
Enabled: false
|
3
|
-
|
3
|
+
|
4
4
|
# kind_of? is a good way to check a type
|
5
5
|
Style/ClassCheck:
|
6
6
|
EnforcedStyle: kind_of?
|
@@ -16,6 +16,12 @@ Style/SafeNavigation:
|
|
16
16
|
Performance/RegexpMatch:
|
17
17
|
Enabled: false
|
18
18
|
|
19
|
+
# This suggests use of `tr` instead of `gsub`. While this might be more performant,
|
20
|
+
# these methods are not at all interchangable, and behave very differently. This can
|
21
|
+
# lead to people making the substitution without considering the differences.
|
22
|
+
Performance/StringReplacement:
|
23
|
+
Enabled: false
|
24
|
+
|
19
25
|
# .length == 0 is also good, we don't always want .zero?
|
20
26
|
Style/NumericPredicate:
|
21
27
|
Enabled: false
|
@@ -23,7 +29,7 @@ Style/NumericPredicate:
|
|
23
29
|
# this would cause errors with long lanes
|
24
30
|
Metrics/BlockLength:
|
25
31
|
Enabled: false
|
26
|
-
|
32
|
+
|
27
33
|
# this is a bit buggy
|
28
34
|
Metrics/ModuleLength:
|
29
35
|
Enabled: false
|
@@ -36,23 +42,23 @@ Style/VariableNumber:
|
|
36
42
|
Style/MethodMissing:
|
37
43
|
Enabled: false
|
38
44
|
|
39
|
-
#
|
45
|
+
#
|
40
46
|
# File.chmod(0777, f)
|
41
|
-
#
|
47
|
+
#
|
42
48
|
# is easier to read than
|
43
|
-
#
|
49
|
+
#
|
44
50
|
# File.chmod(0o777, f)
|
45
|
-
#
|
51
|
+
#
|
46
52
|
Style/NumericLiteralPrefix:
|
47
53
|
Enabled: false
|
48
54
|
|
49
|
-
#
|
55
|
+
#
|
50
56
|
# command = (!clean_expired.nil? || !clean_pattern.nil?) ? CLEANUP : LIST
|
51
|
-
#
|
57
|
+
#
|
52
58
|
# is easier to read than
|
53
|
-
#
|
59
|
+
#
|
54
60
|
# command = !clean_expired.nil? || !clean_pattern.nil? ? CLEANUP : LIST
|
55
|
-
#
|
61
|
+
#
|
56
62
|
Style/TernaryParentheses:
|
57
63
|
Enabled: false
|
58
64
|
|
@@ -213,6 +213,13 @@ module FastlaneCore
|
|
213
213
|
keychain_path
|
214
214
|
end
|
215
215
|
|
216
|
+
# @return true if XCode version is higher than 8.3
|
217
|
+
def self.xcode_at_least?(version)
|
218
|
+
FastlaneCore::UI.user_error!("Unable to locate Xcode. Please make sure to have Xcode installed on your machine") if xcode_version.nil?
|
219
|
+
v = xcode_version
|
220
|
+
Gem::Version.new(v) >= Gem::Version.new(version)
|
221
|
+
end
|
222
|
+
|
216
223
|
# @return the full path to the iTMSTransporter executable
|
217
224
|
def self.itms_path
|
218
225
|
return ENV["FASTLANE_ITUNES_TRANSPORTER_PATH"] if FastlaneCore::Env.truthy?("FASTLANE_ITUNES_TRANSPORTER_PATH")
|
@@ -44,7 +44,7 @@ module FastlaneCore
|
|
44
44
|
value = ""
|
45
45
|
array.each do |l|
|
46
46
|
colored_line = l
|
47
|
-
colored_line = "#{colors.first
|
47
|
+
colored_line = "#{colors.first}#{l}#{colors.last}" if colors.length > 0
|
48
48
|
value << colored_line
|
49
49
|
value << "\n"
|
50
50
|
end
|
@@ -68,15 +68,10 @@ module FastlaneCore
|
|
68
68
|
return value.middle_truncate(max_value_length)
|
69
69
|
elsif transform == :newline
|
70
70
|
# remove all fixed newlines as it may mess up the output
|
71
|
-
value.
|
71
|
+
value.gsub!("\n", " ") if value.kind_of?(String)
|
72
72
|
if value.length >= max_value_length
|
73
|
-
colors = value.scan(
|
74
|
-
|
75
|
-
colors.each do |color|
|
76
|
-
value.delete!(color.first)
|
77
|
-
value.delete!(color.last)
|
78
|
-
end
|
79
|
-
end
|
73
|
+
colors = value.scan(/\e\[.*?m/)
|
74
|
+
colors.each { |color| value.gsub!(color, '') }
|
80
75
|
lines = value.wordwrap(max_value_length)
|
81
76
|
return colorize_array(lines, colors)
|
82
77
|
end
|
@@ -279,9 +279,14 @@ module FastlaneCore
|
|
279
279
|
def build_xcodebuild_showbuildsettings_command
|
280
280
|
# We also need to pass the workspace and scheme to this command.
|
281
281
|
#
|
282
|
-
# The 'clean' portion of this command
|
282
|
+
# The 'clean' portion of this command was a workaround for an xcodebuild bug with Core Data projects.
|
283
|
+
# This xcodebuild bug is fixed in Xcode 8.3 so 'clean' it's not necessary anymore
|
283
284
|
# See: https://github.com/fastlane/fastlane/pull/5626
|
284
|
-
|
285
|
+
if FastlaneCore::Helper.xcode_at_least?('8.3')
|
286
|
+
command = "xcodebuild -showBuildSettings #{xcodebuild_parameters.join(' ')}"
|
287
|
+
else
|
288
|
+
command = "xcodebuild clean -showBuildSettings #{xcodebuild_parameters.join(' ')}"
|
289
|
+
end
|
285
290
|
command += " 2> /dev/null" if xcodebuild_suppress_stderr
|
286
291
|
command
|
287
292
|
end
|
@@ -103,18 +103,18 @@ module Commander
|
|
103
103
|
FastlaneCore::UI.important("pilot crashed")
|
104
104
|
FastlaneCore::UI.important("-------------")
|
105
105
|
FastlaneCore::UI.error("Unfortunately the TestFlight update from 11th April 2017 changed")
|
106
|
-
FastlaneCore::UI.error("the way Testers, Groups and Builds are managed on
|
107
|
-
FastlaneCore::UI.error("We
|
108
|
-
FastlaneCore::UI.error("
|
109
|
-
FastlaneCore::UI.error("
|
106
|
+
FastlaneCore::UI.error("the way Testers, Groups, and Builds are managed on iTunesConnect.")
|
107
|
+
FastlaneCore::UI.error("We have already fixed a number of features including submitting")
|
108
|
+
FastlaneCore::UI.error("builds for testing, adding and removing testers from groups, and")
|
109
|
+
FastlaneCore::UI.error("waiting for builds to process.")
|
110
110
|
FastlaneCore::UI.error("")
|
111
|
-
FastlaneCore::UI.error("Please
|
111
|
+
FastlaneCore::UI.error("Please stay tuned for more updates from _fastlane_ as we fix more issues!")
|
112
112
|
FastlaneCore::UI.error("")
|
113
|
-
FastlaneCore::UI.error("Original error message: #{e}")
|
114
113
|
if FastlaneCore::Globals.verbose?
|
115
114
|
raise e # on verbose mode, we want to show the original stack trace
|
116
115
|
else
|
117
|
-
FastlaneCore::UI.
|
116
|
+
FastlaneCore::UI.error("Original error message:")
|
117
|
+
FastlaneCore::UI.user_error!(e.message)
|
118
118
|
end
|
119
119
|
end
|
120
120
|
|
data/gym/lib/gym/options.rb
CHANGED
@@ -100,6 +100,11 @@ module Gym
|
|
100
100
|
env_name: "GYM_CODE_SIGNING_IDENTITY",
|
101
101
|
description: "The name of the code signing identity to use. It has to match the name exactly. e.g. 'iPhone Distribution: SunApps GmbH'",
|
102
102
|
optional: true),
|
103
|
+
FastlaneCore::ConfigItem.new(key: :skip_package_ipa,
|
104
|
+
env_name: "GYM_SKIP_PACKAGE_IPA",
|
105
|
+
description: "Should we skip packaging the ipa?",
|
106
|
+
is_string: false,
|
107
|
+
default_value: false),
|
103
108
|
FastlaneCore::ConfigItem.new(key: :include_symbols,
|
104
109
|
short_option: "-m",
|
105
110
|
env_name: "GYM_INCLUDE_SYMBOLS",
|
data/gym/lib/gym/runner.rb
CHANGED
@@ -16,6 +16,8 @@ module Gym
|
|
16
16
|
|
17
17
|
if Gym.project.ios? || Gym.project.tvos?
|
18
18
|
fix_generic_archive # See https://github.com/fastlane/fastlane/pull/4325
|
19
|
+
return BuildCommandGenerator.archive_path if Gym.config[:skip_package_ipa]
|
20
|
+
|
19
21
|
package_app
|
20
22
|
fix_package
|
21
23
|
compress_and_move_dsym
|
data/gym/lib/gym/xcode.rb
CHANGED
@@ -18,9 +18,7 @@ module Gym
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def legacy_api_deprecated?
|
21
|
-
|
22
|
-
v = xcode_version
|
23
|
-
Gem::Version.new(v) >= Gem::Version.new('8.3.0')
|
21
|
+
FastlaneCore::Helper.xcode_at_least?('8.3')
|
24
22
|
end
|
25
23
|
end
|
26
24
|
end
|
@@ -29,7 +29,8 @@ module Pilot
|
|
29
29
|
begin
|
30
30
|
mgr.public_send(action, config)
|
31
31
|
rescue => ex
|
32
|
-
|
32
|
+
# no need to show the email address in the message if only one specified
|
33
|
+
message = (args.count > 1) ? "[#{address}]: #{ex}" : ex
|
33
34
|
failures << message
|
34
35
|
UI.error(message)
|
35
36
|
end
|
@@ -7,40 +7,39 @@ module Pilot
|
|
7
7
|
def add_tester(options)
|
8
8
|
start(options)
|
9
9
|
|
10
|
-
if config[:groups]
|
11
|
-
UI.important("Currently pilot doesn't support groups yet, we're working on restoring that functionality")
|
12
|
-
config[:groups] = nil
|
13
|
-
end
|
14
|
-
|
15
10
|
begin
|
16
|
-
tester = Spaceship::Tunes::Tester::
|
17
|
-
tester ||= Spaceship::Tunes::Tester::External.find(config[:email])
|
18
|
-
|
11
|
+
tester = Spaceship::Tunes::Tester::External.find(config[:email])
|
19
12
|
if tester
|
20
13
|
UI.success("Existing tester #{tester.email}")
|
21
14
|
else
|
15
|
+
# make sure the user isn't already an internal tester, because we don't support those
|
16
|
+
internal_tester = Spaceship::Tunes::Tester::Internal.find(config[:email])
|
17
|
+
UI.user_error!("#{internal_tester.email} is an internal tester; pilot does not support internal testers") unless internal_tester.nil?
|
18
|
+
|
22
19
|
tester = Spaceship::Tunes::Tester::External.create!(email: config[:email],
|
23
20
|
first_name: config[:first_name],
|
24
21
|
last_name: config[:last_name])
|
25
|
-
UI.success("Successfully
|
26
|
-
end
|
27
|
-
|
28
|
-
app_filter = (config[:apple_id] || config[:app_identifier])
|
29
|
-
if app_filter
|
30
|
-
begin
|
31
|
-
app = Spaceship::Application.find(app_filter)
|
32
|
-
UI.user_error!("Couldn't find app with '#{app_filter}'") unless app
|
33
|
-
app.default_external_group.add_tester!(tester)
|
34
|
-
UI.success("Successfully added tester to app #{app_filter}")
|
35
|
-
rescue => ex
|
36
|
-
UI.error("Could not add #{tester.email} to app: #{ex}")
|
37
|
-
raise ex
|
38
|
-
end
|
22
|
+
UI.success("Successfully added tester: #{tester.email} to your account")
|
39
23
|
end
|
40
24
|
rescue => ex
|
41
25
|
UI.error("Could not create tester #{config[:email]}")
|
42
26
|
raise ex
|
43
27
|
end
|
28
|
+
|
29
|
+
app_filter = (config[:apple_id] || config[:app_identifier])
|
30
|
+
if app_filter
|
31
|
+
begin
|
32
|
+
app = Spaceship::Application.find(app_filter)
|
33
|
+
UI.user_error!("Couldn't find app with '#{app_filter}'") unless app
|
34
|
+
|
35
|
+
groups = add_tester_to_groups!(tester: tester, app: app, groups: config[:groups])
|
36
|
+
group_names = groups.map(&:name).join(", ")
|
37
|
+
UI.success("Successfully added tester to app #{app_filter} in group(s) #{group_names}")
|
38
|
+
rescue => ex
|
39
|
+
UI.error("Could not add #{tester.email} to app: #{app.name}")
|
40
|
+
raise ex
|
41
|
+
end
|
42
|
+
end
|
44
43
|
end
|
45
44
|
|
46
45
|
def find_tester(options)
|
@@ -59,7 +58,6 @@ module Pilot
|
|
59
58
|
start(options)
|
60
59
|
|
61
60
|
tester = Spaceship::Tunes::Tester::External.find(config[:email])
|
62
|
-
tester ||= Spaceship::Tunes::Tester::Internal.find(config[:email])
|
63
61
|
|
64
62
|
if tester
|
65
63
|
app_filter = (config[:apple_id] || config[:app_identifier])
|
@@ -67,8 +65,9 @@ module Pilot
|
|
67
65
|
begin
|
68
66
|
app = Spaceship::Application.find(app_filter)
|
69
67
|
UI.user_error!("Couldn't find app with '#{app_filter}'") unless app
|
70
|
-
|
71
|
-
|
68
|
+
groups = remove_tester_from_groups!(tester: tester, app: app, groups: config[:groups])
|
69
|
+
group_names = groups.map(&:name).join(", ")
|
70
|
+
UI.success("Successfully removed tester #{tester.email} from app #{app_filter} in group(s) #{group_names}")
|
72
71
|
rescue => ex
|
73
72
|
UI.error("Could not remove #{tester.email} from app: #{ex}")
|
74
73
|
raise ex
|
@@ -78,7 +77,10 @@ module Pilot
|
|
78
77
|
UI.success("Successfully removed tester #{tester.email}")
|
79
78
|
end
|
80
79
|
else
|
81
|
-
|
80
|
+
internal_tester = Spaceship::Tunes::Tester::Internal.find(config[:email])
|
81
|
+
UI.user_error!("#{internal_tester.email} is an internal tester; pilot does not support internal testers") unless internal_tester.nil?
|
82
|
+
|
83
|
+
UI.user_error!("Tester not found: #{config[:email]}")
|
82
84
|
end
|
83
85
|
end
|
84
86
|
|
@@ -93,7 +95,33 @@ module Pilot
|
|
93
95
|
end
|
94
96
|
end
|
95
97
|
|
96
|
-
|
98
|
+
private
|
99
|
+
|
100
|
+
def perform_for_groups_in_app(app: nil, groups: nil, &block)
|
101
|
+
if groups.nil?
|
102
|
+
default_external_group = app.default_external_group
|
103
|
+
if default_external_group.nil?
|
104
|
+
UI.user_error!("The app #{app.name} does not have a default external group. Please make sure to pass group names to the `:groups` option.")
|
105
|
+
end
|
106
|
+
test_flight_groups = [default_external_group]
|
107
|
+
else
|
108
|
+
test_flight_groups = Spaceship::TestFlight::Group.filter_groups(app_id: app.apple_id) do |group|
|
109
|
+
groups.include?(group.name)
|
110
|
+
end
|
111
|
+
|
112
|
+
UI.user_error!("There are no groups available matching the names passed to the `:groups` option.") if test_flight_groups.empty?
|
113
|
+
end
|
114
|
+
|
115
|
+
test_flight_groups.each(&block)
|
116
|
+
end
|
117
|
+
|
118
|
+
def add_tester_to_groups!(tester: nil, app: nil, groups: nil)
|
119
|
+
perform_for_groups_in_app(app: app, groups: groups) { |group| group.add_tester!(tester) }
|
120
|
+
end
|
121
|
+
|
122
|
+
def remove_tester_from_groups!(tester: nil, app: nil, groups: nil)
|
123
|
+
perform_for_groups_in_app(app: app, groups: groups) { |group| group.remove_tester!(tester) }
|
124
|
+
end
|
97
125
|
|
98
126
|
def list_testers_by_app(app_filter)
|
99
127
|
app = Spaceship::Application.find(app_filter)
|
@@ -27,8 +27,8 @@ module Spaceship::TestFlight
|
|
27
27
|
req.url url
|
28
28
|
req.body = {
|
29
29
|
"email" => tester.email,
|
30
|
-
"firstName" => tester.
|
31
|
-
"lastName" => tester.
|
30
|
+
"firstName" => tester.first_name,
|
31
|
+
"lastName" => tester.last_name
|
32
32
|
}.to_json
|
33
33
|
req.headers['Content-Type'] = 'application/json'
|
34
34
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastlane
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.29.0.beta.
|
4
|
+
version: 2.29.0.beta.20170422010059
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Felix Krause
|
@@ -15,7 +15,7 @@ authors:
|
|
15
15
|
autorequire:
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
|
-
date: 2017-04-
|
18
|
+
date: 2017-04-22 00:00:00.000000000 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: slack-notifier
|
@@ -1341,23 +1341,23 @@ metadata:
|
|
1341
1341
|
post_install_message:
|
1342
1342
|
rdoc_options: []
|
1343
1343
|
require_paths:
|
1344
|
-
-
|
1345
|
-
-
|
1346
|
-
-
|
1344
|
+
- pem/lib
|
1345
|
+
- produce/lib
|
1346
|
+
- gym/lib
|
1347
|
+
- sigh/lib
|
1347
1348
|
- cert/lib
|
1348
1349
|
- screengrab/lib
|
1349
|
-
- fastlane_core/lib
|
1350
1350
|
- match/lib
|
1351
|
-
- snapshot/lib
|
1352
|
-
- gym/lib
|
1353
|
-
- credentials_manager/lib
|
1354
|
-
- scan/lib
|
1355
|
-
- produce/lib
|
1356
|
-
- sigh/lib
|
1357
|
-
- fastlane/lib
|
1358
1351
|
- spaceship/lib
|
1359
|
-
-
|
1352
|
+
- scan/lib
|
1360
1353
|
- pilot/lib
|
1354
|
+
- fastlane_core/lib
|
1355
|
+
- snapshot/lib
|
1356
|
+
- fastlane/lib
|
1357
|
+
- deliver/lib
|
1358
|
+
- frameit/lib
|
1359
|
+
- supply/lib
|
1360
|
+
- credentials_manager/lib
|
1361
1361
|
required_ruby_version: !ruby/object:Gem::Requirement
|
1362
1362
|
requirements:
|
1363
1363
|
- - ">="
|