fastlane 1.3.2 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 93d20266aa0c203f63a6c399a31537ff930361cd
4
- data.tar.gz: 016d35fa856450da75f97aa5e8740340c25435d7
3
+ metadata.gz: 76053191670da750db1c89dbeb5f6dc53278aa61
4
+ data.tar.gz: 840df7995bd6edb21e0d97b4446b2fa683c87a15
5
5
  SHA512:
6
- metadata.gz: 22f9d45effba8f83fec937c0a78ab0d96976f4ca66f3690708064295ae7240d660dcd4e6db9f747849015907ebac092e0c1391e95677b02ccef0493a3cd62be9
7
- data.tar.gz: 0c0400bcf5d1f277f77cb088bb1c9c452946667322e68bb0ac2b14bcd5b6bb69ab9ca547875d7cb5c294355b8bbef93ca65648e7c3c1a063a17c2a732ff29d92
6
+ metadata.gz: ce84a181f1e348754dacafdb3d7d0ad54c25f7fa0efc3c5de7042380dbba9dad267ce90a2a048135365333a108fb54754e5ef53e78c67a31f3ebfd626aa9bff8
7
+ data.tar.gz: 1be702107bb3a8aaf13155435ec0828a1df31ebf1be0a54ec9eadb2c36384cb4948e0cc56af9fc52a2be873ee491dc00316ed034df653f0a02f79ef7b0360be3
data/README.md CHANGED
@@ -125,10 +125,11 @@ Usually you'll use fastlane by triggering individual lanes:
125
125
 
126
126
  #### Other commands
127
127
 
128
- - `fastlane lanes`: Lists all available lanes
129
- - `fastlane docs`: Generates a markdown based documentation of all your lanes
130
128
  - `fastlane actions`: List all available `fastlane` actions
131
129
  - `fastlane action [action_name]`: Shows a more detailed description of an action
130
+ - `fastlane lanes`: Lists all available lanes with description
131
+ - `fastlane list`: Lists all available lanes without description
132
+ - `fastlane docs`: Generates a markdown based documentation of all your lanes
132
133
  - `fastlane new_action`: Create a new action (integration) for fastlane
133
134
 
134
135
  ## Examples
data/bin/fastlane CHANGED
@@ -64,8 +64,18 @@ class FastlaneApplication
64
64
 
65
65
  command :lanes do |c|
66
66
  c.syntax = 'fastlane lanes'
67
- c.description = 'Lists all available lanes'
67
+ c.description = 'Lists all available lanes and shows their description'
68
68
 
69
+ c.action do |_args, _options|
70
+ require 'fastlane/lane_list'
71
+ path = File.join(Fastlane::FastlaneFolder.path || '.', 'Fastfile')
72
+ Fastlane::LaneList.output(path)
73
+ end
74
+ end
75
+
76
+ command :list do |c|
77
+ c.syntax = 'fastlane list'
78
+ c.description = 'Lists all available lanes without description'
69
79
  c.action do |_args, _options|
70
80
  ff = Fastlane::FastFile.new(File.join(Fastlane::FastlaneFolder.path || '.', 'Fastfile'))
71
81
  puts "\nAvailable lanes:".green
@@ -11,7 +11,7 @@ module Fastlane
11
11
  xcodeproj_path = params[:xcodeproj] ? File.expand_path(File.join('.', params[:xcodeproj])) : nil
12
12
 
13
13
  # find the repo root path
14
- repo_path = `git rev-parse --show-toplevel`.strip
14
+ repo_path = Actions.sh('git rev-parse --show-toplevel').strip
15
15
  repo_pathname = Pathname.new(repo_path)
16
16
 
17
17
  if xcodeproj_path
@@ -49,7 +49,7 @@ module Fastlane
49
49
  expected_changed_files.flatten!.uniq!
50
50
 
51
51
  # get the list of files that have actually changed in our git workdir
52
- git_dirty_files = `git diff --name-only HEAD`.split("\n") + `git ls-files --other --exclude-standard`.split("\n")
52
+ git_dirty_files = Actions.sh('git diff --name-only HEAD').split("\n") + Actions.sh('git ls-files --other --exclude-standard').split("\n")
53
53
 
