fastlane 1.100.0 → 1.101.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/.DS_Store +0 -0
- data/lib/assets/.DS_Store +0 -0
- data/lib/assets/completions/.DS_Store +0 -0
- data/lib/assets/s3_html_template.erb +24 -14
- data/lib/fastlane/.DS_Store +0 -0
- data/lib/fastlane/actions/actions_helper.rb +2 -2
- data/lib/fastlane/actions/bundle_install.rb +0 -2
- data/lib/fastlane/actions/commit_version_bump.rb +13 -2
- data/lib/fastlane/actions/git_tag_exists.rb +46 -0
- data/lib/fastlane/actions/hg_commit_version_bump.rb +0 -2
- data/lib/fastlane/actions/import_certificate.rb +5 -1
- data/lib/fastlane/actions/latest_testflight_build_number.rb +12 -6
- data/lib/fastlane/actions/oclint.rb +2 -2
- data/lib/fastlane/actions/s3.rb +4 -3
- data/lib/fastlane/actions/scan.rb +2 -1
- data/lib/fastlane/actions/set_github_release.rb +0 -2
- data/lib/fastlane/actions/update_fastlane.rb +0 -2
- data/lib/fastlane/actions/update_project_provisioning.rb +0 -2
- data/lib/fastlane/actions/xcode_server_get_assets.rb +0 -2
- data/lib/fastlane/actions/xcodebuild.rb +6 -4
- data/lib/fastlane/cli_tools_distributor.rb +6 -1
- data/lib/fastlane/commands_generator.rb +1 -6
- data/lib/fastlane/erb_template_helper.rb +1 -1
- data/lib/fastlane/plugins/plugin_manager.rb +4 -1
- data/lib/fastlane/plugins/template/.rubocop.yml +7 -12
- data/lib/fastlane/runner.rb +0 -2
- data/lib/fastlane/{actions → setup}/.DS_Store +0 -0
- data/lib/fastlane/setup/crashlytics_beta.rb +10 -3
- data/lib/fastlane/setup/crashlytics_beta_command_line_handler.rb +2 -0
- data/lib/fastlane/setup/crashlytics_beta_info.rb +9 -0
- data/lib/fastlane/setup/crashlytics_beta_info_collector.rb +6 -6
- data/lib/fastlane/setup/crashlytics_beta_ui.rb +1 -4
- data/lib/fastlane/version.rb +1 -1
- metadata +17 -18
- data/lib/fastlane/actions/device_grid/.DS_Store +0 -0
- data/lib/fastlane/plugins/.DS_Store +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5df8150feaee8ad3fb0a24f99f5448f6de813ee0
|
4
|
+
data.tar.gz: b83e90b4b915b1260c6cd90e0a99629506d2abcb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3a4c3a375508c106d336a1550f4da41e2560590d5a4f1c9b106ffa786dfeb9ff1870e59b491d711d5c1bdabc4113adcdaef64f2046fea1051e452dd1f0533bf2
|
7
|
+
data.tar.gz: e85785e5fad78ffa4a50c38f002a44063b2d1a0a6926300cc7135734a826d86d5c19bf6d73c8f613bfd023d1757cb11869f1f27caf174f6b6389ac806c7be645
|
data/lib/.DS_Store
CHANGED
Binary file
|
data/lib/assets/.DS_Store
CHANGED
Binary file
|
Binary file
|
@@ -63,7 +63,7 @@
|
|
63
63
|
</span> -->
|
64
64
|
</div>
|
65
65
|
|
66
|
-
<h3 id="
|
66
|
+
<h3 id="invalid-device">Please open this page on your iPhone!</h3>
|
67
67
|
|
68
68
|
<p id="finished">
|
69
69
|
App is being installed. Close Safari using the home button.
|
@@ -76,20 +76,30 @@
|
|
76
76
|
</body>
|
77
77
|
|
78
78
|
<script type='text/javascript'>
|
79
|
-
//
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
document.getElementById("
|
79
|
+
// Array of supported devices, 1 is iPhone, 2 is iPad
|
80
|
+
var deviceFamily = <%= device_family %>;
|
81
|
+
|
82
|
+
function isIphoneValid() {
|
83
|
+
return deviceFamily.indexOf(1) != -1;
|
84
|
+
}
|
85
|
+
|
86
|
+
function showError(error) {
|
87
|
+
document.getElementById("ios").remove();
|
88
|
+
document.getElementById("invalid-device").innerHTML = error;
|
88
89
|
}
|
89
|
-
|
90
|
-
{
|
91
|
-
document.getElementById("
|
92
|
-
|
90
|
+
|
91
|
+
function showInstallLink() {
|
92
|
+
document.getElementById("invalid-device").remove();
|
93
|
+
}
|
94
|
+
|
95
|
+
if (/iPhone|iPod/i.test(navigator.userAgent) && isIphoneValid() ) {
|
96
|
+
showInstallLink();
|
97
|
+
} else if (/iPad/i.test(navigator.userAgent)) {
|
98
|
+
// All apps (even "iPhone only") can be installed on iPads
|
99
|
+
showInstallLink()
|
100
|
+
} else {
|
101
|
+
var validDeviceName = isIphoneValid() ? "iOS device" : "iPad";
|
102
|
+
showError("Please open this page on your " + validDeviceName + "!");
|
93
103
|
}
|
94
104
|
</script>
|
95
105
|
</html>
|
data/lib/fastlane/.DS_Store
CHANGED
Binary file
|
@@ -104,13 +104,13 @@ module Fastlane
|
|
104
104
|
else
|
105
105
|
UI.error "Could not find method 'run' in class #{class_name}."
|
106
106
|
UI.error 'For more information, check out the docs: https://github.com/fastlane/fastlane/tree/master/fastlane'
|
107
|
-
UI.user_error!("Action '#{file_name}' is damaged!")
|
107
|
+
UI.user_error!("Action '#{file_name}' is damaged!", show_github_issues: true)
|
108
108
|
end
|
109
109
|
rescue NameError
|
110
110
|
# Action not found
|
111
111
|
UI.error "Could not find '#{class_name}' class defined."
|
112
112
|
UI.error 'For more information, check out the docs: https://github.com/fastlane/fastlane/tree/master/fastlane'
|
113
|
-
UI.user_error!("Action '#{file_name}' is damaged!")
|
113
|
+
UI.user_error!("Action '#{file_name}' is damaged!", show_github_issues: true)
|
114
114
|
end
|
115
115
|
end
|
116
116
|
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
module Fastlane
|
2
2
|
module Actions
|
3
3
|
class BundleInstallAction < Action
|
4
|
-
# rubocop:disable Metrics/CyclomaticComplexity
|
5
4
|
# rubocop:disable Metrics/PerceivedComplexity
|
6
5
|
def self.run(params)
|
7
6
|
if gemfile_exists?(params)
|
@@ -31,7 +30,6 @@ module Fastlane
|
|
31
30
|
UI.message("No Gemfile found")
|
32
31
|
end
|
33
32
|
end
|
34
|
-
# rubocop:enable Metrics/CyclomaticComplexity
|
35
33
|
# rubocop:enable Metrics/PerceivedComplexity
|
36
34
|
|
37
35
|
def self.gemfile_exists?(params)
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# rubocop:disable Metrics/AbcSize
|
2
1
|
module Fastlane
|
3
2
|
module Actions
|
4
3
|
# Commits the current changes in the repo as a version bump, checking to make sure only files which contain version information have been changed.
|
@@ -55,6 +54,14 @@ module Fastlane
|
|
55
54
|
end
|
56
55
|
# rubocop:enable Style/MultilineBlockChain
|
57
56
|
|
57
|
+
# Removes .plist files that matched the given expression in the 'ignore' parameter
|
58
|
+
ignore_expression = params[:ignore]
|
59
|
+
if ignore_expression
|
60
|
+
info_plist_files.select! do |info_plist_file|
|
61
|
+
!info_plist_file.match(ignore_expression)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
58
65
|
# create our list of files that we expect to have changed, they should all be relative to the project root, which should be equal to the git workdir root
|
59
66
|
expected_changed_files = []
|
60
67
|
expected_changed_files << pbxproj_path
|
@@ -139,6 +146,11 @@ module Fastlane
|
|
139
146
|
description: "Include Settings.bundle/Root.plist with version bump",
|
140
147
|
optional: true,
|
141
148
|
default_value: false,
|
149
|
+
is_string: false),
|
150
|
+
FastlaneCore::ConfigItem.new(key: :ignore,
|
151
|
+
description: "A regular expression used to filter matched plist files to be modified",
|
152
|
+
optional: true,
|
153
|
+
default_value: nil,
|
142
154
|
is_string: false)
|
143
155
|
]
|
144
156
|
end
|
@@ -153,4 +165,3 @@ module Fastlane
|
|
153
165
|
end
|
154
166
|
end
|
155
167
|
end
|
156
|
-
# rubocop:enable Metrics/AbcSize
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Fastlane
|
2
|
+
module Actions
|
3
|
+
class GitTagExistsAction < Action
|
4
|
+
def self.run(params)
|
5
|
+
result = Actions.sh("git rev-parse -q --verify refs/tags/#{params[:tag].shellescape} || true", log: $verbose).chomp
|
6
|
+
!result.empty?
|
7
|
+
end
|
8
|
+
|
9
|
+
#####################################################
|
10
|
+
# @!group Documentation
|
11
|
+
#####################################################
|
12
|
+
|
13
|
+
def self.description
|
14
|
+
"Checks if the git tag with the given name exists in the current repo"
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.details
|
18
|
+
nil
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.available_options
|
22
|
+
[
|
23
|
+
FastlaneCore::ConfigItem.new(key: :tag,
|
24
|
+
description: "The tag name that should be checked")
|
25
|
+
]
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.return_value
|
29
|
+
"Boolean value whether the tag exists or not"
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.output
|
33
|
+
[
|
34
|
+
]
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.authors
|
38
|
+
["antondomashnev"]
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.is_supported?(platform)
|
42
|
+
true
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -9,7 +9,7 @@ module Fastlane
|
|
9
9
|
command << " -T /usr/bin/codesign"
|
10
10
|
command << " -T /usr/bin/security"
|
11
11
|
|
12
|
-
Fastlane::Actions.sh(command, log:
|
12
|
+
Fastlane::Actions.sh(command, log: params[:log_output])
|
13
13
|
end
|
14
14
|
|
15
15
|
def self.description
|
@@ -27,6 +27,10 @@ module Fastlane
|
|
27
27
|
optional: false),
|
28
28
|
FastlaneCore::ConfigItem.new(key: :certificate_password,
|
29
29
|
description: "Certificate password",
|
30
|
+
optional: true),
|
31
|
+
FastlaneCore::ConfigItem.new(key: :log_output,
|
32
|
+
description: "If output should be logged to the console",
|
33
|
+
default_value: false,
|
30
34
|
optional: true)
|
31
35
|
]
|
32
36
|
end
|
@@ -19,8 +19,14 @@ module Fastlane
|
|
19
19
|
version_number = params[:version]
|
20
20
|
unless version_number
|
21
21
|
# Automatically fetch the latest version in testflight
|
22
|
-
|
23
|
-
|
22
|
+
begin
|
23
|
+
testflight_version = app.build_trains.keys.last
|
24
|
+
rescue
|
25
|
+
UI.user_error!("could not find any versions on iTC - and 'version' option is not set") unless params[:version]
|
26
|
+
testflight_version = params[:version]
|
27
|
+
end
|
28
|
+
if testflight_version
|
29
|
+
version_number = testflight_version
|
24
30
|
else
|
25
31
|
UI.message("You have to specify a new version number: ")
|
26
32
|
version_number = STDIN.gets.strip
|
@@ -29,8 +35,8 @@ module Fastlane
|
|
29
35
|
|
30
36
|
UI.message("Fetching the latest build number for version #{version_number}")
|
31
37
|
|
32
|
-
train = app.build_trains[version_number]
|
33
38
|
begin
|
39
|
+
train = app.build_trains[version_number]
|
34
40
|
build_number = train.builds.map(&:build_version).map(&:to_i).sort.last
|
35
41
|
rescue
|
36
42
|
UI.user_error!("could not find a build on iTC - and 'initial_build_number' option is not set") unless params[:initial_build_number]
|
@@ -73,14 +79,14 @@ module Fastlane
|
|
73
79
|
description: "The version number whose latest build number we want",
|
74
80
|
optional: true),
|
75
81
|
FastlaneCore::ConfigItem.new(key: :initial_build_number,
|
76
|
-
env_name: "
|
82
|
+
env_name: "INITIAL_BUILD_NUMBER",
|
77
83
|
description: "sets the build number to given value if no build is in current train",
|
78
|
-
|
84
|
+
default_value: 1,
|
79
85
|
is_string: false),
|
80
86
|
FastlaneCore::ConfigItem.new(key: :team_id,
|
81
87
|
env_name: "FASTLANE_TEAM_ID",
|
82
88
|
description: "Your team ID if you're in multiple teams",
|
83
|
-
default_value: CredentialsManager::AppfileConfig.try_fetch_value(:
|
89
|
+
default_value: CredentialsManager::AppfileConfig.try_fetch_value(:itc_team_id),
|
84
90
|
optional: true)
|
85
91
|
]
|
86
92
|
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
2
1
|
module Fastlane
|
3
2
|
module Actions
|
4
3
|
module SharedValues
|
@@ -6,6 +5,7 @@ module Fastlane
|
|
6
5
|
end
|
7
6
|
|
8
7
|
class OclintAction < Action
|
8
|
+
# rubocop:disable Metrics/PerceivedComplexity
|
9
9
|
def self.run(params)
|
10
10
|
oclint_path = params[:oclint_path]
|
11
11
|
if `which #{oclint_path}`.to_s.empty? and !Helper.test?
|
@@ -190,6 +190,7 @@ module Fastlane
|
|
190
190
|
default_value: false)
|
191
191
|
]
|
192
192
|
end
|
193
|
+
# rubocop:enable Metrics/PerceivedComplexity
|
193
194
|
|
194
195
|
def self.output
|
195
196
|
[
|
@@ -207,4 +208,3 @@ module Fastlane
|
|
207
208
|
end
|
208
209
|
end
|
209
210
|
end
|
210
|
-
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
data/lib/fastlane/actions/s3.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# rubocop:disable Metrics/AbcSize
|
2
1
|
require 'fastlane/erb_template_helper'
|
3
2
|
require 'ostruct'
|
4
3
|
|
@@ -112,6 +111,7 @@ module Fastlane
|
|
112
111
|
bundle_id = info['CFBundleIdentifier']
|
113
112
|
bundle_version = info['CFBundleShortVersionString']
|
114
113
|
title = info['CFBundleName']
|
114
|
+
device_family = info['UIDeviceFamily']
|
115
115
|
full_version = "#{bundle_version}.#{build_num}"
|
116
116
|
|
117
117
|
# Creating plist and html names
|
@@ -146,6 +146,7 @@ module Fastlane
|
|
146
146
|
else
|
147
147
|
html_template = eth.load("s3_html_template")
|
148
148
|
end
|
149
|
+
|
149
150
|
html_render = eth.render(html_template, {
|
150
151
|
url: plist_url,
|
151
152
|
plist_url: plist_url,
|
@@ -153,7 +154,8 @@ module Fastlane
|
|
153
154
|
build_num: build_num,
|
154
155
|
bundle_id: bundle_id,
|
155
156
|
bundle_version: bundle_version,
|
156
|
-
title: title
|
157
|
+
title: title,
|
158
|
+
device_family: device_family
|
157
159
|
})
|
158
160
|
|
159
161
|
# Creates version from template
|
@@ -351,4 +353,3 @@ module Fastlane
|
|
351
353
|
end
|
352
354
|
end
|
353
355
|
end
|
354
|
-
# rubocop:enable Metrics/AbcSize
|
@@ -10,14 +10,15 @@ module Fastlane
|
|
10
10
|
require 'scan'
|
11
11
|
|
12
12
|
begin
|
13
|
+
destination = values[:destination] # save destination value which can be later overridden
|
13
14
|
Scan.config = values # we set this here to auto-detect missing values, which we need later on
|
14
15
|
unless values[:derived_data_path].to_s.empty?
|
15
16
|
plist_files_before = Dir["#{values[:derived_data_path]}/**/Logs/Test/*TestSummaries.plist"]
|
16
|
-
Scan.config[:destination] = nil # we have to do this, as otherwise a warning is shown to the user to not set this value
|
17
17
|
end
|
18
18
|
|
19
19
|
FastlaneCore::UpdateChecker.start_looking_for_update('scan') unless Helper.is_test?
|
20
20
|
|
21
|
+
values[:destination] = destination # restore destination value
|
21
22
|
Scan::Manager.new.work(values)
|
22
23
|
|
23
24
|
return true
|
@@ -26,7 +26,6 @@ module Fastlane
|
|
26
26
|
"match"
|
27
27
|
]
|
28
28
|
|
29
|
-
# rubocop:disable Metrics/AbcSize
|
30
29
|
def self.run(options)
|
31
30
|
if options[:no_update]
|
32
31
|
return
|
@@ -103,7 +102,6 @@ module Fastlane
|
|
103
102
|
exec "FL_NO_UPDATE=true #{$PROGRAM_NAME} #{ARGV.join ' '}"
|
104
103
|
end
|
105
104
|
end
|
106
|
-
# rubocop:enable Metrics/AbcSize
|
107
105
|
|
108
106
|
def self.all_installed_tools
|
109
107
|
Gem::Specification.select { |s| ALL_TOOLS.include? s.name }.map(&:name).uniq
|
@@ -280,10 +280,12 @@ module Fastlane
|
|
280
280
|
# Normalize some values
|
281
281
|
export_options[:teamID] = CredentialsManager::AppfileConfig.try_fetch_value(:team_id) if !export_options[:teamID] && CredentialsManager::AppfileConfig.try_fetch_value(:team_id)
|
282
282
|
export_options[:onDemandResourcesAssetPacksBaseURL] = URI.escape(export_options[:onDemandResourcesAssetPacksBaseURL]) if export_options[:onDemandResourcesAssetPacksBaseURL]
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
283
|
+
if export_options[:manifest]
|
284
|
+
export_options[:manifest][:appURL] = URI.escape(export_options[:manifest][:appURL]) if export_options[:manifest][:appURL]
|
285
|
+
export_options[:manifest][:displayImageURL] = URI.escape(export_options[:manifest][:displayImageURL]) if export_options[:manifest][:displayImageURL]
|
286
|
+
export_options[:manifest][:fullSizeImageURL] = URI.escape(export_options[:manifest][:fullSizeImageURL]) if export_options[:manifest][:fullSizeImageURL]
|
287
|
+
export_options[:manifest][:assetPackManifestURL] = URI.escape(export_options[:manifest][:assetPackManifestURL]) if export_options[:manifest][:assetPackManifestURL]
|
288
|
+
end
|
287
289
|
|
288
290
|
# Saves options to plist
|
289
291
|
path = "#{Tempfile.new('exportOptions').path}.plist"
|
@@ -4,12 +4,17 @@ module Fastlane
|
|
4
4
|
# tool or fastlane itself
|
5
5
|
class CLIToolsDistributor
|
6
6
|
class << self
|
7
|
+
def running_version_command?
|
8
|
+
ARGV.include?('-v') || ARGV.include?('--version')
|
9
|
+
end
|
10
|
+
|
7
11
|
def take_off
|
8
12
|
before_import_time = Time.now
|
9
13
|
|
10
14
|
require "fastlane" # this might take a long time if there is no Gemfile :(
|
11
15
|
|
12
|
-
if
|
16
|
+
# We want to avoid printing output other than the version number if we are running `fastlane -v`
|
17
|
+
if Time.now - before_import_time > 3 && !running_version_command?
|
13
18
|
print_slow_fastlane_warning
|
14
19
|
end
|
15
20
|
|
@@ -23,8 +23,6 @@ module Fastlane
|
|
23
23
|
Fastlane::PluginUpdateManager.show_update_status
|
24
24
|
end
|
25
25
|
|
26
|
-
# rubocop:disable Metrics/AbcSize
|
27
|
-
# rubocop:disable Metrics/MethodLength
|
28
26
|
def run
|
29
27
|
program :version, Fastlane::VERSION
|
30
28
|
program :description, [
|
@@ -43,7 +41,7 @@ module Fastlane
|
|
43
41
|
|
44
42
|
command :trigger do |c|
|
45
43
|
c.syntax = 'fastlane [lane]'
|
46
|
-
c.description = 'Run a
|
44
|
+
c.description = 'Run a specific lane. Pass the lane name and optionally the platform first.'
|
47
45
|
c.option '--env STRING', String, 'Add environment to use with `dotenv`'
|
48
46
|
|
49
47
|
c.action do |args, options|
|
@@ -265,8 +263,5 @@ module Fastlane
|
|
265
263
|
UI.important("Instead please submit an issue on GitHub: https://github.com/fastlane/fastlane/issues")
|
266
264
|
UI.important("This command will be removed in one of the next releases")
|
267
265
|
end
|
268
|
-
|
269
|
-
# rubocop:enable Metrics/AbcSize
|
270
|
-
# rubocop:enable Metrics/MethodLength
|
271
266
|
end
|
272
267
|
end
|
@@ -8,7 +8,7 @@ module Fastlane
|
|
8
8
|
|
9
9
|
def self.load_from_path(template_filepath)
|
10
10
|
unless File.exist?(template_filepath)
|
11
|
-
UI.user_error!("Could not find
|
11
|
+
UI.user_error!("Could not find template at path '#{template_filepath}'")
|
12
12
|
end
|
13
13
|
File.read(template_filepath)
|
14
14
|
end
|
@@ -293,7 +293,10 @@ module Fastlane
|
|
293
293
|
UI.error("Please follow the troubleshooting guide: #{TROUBLESHOOTING_URL}")
|
294
294
|
end
|
295
295
|
|
296
|
-
|
296
|
+
skip_print_plugin_info = self.plugin_references.empty? || CLIToolsDistributor.running_version_command?
|
297
|
+
|
298
|
+
# We want to avoid printing output other than the version number if we are running `fastlane -v`
|
299
|
+
print_plugin_information(self.plugin_references) unless skip_print_plugin_info
|
297
300
|
end
|
298
301
|
|
299
302
|
# Prints a table all the plugins that were loaded
|
@@ -47,9 +47,13 @@ Style/SpecialGlobalVars:
|
|
47
47
|
Enabled: false
|
48
48
|
|
49
49
|
Metrics/AbcSize:
|
50
|
-
|
51
|
-
|
52
|
-
|
50
|
+
Enabled: false
|
51
|
+
|
52
|
+
Metrics/MethodLength:
|
53
|
+
Enabled: false
|
54
|
+
|
55
|
+
Metrics/CyclomaticComplexity:
|
56
|
+
Enabled: false
|
53
57
|
|
54
58
|
# The %w might be confusing for new users
|
55
59
|
Style/WordArray:
|
@@ -75,8 +79,6 @@ Style/AndOr:
|
|
75
79
|
Metrics/ClassLength:
|
76
80
|
Max: 320
|
77
81
|
|
78
|
-
Metrics/CyclomaticComplexity:
|
79
|
-
Max: 17
|
80
82
|
|
81
83
|
# Configuration parameters: AllowURI, URISchemes.
|
82
84
|
Metrics/LineLength:
|
@@ -131,13 +133,6 @@ Style/SpaceAroundOperators:
|
|
131
133
|
Exclude:
|
132
134
|
- '**/spec/actions_specs/xcodebuild_spec.rb'
|
133
135
|
|
134
|
-
Metrics/MethodLength:
|
135
|
-
Exclude:
|
136
|
-
- '**/lib/fastlane/actions/*.rb'
|
137
|
-
- '**/bin/fastlane'
|
138
|
-
- '**/lib/*/options.rb'
|
139
|
-
Max: 60
|
140
|
-
|
141
136
|
AllCops:
|
142
137
|
Include:
|
143
138
|
- '**/fastlane/Fastfile'
|
data/lib/fastlane/runner.rb
CHANGED
@@ -18,7 +18,6 @@ module Fastlane
|
|
18
18
|
# @param lane_name The name of the lane to execute
|
19
19
|
# @param platform The name of the platform to execute
|
20
20
|
# @param parameters [Hash] The parameters passed from the command line to the lane
|
21
|
-
# rubocop:disable Metrics/AbcSize
|
22
21
|
def execute(lane, platform = nil, parameters = nil)
|
23
22
|
UI.crash!("No lane given") unless lane
|
24
23
|
|
@@ -68,7 +67,6 @@ module Fastlane
|
|
68
67
|
raise ex
|
69
68
|
end
|
70
69
|
end
|
71
|
-
# rubocop:enable Metrics/AbcSize
|
72
70
|
|
73
71
|
# @param filter_platform: Filter, to only show the lanes of a given platform
|
74
72
|
# @return an array of lanes (platform lane_name) to print them out to the user
|
Binary file
|
@@ -50,18 +50,25 @@ module Fastlane
|
|
50
50
|
crashlytics_path_arg = "\n crashlytics_path: '#{@beta_info.crashlytics_path}',"
|
51
51
|
end
|
52
52
|
|
53
|
+
beta_info_groups = @beta_info.groups_valid? ? "['#{@beta_info.groups.join("', '")}']" : "nil"
|
54
|
+
beta_info_emails = @beta_info.emails_valid? ? "['#{@beta_info.emails.join("', '")}']" : "nil"
|
55
|
+
|
53
56
|
# rubocop:disable Style/IndentationConsistency
|
54
57
|
%{ #
|
55
58
|
# Learn more here: https://github.com/fastlane/setups/blob/master/samples-ios/distribute-beta-build.md 🚀
|
56
59
|
#
|
57
|
-
lane :beta do
|
60
|
+
lane :beta do |values|
|
61
|
+
|
58
62
|
# set 'export_method' to 'ad-hoc' if your Crashlytics Beta distribution uses ad-hoc provisioning
|
59
63
|
gym(scheme: '#{@beta_info.schemes.first}', export_method: '#{@beta_info.export_method}')
|
60
64
|
|
65
|
+
emails = values[:dry_run_email] ? values[:dry_run_email] : #{beta_info_emails} # You can list more emails here
|
66
|
+
groups = values[:dry_run_email] ? nil : #{beta_info_groups} # You can define groups on the web and reference them here
|
67
|
+
|
61
68
|
crashlytics(api_token: '#{@beta_info.api_key}',
|
62
69
|
build_secret: '#{@beta_info.build_secret}',#{crashlytics_path_arg}
|
63
|
-
emails:
|
64
|
-
|
70
|
+
emails: emails,
|
71
|
+
groups: groups,
|
65
72
|
notes: 'Distributed with fastlane', # Check out the changelog_from_git_commits action!
|
66
73
|
notifications: true) # Should this distribution notify your testers via email?
|
67
74
|
|
@@ -6,6 +6,7 @@ module Fastlane
|
|
6
6
|
beta_info.api_key = options.api_key
|
7
7
|
beta_info.build_secret = options.build_secret
|
8
8
|
beta_info.emails = options.emails
|
9
|
+
beta_info.groups = options.groups
|
9
10
|
beta_info.schemes = [options.scheme] if options.scheme
|
10
11
|
beta_info.export_method = options.export_method
|
11
12
|
|
@@ -17,6 +18,7 @@ module Fastlane
|
|
17
18
|
command.option '--api_key STRING', String, 'Crashlytics API key'
|
18
19
|
command.option '--build_secret STRING', String, 'Crashlytics build secret'
|
19
20
|
command.option '--emails ARRAY', Array, 'List of emails to invite'
|
21
|
+
command.option '--groups ARRAY', Array, 'List of group aliases to invite'
|
20
22
|
command.option '--scheme STRING', String, 'Xcode scheme'
|
21
23
|
command.option '--export_method STRING', String, 'Provisioning profile type (ad-hoc, enterprise, development)'
|
22
24
|
end
|
@@ -6,6 +6,7 @@ module Fastlane
|
|
6
6
|
attr_accessor :api_key
|
7
7
|
attr_accessor :build_secret
|
8
8
|
attr_accessor :emails
|
9
|
+
attr_accessor :groups
|
9
10
|
attr_accessor :schemes
|
10
11
|
attr_accessor :export_method
|
11
12
|
|
@@ -17,6 +18,10 @@ module Fastlane
|
|
17
18
|
@emails = emails ? emails.compact : nil
|
18
19
|
end
|
19
20
|
|
21
|
+
def groups=(groups)
|
22
|
+
@groups = groups ? groups.compact : nil
|
23
|
+
end
|
24
|
+
|
20
25
|
def api_key_valid?
|
21
26
|
!api_key.nil? && api_key.to_s.length == 40
|
22
27
|
end
|
@@ -33,6 +38,10 @@ module Fastlane
|
|
33
38
|
!emails.nil? && emails.any? { |email| !email.empty? }
|
34
39
|
end
|
35
40
|
|
41
|
+
def groups_valid?
|
42
|
+
!groups.nil? && groups.any? { |groups| !groups.empty? }
|
43
|
+
end
|
44
|
+
|
36
45
|
def schemes_valid?
|
37
46
|
!schemes.nil? && schemes.size == 1 && !schemes.first.empty?
|
38
47
|
end
|
@@ -88,7 +88,7 @@ module Fastlane
|
|
88
88
|
prompt_for_build_secret(info)
|
89
89
|
end
|
90
90
|
|
91
|
-
if !info.emails || !info.emails_valid?
|
91
|
+
if (!info.emails || !info.emails_valid?) && !info.groups
|
92
92
|
@ui.important "Your email address couldn't be discovered from your project 🔍"
|
93
93
|
prompt_for_email(info)
|
94
94
|
end
|
@@ -113,7 +113,7 @@ module Fastlane
|
|
113
113
|
|
114
114
|
def prompt_for_api_key(info)
|
115
115
|
loop do
|
116
|
-
info.api_key = @ui.
|
116
|
+
info.api_key = @ui.input("\nPlease provide your Fabric organization's API Key:").strip
|
117
117
|
break if info.api_key_valid?
|
118
118
|
@ui.message "The API Key you provided was invalid (must be 40 characters)."
|
119
119
|
end
|
@@ -121,7 +121,7 @@ module Fastlane
|
|
121
121
|
|
122
122
|
def prompt_for_build_secret(info)
|
123
123
|
loop do
|
124
|
-
info.build_secret = @ui.
|
124
|
+
info.build_secret = @ui.input("\nPlease provide your Fabric organization's Build Secret:").strip
|
125
125
|
break if info.build_secret_valid?
|
126
126
|
@ui.message "The Build Secret you provided was invalid (must be 64 characters)."
|
127
127
|
end
|
@@ -129,7 +129,7 @@ module Fastlane
|
|
129
129
|
|
130
130
|
def prompt_for_crashlytics_path(info)
|
131
131
|
loop do
|
132
|
-
info.crashlytics_path = @ui.
|
132
|
+
info.crashlytics_path = @ui.input("\nPlease provide the path to Crashlytics.framework:").strip
|
133
133
|
break if info.crashlytics_path_valid?
|
134
134
|
@ui.message "A submit binary could not be found at the framework path you provided."
|
135
135
|
end
|
@@ -137,7 +137,7 @@ module Fastlane
|
|
137
137
|
|
138
138
|
def prompt_for_email(info)
|
139
139
|
loop do
|
140
|
-
info.emails = [@ui.
|
140
|
+
info.emails = [@ui.input("\nPlease enter an email address to distribute the beta to:").strip]
|
141
141
|
break if info.emails_valid?
|
142
142
|
@ui.message "You must provide an email address."
|
143
143
|
end
|
@@ -147,7 +147,7 @@ module Fastlane
|
|
147
147
|
current_schemes = info.schemes
|
148
148
|
if current_schemes.nil? || current_schemes.empty?
|
149
149
|
loop do
|
150
|
-
info.schemes = [@ui.
|
150
|
+
info.schemes = [@ui.input("\nPlease enter the name of the scheme you would like to use:").strip]
|
151
151
|
break if info.schemes_valid?
|
152
152
|
@ui.message "You must provide a scheme name."
|
153
153
|
end
|
data/lib/fastlane/version.rb
CHANGED
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: 1.
|
4
|
+
version: 1.101.0
|
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: 2016-08-
|
18
|
+
date: 2016-08-18 00:00:00.000000000 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: krausefx-shenzhen
|
@@ -23,14 +23,14 @@ dependencies:
|
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.14.
|
26
|
+
version: 0.14.10
|
27
27
|
type: :runtime
|
28
28
|
prerelease: false
|
29
29
|
version_requirements: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.14.
|
33
|
+
version: 0.14.10
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: slack-notifier
|
36
36
|
requirement: !ruby/object:Gem::Requirement
|
@@ -183,7 +183,7 @@ dependencies:
|
|
183
183
|
requirements:
|
184
184
|
- - ">="
|
185
185
|
- !ruby/object:Gem::Version
|
186
|
-
version: 0.
|
186
|
+
version: 0.50.2
|
187
187
|
- - "<"
|
188
188
|
- !ruby/object:Gem::Version
|
189
189
|
version: 1.0.0
|
@@ -193,7 +193,7 @@ dependencies:
|
|
193
193
|
requirements:
|
194
194
|
- - ">="
|
195
195
|
- !ruby/object:Gem::Version
|
196
|
-
version: 0.
|
196
|
+
version: 0.50.2
|
197
197
|
- - "<"
|
198
198
|
- !ruby/object:Gem::Version
|
199
199
|
version: 1.0.0
|
@@ -237,7 +237,7 @@ dependencies:
|
|
237
237
|
requirements:
|
238
238
|
- - ">="
|
239
239
|
- !ruby/object:Gem::Version
|
240
|
-
version: 0.31.
|
240
|
+
version: 0.31.2
|
241
241
|
- - "<"
|
242
242
|
- !ruby/object:Gem::Version
|
243
243
|
version: 1.0.0
|
@@ -247,7 +247,7 @@ dependencies:
|
|
247
247
|
requirements:
|
248
248
|
- - ">="
|
249
249
|
- !ruby/object:Gem::Version
|
250
|
-
version: 0.31.
|
250
|
+
version: 0.31.2
|
251
251
|
- - "<"
|
252
252
|
- !ruby/object:Gem::Version
|
253
253
|
version: 1.0.0
|
@@ -277,7 +277,7 @@ dependencies:
|
|
277
277
|
requirements:
|
278
278
|
- - ">="
|
279
279
|
- !ruby/object:Gem::Version
|
280
|
-
version: 1.13.
|
280
|
+
version: 1.13.1
|
281
281
|
- - "<"
|
282
282
|
- !ruby/object:Gem::Version
|
283
283
|
version: 2.0.0
|
@@ -287,7 +287,7 @@ dependencies:
|
|
287
287
|
requirements:
|
288
288
|
- - ">="
|
289
289
|
- !ruby/object:Gem::Version
|
290
|
-
version: 1.13.
|
290
|
+
version: 1.13.1
|
291
291
|
- - "<"
|
292
292
|
- !ruby/object:Gem::Version
|
293
293
|
version: 2.0.0
|
@@ -437,7 +437,7 @@ dependencies:
|
|
437
437
|
requirements:
|
438
438
|
- - ">="
|
439
439
|
- !ruby/object:Gem::Version
|
440
|
-
version: 0.11.
|
440
|
+
version: 0.11.3
|
441
441
|
- - "<"
|
442
442
|
- !ruby/object:Gem::Version
|
443
443
|
version: 2.0.0
|
@@ -447,7 +447,7 @@ dependencies:
|
|
447
447
|
requirements:
|
448
448
|
- - ">="
|
449
449
|
- !ruby/object:Gem::Version
|
450
|
-
version: 0.11.
|
450
|
+
version: 0.11.3
|
451
451
|
- - "<"
|
452
452
|
- !ruby/object:Gem::Version
|
453
453
|
version: 2.0.0
|
@@ -477,7 +477,7 @@ dependencies:
|
|
477
477
|
requirements:
|
478
478
|
- - ">="
|
479
479
|
- !ruby/object:Gem::Version
|
480
|
-
version: 0.6.
|
480
|
+
version: 0.6.2
|
481
481
|
- - "<"
|
482
482
|
- !ruby/object:Gem::Version
|
483
483
|
version: 1.0.0
|
@@ -487,7 +487,7 @@ dependencies:
|
|
487
487
|
requirements:
|
488
488
|
- - ">="
|
489
489
|
- !ruby/object:Gem::Version
|
490
|
-
version: 0.6.
|
490
|
+
version: 0.6.2
|
491
491
|
- - "<"
|
492
492
|
- !ruby/object:Gem::Version
|
493
493
|
version: 1.0.0
|
@@ -714,7 +714,6 @@ files:
|
|
714
714
|
- lib/fastlane/.DS_Store
|
715
715
|
- lib/fastlane/action.rb
|
716
716
|
- lib/fastlane/action_collector.rb
|
717
|
-
- lib/fastlane/actions/.DS_Store
|
718
717
|
- lib/fastlane/actions/README.md
|
719
718
|
- lib/fastlane/actions/actions_helper.rb
|
720
719
|
- lib/fastlane/actions/adb.rb
|
@@ -754,7 +753,6 @@ files:
|
|
754
753
|
- lib/fastlane/actions/delete_keychain.rb
|
755
754
|
- lib/fastlane/actions/deliver.rb
|
756
755
|
- lib/fastlane/actions/deploygate.rb
|
757
|
-
- lib/fastlane/actions/device_grid/.DS_Store
|
758
756
|
- lib/fastlane/actions/device_grid/README.md
|
759
757
|
- lib/fastlane/actions/dotgpg_environment.rb
|
760
758
|
- lib/fastlane/actions/download.rb
|
@@ -779,6 +777,7 @@ files:
|
|
779
777
|
- lib/fastlane/actions/git_branch.rb
|
780
778
|
- lib/fastlane/actions/git_commit.rb
|
781
779
|
- lib/fastlane/actions/git_pull.rb
|
780
|
+
- lib/fastlane/actions/git_tag_exists.rb
|
782
781
|
- lib/fastlane/actions/gradle.rb
|
783
782
|
- lib/fastlane/actions/gym.rb
|
784
783
|
- lib/fastlane/actions/hg_add_tag.rb
|
@@ -917,7 +916,6 @@ files:
|
|
917
916
|
- lib/fastlane/new_action.rb
|
918
917
|
- lib/fastlane/one_off.rb
|
919
918
|
- lib/fastlane/other_action.rb
|
920
|
-
- lib/fastlane/plugins/.DS_Store
|
921
919
|
- lib/fastlane/plugins/plugin_fetcher.rb
|
922
920
|
- lib/fastlane/plugins/plugin_generator.rb
|
923
921
|
- lib/fastlane/plugins/plugin_generator_ui.rb
|
@@ -946,6 +944,7 @@ files:
|
|
946
944
|
- lib/fastlane/plugins/template/spec/%plugin_name%_action_spec.rb.erb
|
947
945
|
- lib/fastlane/plugins/template/spec/spec_helper.rb.erb
|
948
946
|
- lib/fastlane/runner.rb
|
947
|
+
- lib/fastlane/setup/.DS_Store
|
949
948
|
- lib/fastlane/setup/crashlytics_beta.rb
|
950
949
|
- lib/fastlane/setup/crashlytics_beta_command_line_handler.rb
|
951
950
|
- lib/fastlane/setup/crashlytics_beta_info.rb
|
@@ -979,7 +978,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
979
978
|
version: '0'
|
980
979
|
requirements: []
|
981
980
|
rubyforge_project:
|
982
|
-
rubygems_version: 2.
|
981
|
+
rubygems_version: 2.2.2
|
983
982
|
signing_key:
|
984
983
|
specification_version: 4
|
985
984
|
summary: The easiest way to automate building and releasing your iOS and Android apps
|
Binary file
|
Binary file
|