fastlane 1.54.0 → 1.55.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 +1 -0
- data/bin/fastlane +5 -6
- data/lib/assets/custom_action_template.rb +1 -1
- data/lib/fastlane.rb +0 -1
- data/lib/fastlane/action_collector.rb +6 -6
- data/lib/fastlane/actions/actions_helper.rb +8 -8
- data/lib/fastlane/actions/add_git_tag.rb +1 -1
- data/lib/fastlane/actions/appaloosa.rb +4 -4
- data/lib/fastlane/actions/pod_push.rb +8 -0
- data/lib/fastlane/actions/podio_item.rb +1 -1
- data/lib/fastlane/actions/puts.rb +1 -1
- data/lib/fastlane/actions/twitter.rb +73 -0
- data/lib/fastlane/actions/verify_xcode.rb +4 -4
- data/lib/fastlane/actions/xcode_install.rb +1 -0
- data/lib/fastlane/documentation/actions_list.rb +1 -1
- data/lib/fastlane/documentation/docs_generator.rb +1 -1
- data/lib/fastlane/fast_file.rb +14 -14
- data/lib/fastlane/fastlane_folder.rb +1 -1
- data/lib/fastlane/helper/crashlytics_helper.rb +1 -1
- data/lib/fastlane/helper/sh_helper.rb +3 -3
- data/lib/fastlane/lane.rb +5 -5
- data/lib/fastlane/lane_manager.rb +11 -11
- data/lib/fastlane/new_action.rb +1 -1
- data/lib/fastlane/runner.rb +6 -5
- data/lib/fastlane/setup/setup.rb +0 -4
- data/lib/fastlane/version.rb +1 -1
- metadata +6 -20
- data/lib/fastlane/dependency_checker.rb +0 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3c200c5252f8bc038684486acc4fc150641e7415
|
4
|
+
data.tar.gz: b9edb3fea861901eec93c3c3bc671331eb13ed44
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fcb78aebffb9323e2aa0c331045a3a5f4060594edee9cb0addd5872059109ccc64b606f6e9bf8780a907523391d502261c1d623de8ae3ea1555e660e00a937de
|
7
|
+
data.tar.gz: 30fda1ffef12f77d605cb1af103201aa352edeafe7d4b030577a5b225c1003dbeff6a7697cae8f62288a1608bfdc65975f1d986ddfbe30dd64951df3ab72664a
|
data/README.md
CHANGED
@@ -187,6 +187,7 @@ Please submit an issue on GitHub and provide information about your setup
|
|
187
187
|
Thanks to all [contributors](https://github.com/fastlane/fastlane/graphs/contributors) for extending and improving `fastlane`. Check out the project pages of the other tools for more sponsors and contributors.
|
188
188
|
|
189
189
|
## Code of Conduct
|
190
|
+
|
190
191
|
Help us keep `fastlane` open and inclusive. Please read and follow our [Code of Conduct](https://github.com/fastlane/code-of-conduct).
|
191
192
|
|
192
193
|
## License
|
data/bin/fastlane
CHANGED
@@ -11,6 +11,7 @@ HighLine.track_eof = false
|
|
11
11
|
|
12
12
|
class FastlaneApplication
|
13
13
|
include Commander::Methods
|
14
|
+
UI = FastlaneCore::UI
|
14
15
|
|
15
16
|
def run
|
16
17
|
program :version, Fastlane::VERSION
|
@@ -76,11 +77,11 @@ class FastlaneApplication
|
|
76
77
|
c.description = 'Lists all available lanes without description'
|
77
78
|
c.action do |args, options|
|
78
79
|
ff = Fastlane::FastFile.new(File.join(Fastlane::FastlaneFolder.path || '.', 'Fastfile'))
|
79
|
-
|
80
|
+
UI.message "Available lanes:"
|
80
81
|
ff.runner.available_lanes.each do |lane|
|
81
|
-
|
82
|
+
UI.message "- #{lane}"
|
82
83
|
end
|
83
|
-
|
84
|
+
UI.important "Execute using `fastlane [lane_name]`"
|
84
85
|
end
|
85
86
|
end
|
86
87
|
|
@@ -103,7 +104,7 @@ class FastlaneApplication
|
|
103
104
|
c.action do |args, options|
|
104
105
|
require 'fastlane/one_off'
|
105
106
|
result = Fastlane::OneOff.execute(args: args)
|
106
|
-
|
107
|
+
UI.success "Result: #{result}" if result
|
107
108
|
end
|
108
109
|
end
|
109
110
|
|
@@ -153,8 +154,6 @@ end
|
|
153
154
|
begin
|
154
155
|
FastlaneCore::UpdateChecker.start_looking_for_update('fastlane')
|
155
156
|
FastlaneApplication.new.run
|
156
|
-
rescue => ex
|
157
|
-
FastlaneCore::CrashReporting.handle_crash(ex)
|
158
157
|
ensure
|
159
158
|
FastlaneCore::UpdateChecker.show_update_status('fastlane', Fastlane::VERSION)
|
160
159
|
end
|
@@ -13,7 +13,7 @@ module Fastlane
|
|
13
13
|
class [[NAME_CLASS]] < Action
|
14
14
|
def self.run(params)
|
15
15
|
# fastlane will take care of reading in the parameter and fetching the environment variable:
|
16
|
-
|
16
|
+
UI.message "Parameter API Token: #{params[:api_token]}"
|
17
17
|
|
18
18
|
# sh "shellcommand ./path"
|
19
19
|
|
data/lib/fastlane.rb
CHANGED
@@ -2,7 +2,6 @@ require 'fastlane/core_ext/string' # this has to be above most of the other requ
|
|
2
2
|
require 'fastlane/version'
|
3
3
|
require 'fastlane/actions/actions_helper' # has to be before fast_file
|
4
4
|
require 'fastlane/fast_file'
|
5
|
-
require 'fastlane/dependency_checker'
|
6
5
|
require 'fastlane/runner'
|
7
6
|
require 'fastlane/setup/setup'
|
8
7
|
require 'fastlane/lane'
|
@@ -20,12 +20,12 @@ module Fastlane
|
|
20
20
|
def did_finish
|
21
21
|
return if ENV["FASTLANE_OPT_OUT_USAGE"]
|
22
22
|
if !did_show_message? and !Helper.is_ci?
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
23
|
+
UI.message("Sending Crash/Success information. More information on: https://github.com/fastlane/enhancer")
|
24
|
+
UI.message("No personal/sensitive data is sent. Only sharing the following:")
|
25
|
+
UI.message(launches)
|
26
|
+
UI.message(@error) if @error
|
27
|
+
UI.message("This information is used to fix failing actions and improve integrations that are often used.")
|
28
|
+
UI.message("You can disable this by adding `opt_out_usage` to your Fastfile")
|
29
29
|
end
|
30
30
|
|
31
31
|
require 'excon'
|
@@ -31,7 +31,7 @@ module Fastlane
|
|
31
31
|
exc = nil
|
32
32
|
|
33
33
|
begin
|
34
|
-
|
34
|
+
UI.header("Step: " + step_name) if step_name
|
35
35
|
yield
|
36
36
|
rescue => ex
|
37
37
|
exc = ex
|
@@ -87,17 +87,17 @@ module Fastlane
|
|
87
87
|
class_ref = Fastlane::Actions.const_get(class_name)
|
88
88
|
|
89
89
|
if class_ref.respond_to?(:run)
|
90
|
-
|
90
|
+
UI.success "Successfully loaded custom action '#{file}'."
|
91
91
|
else
|
92
|
-
|
93
|
-
|
94
|
-
|
92
|
+
UI.error "Could not find method 'run' in class #{class_name}."
|
93
|
+
UI.error 'For more information, check out the docs: https://github.com/fastlane/fastlane'
|
94
|
+
UI.user_error!("Action '#{file_name}' is damaged!")
|
95
95
|
end
|
96
96
|
rescue NameError
|
97
97
|
# Action not found
|
98
|
-
|
99
|
-
|
100
|
-
|
98
|
+
UI.error "Could not find '#{class_name}' class defined."
|
99
|
+
UI.error 'For more information, check out the docs: https://github.com/fastlane/fastlane'
|
100
|
+
UI.user_error!("Action '#{file_name}' is damaged!")
|
101
101
|
end
|
102
102
|
end
|
103
103
|
end
|
@@ -7,7 +7,7 @@ module Fastlane
|
|
7
7
|
|
8
8
|
tag = options[:tag] || "#{options[:grouping]}/#{lane_name}/#{options[:prefix]}#{options[:build_number]}"
|
9
9
|
|
10
|
-
|
10
|
+
UI.message "Adding git tag '#{tag}' 🎯."
|
11
11
|
Actions.sh("git tag -am '#{tag} (fastlane)' '#{tag}'")
|
12
12
|
end
|
13
13
|
|
@@ -143,9 +143,9 @@ module Fastlane
|
|
143
143
|
})
|
144
144
|
json_res = JSON.parse(response)
|
145
145
|
if json_res['errors']
|
146
|
-
|
146
|
+
UI.error "App: #{json_res['errors']}"
|
147
147
|
else
|
148
|
-
|
148
|
+
UI.success "Binary processing: Check your app': #{json_res['link']}"
|
149
149
|
end
|
150
150
|
end
|
151
151
|
|
@@ -172,7 +172,7 @@ module Fastlane
|
|
172
172
|
|
173
173
|
def self.error_detected(errors)
|
174
174
|
if errors
|
175
|
-
|
175
|
+
UI.error("ERROR: #{errors}")
|
176
176
|
true
|
177
177
|
else
|
178
178
|
false
|
@@ -180,7 +180,7 @@ module Fastlane
|
|
180
180
|
end
|
181
181
|
|
182
182
|
def self.warning_detected(warning)
|
183
|
-
|
183
|
+
UI.important("WARNING: #{warning}")
|
184
184
|
nil
|
185
185
|
end
|
186
186
|
|
@@ -18,6 +18,10 @@ module Fastlane
|
|
18
18
|
command << " --sources='#{sources}'"
|
19
19
|
end
|
20
20
|
|
21
|
+
if params[:allow_warnings]
|
22
|
+
command << " --allow-warnings"
|
23
|
+
end
|
24
|
+
|
21
25
|
result = Actions.sh("#{command}")
|
22
26
|
Helper.log.info "Successfully pushed Podspec ⬆️ ".green
|
23
27
|
return result
|
@@ -47,6 +51,10 @@ module Fastlane
|
|
47
51
|
FastlaneCore::ConfigItem.new(key: :repo,
|
48
52
|
description: "The repo you want to push. Pushes to Trunk by default",
|
49
53
|
optional: true),
|
54
|
+
FastlaneCore::ConfigItem.new(key: :allow_warnings,
|
55
|
+
description: "Allow warnings during pod push",
|
56
|
+
optional: true,
|
57
|
+
is_string: false),
|
50
58
|
FastlaneCore::ConfigItem.new(key: :sources,
|
51
59
|
description: "The sources of repos you want the pod spec to lint with, separated by commas",
|
52
60
|
optional: true,
|
@@ -0,0 +1,73 @@
|
|
1
|
+
module Fastlane
|
2
|
+
module Actions
|
3
|
+
class TwitterAction < Action
|
4
|
+
def self.run(params)
|
5
|
+
Actions.verify_gem!("twitter")
|
6
|
+
require 'twitter'
|
7
|
+
client = Twitter::REST::Client.new do |config|
|
8
|
+
config.consumer_key = params[:consumer_key]
|
9
|
+
config.consumer_secret = params[:consumer_secret]
|
10
|
+
config.access_token = params[:access_token]
|
11
|
+
config.access_token_secret = params[:access_token_secret]
|
12
|
+
end
|
13
|
+
client.update(params[:message])
|
14
|
+
Helper.log.info ['[TWITTER]', "Successfully tweeted ", params[:message]].join(': ')
|
15
|
+
end
|
16
|
+
|
17
|
+
#####################################################
|
18
|
+
# @!group Documentation
|
19
|
+
#####################################################
|
20
|
+
|
21
|
+
def self.description
|
22
|
+
"Post on twitter"
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.details
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.available_options
|
29
|
+
[
|
30
|
+
FastlaneCore::ConfigItem.new(key: :consumer_key,
|
31
|
+
env_name: "FL_TW_CONSUMER_KEY",
|
32
|
+
description: "Consumer Key",
|
33
|
+
is_string: true,
|
34
|
+
optional: false
|
35
|
+
),
|
36
|
+
FastlaneCore::ConfigItem.new(key: :consumer_secret,
|
37
|
+
env_name: "FL_TW_CONSUMER_SECRET",
|
38
|
+
description: "Consumer Secret",
|
39
|
+
is_string: true,
|
40
|
+
optional: false
|
41
|
+
),
|
42
|
+
FastlaneCore::ConfigItem.new(key: :access_token,
|
43
|
+
env_name: "FL_TW_ACCESS_TOKEN",
|
44
|
+
description: "Access Token",
|
45
|
+
is_string: true,
|
46
|
+
optional: false
|
47
|
+
),
|
48
|
+
FastlaneCore::ConfigItem.new(key: :access_token_secret,
|
49
|
+
env_name: "FL_TW_ACCESS_TOKEN_SECRET",
|
50
|
+
description: "Access Token Secret",
|
51
|
+
is_string: true,
|
52
|
+
optional: false
|
53
|
+
),
|
54
|
+
FastlaneCore::ConfigItem.new(key: :message,
|
55
|
+
env_name: "FL_TW_MESSAGE",
|
56
|
+
description: "The tweet",
|
57
|
+
is_string: true,
|
58
|
+
optional: false
|
59
|
+
)
|
60
|
+
|
61
|
+
]
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.authors
|
65
|
+
["hjanuschka"]
|
66
|
+
end
|
67
|
+
|
68
|
+
def self.is_supported?(platform)
|
69
|
+
true
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -37,7 +37,7 @@ module Fastlane
|
|
37
37
|
if output.include?("source=Mac App Store") or output.include?("source=Apple") or output.include?("source=Apple System")
|
38
38
|
Helper.log.info "Successfully verified Xcode installation at path '#{params[:xcode_path]}' 🎧".green
|
39
39
|
else
|
40
|
-
show_and_raise_error("Invalid Download Source of Xcode: #{output}")
|
40
|
+
show_and_raise_error("Invalid Download Source of Xcode: #{output}", params[:xcode_path])
|
41
41
|
end
|
42
42
|
|
43
43
|
true
|
@@ -53,18 +53,18 @@ module Fastlane
|
|
53
53
|
end
|
54
54
|
|
55
55
|
if errors.count > 0
|
56
|
-
show_and_raise_error(errors.join("\n"))
|
56
|
+
show_and_raise_error(errors.join("\n"), params[:xcode_path])
|
57
57
|
end
|
58
58
|
|
59
59
|
return output
|
60
60
|
end
|
61
61
|
|
62
|
-
def self.show_and_raise_error(error)
|
62
|
+
def self.show_and_raise_error(error, xcode_path)
|
63
63
|
Helper.log.fatal "Attention: Your Xcode Installation might be hacked.".red
|
64
64
|
Helper.log.fatal "This might be a false alarm, if so, please submit an issue on GitHub".red
|
65
65
|
Helper.log.fatal "The following information couldn't be found:".red
|
66
66
|
Helper.log.fatal error.yellow
|
67
|
-
raise "The Xcode installation at path '#{
|
67
|
+
raise "The Xcode installation at path '#{xcode_path}' might be compromised."
|
68
68
|
end
|
69
69
|
|
70
70
|
#####################################################
|
@@ -146,7 +146,7 @@ module Fastlane
|
|
146
146
|
if options.kind_of? Array
|
147
147
|
options.each do |current|
|
148
148
|
if current.kind_of? FastlaneCore::ConfigItem
|
149
|
-
key_name = (current.optional ? "" : "* ") + current.key.to_s
|
149
|
+
key_name = (current.optional ? " " : "* ") + current.key.to_s
|
150
150
|
description = (current.description || '') + (current.default_value ? " (default: '#{current.default_value}')" : "")
|
151
151
|
|
152
152
|
rows << [key_name.yellow, description, current.env_name]
|
@@ -37,7 +37,7 @@ module Fastlane
|
|
37
37
|
output << "The documentation of fastlane can be found on [GitHub](https://github.com/fastlane/fastlane)"
|
38
38
|
|
39
39
|
File.write(output_path, output.join("\n"))
|
40
|
-
|
40
|
+
UI.success "Successfully generated documentation to path '#{File.expand_path(output_path)}'" if $verbose
|
41
41
|
end
|
42
42
|
|
43
43
|
#####################################################
|
data/lib/fastlane/fast_file.rb
CHANGED
@@ -12,7 +12,7 @@ module Fastlane
|
|
12
12
|
# @return The runner which can be executed to trigger the given actions
|
13
13
|
def initialize(path = nil)
|
14
14
|
return unless (path || '').length > 0
|
15
|
-
|
15
|
+
UI.user_error!("Could not find Fastfile at path '#{path}'") unless File.exist?(path)
|
16
16
|
@path = File.expand_path(path)
|
17
17
|
content = File.read(path)
|
18
18
|
|
@@ -49,7 +49,7 @@ module Fastlane
|
|
49
49
|
# rubocop:enable Lint/Eval
|
50
50
|
rescue SyntaxError => ex
|
51
51
|
line = ex.to_s.match(/#{Regexp.escape(relative_path)}:(\d+)/)[1]
|
52
|
-
|
52
|
+
UI.user_error!("Syntax error in your Fastfile on line #{line}: #{ex}")
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
@@ -62,7 +62,7 @@ module Fastlane
|
|
62
62
|
|
63
63
|
# User defines a new lane
|
64
64
|
def lane(lane_name, &block)
|
65
|
-
|
65
|
+
UI.user_error!("You have to pass a block using 'do' for lane '#{lane_name}'. Make sure you read the docs on GitHub.") unless block
|
66
66
|
|
67
67
|
self.runner.add_lane(Lane.new(platform: self.current_platform,
|
68
68
|
block: block,
|
@@ -75,7 +75,7 @@ module Fastlane
|
|
75
75
|
|
76
76
|
# User defines a new private lane, which can't be called from the CLI
|
77
77
|
def private_lane(lane_name, &block)
|
78
|
-
|
78
|
+
UI.user_error!("You have to pass a block using 'do' for lane '#{lane_name}'. Make sure you read the docs on GitHub.") unless block
|
79
79
|
|
80
80
|
self.runner.add_lane(Lane.new(platform: self.current_platform,
|
81
81
|
block: block,
|
@@ -88,7 +88,7 @@ module Fastlane
|
|
88
88
|
|
89
89
|
# User defines a lane that can overwrite existing lanes. Useful when importing a Fastfile
|
90
90
|
def override_lane(lane_name, &block)
|
91
|
-
|
91
|
+
UI.user_error!("You have to pass a block using 'do' for lane '#{lane_name}'. Make sure you read the docs on GitHub.") unless block
|
92
92
|
|
93
93
|
self.runner.add_lane(Lane.new(platform: self.current_platform,
|
94
94
|
block: block,
|
@@ -148,7 +148,7 @@ module Fastlane
|
|
148
148
|
# Action is available, now execute it
|
149
149
|
return self.runner.execute_action(method_sym, class_ref, arguments)
|
150
150
|
else
|
151
|
-
|
151
|
+
UI.user_error!("Action '#{method_sym}' of class '#{class_name}' was found, but has no `run` method.")
|
152
152
|
end
|
153
153
|
end
|
154
154
|
|
@@ -162,16 +162,16 @@ module Fastlane
|
|
162
162
|
|
163
163
|
# Is the given key a platform block or a lane?
|
164
164
|
def is_platform_block?(key)
|
165
|
-
|
165
|
+
UI.crash!('No key given') unless key
|
166
166
|
|
167
167
|
return false if self.runner.lanes.fetch(nil, {}).fetch(key.to_sym, nil)
|
168
168
|
return true if self.runner.lanes[key.to_sym].kind_of? Hash
|
169
169
|
|
170
|
-
|
170
|
+
UI.user_error!("Could not find '#{key}'. Available lanes: #{self.runner.available_lanes.join(', ')}")
|
171
171
|
end
|
172
172
|
|
173
173
|
def actions_path(path)
|
174
|
-
|
174
|
+
UI.crash!("Path '#{path}' not found!") unless File.directory?(path)
|
175
175
|
|
176
176
|
Actions.load_external_actions(path)
|
177
177
|
end
|
@@ -192,14 +192,14 @@ module Fastlane
|
|
192
192
|
end
|
193
193
|
|
194
194
|
def import(path = nil)
|
195
|
-
|
195
|
+
UI.user_error!("Please pass a path to the `import` action") unless path
|
196
196
|
|
197
197
|
path = path.dup.gsub("~", Dir.home)
|
198
198
|
unless Pathname.new(path).absolute? # unless an absolute path
|
199
199
|
path = File.join(File.expand_path('..', @path), path)
|
200
200
|
end
|
201
201
|
|
202
|
-
|
202
|
+
UI.user_error!("Could not find Fastfile at path '#{path}'") unless File.exist?(path)
|
203
203
|
|
204
204
|
collector.did_launch_action(:import)
|
205
205
|
parse(File.read(path), path)
|
@@ -213,7 +213,7 @@ module Fastlane
|
|
213
213
|
# @param branch [String] The branch to checkout in the repository
|
214
214
|
# @param path [String] The path to the Fastfile
|
215
215
|
def import_from_git(url: nil, branch: 'HEAD', path: 'fastlane/Fastfile')
|
216
|
-
|
216
|
+
UI.user_error!("Please pass a path to the `import_from_git` action") if url.to_s.length == 0
|
217
217
|
|
218
218
|
Actions.execute_action('import_from_git') do
|
219
219
|
require 'tmpdir'
|
@@ -231,7 +231,7 @@ module Fastlane
|
|
231
231
|
|
232
232
|
clone_command = "git clone '#{url}' '#{clone_folder}' --depth 1 -n #{branch_option}"
|
233
233
|
|
234
|
-
|
234
|
+
UI.message "Cloning remote git repo..."
|
235
235
|
Actions.sh(clone_command)
|
236
236
|
|
237
237
|
Actions.sh("cd '#{clone_folder}' && git checkout #{branch} '#{path}'")
|
@@ -250,7 +250,7 @@ module Fastlane
|
|
250
250
|
|
251
251
|
if Dir.exist?(clone_folder)
|
252
252
|
# We want to re-clone if the folder already exists
|
253
|
-
|
253
|
+
UI.message "Clearing the git repo..."
|
254
254
|
Actions.sh("rm -rf '#{tmp_path}'")
|
255
255
|
end
|
256
256
|
end
|
@@ -72,7 +72,7 @@ module Fastlane
|
|
72
72
|
|
73
73
|
raise "Coulnd't find 'crashlytics-devtools.jar'" unless File.exist?(jar_path)
|
74
74
|
|
75
|
-
|
75
|
+
UI.success "Succesfully downloaded Crashlytics Support Library to '#{jar_path}'"
|
76
76
|
rescue => ex
|
77
77
|
raise "Error fetching remote file: #{ex}"
|
78
78
|
end
|
@@ -16,7 +16,7 @@ module Fastlane
|
|
16
16
|
Encoding.default_internal = Encoding::UTF_8
|
17
17
|
|
18
18
|
command = command.join(' ') if command.kind_of?(Array) # since it's an array of one element when running from the Fastfile
|
19
|
-
|
19
|
+
UI.command(command) if log
|
20
20
|
|
21
21
|
result = ''
|
22
22
|
if Helper.test?
|
@@ -26,7 +26,7 @@ module Fastlane
|
|
26
26
|
IO.popen(command, err: [:child, :out]) do |io|
|
27
27
|
io.sync = true
|
28
28
|
io.each do |line|
|
29
|
-
|
29
|
+
UI.command_output(line.strip) if log
|
30
30
|
result << line
|
31
31
|
end
|
32
32
|
io.close
|
@@ -37,7 +37,7 @@ module Fastlane
|
|
37
37
|
# this will also append the output to the exception
|
38
38
|
message = "Exit status of command '#{command}' was #{exit_status} instead of 0."
|
39
39
|
message += "\n#{result}" if log
|
40
|
-
|
40
|
+
UI.crash!(message)
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
data/lib/fastlane/lane.rb
CHANGED
@@ -15,13 +15,13 @@ module Fastlane
|
|
15
15
|
attr_accessor :is_private
|
16
16
|
|
17
17
|
def initialize(platform: nil, name: nil, description: nil, block: nil, is_private: false)
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
UI.user_error!("description must be an array") unless description.kind_of? Array
|
19
|
+
UI.user_error!("lane name must not contain any spaces") if name.to_s.include? " "
|
20
|
+
UI.user_error!("lane name must start with :") unless name.kind_of? Symbol
|
21
21
|
|
22
22
|
if self.class.black_list.include?(name.to_s)
|
23
|
-
|
24
|
-
|
23
|
+
UI.error "Lane Name '#{name}' can not be one of the followings: #{self.class.black_list}".red
|
24
|
+
UI.user_error!("Name '#{name}' is already taken")
|
25
25
|
end
|
26
26
|
|
27
27
|
self.platform = platform
|
@@ -45,9 +45,9 @@ module Fastlane
|
|
45
45
|
begin
|
46
46
|
ff.runner.execute(lane, platform, parameters)
|
47
47
|
rescue => ex
|
48
|
-
|
49
|
-
|
50
|
-
|
48
|
+
UI.important 'Variable Dump:'.yellow
|
49
|
+
UI.message Actions.lane_context
|
50
|
+
UI.error ex.to_s
|
51
51
|
e = ex
|
52
52
|
end
|
53
53
|
|
@@ -70,12 +70,12 @@ module Fastlane
|
|
70
70
|
print_table(Fastlane::Actions.executed_actions)
|
71
71
|
|
72
72
|
if error
|
73
|
-
|
73
|
+
UI.error 'fastlane finished with errors'
|
74
74
|
raise error
|
75
75
|
elsif duration > 5
|
76
|
-
|
76
|
+
UI.success "fastlane.tools just saved you #{duration} minutes! 🎉"
|
77
77
|
else
|
78
|
-
|
78
|
+
UI.success 'fastlane.tools finished successfully 🎉'
|
79
79
|
end
|
80
80
|
end
|
81
81
|
|
@@ -104,17 +104,17 @@ module Fastlane
|
|
104
104
|
# @param platform: is probably nil, but user might have called `fastlane android`, and only wants to list those actions
|
105
105
|
def self.choose_lane(ff, platform)
|
106
106
|
loop do
|
107
|
-
|
107
|
+
UI.error "You must provide a lane to drive. Available lanes:"
|
108
108
|
available = ff.runner.available_lanes(platform)
|
109
109
|
|
110
110
|
available.each_with_index do |lane, index|
|
111
|
-
|
111
|
+
UI.message "#{index + 1}) #{lane}"
|
112
112
|
end
|
113
113
|
|
114
114
|
i = $stdin.gets.strip.to_i - 1
|
115
115
|
if i >= 0 and available[i]
|
116
116
|
selection = available[i]
|
117
|
-
|
117
|
+
UI.important "Driving the lane #{selection}. Next time launch fastlane using `fastlane #{selection}`"
|
118
118
|
platform = selection.split(' ')[0]
|
119
119
|
lane_name = selection.split(' ')[1]
|
120
120
|
|
@@ -126,7 +126,7 @@ module Fastlane
|
|
126
126
|
return platform, lane_name # yeah
|
127
127
|
end
|
128
128
|
|
129
|
-
|
129
|
+
UI.error "Invalid input. Please enter the number of the lane you want to use"
|
130
130
|
end
|
131
131
|
end
|
132
132
|
|
@@ -144,7 +144,7 @@ module Fastlane
|
|
144
144
|
# Loads .env file for the environment passed in through options
|
145
145
|
if env
|
146
146
|
env_file = File.join(Fastlane::FastlaneFolder.path || "", ".env.#{env}")
|
147
|
-
|
147
|
+
UI.success "Loading from '#{env_file}'"
|
148
148
|
Dotenv.overload(env_file)
|
149
149
|
end
|
150
150
|
end
|
data/lib/fastlane/new_action.rb
CHANGED
@@ -28,7 +28,7 @@ module Fastlane
|
|
28
28
|
|
29
29
|
path = File.join(actions_path, "#{name}.rb")
|
30
30
|
File.write(path, template)
|
31
|
-
|
31
|
+
UI.success "Created new action file '#{path}'. Edit it to implement your custom action."
|
32
32
|
end
|
33
33
|
|
34
34
|
def self.name_valid?(name)
|
data/lib/fastlane/runner.rb
CHANGED
@@ -36,7 +36,7 @@ module Fastlane
|
|
36
36
|
Actions.lane_context[Actions::SharedValues::PLATFORM_NAME] = current_platform
|
37
37
|
Actions.lane_context[Actions::SharedValues::LANE_NAME] = full_lane_name
|
38
38
|
|
39
|
-
|
39
|
+
UI.success "Driving the lane '#{full_lane_name}' 🚀"
|
40
40
|
|
41
41
|
return_val = nil
|
42
42
|
|
@@ -66,6 +66,7 @@ module Fastlane
|
|
66
66
|
error_blocks[current_platform].call(current_lane, error_ex, parameters) if error_blocks[current_platform] && current_platform
|
67
67
|
error_blocks[nil].call(current_lane, error_ex, parameters) if error_blocks[nil]
|
68
68
|
end
|
69
|
+
|
69
70
|
raise ex
|
70
71
|
end
|
71
72
|
end
|
@@ -101,7 +102,7 @@ module Fastlane
|
|
101
102
|
pretty = [new_lane]
|
102
103
|
pretty = [current_platform, new_lane] if current_platform
|
103
104
|
Actions.execute_action("Switch to #{pretty.join(' ')} lane") {} # log the action
|
104
|
-
|
105
|
+
UI.success "Cruising over to lane '#{pretty.join(' ')}' 🚖"
|
105
106
|
|
106
107
|
# Actually switch lane now
|
107
108
|
self.current_lane = new_lane
|
@@ -109,12 +110,12 @@ module Fastlane
|
|
109
110
|
result = block.call(parameters.first || {}) # to always pass a hash
|
110
111
|
self.current_lane = original_lane
|
111
112
|
|
112
|
-
|
113
|
+
UI.success "Cruising back to lane '#{original_full}' 🚘".green
|
113
114
|
return result
|
114
115
|
else
|
115
116
|
# No action and no lane, raising an exception now
|
116
|
-
|
117
|
-
|
117
|
+
UI.error caller.join("\n")
|
118
|
+
UI.user_error!("Could not find action or lane '#{new_lane}'. Check out the README for more details: https://github.com/fastlane/fastlane")
|
118
119
|
end
|
119
120
|
end
|
120
121
|
|
data/lib/fastlane/setup/setup.rb
CHANGED
@@ -38,10 +38,6 @@ module Fastlane
|
|
38
38
|
Helper.log.info "No sensitive/private information will be uploaded"
|
39
39
|
Helper.log.info("You can disable this by adding `opt_out_usage` to your Fastfile")
|
40
40
|
end
|
41
|
-
|
42
|
-
def ask_for_crash_reporting
|
43
|
-
FastlaneCore::CrashReporting.ask_during_setup
|
44
|
-
end
|
45
41
|
end
|
46
42
|
end
|
47
43
|
|
data/lib/fastlane/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastlane
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.55.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-01-
|
11
|
+
date: 2016-01-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: krausefx-shenzhen
|
@@ -128,27 +128,13 @@ dependencies:
|
|
128
128
|
- - "~>"
|
129
129
|
- !ruby/object:Gem::Version
|
130
130
|
version: 2.3.8
|
131
|
-
- !ruby/object:Gem::Dependency
|
132
|
-
name: xcode-install
|
133
|
-
requirement: !ruby/object:Gem::Requirement
|
134
|
-
requirements:
|
135
|
-
- - "~>"
|
136
|
-
- !ruby/object:Gem::Version
|
137
|
-
version: 1.0.1
|
138
|
-
type: :runtime
|
139
|
-
prerelease: false
|
140
|
-
version_requirements: !ruby/object:Gem::Requirement
|
141
|
-
requirements:
|
142
|
-
- - "~>"
|
143
|
-
- !ruby/object:Gem::Version
|
144
|
-
version: 1.0.1
|
145
131
|
- !ruby/object:Gem::Dependency
|
146
132
|
name: fastlane_core
|
147
133
|
requirement: !ruby/object:Gem::Requirement
|
148
134
|
requirements:
|
149
135
|
- - ">="
|
150
136
|
- !ruby/object:Gem::Version
|
151
|
-
version: 0.
|
137
|
+
version: 0.36.0
|
152
138
|
- - "<"
|
153
139
|
- !ruby/object:Gem::Version
|
154
140
|
version: 1.0.0
|
@@ -158,7 +144,7 @@ dependencies:
|
|
158
144
|
requirements:
|
159
145
|
- - ">="
|
160
146
|
- !ruby/object:Gem::Version
|
161
|
-
version: 0.
|
147
|
+
version: 0.36.0
|
162
148
|
- - "<"
|
163
149
|
- !ruby/object:Gem::Version
|
164
150
|
version: 1.0.0
|
@@ -730,6 +716,7 @@ files:
|
|
730
716
|
- lib/fastlane/actions/testflight.rb
|
731
717
|
- lib/fastlane/actions/testmunk.rb
|
732
718
|
- lib/fastlane/actions/tryouts.rb
|
719
|
+
- lib/fastlane/actions/twitter.rb
|
733
720
|
- lib/fastlane/actions/typetalk.rb
|
734
721
|
- lib/fastlane/actions/unlock_keychain.rb
|
735
722
|
- lib/fastlane/actions/update_app_group_identifiers.rb
|
@@ -753,7 +740,6 @@ files:
|
|
753
740
|
- lib/fastlane/command_line_handler.rb
|
754
741
|
- lib/fastlane/configuration_helper.rb
|
755
742
|
- lib/fastlane/core_ext/string.rb
|
756
|
-
- lib/fastlane/dependency_checker.rb
|
757
743
|
- lib/fastlane/documentation/actions_list.rb
|
758
744
|
- lib/fastlane/documentation/docs_generator.rb
|
759
745
|
- lib/fastlane/erb_template_helper.rb
|
@@ -798,7 +784,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
798
784
|
version: '0'
|
799
785
|
requirements: []
|
800
786
|
rubyforge_project:
|
801
|
-
rubygems_version: 2.4.
|
787
|
+
rubygems_version: 2.4.6
|
802
788
|
signing_key:
|
803
789
|
specification_version: 4
|
804
790
|
summary: Connect all iOS deployment tools into one streamlined workflow
|
@@ -1,18 +0,0 @@
|
|
1
|
-
module Fastlane
|
2
|
-
class DependencyChecker
|
3
|
-
def self.check_dependencies
|
4
|
-
check_xcode_select unless Helper.test?
|
5
|
-
end
|
6
|
-
|
7
|
-
def self.check_xcode_select
|
8
|
-
unless `xcode-select -v`.include?('xcode-select version ')
|
9
|
-
Helper.log.fatal '#############################################################'
|
10
|
-
Helper.log.fatal '# You have to install the Xcode commdand line tools to use fastlane'
|
11
|
-
Helper.log.fatal '# Install the latest version of Xcode from the AppStore'
|
12
|
-
Helper.log.fatal '# Run xcode-select --install to install the developer tools'
|
13
|
-
Helper.log.fatal '#############################################################'
|
14
|
-
raise "Run 'xcode-select --install' and start fastlane again"
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|