54
54
  # little user hint
55
55
  raise 'No file changes picked up. Make sure you run the `increment_build_number` action first.'.red if git_dirty_files.empty?
@@ -58,7 +58,7 @@ module Fastlane
58
58
  changed_files_as_expected = (Set.new(git_dirty_files.map(&:downcase)) == Set.new(expected_changed_files.map(&:downcase)))
59
59
  unless changed_files_as_expected
60
60
  unless params[:force]
61
- raise "Found unexpected uncommited changes in the working directory. Expected these files to have changed: #{expected_changed_files}. But found these actual changes: #{git_dirty_files}. Make sure you have cleaned up the build artifacts and are only left with the changed version files at this stage in your lane, and don't touch the working directory while your lane is running. You can also use the :force option to bypass this check, and always commit a version bump regardless of the state of the working directory.".red
61
+ raise "Found unexpected uncommited changes in the working directory. Expected these files to have changed: \n#{expected_changed_files.join("\n")}.\nBut found these actual changes: \n#{git_dirty_files.join("\n")}.\nMake sure you have cleaned up the build artifacts and are only left with the changed version files at this stage in your lane, and don't touch the working directory while your lane is running. You can also use the :force option to bypass this check, and always commit a version bump regardless of the state of the working directory.".red
62
62
  end
63
63
  end
64
64
 
@@ -0,0 +1,50 @@
1
+ module Fastlane
2
+ module Actions
3
+ module SharedValues
4
+ end
5
+
6
+ # Raises an exception and stop the lane execution if the repo is not on a specific branch
7
+ class EnsureGitBranchAction < Action
8
+ def self.run(params)
9
+ branch = params[:branch]
10
+
11
+ if Actions.git_branch != branch
12
+ raise "Git is not on the `#{branch}` branch! Please ensure the repo is checked out to the correct branch.".red
13
+ else
14
+ Helper.log.info "Git branch is `#{branch}`, all good! 💪".green
15
+ end
16
+ end
17
+
18
+
19
+ #####################################################
20
+ # @!group Documentation
21
+ #####################################################
22
+
23
+ def self.description
24
+ "Raises an exception if not on a specific git branch"
25
+ end
26
+
27
+ def self.available_options
28
+ [
29
+ FastlaneCore::ConfigItem.new(key: :branch,
30
+ env_name: "FL_ENSURE_GIT_BRANCH_NAME",
31
+ description: "The branch that should be checked for",
32
+ is_string: true,
33
+ default_value: 'master'),
34
+ ]
35
+ end
36
+
37
+ def self.output
38
+ []
39
+ end
40
+
41
+ def self.author
42
+ 'dbachrach'
43
+ end
44
+
45
+ def self.is_supported?(platform)
46
+ true
47
+ end
48
+ end
49
+ end
50
+ end
@@ -35,7 +35,7 @@ module Fastlane
35
35
  client = Shenzhen::Plugins::HockeyApp::Client.new(options[:api_token])
36
36
 
37
37
  values = options.values
38
- values[:dsym_filename] = dsym_path
38
+ values[:dsym_filename] = dsym_filename
39
39
  values[:notes_type] = options[:notes_type]
40
40
 
41
41
  return values if Helper.test?
@@ -116,6 +116,18 @@ module Fastlane
116
116
  FastlaneCore::ConfigItem.new(key: :public_identifier,
117
117
  env_name: "FL_HOCKEY_PUBLIC_IDENTIFIER",
118
118
  description: "Public identifier of the app you are targeting, usually you won't need this value",
119
+ optional: true),
120
+ FastlaneCore::ConfigItem.new(key: :commit_sha,
121
+ env_name: "FL_HOCKEY_COMMIT_SHA",
122
+ description: "The Git commit SHA for this build",
123
+ optional: true),
124
+ FastlaneCore::ConfigItem.new(key: :repository_url,
125
+ env_name: "FL_HOCKEY_REPOSITORY_URL",
126
+ description: "The URL of your source repository",
127
+ optional: true),
128
+ FastlaneCore::ConfigItem.new(key: :build_server_url,
129
+ env_name: "FL_HOCKEY_BUILD_SERVER_URL",
130
+ description: "The URL of the build job on your build server",
119
131
  optional: true)
