fastlane 2.196.0 → 2.212.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE +1 -1
- data/README.md +88 -81
- data/cert/lib/cert/runner.rb +19 -8
- data/deliver/lib/assets/ScreenshotsHelp +29 -6
- data/deliver/lib/deliver/app_screenshot.rb +30 -4
- data/deliver/lib/deliver/app_screenshot_iterator.rb +1 -1
- data/deliver/lib/deliver/options.rb +6 -2
- data/deliver/lib/deliver/runner.rb +88 -24
- data/deliver/lib/deliver/submit_for_review.rb +25 -3
- data/deliver/lib/deliver/upload_price_tier.rb +3 -1
- data/deliver/lib/deliver/upload_screenshots.rb +2 -2
- data/fastlane/lib/assets/AppfileTemplate +1 -1
- data/fastlane/lib/assets/AppfileTemplate.swift +1 -1
- data/fastlane/lib/fastlane/actions/badge.rb +1 -1
- data/fastlane/lib/fastlane/actions/changelog_from_git_commits.rb +1 -1
- data/fastlane/lib/fastlane/actions/danger.rb +14 -0
- data/fastlane/lib/fastlane/actions/docs/build_app.md +5 -5
- data/fastlane/lib/fastlane/actions/docs/capture_android_screenshots.md +19 -2
- data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +1 -1
- data/fastlane/lib/fastlane/actions/docs/run_tests.md +1 -1
- data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +1 -1
- data/fastlane/lib/fastlane/actions/download_dsyms.rb +62 -46
- data/fastlane/lib/fastlane/actions/ensure_git_status_clean.rb +15 -4
- data/fastlane/lib/fastlane/actions/ensure_xcode_version.rb +1 -1
- data/fastlane/lib/fastlane/actions/get_push_certificate.rb +1 -1
- data/fastlane/lib/fastlane/actions/get_version_number.rb +8 -3
- data/fastlane/lib/fastlane/actions/git_commit.rb +4 -6
- data/fastlane/lib/fastlane/actions/import_certificate.rb +1 -1
- data/fastlane/lib/fastlane/actions/notarize.rb +29 -11
- data/fastlane/lib/fastlane/actions/pod_lib_lint.rb +1 -1
- data/fastlane/lib/fastlane/actions/pod_push.rb +19 -1
- data/fastlane/lib/fastlane/actions/read_podspec.rb +1 -1
- data/fastlane/lib/fastlane/actions/run_tests.rb +19 -9
- data/fastlane/lib/fastlane/actions/set_github_release.rb +11 -5
- data/fastlane/lib/fastlane/actions/setup_ci.rb +13 -4
- data/fastlane/lib/fastlane/actions/trainer.rb +49 -0
- data/fastlane/lib/fastlane/actions/update_code_signing_settings.rb +31 -4
- data/fastlane/lib/fastlane/actions/update_info_plist.rb +1 -1
- data/fastlane/lib/fastlane/actions/update_project_provisioning.rb +10 -1
- data/fastlane/lib/fastlane/actions/upload_symbols_to_sentry.rb +1 -1
- data/fastlane/lib/fastlane/actions/verify_build.rb +1 -1
- data/fastlane/lib/fastlane/actions/xcode_install.rb +5 -1
- data/fastlane/lib/fastlane/actions/xcode_select.rb +1 -1
- data/fastlane/lib/fastlane/actions/xcodebuild.rb +8 -2
- data/fastlane/lib/fastlane/actions/xcodes.rb +152 -0
- data/fastlane/lib/fastlane/actions/xcov.rb +5 -0
- data/fastlane/lib/fastlane/actions/xcversion.rb +17 -7
- data/fastlane/lib/fastlane/cli_tools_distributor.rb +5 -0
- data/fastlane/lib/fastlane/commands_generator.rb +2 -1
- data/fastlane/lib/fastlane/documentation/docs_generator.rb +17 -12
- data/fastlane/lib/fastlane/fast_file.rb +18 -5
- data/fastlane/lib/fastlane/features.rb +3 -0
- data/fastlane/lib/fastlane/helper/xcodebuild_formatter_helper.rb +9 -0
- data/fastlane/lib/fastlane/helper/xcodes_helper.rb +28 -0
- data/fastlane/lib/fastlane/helper/xcversion_helper.rb +0 -9
- data/fastlane/lib/fastlane/lane_manager.rb +1 -1
- data/fastlane/lib/fastlane/plugins/template/%gem_name%.gemspec.erb +1 -1
- data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +5 -1
- data/fastlane/lib/fastlane/setup/setup_ios.rb +1 -1
- data/fastlane/lib/fastlane/swift_fastlane_api_generator.rb +1 -1
- data/fastlane/lib/fastlane/swift_lane_manager.rb +11 -3
- data/fastlane/lib/fastlane/swift_runner_upgrader.rb +54 -1
- data/fastlane/lib/fastlane/tools.rb +18 -1
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Actions.swift +1 -1
- data/fastlane/swift/Appfile.swift +2 -2
- data/fastlane/swift/ArgumentProcessor.swift +1 -1
- data/fastlane/swift/Atomic.swift +150 -0
- data/fastlane/swift/ControlCommand.swift +1 -1
- data/fastlane/swift/Deliverfile.swift +2 -2
- data/fastlane/swift/DeliverfileProtocol.swift +8 -4
- data/fastlane/swift/Fastlane.swift +570 -239
- data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.pbxproj +30 -20
- data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/xcshareddata/xcschemes/FastlaneRunner.xcscheme +1 -1
- data/fastlane/swift/Gymfile.swift +2 -2
- data/fastlane/swift/GymfileProtocol.swift +20 -8
- data/fastlane/swift/LaneFileProtocol.swift +2 -2
- data/fastlane/swift/MainProcess.swift +3 -3
- data/fastlane/swift/Matchfile.swift +2 -2
- data/fastlane/swift/MatchfileProtocol.swift +21 -5
- data/fastlane/swift/OptionalConfigValue.swift +1 -1
- data/fastlane/swift/Plugins.swift +1 -1
- data/fastlane/swift/Precheckfile.swift +2 -2
- data/fastlane/swift/PrecheckfileProtocol.swift +3 -3
- data/fastlane/swift/RubyCommand.swift +1 -1
- data/fastlane/swift/RubyCommandable.swift +1 -1
- data/fastlane/swift/Runner.swift +13 -9
- data/fastlane/swift/RunnerArgument.swift +1 -1
- data/fastlane/swift/Scanfile.swift +2 -2
- data/fastlane/swift/ScanfileProtocol.swift +31 -11
- data/fastlane/swift/Screengrabfile.swift +2 -2
- data/fastlane/swift/ScreengrabfileProtocol.swift +3 -3
- data/fastlane/swift/Snapshotfile.swift +2 -2
- data/fastlane/swift/SnapshotfileProtocol.swift +12 -8
- data/fastlane/swift/SocketClient.swift +9 -5
- data/fastlane/swift/SocketClientDelegateProtocol.swift +2 -2
- data/fastlane/swift/SocketResponse.swift +1 -1
- data/fastlane/swift/formatting/Brewfile.lock.json +46 -23
- data/fastlane/swift/main.swift +1 -1
- data/fastlane/swift/upgrade_manifest.json +1 -1
- data/fastlane_core/README.md +1 -0
- data/fastlane_core/lib/fastlane_core/cert_checker.rb +79 -17
- data/fastlane_core/lib/fastlane_core/device_manager.rb +5 -1
- data/fastlane_core/lib/fastlane_core/ipa_file_analyser.rb +10 -5
- data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +409 -26
- data/fastlane_core/lib/fastlane_core/keychain_importer.rb +1 -0
- data/fastlane_core/lib/fastlane_core/project.rb +19 -2
- data/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb +7 -0
- data/fastlane_core/lib/fastlane_core/ui/implementations/shell.rb +4 -2
- data/frameit/lib/frameit/device.rb +1 -1
- data/frameit/lib/frameit/device_types.rb +9 -0
- data/frameit/lib/frameit/editor.rb +16 -18
- data/frameit/lib/frameit/frame_downloader.rb +1 -1
- data/frameit/lib/frameit/trim_box.rb +6 -0
- data/gym/lib/gym/generators/build_command_generator.rb +70 -23
- data/gym/lib/gym/options.rb +30 -5
- data/match/lib/match/change_password.rb +2 -0
- data/match/lib/match/commands_generator.rb +2 -1
- data/match/lib/match/encryption/openssl.rb +1 -1
- data/match/lib/match/encryption.rb +3 -0
- data/match/lib/match/generator.rb +1 -0
- data/match/lib/match/importer.rb +10 -1
- data/match/lib/match/migrate.rb +4 -3
- data/match/lib/match/module.rb +54 -2
- data/match/lib/match/nuke.rb +114 -47
- data/match/lib/match/options.rb +22 -1
- data/match/lib/match/runner.rb +25 -6
- data/match/lib/match/setup.rb +1 -1
- data/match/lib/match/spaceship_ensure.rb +5 -2
- data/match/lib/match/storage/gitlab/client.rb +102 -0
- data/match/lib/match/storage/gitlab/secure_file.rb +65 -0
- data/match/lib/match/storage/gitlab_secure_files.rb +182 -0
- data/match/lib/match/storage/google_cloud_storage.rb +7 -6
- data/match/lib/match/storage/s3_storage.rb +3 -3
- data/match/lib/match/storage.rb +4 -0
- data/match/lib/match/table_printer.rb +2 -1
- data/match/lib/match/utils.rb +15 -2
- data/pem/lib/pem/manager.rb +30 -7
- data/pem/lib/pem/options.rb +9 -0
- data/pilot/lib/pilot/build_manager.rb +34 -14
- data/pilot/lib/pilot/options.rb +6 -1
- data/scan/lib/scan/detect_values.rb +6 -0
- data/scan/lib/scan/error_handler.rb +9 -0
- data/scan/lib/scan/options.rb +49 -9
- data/scan/lib/scan/runner.rb +171 -25
- data/scan/lib/scan/test_command_generator.rb +65 -5
- data/sigh/lib/sigh/download_all.rb +14 -2
- data/sigh/lib/sigh/module.rb +3 -1
- data/sigh/lib/sigh/options.rb +5 -0
- data/sigh/lib/sigh/runner.rb +12 -2
- data/snapshot/lib/assets/SnapshotHelper.swift +3 -3
- data/snapshot/lib/snapshot/latest_os_version.rb +2 -5
- data/snapshot/lib/snapshot/options.rb +24 -8
- data/snapshot/lib/snapshot/reports_generator.rb +1 -0
- data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +10 -3
- data/snapshot/lib/snapshot/test_command_generator.rb +37 -2
- data/spaceship/lib/spaceship/client.rb +71 -40
- data/spaceship/lib/spaceship/commands_generator.rb +1 -1
- data/spaceship/lib/spaceship/connect_api/api_client.rb +10 -5
- data/spaceship/lib/spaceship/connect_api/models/actor.rb +26 -0
- data/spaceship/lib/spaceship/connect_api/models/app.rb +52 -6
- data/spaceship/lib/spaceship/connect_api/models/app_info.rb +1 -0
- data/spaceship/lib/spaceship/connect_api/models/app_info_localization.rb +5 -0
- data/spaceship/lib/spaceship/connect_api/models/app_screenshot_set.rb +7 -0
- data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +1 -1
- data/spaceship/lib/spaceship/connect_api/models/app_store_version_localization.rb +27 -10
- data/spaceship/lib/spaceship/connect_api/models/build.rb +4 -2
- data/spaceship/lib/spaceship/connect_api/models/build_bundle.rb +68 -0
- data/spaceship/lib/spaceship/connect_api/models/build_bundle_file_sizes.rb +34 -0
- data/spaceship/lib/spaceship/connect_api/models/build_delivery.rb +2 -1
- data/spaceship/lib/spaceship/connect_api/models/certificate.rb +4 -0
- data/spaceship/lib/spaceship/connect_api/models/device.rb +47 -4
- data/spaceship/lib/spaceship/connect_api/models/profile.rb +4 -0
- data/spaceship/lib/spaceship/connect_api/models/resolution_center_message.rb +29 -0
- data/spaceship/lib/spaceship/connect_api/models/resolution_center_thread.rb +67 -0
- data/spaceship/lib/spaceship/connect_api/models/review_rejection.rb +19 -0
- data/spaceship/lib/spaceship/connect_api/models/review_submission.rb +86 -0
- data/spaceship/lib/spaceship/connect_api/models/review_submission_item.rb +40 -0
- data/spaceship/lib/spaceship/connect_api/models/user.rb +5 -0
- data/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb +19 -0
- data/spaceship/lib/spaceship/connect_api/response.rb +23 -6
- data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +33 -2
- data/spaceship/lib/spaceship/connect_api/token.rb +5 -2
- data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +124 -8
- data/spaceship/lib/spaceship/connect_api.rb +9 -0
- data/spaceship/lib/spaceship/errors.rb +34 -0
- data/spaceship/lib/spaceship/globals.rb +9 -0
- data/spaceship/lib/spaceship/hashcash.rb +52 -0
- data/spaceship/lib/spaceship/portal/certificate.rb +4 -3
- data/spaceship/lib/spaceship/spaceauth_runner.rb +1 -1
- data/spaceship/lib/spaceship/tunes/app_ratings.rb +6 -6
- data/spaceship/lib/spaceship/tunes/iap_families.rb +1 -1
- data/spaceship/lib/spaceship/tunes/tunes.rb +0 -1
- data/spaceship/lib/spaceship/tunes/tunes_client.rb +79 -21
- data/spaceship/lib/spaceship/two_step_or_factor_client.rb +11 -3
- data/spaceship/lib/spaceship.rb +1 -0
- data/supply/lib/supply/client.rb +2 -7
- data/supply/lib/supply/options.rb +8 -0
- data/supply/lib/supply/uploader.rb +6 -2
- data/trainer/lib/assets/junit.xml.erb +28 -0
- data/trainer/lib/trainer/commands_generator.rb +51 -0
- data/trainer/lib/trainer/junit_generator.rb +31 -0
- data/trainer/lib/trainer/module.rb +10 -0
- data/trainer/lib/trainer/options.rb +66 -0
- data/trainer/lib/trainer/test_parser.rb +398 -0
- data/trainer/lib/trainer/xcresult.rb +403 -0
- data/trainer/lib/trainer.rb +7 -0
- metadata +49 -24
- data/spaceship/lib/spaceship/connect_api/testflight/.testflight.rb.swp +0 -0
- data/spaceship/lib/spaceship/tunes/user_detail.rb +0 -15
@@ -0,0 +1,49 @@
|
|
1
|
+
module Fastlane
|
2
|
+
module Actions
|
3
|
+
class TrainerAction < Action
|
4
|
+
def self.run(params)
|
5
|
+
require "trainer"
|
6
|
+
|
7
|
+
params[:path] = Actions.lane_context[Actions::SharedValues::SCAN_GENERATED_PLIST_FILE] if Actions.lane_context[Actions::SharedValues::SCAN_GENERATED_PLIST_FILE]
|
8
|
+
params[:path] ||= Actions.lane_context[Actions::SharedValues::SCAN_DERIVED_DATA_PATH] if Actions.lane_context[Actions::SharedValues::SCAN_DERIVED_DATA_PATH]
|
9
|
+
|
10
|
+
fail_build = params[:fail_build]
|
11
|
+
resulting_paths = Trainer::TestParser.auto_convert(params)
|
12
|
+
resulting_paths.each do |path, test_results|
|
13
|
+
UI.test_failure!("Unit tests failed") if fail_build && !test_results[:successful]
|
14
|
+
end
|
15
|
+
|
16
|
+
return resulting_paths
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.description
|
20
|
+
"Convert the Xcode plist log to a JUnit report"
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.detail
|
24
|
+
"Convert the Xcode plist log to a JUnit report. This will raise an exception if the tests failed"
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.authors
|
28
|
+
["KrauseFx"]
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.return_value
|
32
|
+
"A hash with the key being the path of the generated file, the value being if the tests were successful"
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.available_options
|
36
|
+
require 'trainer'
|
37
|
+
FastlaneCore::CommanderGenerator.new.generate(Trainer::Options.available_options)
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.is_supported?(platform)
|
41
|
+
%i[ios mac].include?(platform)
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.category
|
45
|
+
:testing
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -36,20 +36,28 @@ module Fastlane
|
|
36
36
|
end
|
37
37
|
|
38
38
|
style_value = params[:use_automatic_signing] ? 'Automatic' : 'Manual'
|
39
|
+
development_team_setting = params[:sdk] ? "DEVELOPMENT_TEAM[sdk=#{params[:sdk]}]" : "DEVELOPMENT_TEAM"
|
40
|
+
code_sign_identity_setting = params[:sdk] ? "CODE_SIGN_IDENTITY[sdk=#{params[:sdk]}]" : "CODE_SIGN_IDENTITY"
|
41
|
+
provisioning_profile_setting = params[:sdk] ? "PROVISIONING_PROFILE_SPECIFIER[sdk=#{params[:sdk]}]" : "PROVISIONING_PROFILE_SPECIFIER"
|
42
|
+
|
39
43
|
set_build_setting(config, "CODE_SIGN_STYLE", style_value)
|
40
44
|
|
41
45
|
if params[:team_id]
|
42
|
-
set_build_setting(config,
|
46
|
+
set_build_setting(config, development_team_setting, params[:team_id])
|
43
47
|
UI.important("Set Team id to: #{params[:team_id]} for target: #{target.name} for build configuration: #{config.name}")
|
44
48
|
end
|
45
49
|
if params[:code_sign_identity]
|
46
|
-
set_build_setting(config,
|
50
|
+
set_build_setting(config, code_sign_identity_setting, params[:code_sign_identity])
|
47
51
|
UI.important("Set Code Sign identity to: #{params[:code_sign_identity]} for target: #{target.name} for build configuration: #{config.name}")
|
48
52
|
end
|
49
53
|
if params[:profile_name]
|
50
|
-
set_build_setting(config,
|
54
|
+
set_build_setting(config, provisioning_profile_setting, params[:profile_name])
|
51
55
|
UI.important("Set Provisioning Profile name to: #{params[:profile_name]} for target: #{target.name} for build configuration: #{config.name}")
|
52
56
|
end
|
57
|
+
if params[:entitlements_file_path]
|
58
|
+
set_build_setting(config, "CODE_SIGN_ENTITLEMENTS", params[:entitlements_file_path])
|
59
|
+
UI.important("Set Entitlements file path to: #{params[:entitlements_file_path]} for target: #{target.name} for build configuration: #{config.name}")
|
60
|
+
end
|
53
61
|
# Since Xcode 8, this is no longer needed, you simply use PROVISIONING_PROFILE_SPECIFIER
|
54
62
|
if params[:profile_uuid]
|
55
63
|
set_build_setting(config, "PROVISIONING_PROFILE", params[:profile_uuid])
|
@@ -125,6 +133,10 @@ module Fastlane
|
|
125
133
|
description: "Defines if project should use automatic signing",
|
126
134
|
type: Boolean,
|
127
135
|
default_value: false),
|
136
|
+
FastlaneCore::ConfigItem.new(key: :sdk,
|
137
|
+
env_name: "FASTLANE_BUILD_SDK",
|
138
|
+
optional: true,
|
139
|
+
description: "Build target SDKs (iphoneos*, macosx*, iphonesimulator*)"),
|
128
140
|
FastlaneCore::ConfigItem.new(key: :team_id,
|
129
141
|
env_name: "FASTLANE_TEAM_ID",
|
130
142
|
optional: true,
|
@@ -143,6 +155,10 @@ module Fastlane
|
|
143
155
|
env_name: "FL_CODE_SIGN_IDENTITY",
|
144
156
|
description: "Code signing identity type (iPhone Developer, iPhone Distribution)",
|
145
157
|
optional: true),
|
158
|
+
FastlaneCore::ConfigItem.new(key: :entitlements_file_path,
|
159
|
+
env_name: "FL_CODE_SIGN_ENTITLEMENTS_FILE_PATH",
|
160
|
+
description: "Path to your entitlements file",
|
161
|
+
optional: true),
|
146
162
|
FastlaneCore::ConfigItem.new(key: :profile_name,
|
147
163
|
env_name: "FL_PROVISIONING_PROFILE_SPECIFIER",
|
148
164
|
description: "Provisioning profile name to use for code signing",
|
@@ -172,6 +188,17 @@ module Fastlane
|
|
172
188
|
update_code_signing_settings(
|
173
189
|
use_automatic_signing: true,
|
174
190
|
path: "demo-project/demo/demo.xcodeproj"
|
191
|
+
)',
|
192
|
+
' # more advanced manual code signing
|
193
|
+
update_code_signing_settings(
|
194
|
+
use_automatic_signing: false,
|
195
|
+
path: "demo-project/demo/demo.xcodeproj",
|
196
|
+
team_id: "QABC123DEV",
|
197
|
+
bundle_identifier: "com.demoapp.QABC123DEV",
|
198
|
+
code_sign_identity: "iPhone Distribution",
|
199
|
+
sdk: "iphoneos*",
|
200
|
+
profile_name: "Demo App Deployment Profile",
|
201
|
+
entitlements_file_path: "Demo App/generated/New.entitlements"
|
175
202
|
)'
|
176
203
|
]
|
177
204
|
end
|
@@ -185,7 +212,7 @@ module Fastlane
|
|
185
212
|
end
|
186
213
|
|
187
214
|
def self.authors
|
188
|
-
["mathiasAichinger", "hjanuschka", "p4checo", "portellaa", "aeons", "att55"]
|
215
|
+
["mathiasAichinger", "hjanuschka", "p4checo", "portellaa", "aeons", "att55", "abcdev"]
|
189
216
|
end
|
190
217
|
|
191
218
|
def self.is_supported?(platform)
|
@@ -80,7 +80,7 @@ module Fastlane
|
|
80
80
|
description: "Path to info plist",
|
81
81
|
optional: true,
|
82
82
|
verify_block: proc do |value|
|
83
|
-
UI.user_error!("Invalid plist file") unless value
|
83
|
+
UI.user_error!("Invalid plist file") unless value.downcase.end_with?(".plist")
|
84
84
|
end),
|
85
85
|
FastlaneCore::ConfigItem.new(key: :scheme,
|
86
86
|
env_name: "FL_UPDATE_PLIST_APP_SCHEME",
|
@@ -19,7 +19,7 @@ module Fastlane
|
|
19
19
|
UI.user_error!("Could not find path to project config '#{project_file_path}'. Pass the path to your project (not workspace)!") unless File.exist?(project_file_path)
|
20
20
|
|
21
21
|
# download certificate
|
22
|
-
unless File.exist?(params[:certificate])
|
22
|
+
unless File.exist?(params[:certificate]) && File.size(params[:certificate]) > 0
|
23
23
|
UI.message("Downloading root certificate from (#{ROOT_CERTIFICATE_URL}) to path '#{params[:certificate]}'")
|
24
24
|
File.open(params[:certificate], "w:ASCII-8BIT") do |file|
|
25
25
|
file.write(FastlaneCore::Helper.open_uri(ROOT_CERTIFICATE_URL, "rb").read)
|
@@ -34,7 +34,9 @@ module Fastlane
|
|
34
34
|
UI.user_error!("Could not find valid certificate at '#{params[:certificate]}'") unless File.size(params[:certificate]) > 0
|
35
35
|
cert = OpenSSL::X509::Certificate.new(File.read(params[:certificate]))
|
36
36
|
store.add_cert(cert)
|
37
|
+
|
37
38
|
p7.verify([cert], store)
|
39
|
+
check_verify!(p7)
|
38
40
|
data = Plist.parse_xml(p7.data)
|
39
41
|
|
40
42
|
target_filter = params[:target_filter] || params[:build_configuration_filter]
|
@@ -81,6 +83,13 @@ module Fastlane
|
|
81
83
|
UI.success("Successfully updated project settings in '#{folder}'")
|
82
84
|
end
|
83
85
|
|
86
|
+
def self.check_verify!(p7)
|
87
|
+
failed_to_verify = (p7.data.nil? || p7.data == "") && !(p7.error_string || "").empty?
|
88
|
+
if failed_to_verify
|
89
|
+
UI.crash!("Profile could not be verified with error: '#{p7.error_string}'. Try regenerating provisioning profile.")
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
84
93
|
def self.description
|
85
94
|
"Update projects code signing settings from your provisioning profile"
|
86
95
|
end
|
@@ -101,7 +101,7 @@ module Fastlane
|
|
101
101
|
UI.user_error!("Mismatched team_identifier. Required: '#{params[:team_identifier]}'; Found: '#{values['team_identifier']}'") unless params[:team_identifier] == values['team_identifier']
|
102
102
|
end
|
103
103
|
if params[:team_name]
|
104
|
-
UI.user_error!("Mismatched team_name. Required: '#{params[:team_name]}'; Found: 'values['team_name']'") unless params[:team_name] == values['team_name']
|
104
|
+
UI.user_error!("Mismatched team_name. Required: '#{params[:team_name]}'; Found: '#{values['team_name']}'") unless params[:team_name] == values['team_name']
|
105
105
|
end
|
106
106
|
if params[:app_name]
|
107
107
|
UI.user_error!("Mismatched app_name. Required: '#{params[:app_name]}'; Found: '#{values['app_name']}'") unless params[:app_name] == values['app_name']
|
@@ -101,7 +101,11 @@ module Fastlane
|
|
101
101
|
end
|
102
102
|
|
103
103
|
def self.category
|
104
|
-
:
|
104
|
+
:deprecated
|
105
|
+
end
|
106
|
+
|
107
|
+
def self.deprecated_notes
|
108
|
+
"The xcode-install gem, which this action depends on, has been sunset. Please migrate to [xcodes](https://docs.fastlane.tools/actions/xcodes). You can find a migration guide here: [xcpretty/xcode-install/MIGRATION.md](https://github.com/xcpretty/xcode-install/blob/master/MIGRATION.md)"
|
105
109
|
end
|
106
110
|
end
|
107
111
|
end
|
@@ -40,7 +40,7 @@ module Fastlane
|
|
40
40
|
def self.details
|
41
41
|
[
|
42
42
|
"Select and build with the Xcode installed at the provided path.",
|
43
|
-
"Use the `
|
43
|
+
"Use the `xcodes` action if you want to select an Xcode:",
|
44
44
|
"- Based on a version specifier or",
|
45
45
|
"- You don't have known, stable paths, as may happen in a CI environment."
|
46
46
|
].join("\n")
|
@@ -267,10 +267,11 @@ module Fastlane
|
|
267
267
|
|
268
268
|
output_result = ""
|
269
269
|
|
270
|
+
override_architecture_prefix = params[:xcodebuild_architecture] ? "arch -#{params[:xcodebuild_architecture]} " : ""
|
270
271
|
# In some cases the simulator is not booting up in time
|
271
272
|
# One way to solve it is to try to rerun it for one more time
|
272
273
|
begin
|
273
|
-
output_result = Actions.sh "set -o pipefail && xcodebuild #{xcodebuild_args} #{pipe_command}"
|
274
|
+
output_result = Actions.sh "set -o pipefail && #{override_architecture_prefix}xcodebuild #{xcodebuild_args} #{pipe_command}"
|
274
275
|
rescue => ex
|
275
276
|
exit_status = $?.exitstatus
|
276
277
|
|
@@ -383,8 +384,9 @@ module Fastlane
|
|
383
384
|
['scheme', 'The scheme to build'],
|
384
385
|
['build_settings', 'Hash of additional build information'],
|
385
386
|
['xcargs', 'Pass additional xcodebuild options'],
|
386
|
-
['output_style', 'Set the output format to one of: :standard (Colored UTF8 output, default), :basic (black & white ASCII output)'],
|
387
387
|
['buildlog_path', 'The path where the xcodebuild.log will be created, by default it is created in ~/Library/Logs/fastlane/xcbuild'],
|
388
|
+
['output_style', 'Set the output format to one of: :standard (Colored UTF8 output, default), :basic (black & white ASCII output)'],
|
389
|
+
['xcodebuild_architecture', 'Allows to set the architecture that `xcodebuild` is run with, for example to force it to run under Rosetta on an Apple Silicon mac'],
|
388
390
|
['raw_buildlog', 'Set to true to see xcodebuild raw output. Default value is false'],
|
389
391
|
['xcpretty_output', 'specifies the output type for xcpretty. eg. \'test\', or \'simple\''],
|
390
392
|
['xcpretty_utf', 'Specifies xcpretty should use utf8 when reporting builds. This has no effect when raw_buildlog is specified.']
|
@@ -437,6 +439,7 @@ module Fastlane
|
|
437
439
|
['build_settings', 'Hash of additional build information'],
|
438
440
|
['xcargs', 'Pass additional xcodebuild options'],
|
439
441
|
['output_style', 'Set the output format to one of: :standard (Colored UTF8 output, default), :basic (black & white ASCII output)'],
|
442
|
+
['xcodebuild_architecture', 'Allows to set the architecture that `xcodebuild` is run with, for example to force it to run under Rosetta on an Apple Silicon mac'],
|
440
443
|
['buildlog_path', 'The path where the xcodebuild.log will be created, by default it is created in ~/Library/Logs/fastlane/xcbuild'],
|
441
444
|
['raw_buildlog', 'Set to true to see xcodebuild raw output. Default value is false'],
|
442
445
|
['xcpretty_output', 'specifies the output type for xcpretty. eg. \'test\', or \'simple\''],
|
@@ -529,6 +532,7 @@ module Fastlane
|
|
529
532
|
['build_settings', 'Hash of additional build information'],
|
530
533
|
['xcargs', 'Pass additional xcodebuild options'],
|
531
534
|
['output_style', 'Set the output format to one of: :standard (Colored UTF8 output, default), :basic (black & white ASCII output)'],
|
535
|
+
['xcodebuild_architecture', 'Allows to set the architecture that `xcodebuild` is run with, for example to force it to run under Rosetta on an Apple Silicon mac'],
|
532
536
|
['buildlog_path', 'The path where the xcodebuild.log will be created, by default it is created in ~/Library/Logs/fastlane/xcbuild'],
|
533
537
|
['raw_buildlog', 'Set to true to see xcodebuild raw output. Default value is false'],
|
534
538
|
['xcpretty_output', 'specifies the output type for xcpretty. eg. \'test\', or \'simple\''],
|
@@ -571,6 +575,7 @@ module Fastlane
|
|
571
575
|
['build_settings', 'Hash of additional build information'],
|
572
576
|
['xcargs', 'Pass additional xcodebuild options'],
|
573
577
|
['output_style', 'Set the output format to one of: :standard (Colored UTF8 output, default), :basic (black & white ASCII output)'],
|
578
|
+
['xcodebuild_architecture', 'Allows to set the architecture that `xcodebuild` is run with, for example to force it to run under Rosetta on an Apple Silicon mac'],
|
574
579
|
['buildlog_path', 'The path where the xcodebuild.log will be created, by default it is created in ~/Library/Logs/fastlane/xcbuild'],
|
575
580
|
['raw_buildlog', 'Set to true to see xcodebuild raw output. Default value is false'],
|
576
581
|
['xcpretty_output', 'specifies the output type for xcpretty. eg. \'test\', or \'simple\''],
|
@@ -621,6 +626,7 @@ module Fastlane
|
|
621
626
|
['destination_timeout', 'The timeout for connecting to the simulator, in seconds'],
|
622
627
|
['enable_code_coverage', 'Turn code coverage on or off when testing. eg. true|false. Requires Xcode 7+'],
|
623
628
|
['output_style', 'Set the output format to one of: :standard (Colored UTF8 output, default), :basic (black & white ASCII output)'],
|
629
|
+
['xcodebuild_architecture', 'Allows to set the architecture that `xcodebuild` is run with, for example to force it to run under Rosetta on an Apple Silicon mac'],
|
624
630
|
['buildlog_path', 'The path where the xcodebuild.log will be created, by default it is created in ~/Library/Logs/fastlane/xcbuild'],
|
625
631
|
['raw_buildlog', 'Set to true to see xcodebuild raw output. Default value is false'],
|
626
632
|
['xcpretty_output', 'specifies the output type for xcpretty. eg. \'test\', or \'simple\''],
|
@@ -0,0 +1,152 @@
|
|
1
|
+
module Fastlane
|
2
|
+
module Actions
|
3
|
+
module SharedValues
|
4
|
+
XCODES_XCODE_PATH = :XCODES_XCODE_PATH
|
5
|
+
end
|
6
|
+
|
7
|
+
class XcodesAction < Action
|
8
|
+
def self.run(params)
|
9
|
+
binary = params[:binary_path]
|
10
|
+
xcodes_raw_version = Actions.sh("#{binary} version", log: false)
|
11
|
+
xcodes_version = Gem::Version.new(xcodes_raw_version)
|
12
|
+
UI.message("Running xcodes version #{xcodes_version}")
|
13
|
+
if xcodes_version < Gem::Version.new("1.1.0")
|
14
|
+
UI.user_error!([
|
15
|
+
"xcodes action requires the minimum version of xcodes binary to be v1.1.0.",
|
16
|
+
"Please update xcodes. If you installed it via Homebrew, this can be done via 'brew upgrade xcodes'"
|
17
|
+
].join(" "))
|
18
|
+
end
|
19
|
+
|
20
|
+
version = params[:version]
|
21
|
+
command = []
|
22
|
+
command << binary
|
23
|
+
|
24
|
+
if (xcodes_args = params[:xcodes_args])
|
25
|
+
command << xcodes_args
|
26
|
+
Actions.sh(command.join(" "))
|
27
|
+
elsif !params[:select_for_current_build_only]
|
28
|
+
command << "install"
|
29
|
+
command << "'#{version}'"
|
30
|
+
command << "--update" if params[:update_list]
|
31
|
+
command << "--select"
|
32
|
+
Actions.sh(command.join(" "))
|
33
|
+
end
|
34
|
+
|
35
|
+
command = []
|
36
|
+
command << binary
|
37
|
+
command << "installed"
|
38
|
+
command << "'#{version}'"
|
39
|
+
|
40
|
+
# `installed <version>` will either return the path to the given
|
41
|
+
# version or fail because the version can't be found.
|
42
|
+
#
|
43
|
+
# Store the path if we get one, fail the action otherwise.
|
44
|
+
xcode_path = Actions.sh(command.join(" ")) do |status, result, sh_command|
|
45
|
+
formatted_result = result.chomp
|
46
|
+
|
47
|
+
unless status.success?
|
48
|
+
UI.user_error!("Command `#{sh_command}` failed with status #{status.exitstatus} and message: #{formatted_result}")
|
49
|
+
end
|
50
|
+
|
51
|
+
formatted_result
|
52
|
+
end
|
53
|
+
|
54
|
+
# If the command succeeded, `xcode_path` will be something like:
|
55
|
+
# /Applications/Xcode-14.app
|
56
|
+
xcode_developer_path = File.join(xcode_path, "/Contents/Developer")
|
57
|
+
|
58
|
+
UI.message("Setting Xcode version '#{version}' at '#{xcode_path}' for all build steps")
|
59
|
+
ENV["DEVELOPER_DIR"] = xcode_developer_path
|
60
|
+
Actions.lane_context[SharedValues::XCODES_XCODE_PATH] = xcode_developer_path
|
61
|
+
return xcode_path
|
62
|
+
end
|
63
|
+
|
64
|
+
#####################################################
|
65
|
+
# @!group Documentation
|
66
|
+
#####################################################
|
67
|
+
|
68
|
+
def self.description
|
69
|
+
"Make sure a certain version of Xcode is installed, installing it only if needed"
|
70
|
+
end
|
71
|
+
|
72
|
+
def self.details
|
73
|
+
[
|
74
|
+
"Makes sure a specific version of Xcode is installed. If that's not the case, it will automatically be downloaded by [xcodes](https://github.com/RobotsAndPencils/xcodes).",
|
75
|
+
"This will make sure to use the correct Xcode version for later actions.",
|
76
|
+
"Note that this action depends on [xcodes](https://github.com/RobotsAndPencils/xcodes) CLI, so make sure you have it installed in your environment. For the installation guide, see: https://github.com/RobotsAndPencils/xcodes#installation"
|
77
|
+
].join("\n")
|
78
|
+
end
|
79
|
+
|
80
|
+
def self.available_options
|
81
|
+
[
|
82
|
+
FastlaneCore::ConfigItem.new(key: :version,
|
83
|
+
env_name: "FL_XCODE_VERSION",
|
84
|
+
description: "The version number of the version of Xcode to install. Defaults to the value specified in the .xcode-version file",
|
85
|
+
default_value: Helper::XcodesHelper.read_xcode_version_file,
|
86
|
+
default_value_dynamic: true,
|
87
|
+
verify_block: Helper::XcodesHelper::Verify.method(:requirement)),
|
88
|
+
FastlaneCore::ConfigItem.new(key: :update_list,
|
89
|
+
env_name: "FL_XCODES_UPDATE_LIST",
|
90
|
+
description: "Whether the list of available Xcode versions should be updated before running the install command",
|
91
|
+
type: Boolean,
|
92
|
+
default_value: true),
|
93
|
+
FastlaneCore::ConfigItem.new(key: :select_for_current_build_only,
|
94
|
+
env_name: "FL_XCODES_SELECT_FOR_CURRENT_BUILD_ONLY",
|
95
|
+
description: [
|
96
|
+
"When true, it won't attempt to install an Xcode version, just find the installed Xcode version that best matches the passed version argument, and select it for the current build steps.",
|
97
|
+
"It doesn't change the global Xcode version (e.g. via 'xcrun xcode-select'), which would require sudo permissions — when this option is true, this action doesn't require sudo permissions"
|
98
|
+
].join(" "),
|
99
|
+
type: Boolean,
|
100
|
+
default_value: false),
|
101
|
+
FastlaneCore::ConfigItem.new(key: :binary_path,
|
102
|
+
env_name: "FL_XCODES_BINARY_PATH",
|
103
|
+
description: "Where the xcodes binary lives on your system (full path)",
|
104
|
+
default_value: Helper::XcodesHelper.find_xcodes_binary_path,
|
105
|
+
default_value_dynamic: true,
|
106
|
+
verify_block: proc do |value|
|
107
|
+
UI.user_error!("'xcodes' doesn't seem to be installed. Please follow the installation guide at https://github.com/RobotsAndPencils/xcodes#installation before proceeding") if value.empty?
|
108
|
+
UI.user_error!("Couldn't find xcodes binary at path '#{value}'") unless File.exist?(value)
|
109
|
+
end),
|
110
|
+
FastlaneCore::ConfigItem.new(key: :xcodes_args,
|
111
|
+
env_name: "FL_XCODES_ARGS",
|
112
|
+
description: "Pass in xcodes command line arguments directly. When present, other parameters are ignored and only this parameter is used to build the command to be executed",
|
113
|
+
type: :shell_string,
|
114
|
+
optional: true)
|
115
|
+
]
|
116
|
+
end
|
117
|
+
|
118
|
+
def self.output
|
119
|
+
[
|
120
|
+
['XCODES_XCODE_PATH', 'The path to the newly installed Xcode version']
|
121
|
+
]
|
122
|
+
end
|
123
|
+
|
124
|
+
def self.return_value
|
125
|
+
"The path to the newly installed Xcode version"
|
126
|
+
end
|
127
|
+
|
128
|
+
def self.return_type
|
129
|
+
:string
|
130
|
+
end
|
131
|
+
|
132
|
+
def self.authors
|
133
|
+
["rogerluan"]
|
134
|
+
end
|
135
|
+
|
136
|
+
def self.is_supported?(platform)
|
137
|
+
[:ios, :mac].include?(platform)
|
138
|
+
end
|
139
|
+
|
140
|
+
def self.example_code
|
141
|
+
[
|
142
|
+
'xcodes(version: "14.1")',
|
143
|
+
'xcodes # When missing, the version value defaults to the value specified in the .xcode-version file'
|
144
|
+
]
|
145
|
+
end
|
146
|
+
|
147
|
+
def self.category
|
148
|
+
:building
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
@@ -5,6 +5,11 @@ module Fastlane
|
|
5
5
|
Actions.verify_gem!('xcov')
|
6
6
|
require 'xcov'
|
7
7
|
|
8
|
+
if values[:xccov_file_direct_path].nil? && (path = Actions.lane_context[SharedValues::SCAN_GENERATED_XCRESULT_PATH])
|
9
|
+
UI.verbose("Pulling xcov 'xccov_file_direct_path' from SharedValues::SCAN_GENERATED_XCRESULT_PATH")
|
10
|
+
values[:xccov_file_direct_path] = path
|
11
|
+
end
|
12
|
+
|
8
13
|
Xcov::Manager.new(values).run
|
9
14
|
end
|
10
15
|
|
@@ -5,6 +5,7 @@ module Fastlane
|
|
5
5
|
Actions.verify_gem!('xcode-install')
|
6
6
|
|
7
7
|
version = params[:version]
|
8
|
+
|
8
9
|
xcode = Helper::XcversionHelper.find_xcode(version)
|
9
10
|
UI.user_error!("Cannot find an installed Xcode satisfying '#{version}'") if xcode.nil?
|
10
11
|
|
@@ -19,20 +20,24 @@ module Fastlane
|
|
19
20
|
end
|
20
21
|
|
21
22
|
def self.details
|
22
|
-
|
23
|
+
[
|
24
|
+
"Finds and selects a version of an installed Xcode that best matches the provided [`Gem::Version` requirement specifier](http://www.rubydoc.info/github/rubygems/rubygems/Gem/Version)",
|
25
|
+
"You can either manually provide a specific version using `version:` or you make use of the `.xcode-version` file."
|
26
|
+
].join("\n")
|
23
27
|
end
|
24
28
|
|
25
29
|
def self.authors
|
26
|
-
["oysta"]
|
30
|
+
["oysta", "rogerluan"]
|
27
31
|
end
|
28
32
|
|
29
33
|
def self.available_options
|
30
34
|
[
|
31
35
|
FastlaneCore::ConfigItem.new(key: :version,
|
32
36
|
env_name: "FL_XCODE_VERSION",
|
33
|
-
description: "The version of Xcode to select specified as a Gem::Version requirement string (e.g. '~> 7.1.0')",
|
34
|
-
|
35
|
-
|
37
|
+
description: "The version of Xcode to select specified as a Gem::Version requirement string (e.g. '~> 7.1.0'). Defaults to the value specified in the .xcode-version file ",
|
38
|
+
default_value: Helper::XcodesHelper.read_xcode_version_file,
|
39
|
+
default_value_dynamic: true,
|
40
|
+
verify_block: Helper::XcodesHelper::Verify.method(:requirement))
|
36
41
|
]
|
37
42
|
end
|
38
43
|
|
@@ -43,12 +48,17 @@ module Fastlane
|
|
43
48
|
def self.example_code
|
44
49
|
[
|
45
50
|
'xcversion(version: "8.1") # Selects Xcode 8.1.0',
|
46
|
-
'xcversion(version: "~> 8.1.0") # Selects the latest installed version from the 8.1.x set'
|
51
|
+
'xcversion(version: "~> 8.1.0") # Selects the latest installed version from the 8.1.x set',
|
52
|
+
'xcversion # When missing, the version value defaults to the value specified in the .xcode-version file'
|
47
53
|
]
|
48
54
|
end
|
49
55
|
|
50
56
|
def self.category
|
51
|
-
:
|
57
|
+
:deprecated
|
58
|
+
end
|
59
|
+
|
60
|
+
def self.deprecated_notes
|
61
|
+
"The xcode-install gem, which this action depends on, has been sunset. Please migrate to [xcodes](https://docs.fastlane.tools/actions/xcodes). You can find a migration guide here: [xcpretty/xcode-install/MIGRATION.md](https://github.com/xcpretty/xcode-install/blob/master/MIGRATION.md)"
|
52
62
|
end
|
53
63
|
end
|
54
64
|
end
|
@@ -78,6 +78,7 @@ module Fastlane
|
|
78
78
|
tool_name = ARGV.first ? ARGV.first.downcase : nil
|
79
79
|
|
80
80
|
tool_name = process_emojis(tool_name)
|
81
|
+
tool_name = map_aliased_tools(tool_name)
|
81
82
|
|
82
83
|
if tool_name && Fastlane::TOOLS.include?(tool_name.to_sym) && !available_lanes.include?(tool_name.to_sym)
|
83
84
|
# Triggering a specific tool
|
@@ -125,6 +126,10 @@ module Fastlane
|
|
125
126
|
FastlaneCore::UpdateChecker.show_update_status('fastlane', Fastlane::VERSION)
|
126
127
|
end
|
127
128
|
|
129
|
+
def map_aliased_tools(tool_name)
|
130
|
+
Fastlane::TOOL_ALIASES[tool_name&.to_sym] || tool_name
|
131
|
+
end
|
132
|
+
|
128
133
|
# Since loading dotenv should respect additional environments passed using
|
129
134
|
# --env, we must extract the arguments out of ARGV and process them before
|
130
135
|
# calling into commander. This is required since the ENV must be configured
|
@@ -36,7 +36,8 @@ module Fastlane
|
|
36
36
|
# do not use "include" as it may be some where in the commandline where "env" is required, therefore explicit index->0
|
37
37
|
unless ARGV[0] == "env" || CLIToolsDistributor.running_version_command? || CLIToolsDistributor.running_help_command?
|
38
38
|
# *after* loading the plugins
|
39
|
-
|
39
|
+
hide_plugins_table = FastlaneCore::Env.truthy?("FASTLANE_HIDE_PLUGINS_TABLE")
|
40
|
+
Fastlane.plugin_manager.load_plugins(print_table: !hide_plugins_table)
|
40
41
|
Fastlane::PluginUpdateManager.start_looking_for_updates
|
41
42
|
end
|
42
43
|
self.new.run
|
@@ -4,21 +4,18 @@ module Fastlane
|
|
4
4
|
output_path ||= File.join(FastlaneCore::FastlaneFolder.path || '.', 'README.md')
|
5
5
|
|
6
6
|
output = ["fastlane documentation"]
|
7
|
-
output << "
|
7
|
+
output << "----"
|
8
|
+
output << ""
|
8
9
|
|
9
10
|
output << "# Installation"
|
10
11
|
output << ""
|
11
12
|
output << "Make sure you have the latest version of the Xcode command line tools installed:"
|
12
13
|
output << ""
|
13
|
-
output << "```"
|
14
|
+
output << "```sh"
|
14
15
|
output << "xcode-select --install"
|
15
16
|
output << "```"
|
16
17
|
output << ""
|
17
|
-
output << "
|
18
|
-
output << "```"
|
19
|
-
output << "[sudo] gem install fastlane -NV"
|
20
|
-
output << "```"
|
21
|
-
output << "or alternatively using `brew install fastlane`"
|
18
|
+
output << "For _fastlane_ installation instructions, see [Installing _fastlane_](https://docs.fastlane.tools/#installing-fastlane)"
|
22
19
|
output << ""
|
23
20
|
output << "# Available Actions"
|
24
21
|
|
@@ -32,7 +29,10 @@ module Fastlane
|
|
32
29
|
next
|
33
30
|
end
|
34
31
|
|
35
|
-
|
32
|
+
if platform
|
33
|
+
output << ""
|
34
|
+
output << "## #{formatted_platform(platform)}"
|
35
|
+
end
|
36
36
|
|
37
37
|
lanes.each do |lane_name, lane|
|
38
38
|
next if lane.is_private
|
@@ -45,8 +45,10 @@ module Fastlane
|
|
45
45
|
end
|
46
46
|
|
47
47
|
output << "This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run."
|
48
|
-
output << "
|
49
|
-
output << "
|
48
|
+
output << ""
|
49
|
+
output << "More information about _fastlane_ can be found on [fastlane.tools](https://fastlane.tools)."
|
50
|
+
output << ""
|
51
|
+
output << "The documentation of _fastlane_ can be found on [docs.fastlane.tools](https://docs.fastlane.tools)."
|
50
52
|
output << ""
|
51
53
|
|
52
54
|
begin
|
@@ -78,10 +80,13 @@ module Fastlane
|
|
78
80
|
full_name = [platform, lane].reject(&:nil?).join(' ')
|
79
81
|
|
80
82
|
output = []
|
83
|
+
output << ""
|
81
84
|
output << "### #{full_name}"
|
85
|
+
output << ""
|
86
|
+
output << "```sh"
|
87
|
+
output << "[bundle exec] fastlane #{full_name}"
|
82
88
|
output << "```"
|
83
|
-
output << "
|
84
|
-
output << "```"
|
89
|
+
output << ""
|
85
90
|
output << description
|
86
91
|
output
|
87
92
|
end
|
@@ -338,11 +338,24 @@ module Fastlane
|
|
338
338
|
UI.user_error!("No tag found matching #{version.inspect}") if checkout_param.nil?
|
339
339
|
end
|
340
340
|
|
341
|
-
if is_eligible_for_caching
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
341
|
+
if is_eligible_for_caching
|
342
|
+
if version.nil?
|
343
|
+
# Update the repo if it's eligible for caching but the version isn't specified
|
344
|
+
UI.message("Fetching remote git branches and updating git repo...")
|
345
|
+
Helper.with_env_values('GIT_TERMINAL_PROMPT' => '0') do
|
346
|
+
Actions.sh("cd #{clone_folder.shellescape} && git fetch --all --quiet && git checkout #{checkout_param.shellescape} #{checkout_path} && git reset --hard && git rebase")
|
347
|
+
end
|
348
|
+
else
|
349
|
+
begin
|
350
|
+
# https://stackoverflow.com/a/1593574/865175
|
351
|
+
current_tag = Actions.sh("cd #{clone_folder.shellescape} && git describe --exact-match --tags HEAD").strip
|
352
|
+
rescue
|
353
|
+
current_tag = nil
|
354
|
+
end
|
355
|
+
|
356
|
+
if current_tag != version
|
357
|
+
Actions.sh("cd #{clone_folder.shellescape} && git checkout #{checkout_param.shellescape} #{checkout_path}")
|
358
|
+
end
|
346
359
|
end
|
347
360
|
else
|
348
361
|
Actions.sh("cd #{clone_folder.shellescape} && git checkout #{checkout_param.shellescape} #{checkout_path}")
|
@@ -5,3 +5,6 @@
|
|
5
5
|
|
6
6
|
FastlaneCore::Feature.register(env_var: 'FASTLANE_ENABLE_BETA_DELIVER_SYNC_SCREENSHOTS',
|
7
7
|
description: 'Use a newly implemented screenshots synchronization logic')
|
8
|
+
|
9
|
+
FastlaneCore::Feature.register(env_var: 'FASTLANE_WWDR_USE_HTTP1_AND_RETRIES',
|
10
|
+
description: 'Adds --http1.1 and --retry 3 --retry-all-errors to the curl command to download WWDR certificates')
|