fastlane 2.30.0.beta.20170511010018 → 2.30.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 -0
- data/deliver/lib/deliver/upload_metadata.rb +1 -1
- data/fastlane/lib/fastlane/actions/opt_out_crash_reporting.rb +41 -0
- data/fastlane/lib/fastlane/actions/update_fastlane.rb +1 -2
- data/fastlane/lib/fastlane/environment_printer.rb +11 -13
- data/fastlane/lib/fastlane/runner.rb +3 -0
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane_core/lib/fastlane_core.rb +3 -0
- data/fastlane_core/lib/fastlane_core/configuration/configuration_file.rb +27 -6
- data/fastlane_core/lib/fastlane_core/crash_reporter/backtrace_sanitizer.rb +42 -0
- data/fastlane_core/lib/fastlane_core/crash_reporter/crash_report_generator.rb +50 -0
- data/fastlane_core/lib/fastlane_core/crash_reporter/crash_reporter.rb +82 -0
- data/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb +7 -0
- data/fastlane_core/lib/fastlane_core/update_checker/update_checker.rb +5 -1
- data/match/lib/match/encrypt.rb +3 -1
- data/snapshot/lib/assets/SnapshotHelper.swift +8 -1
- metadata +21 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b24de7dca69e16aea8b48239f2eb105cf61d42e4
|
4
|
+
data.tar.gz: abee9d945caa12cec5f5b84736e196db6ed6270e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 108860da51b20af99859e93b50f377797d6991f2fbd18b91c07f56c70905c6c4429b02a84e510f96c146a72f8289f4ea198f06fe26cf58d261a4c055c8362234
|
7
|
+
data.tar.gz: b7c2b1d67ed298ca2424eadede430719972b3a6e86a03365b4619cbfd5980afe937f6a1c90bd6e00c8cccf757086a794704cb3800359cf53713fae8272742a29
|
data/README.md
CHANGED
@@ -154,6 +154,12 @@ We have recently changed the destination service to which these metrics are repo
|
|
154
154
|
|
155
155
|
You can easily opt-out of metrics collection by adding `opt_out_usage` at the top of your `Fastfile` or by setting the environment variable `FASTLANE_OPT_OUT_USAGE`. Participating helps us provide the best possible support for _fastlane_, so we hope you'll consider it a plus! :heavy_plus_sign:
|
156
156
|
|
157
|
+
## Crash Reporting
|
158
|
+
|
159
|
+
In order to continuously improve stability, _fastlane_ will record crash reports with sanitized stacktraces. Sanitization removes personal information from the stacktrace and error message (including home directories, _fastlane_ path, gem paths, environment variables, and parameters).
|
160
|
+
|
161
|
+
You can easily opt-out of crash reporting by adding `opt_out_crash_reporting` at the top of your `Fastfile` or by setting the environment variable `FASTLANE_OPT_OUT_CRASH_REPORTING`. Just like metrics mentioned above, participating helps us provide the best possible support for _fastlane_, so we hope you'll consider it a plus! :heavy_plus_sign:
|
162
|
+
|
157
163
|
## Need Help?
|
158
164
|
|
159
165
|
Please [submit an issue](https://github.com/fastlane/fastlane/issues) on GitHub and provide information about your setup.
|
@@ -250,7 +250,7 @@ module Deliver
|
|
250
250
|
UI.user_error!("`trade_representative_contact_information` must be a hash", show_github_issues: true) unless info.kind_of?(Hash)
|
251
251
|
|
252
252
|
TRADE_REPRESENTATIVE_CONTACT_INFORMATION_VALUES.each do |key, option_name|
|
253
|
-
v.send("#{key}=", info[option_name].chomp) if info[option_name]
|
253
|
+
v.send("#{key}=", info[option_name].to_s.chomp) if info[option_name]
|
254
254
|
end
|
255
255
|
end
|
256
256
|
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Fastlane
|
2
|
+
module Actions
|
3
|
+
class OptOutCrashReportingAction < Action
|
4
|
+
def self.run(params)
|
5
|
+
ENV['FASTLANE_OPT_OUT_CRASH_REPORTING'] = "YES"
|
6
|
+
UI.message("Disabled crash reporting")
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.description
|
10
|
+
"This will prevent reports from being uploaded when _fastlane_ crashes"
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.details
|
14
|
+
[
|
15
|
+
"By default, fastlane will send a report when it crashes",
|
16
|
+
"The stacktrace is sanitized so no personal information is sent.",
|
17
|
+
"Learn more at https://github.com/fastlane/fastlane#crash-reporting",
|
18
|
+
"Add `opt_out_crash_reporting` at the top of your Fastfile to disable crash reporting"
|
19
|
+
].join(' ')
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.authors
|
23
|
+
['mpirri', 'ohayon']
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.is_supported?(platform)
|
27
|
+
true
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.example_code
|
31
|
+
[
|
32
|
+
'opt_out_crash_reporting # add this to the top of your Fastfile'
|
33
|
+
]
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.category
|
37
|
+
:misc
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -57,8 +57,7 @@ module Fastlane
|
|
57
57
|
update_needed.each do |tool_info|
|
58
58
|
tool = tool_info[0]
|
59
59
|
local_version = Gem::Version.new(highest_versions[tool].version)
|
60
|
-
|
61
|
-
latest_version = FastlaneCore::UpdateChecker.fetch_latest(update_url)
|
60
|
+
latest_version = FastlaneCore::UpdateChecker.fetch_latest(tool)
|
62
61
|
UI.message("Updating #{tool} from #{local_version} to #{latest_version} ... 🚀")
|
63
62
|
|
64
63
|
# Approximate_recommendation will create a string like "~> 0.10" from a version 0.10.0, e.g. one that is valid for versions >= 0.10 and <1.0
|
@@ -62,17 +62,16 @@ module Fastlane
|
|
62
62
|
table << "|--------|---------|\n"
|
63
63
|
plugin_manager.available_plugins.each do |plugin|
|
64
64
|
begin
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
65
|
+
installed_version = Fastlane::ActionCollector.determine_version(plugin)
|
66
|
+
latest_version = FastlaneCore::UpdateChecker.fetch_latest(plugin)
|
67
|
+
if Gem::Version.new(installed_version) == Gem::Version.new(latest_version)
|
68
|
+
update_status = "✅ Up-To-Date"
|
69
|
+
else
|
70
|
+
update_status = "🚫 Update available"
|
71
|
+
end
|
72
|
+
rescue
|
73
|
+
update_status = "💥 Check failed"
|
72
74
|
end
|
73
|
-
rescue
|
74
|
-
update_status = "💥 Check failed"
|
75
|
-
end
|
76
75
|
table << "| #{plugin} | #{installed_version} | #{update_status} |\n"
|
77
76
|
end
|
78
77
|
|
@@ -107,9 +106,8 @@ module Fastlane
|
|
107
106
|
|
108
107
|
next unless fastlane_tools.include?(current_gem.name.to_sym)
|
109
108
|
begin
|
110
|
-
|
111
|
-
|
112
|
-
if Gem::Version.new(current_gem.version) == Gem::Version.new(latest_version)
|
109
|
+
latest_version = FastlaneCore::UpdateChecker.fetch_latest(current_gem.name)
|
110
|
+
if Gem::Version.new(current_gem.version) >= Gem::Version.new(latest_version)
|
113
111
|
update_status = "✅ Up-To-Date"
|
114
112
|
else
|
115
113
|
update_status = "🚫 Update available"
|
@@ -253,6 +253,7 @@ module Fastlane
|
|
253
253
|
end
|
254
254
|
end
|
255
255
|
rescue FastlaneCore::Interface::FastlaneError => e # user_error!
|
256
|
+
FastlaneCore::CrashReporter.report_crash(type: :user_error, exception: e, action: method_sym)
|
256
257
|
collector.did_raise_error(method_sym)
|
257
258
|
raise e
|
258
259
|
rescue FastlaneCore::Interface::FastlaneTestFailure => e # test_failure!
|
@@ -260,6 +261,8 @@ module Fastlane
|
|
260
261
|
rescue Exception => e # rubocop:disable Lint/RescueException
|
261
262
|
# high chance this is actually FastlaneCore::Interface::FastlaneCrash, but can be anything else
|
262
263
|
# Catches all exceptions, since some plugins might use system exits to get out
|
264
|
+
type = e.kind_of?(FastlaneCore::Interface::FastlaneCrash) ? :crash : :exception
|
265
|
+
FastlaneCore::CrashReporter.report_crash(type: type, exception: e, action: method_sym)
|
263
266
|
collector.did_crash(method_sym)
|
264
267
|
raise e
|
265
268
|
end
|
@@ -31,6 +31,9 @@ require 'fastlane_core/fastlane_folder'
|
|
31
31
|
require 'fastlane_core/keychain_importer'
|
32
32
|
require 'fastlane_core/swag'
|
33
33
|
require 'fastlane_core/build_watcher'
|
34
|
+
require 'fastlane_core/crash_reporter/crash_reporter'
|
35
|
+
require 'fastlane_core/crash_reporter/crash_report_generator'
|
36
|
+
require 'fastlane_core/crash_reporter/backtrace_sanitizer'
|
34
37
|
|
35
38
|
# Third Party code
|
36
39
|
require 'colored'
|
@@ -4,10 +4,14 @@ module FastlaneCore
|
|
4
4
|
# A reference to the actual configuration
|
5
5
|
attr_accessor :config
|
6
6
|
|
7
|
+
# Path to the config file represented by the current object
|
8
|
+
attr_accessor :configfile_path
|
9
|
+
|
7
10
|
# @param config [FastlaneCore::Configuration] is stored to save the resulting values
|
8
11
|
# @param path [String] The path to the configuration file to use
|
9
12
|
def initialize(config, path, block_for_missing)
|
10
13
|
self.config = config
|
14
|
+
self.configfile_path = path
|
11
15
|
|
12
16
|
@block_for_missing = block_for_missing
|
13
17
|
content = File.read(path)
|
@@ -25,20 +29,20 @@ module FastlaneCore
|
|
25
29
|
eval(content) # this is okay in this case
|
26
30
|
# rubocop:enable Security/Eval
|
27
31
|
|
28
|
-
print_resulting_config_values
|
32
|
+
print_resulting_config_values # only on success
|
29
33
|
rescue SyntaxError => ex
|
30
34
|
line = ex.to_s.match(/\(eval\):(\d+)/)[1]
|
31
35
|
UI.user_error!("Syntax error in your configuration file '#{path}' on line #{line}: #{ex}")
|
32
36
|
end
|
33
37
|
end
|
34
38
|
|
35
|
-
def print_resulting_config_values
|
39
|
+
def print_resulting_config_values
|
36
40
|
require 'terminal-table'
|
37
|
-
UI.success("Successfully loaded '#{File.expand_path(
|
41
|
+
UI.success("Successfully loaded '#{File.expand_path(self.configfile_path)}' 📄")
|
38
42
|
|
39
43
|
# Show message when self.modified_values is empty
|
40
44
|
if self.modified_values.empty?
|
41
|
-
UI.important("No values defined in '#{
|
45
|
+
UI.important("No values defined in '#{self.configfile_path}'")
|
42
46
|
return
|
43
47
|
end
|
44
48
|
|
@@ -48,7 +52,7 @@ module FastlaneCore
|
|
48
52
|
|
49
53
|
puts ""
|
50
54
|
puts Terminal::Table.new(rows: FastlaneCore::PrintTable.transform_output(rows),
|
51
|
-
title: "Detected Values from '#{
|
55
|
+
title: "Detected Values from '#{self.configfile_path}'")
|
52
56
|
puts ""
|
53
57
|
end
|
54
58
|
|
@@ -66,7 +70,24 @@ module FastlaneCore
|
|
66
70
|
value = arguments.first
|
67
71
|
value = yield if value.nil? && block_given?
|
68
72
|
|
69
|
-
|
73
|
+
if value.nil?
|
74
|
+
unless block_given?
|
75
|
+
# The config file has something like this:
|
76
|
+
#
|
77
|
+
# clean
|
78
|
+
#
|
79
|
+
# without specifying a value for the method call
|
80
|
+
# or a block. This is most likely a user error
|
81
|
+
# So we tell the user that they can provide a value
|
82
|
+
warning = ["In the config file '#{self.configfile_path}'"]
|
83
|
+
warning << "you have the line #{method_sym}, but didn't provide"
|
84
|
+
warning << "any value. Make sure to append a value rght after the"
|
85
|
+
warning << "option name. Make sure to check the docs for more information"
|
86
|
+
UI.important(warning.join(" "))
|
87
|
+
end
|
88
|
+
return
|
89
|
+
end
|
90
|
+
|
70
91
|
self.modified_values[method_sym] = value
|
71
92
|
|
72
93
|
# to support frozen strings (e.g. ENV variables) too
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module FastlaneCore
|
2
|
+
class BacktraceSanitizer
|
3
|
+
class << self
|
4
|
+
def sanitize(type: :unknown, backtrace: nil)
|
5
|
+
if type == :user_error || type == :crash
|
6
|
+
# If the crash is from `UI` we only want to include the stack trace
|
7
|
+
# up to the point where the crash was initiated.
|
8
|
+
# The two stack frames we are dropping are `method_missing` and
|
9
|
+
# the call to `crash!` or `user_error!`.
|
10
|
+
stack = backtrace.drop(2)
|
11
|
+
else
|
12
|
+
stack = backtrace
|
13
|
+
end
|
14
|
+
|
15
|
+
stack = remove_fastlane_gem_path(backtrace: stack)
|
16
|
+
stack = remove_gem_home_path(backtrace: stack)
|
17
|
+
remove_home_dir_mentions(backtrace: stack)
|
18
|
+
end
|
19
|
+
|
20
|
+
def remove_fastlane_gem_path(backtrace: nil)
|
21
|
+
fastlane_path = Gem.loaded_specs['fastlane'].full_gem_path
|
22
|
+
return backtrace unless fastlane_path
|
23
|
+
backtrace.map do |frame|
|
24
|
+
frame.gsub(fastlane_path, '[fastlane_path]')
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def remove_gem_home_path(backtrace: nil)
|
29
|
+
return backtrace unless Gem.dir
|
30
|
+
backtrace.map do |frame|
|
31
|
+
frame.gsub(Gem.dir, '[gem_home]')
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def remove_home_dir_mentions(backtrace: nil)
|
36
|
+
backtrace.map do |frame|
|
37
|
+
frame.gsub(Dir.home, '~')
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module FastlaneCore
|
2
|
+
class CrashReportGenerator
|
3
|
+
class << self
|
4
|
+
def types
|
5
|
+
{
|
6
|
+
user_error: '[USER_ERROR]',
|
7
|
+
crash: '[FASTLANE_CRASH]',
|
8
|
+
exception: '[EXCEPTION]',
|
9
|
+
connection_failure: '[CONNECTION_FAILURE]',
|
10
|
+
system: '[SYSTEM_ERROR]',
|
11
|
+
option_parser: '[OPTION_PARSER]',
|
12
|
+
invalid_command: '[INVALID_COMMAND]',
|
13
|
+
unknown: '[UNKNOWN]'
|
14
|
+
}
|
15
|
+
end
|
16
|
+
|
17
|
+
def generate(type: :unknown, exception: nil, action: nil)
|
18
|
+
message = crash_report_message(type: type, exception: exception)
|
19
|
+
crash_report_payload(message: message, action: action)
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def crash_report_message(type: :unknown, exception: nil)
|
25
|
+
return if exception.nil?
|
26
|
+
backtrace = FastlaneCore::BacktraceSanitizer.sanitize(type: type, backtrace: exception.backtrace).join("\n")
|
27
|
+
message = types[type]
|
28
|
+
if type == :user_error
|
29
|
+
message += ': '
|
30
|
+
else
|
31
|
+
message += ": #{exception.message}"
|
32
|
+
end
|
33
|
+
message = message[0..100]
|
34
|
+
message += "\n" unless type == :user_error
|
35
|
+
message + backtrace
|
36
|
+
end
|
37
|
+
|
38
|
+
def crash_report_payload(message: '', action: nil)
|
39
|
+
{
|
40
|
+
'eventTime' => Time.now.utc.to_datetime.rfc3339,
|
41
|
+
'serviceContext' => {
|
42
|
+
'service' => action || 'fastlane',
|
43
|
+
'version' => Fastlane::VERSION
|
44
|
+
},
|
45
|
+
'message' => message
|
46
|
+
}.to_json
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
module FastlaneCore
|
5
|
+
class CrashReporter
|
6
|
+
class << self
|
7
|
+
@did_report_crash = false
|
8
|
+
|
9
|
+
@explitly_enabled_for_testing = false
|
10
|
+
|
11
|
+
def crash_report_path
|
12
|
+
File.join(FastlaneCore.fastlane_user_dir, 'latest_crash.json')
|
13
|
+
end
|
14
|
+
|
15
|
+
def enabled?
|
16
|
+
!FastlaneCore::Env.truthy?("FASTLANE_OPT_OUT_CRASH_REPORTING")
|
17
|
+
end
|
18
|
+
|
19
|
+
def report_crash(type: :unknown, exception: nil, action: nil)
|
20
|
+
return unless enabled?
|
21
|
+
return if @did_report_crash
|
22
|
+
|
23
|
+
# Do not run the crash reporter while tests are happening (it might try to send
|
24
|
+
# a crash report), unless we have explictly turned on the crash reporter because
|
25
|
+
# we want to test it
|
26
|
+
return if Helper.test? && !@explitly_enabled_for_testing
|
27
|
+
|
28
|
+
payload = CrashReportGenerator.generate(type: type, exception: exception, action: action)
|
29
|
+
send_report(payload: payload)
|
30
|
+
save_file(payload: payload)
|
31
|
+
show_message unless did_show_message?
|
32
|
+
@did_report_crash = true
|
33
|
+
end
|
34
|
+
|
35
|
+
def reset_crash_reporter_for_testing
|
36
|
+
@did_report_crash = false
|
37
|
+
end
|
38
|
+
|
39
|
+
def enable_for_testing
|
40
|
+
@explitly_enabled_for_testing = true
|
41
|
+
end
|
42
|
+
|
43
|
+
def disable_for_testing
|
44
|
+
@explitly_enabled_for_testing = false
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def show_message
|
50
|
+
UI.message("Sending crash report...")
|
51
|
+
UI.message("The stacktrace is sanitized so no personal information is sent.")
|
52
|
+
UI.message("To see what we are sending, look here: #{crash_report_path}")
|
53
|
+
UI.message("Learn more at https://github.com/fastlane/fastlane#crash-reporting")
|
54
|
+
UI.message("You can disable crash reporting by adding `opt_out_crash_reporting` at the top of your Fastfile")
|
55
|
+
end
|
56
|
+
|
57
|
+
def did_show_message?
|
58
|
+
file_name = ".did_show_opt_out_crash_info"
|
59
|
+
|
60
|
+
path = File.join(FastlaneCore.fastlane_user_dir, file_name)
|
61
|
+
did_show = File.exist?(path)
|
62
|
+
|
63
|
+
return did_show if did_show
|
64
|
+
|
65
|
+
File.write(path, '1')
|
66
|
+
false
|
67
|
+
end
|
68
|
+
|
69
|
+
def save_file(payload: "{}")
|
70
|
+
File.write(crash_report_path, payload)
|
71
|
+
end
|
72
|
+
|
73
|
+
def send_report(payload: "{}")
|
74
|
+
connection = Faraday.new(url: "https://clouderrorreporting.googleapis.com/v1beta1/projects/fastlane-166414/events:report?key=AIzaSyAMACPfuI-wi4grJWEZjcPvhfV2Rhmddwo")
|
75
|
+
connection.post do |request|
|
76
|
+
request.headers['Content-Type'] = 'application/json'
|
77
|
+
request.body = payload
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -48,6 +48,7 @@ module Commander
|
|
48
48
|
if FastlaneCore::Helper.test?
|
49
49
|
raise e
|
50
50
|
else
|
51
|
+
FastlaneCore::CrashReporter.report_crash(type: :invalid_command, exception: e, action: @program[:name])
|
51
52
|
abort "#{e}. Use --help for more information"
|
52
53
|
end
|
53
54
|
rescue Interrupt => e
|
@@ -66,11 +67,13 @@ module Commander
|
|
66
67
|
if FastlaneCore::Helper.test?
|
67
68
|
raise e
|
68
69
|
else
|
70
|
+
FastlaneCore::CrashReporter.report_crash(type: :option_parser, exception: e, action: @program[:name])
|
69
71
|
abort e.to_s
|
70
72
|
end
|
71
73
|
rescue FastlaneCore::Interface::FastlaneError => e # user_error!
|
72
74
|
collector.did_raise_error(@program[:name])
|
73
75
|
show_github_issues(e.message) if e.show_github_issues
|
76
|
+
FastlaneCore::CrashReporter.report_crash(type: :user_error, exception: e, action: @program[:name])
|
74
77
|
display_user_error!(e, e.message)
|
75
78
|
rescue Errno::ENOENT => e
|
76
79
|
# We're also printing the new-lines, as otherwise the message is not very visible in-between the error and the stacktrace
|
@@ -78,6 +81,7 @@ module Commander
|
|
78
81
|
FastlaneCore::UI.important("Error accessing file, this might be due to fastlane's directory handling")
|
79
82
|
FastlaneCore::UI.important("Check out https://docs.fastlane.tools/advanced/#directory-behavior for more details")
|
80
83
|
puts ""
|
84
|
+
FastlaneCore::CrashReporter.report_crash(type: :system, exception: e, action: @program[:name])
|
81
85
|
raise e
|
82
86
|
rescue FastlaneCore::Interface::FastlaneTestFailure => e # test_failure!
|
83
87
|
display_user_error!(e, e.to_s)
|
@@ -87,9 +91,12 @@ module Commander
|
|
87
91
|
if e.message.include? 'Connection reset by peer - SSL_connect'
|
88
92
|
handle_tls_error!(e)
|
89
93
|
else
|
94
|
+
FastlaneCore::CrashReporter.report_crash(type: :connection_failure, exception: e, action: @program[:name])
|
90
95
|
handle_unknown_error!(e)
|
91
96
|
end
|
92
97
|
rescue => e # high chance this is actually FastlaneCore::Interface::FastlaneCrash, but can be anything else
|
98
|
+
type = e.kind_of?(FastlaneCore::Interface::FastlaneCrash) ? :crash : :exception
|
99
|
+
FastlaneCore::CrashReporter.report_crash(type: type, exception: e, action: @program[:name])
|
93
100
|
collector.did_crash(@program[:name])
|
94
101
|
handle_unknown_error!(e)
|
95
102
|
ensure
|
@@ -112,7 +112,11 @@ module FastlaneCore
|
|
112
112
|
end
|
113
113
|
|
114
114
|
def self.fetch_latest(gem_name)
|
115
|
-
JSON.parse(Excon.get(
|
115
|
+
JSON.parse(Excon.get(generate_fetch_url(gem_name)).body)["version"]
|
116
|
+
end
|
117
|
+
|
118
|
+
def self.generate_fetch_url(gem_name)
|
119
|
+
"https://rubygems.org/api/v1/gems/#{gem_name}.json"
|
116
120
|
end
|
117
121
|
|
118
122
|
# (optional) Returns the app identifier for the current tool
|
data/match/lib/match/encrypt.rb
CHANGED
@@ -16,7 +16,9 @@ module Match
|
|
16
16
|
|
17
17
|
unless password
|
18
18
|
if !UI.interactive?
|
19
|
-
UI.error "
|
19
|
+
UI.error "Neither the MATCH_PASSWORD environment variable nor the local keychain contained a password."
|
20
|
+
UI.error "Bailing out instead of asking for a password, since this is non-interactive mode."
|
21
|
+
UI.user_error!("Try setting the MATCH_PASSWORD environment variable, or temporarily enable interactive mode to store a password.")
|
20
22
|
else
|
21
23
|
UI.important "Enter the passphrase that should be used to encrypt/decrypt your certificates"
|
22
24
|
UI.important "This passphrase is specific per repository and will be stored in your local keychain"
|
@@ -6,6 +6,13 @@
|
|
6
6
|
// Copyright © 2015 Felix Krause. All rights reserved.
|
7
7
|
//
|
8
8
|
|
9
|
+
// -----------------------------------------------------
|
10
|
+
// IMPORTANT: When modifying this file, make sure to
|
11
|
+
// increment the version number at the very
|
12
|
+
// bottom of the file to notify users about
|
13
|
+
// the new SnapshotHelper.swift
|
14
|
+
// -----------------------------------------------------
|
15
|
+
|
9
16
|
import Foundation
|
10
17
|
import XCTest
|
11
18
|
|
@@ -163,4 +170,4 @@ extension XCUIElement {
|
|
163
170
|
|
164
171
|
// Please don't remove the lines below
|
165
172
|
// They are used to detect outdated configuration files
|
166
|
-
// SnapshotHelperVersion [1.
|
173
|
+
// SnapshotHelperVersion [1.4]
|
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.30.0
|
4
|
+
version: 2.30.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Felix Krause
|
@@ -922,6 +922,7 @@ files:
|
|
922
922
|
- fastlane/lib/fastlane/actions/number_of_commits.rb
|
923
923
|
- fastlane/lib/fastlane/actions/oclint.rb
|
924
924
|
- fastlane/lib/fastlane/actions/onesignal.rb
|
925
|
+
- fastlane/lib/fastlane/actions/opt_out_crash_reporting.rb
|
925
926
|
- fastlane/lib/fastlane/actions/opt_out_usage.rb
|
926
927
|
- fastlane/lib/fastlane/actions/pem.rb
|
927
928
|
- fastlane/lib/fastlane/actions/pilot.rb
|
@@ -1082,6 +1083,9 @@ files:
|
|
1082
1083
|
- fastlane_core/lib/fastlane_core/configuration/configuration.rb
|
1083
1084
|
- fastlane_core/lib/fastlane_core/configuration/configuration_file.rb
|
1084
1085
|
- fastlane_core/lib/fastlane_core/core_ext/string.rb
|
1086
|
+
- fastlane_core/lib/fastlane_core/crash_reporter/backtrace_sanitizer.rb
|
1087
|
+
- fastlane_core/lib/fastlane_core/crash_reporter/crash_report_generator.rb
|
1088
|
+
- fastlane_core/lib/fastlane_core/crash_reporter/crash_reporter.rb
|
1085
1089
|
- fastlane_core/lib/fastlane_core/device_manager.rb
|
1086
1090
|
- fastlane_core/lib/fastlane_core/env.rb
|
1087
1091
|
- fastlane_core/lib/fastlane_core/fastlane_folder.rb
|
@@ -1357,23 +1361,23 @@ metadata:
|
|
1357
1361
|
post_install_message:
|
1358
1362
|
rdoc_options: []
|
1359
1363
|
require_paths:
|
1360
|
-
- pem/lib
|
1361
|
-
- produce/lib
|
1362
|
-
- gym/lib
|
1363
|
-
- snapshot/lib
|
1364
|
-
- sigh/lib
|
1365
|
-
- pilot/lib
|
1366
|
-
- supply/lib
|
1367
1364
|
- cert/lib
|
1365
|
+
- credentials_manager/lib
|
1368
1366
|
- deliver/lib
|
1369
|
-
- match/lib
|
1370
|
-
- fastlane_core/lib
|
1371
|
-
- spaceship/lib
|
1372
1367
|
- fastlane/lib
|
1368
|
+
- fastlane_core/lib
|
1373
1369
|
- frameit/lib
|
1374
|
-
-
|
1375
|
-
-
|
1370
|
+
- gym/lib
|
1371
|
+
- match/lib
|
1372
|
+
- pem/lib
|
1373
|
+
- pilot/lib
|
1374
|
+
- produce/lib
|
1376
1375
|
- scan/lib
|
1376
|
+
- screengrab/lib
|
1377
|
+
- sigh/lib
|
1378
|
+
- snapshot/lib
|
1379
|
+
- spaceship/lib
|
1380
|
+
- supply/lib
|
1377
1381
|
required_ruby_version: !ruby/object:Gem::Requirement
|
1378
1382
|
requirements:
|
1379
1383
|
- - ">="
|
@@ -1381,14 +1385,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
1381
1385
|
version: 2.0.0
|
1382
1386
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
1383
1387
|
requirements:
|
1384
|
-
- - "
|
1388
|
+
- - ">="
|
1385
1389
|
- !ruby/object:Gem::Version
|
1386
|
-
version:
|
1390
|
+
version: '0'
|
1387
1391
|
requirements: []
|
1388
1392
|
rubyforge_project:
|
1389
|
-
rubygems_version: 2.
|
1393
|
+
rubygems_version: 2.5.2
|
1390
1394
|
signing_key:
|
1391
1395
|
specification_version: 4
|
1392
1396
|
summary: The easiest way to automate beta deployments and releases for your iOS and
|
1393
1397
|
Android apps
|
1394
1398
|
test_files: []
|
1399
|
+
has_rdoc:
|