120
132
  ]
121
133
  end
@@ -137,3 +149,4 @@ module Fastlane
137
149
  end
138
150
  end
139
151
  end
152
+
@@ -2,16 +2,56 @@ module Fastlane
2
2
  module Actions
3
3
  class CocoapodsAction < Action
4
4
  def self.run(params)
5
- Actions.sh('pod install')
5
+
6
+ cmd = ['pod install']
7
+
8
+ cmd << '--no-clean' unless params[:clean]
9
+ cmd << '--no-integrate' unless params[:integrate]
10
+ cmd << '--no-repo-update' unless params[:repo_update]
11
+ cmd << '--silent' if params[:silent]
12
+ cmd << '--verbose' if params[:verbose]
13
+ cmd << '--no-ansi' unless params[:ansi]
14
+
15
+ Actions.sh(cmd.join(' '))
6
16
  end
7
17
 
8
18
  def self.description
9
19
  "Runs `pod install` for the project"
10
20
  end
11
21
 
22
+ def self.available_options
23
+ [
24
+ FastlaneCore::ConfigItem.new(key: :clean,
25
+ env_name: "FL_COCOAPODS_CLEAN",
26
+ description: "Remove SCM directories",
27
+ default_value: true),
28
+ FastlaneCore::ConfigItem.new(key: :integrate,
29
+ env_name: "FL_COCOAPODS_INTEGRATE",
30
+ description: "Integrate the Pods libraries into the Xcode project(s)",
31
+ default_value: true),
32
+ FastlaneCore::ConfigItem.new(key: :repo_update,
33
+ env_name: "FL_COCOAPODS_REPO_UPDATE",
34
+ description: "Run `pod repo update` before install",
35
+ default_value: true),
36
+ FastlaneCore::ConfigItem.new(key: :silent,
37
+ env_name: "FL_COCOAPODS_SILENT",
38
+ description: "Show nothing",
39
+ default_value: false),
40
+ FastlaneCore::ConfigItem.new(key: :verbose,
41
+ env_name: "FL_COCOAPODS_VERBOSE",
42
+ description: "Show more debugging information",
43
+ default_value: false),
44
+ FastlaneCore::ConfigItem.new(key: :ansi,
45
+ env_name: "FL_COCOAPODS_ANSI",
46
+ description: "Show output with ANSI codes",
47
+ default_value: true),
48
+ ]
49
+ end
50
+
12
51
  def self.is_supported?(platform)
13
52
  [:ios, :mac].include?platform
14
53
  end
15
54
  end
16
55
  end
17
56
  end
57
+ # vim: set et sw=2 ts=2 :
@@ -37,7 +37,7 @@ module Fastlane
37
37
 
38
38
  # Used to get the final path of the IPA and dSYM
39
39
  if dest = params[:destination]
40
- absolute_dest_directory = Dir.glob(dest).map(&File.method(:realpath)).first
40
+ absolute_dest_directory = File.expand_path(dest)
41
41
  end
42
42
 
43
43
  # Maps nice developer build parameters to Shenzhen args
@@ -108,7 +108,7 @@ module Fastlane
108
108
  if k == :clean
109
109
  v == true ? '--clean' : '--no-clean'
110
110
  elsif k == :archive
111
- v == true ? '--archive' : nil
111
+ v == true ? '--archive' : '--no-archive'
112
112
  else
113
113
  value = (v.to_s.length > 0 ? "\"#{v}\"" : '')
114
114
  "#{ARGS_MAP[k]} #{value}".strip
@@ -139,7 +139,8 @@ module Fastlane
139
139
 
140
140
  def self.details
141
141
  [
142
- "More information on the shenzhen project page: https://github.com/nomad/shenzhen"
142
+ "More information on the shenzhen project page: https://github.com/nomad/shenzhen",
143
+ "To make code signing work, it is recommended to set a the provisioning profile in the project settings."
143
144
  ].join(' ')
144
145
  end
145
146
 
@@ -0,0 +1,85 @@
1
+ module Fastlane
2
+ module Actions
3
+ module SharedValues
4
+ end
5
+
6
+ class UpdateInfoPlistAction < Action
7
+ def self.run(params)
8
+ require 'plist'
9
+
10
+ # Check if parameters are set
11
+ if params[:app_identifier] or params[:display_name]
12
+
13
+ # Assign folder from parameter or search for xcodeproj file
14
+ folder = params[:xcodeproj] || Dir["*.xcodeproj"].first
15
+
16
+ # Read existing plist file
17
+ info_plist_path = File.join(folder, "..", params[:plist_path])
18
+ raise "Couldn't find info plist file at path '#{params[:plist_path]}'".red unless File.exists?(info_plist_path)
19
+ plist = Plist::parse_xml(info_plist_path)
20
+
21
+ # Update plist values
22
+ plist['CFBundleIdentifier'] = params[:app_identifier] if params[:app_identifier]
23
+ plist['CFBundleDisplayName'] = params[:display_name] if params[:display_name]
24
+
25
+ # Write changes to file
26
+ plist_string = Plist::Emit.dump(plist)
27
+ File.write(info_plist_path, plist_string)
28
+
29
+ Helper.log.info "Updated #{params[:plist_path]} 💾.".green
30
+ plist_string
31
+ else
32
+ Helper.log.warn("You haven't specified any parameters to update your plist.")
33
+ false
34
+ end
35
+
36
+ end
37
+
38
+
39
+ #####################################################
40
+ # @!group Documentation
41
+ #####################################################
42
+
43
+ def self.is_supported?(platform)
44
+ [:ios].include?(platform)
45
+ end
46
+
47
+ def self.description
48
+ 'Update a Info.plist file with bundle identifier and display name'
49
+ end
50
+
51
+ def self.available_options
52
+ [
53
+
54
+ FastlaneCore::ConfigItem.new(key: :xcodeproj,
55
+ env_name: "FL_UPDATE_PLIST_PROJECT_PATH",
56
+ description: "Path to your Xcode project",
57
+ optional: true,
58
+ verify_block: Proc.new do |value|
59
+ raise "Please pass the path to the project, not the workspace".red if value.include?"workspace"
60
+ raise "Could not find Xcode project".red unless File.exists?(value)
61
+ end),
62
+ FastlaneCore::ConfigItem.new(key: :plist_path,
63
+ env_name: "FL_UPDATE_PLIST_PATH",
64
+ description: "Path to info plist",
65
+ verify_block: Proc.new do |value|
66
+ raise "Invalid plist file".red unless value[-6..-1].downcase == ".plist"
67
+ end),
68
+ FastlaneCore::ConfigItem.new(key: :app_identifier,
69
+ env_name: 'FL_UPDATE_PLIST_APP_IDENTIFIER',
70
+ description: 'The App Identifier of your app',
71
+ default_value: ENV['PRODUCE_APP_IDENTIFIER'],
72
+ optional: true),
73
+ FastlaneCore::ConfigItem.new(key: :display_name,
74
+ env_name: 'FL_UPDATE_PLIST_DISPLAY_NAME',
75
+ description: 'The Display Name of your app',
76
+ optional: true)
77
+ ]
78
+ end
79
+
80
+ def self.author
81
+ 'tobiasstrebitzer'
82
+ end
83
+ end
84
+ end
85
+ end
@@ -29,6 +29,7 @@ module Fastlane
29
29
  profile = File.read(params[:profile])
30
30
  p7 = OpenSSL::PKCS7.new(profile)
31
31
  store = OpenSSL::X509::Store.new
32
+ raise "Could not find valid certificate at '#{params[:certificate]}'" unless (File.size(params[:certificate]) > 0)
32
33
  cert = OpenSSL::X509::Certificate.new(File.read(params[:certificate]))
33
34
  store.add_cert(cert)
34
35
  verification = p7.verify([cert], store)
@@ -0,0 +1,41 @@
1
+ module Fastlane
2
+ class LaneList
3
+ # Print out the result of `generate`
4
+ def self.output(path)
5
+
6
+ puts generate(path)
7
+
8
+ puts "Execute using `fastlane [lane_name]`".yellow
9
+ end
10
+
11
+ def self.generate(path)
12
+ ff = Fastlane::FastFile.new(path)
13
+ output = ""
14
+
15
+ all_keys = ff.runner.description_blocks.keys.reject(&:nil?)
16
+ all_keys.unshift(nil) # because we want root elements on top. always! They have key nil
17
+
18
+ all_keys.each do |platform|
19
+ next if (ff.runner.description_blocks[platform] || []).count == 0
20
+ plat_text = platform
21
+ plat_text = "general" if platform.to_s.empty?
22
+ output += "\n--------- #{plat_text}---------\n".yellow
23
+
24
+ value = ff.runner.description_blocks[platform]
25
+
26
+ if value
27
+ value.each do |lane, description|
28
+ lane_text = "----- fastlane "
29
+ lane_text += platform.to_s + " " if platform
30
+ lane_text += lane.to_s + "\n"
31
+
32
+ output += lane_text.green
33
+ output += description.gsub("\n\n", "\n") + "\n\n" if description.to_s.length > 0
34
+ end
35
+ end
36
+ end
37
+
38
+ output
39
+ end
40
+ end
41
+ end
@@ -7,8 +7,14 @@ module Fastlane
7
7
  def execute(lane, platform = nil)
8
8
  raise "No lane given" unless lane
9
9
 
10
+ ENV["FASTLANE_LANE_NAME"] = lane.to_s
11
+ if platform
12
+ ENV["FASTLANE_PLATFORM_NAME"] = platform.to_s
13
+ else
14
+ ENV["FASTLANE_PLATFORM_NAME"] = nil
15
+ end
16
+
10
17
  lane = lane.to_sym
11
-
12
18
  platform = platform.to_sym if platform # might be nil, which is okay => root element
13
19
 
14
20
  Actions.lane_context[Actions::SharedValues::PLATFORM_NAME] = platform # set this in any case: important
@@ -16,8 +22,6 @@ module Fastlane
16
22
  full_lane_name = [platform, lane].reject(&:nil?).join(' ')
17
23
  Helper.log.info "Driving the lane '#{full_lane_name}'".green
18
24
  Actions.lane_context[Actions::SharedValues::LANE_NAME] = full_lane_name
19
- ENV["FASTLANE_LANE_NAME"] = lane.to_s
20
- ENV["FASTLANE_PLATFORM_NAME"] = platform.to_s
21
25
 
22
26
  return_val = nil
23
27
 
@@ -27,7 +27,7 @@ module Fastlane
27
27
  rescue Exception => ex # this will also be caused by Ctrl + C
28
28
  # Something went wrong with the setup, clear the folder again
29
29
  # and restore previous files
30
- Helper.log.fatal 'Error occured with the setup program! Reverting changes now!'.red
30
+ Helper.log.fatal 'Error occurred with the setup program! Reverting changes now!'.red
31
31
  restore_previous_state
32
32
  raise ex
33
33
  end
@@ -1,3 +1,3 @@
1
1
  module Fastlane
2
- VERSION = '1.3.2'
2
+ VERSION = '1.4.0'
3
3
  end
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.3.2
4
+ version: 1.4.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: 2015-05-28 00:00:00.000000000 Z
11
+ date: 2015-06-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 0.14.2
33
+ version: 0.14.3
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 0.14.2
40
+ version: 0.14.3
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: slack-notifier
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -156,28 +156,28 @@ dependencies:
156
156
  requirements:
157
157
  - - '>='
158
158
  - !ruby/object:Gem::Version
159
- version: 0.7.5
159
+ version: 0.7.6
160
160
  type: :runtime
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
164
  - - '>='
165
165
  - !ruby/object:Gem::Version
166
- version: 0.7.5
166
+ version: 0.7.6
167
167
  - !ruby/object:Gem::Dependency
168
168
  name: deliver
169
169
  requirement: !ruby/object:Gem::Requirement
170
170
  requirements:
171
171
  - - '>='
172
172
  - !ruby/object:Gem::Version
173
- version: 0.11.0
173
+ version: 0.11.1
174
174
  type: :runtime
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
178
  - - '>='
179
179
  - !ruby/object:Gem::Version
180
- version: 0.11.0
180
+ version: 0.11.1
181
181
  - !ruby/object:Gem::Dependency
182
182
  name: snapshot
183
183
  requirement: !ruby/object:Gem::Requirement
@@ -198,28 +198,28 @@ dependencies:
198
198
  requirements:
199
199
  - - '>='
200
200
  - !ruby/object:Gem::Version
201
- version: 2.0.0
201
+ version: 2.0.1
202
202
  type: :runtime
203
203
  prerelease: false
204
204
  version_requirements: !ruby/object:Gem::Requirement
205
205
  requirements:
206
206
  - - '>='
207
207
  - !ruby/object:Gem::Version
208
- version: 2.0.0
208
+ version: 2.0.1
209
209
  - !ruby/object:Gem::Dependency
210
210
  name: pem
211
211
  requirement: !ruby/object:Gem::Requirement
212
212
  requirements:
213
213
  - - '>='
214
214
  - !ruby/object:Gem::Version
215
- version: 0.6.1
215
+ version: 0.6.3
216
216
  type: :runtime
217
217
  prerelease: false
218
218
  version_requirements: !ruby/object:Gem::Requirement
219
219
  requirements:
220
220
  - - '>='
221
221
  - !ruby/object:Gem::Version
222
- version: 0.6.1
222
+ version: 0.6.3
223
223
  - !ruby/object:Gem::Dependency
224
224
  name: cert
225
225
  requirement: !ruby/object:Gem::Requirement
@@ -240,14 +240,14 @@ dependencies:
240
240
  requirements:
241
241
  - - '>='
242
242
  - !ruby/object:Gem::Version
243
- version: 0.5.2
243
+ version: 0.6.0
244
244
  type: :runtime
245
245
  prerelease: false
246
246
  version_requirements: !ruby/object:Gem::Requirement
247
247
  requirements:
248
248
  - - '>='
249
249
  - !ruby/object:Gem::Version
250
- version: 0.5.2
250
+ version: 0.6.0
251
251
  - !ruby/object:Gem::Dependency
252
252
  name: produce
253
253
  requirement: !ruby/object:Gem::Requirement
@@ -406,6 +406,7 @@ files:
406
406
  - lib/fastlane/actions/deliver.rb
407
407
  - lib/fastlane/actions/deploygate.rb
408
408
  - lib/fastlane/actions/dsym_zip.rb
409
+ - lib/fastlane/actions/ensure_git_branch.rb
409
410
  - lib/fastlane/actions/ensure_git_status_clean.rb
410
411
  - lib/fastlane/actions/fastlane_version.rb
411
412
  - lib/fastlane/actions/frameit.rb
@@ -439,6 +440,7 @@ files:
439
440
  - lib/fastlane/actions/testmunk.rb
440
441
  - lib/fastlane/actions/typetalk.rb
441
442
  - lib/fastlane/actions/update_fastlane.rb
443
+ - lib/fastlane/actions/update_info_plist.rb
442
444
  - lib/fastlane/actions/update_project_code_signing.rb
443
445
  - lib/fastlane/actions/update_project_provisioning.rb
444
446
  - lib/fastlane/actions/xcode_select.rb
@@ -452,6 +454,7 @@ files:
452
454
  - lib/fastlane/fast_file.rb
453
455
  - lib/fastlane/fastlane_folder.rb
454
456
  - lib/fastlane/junit_generator.rb
457
+ - lib/fastlane/lane_list.rb
455
458
  - lib/fastlane/lane_manager.rb
456
459
  - lib/fastlane/new_action.rb
457
460
  - lib/fastlane/runner.rb