fastlane 2.224.0 → 2.232.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +98 -92
- data/bin/fastlane +2 -2
- data/cert/lib/cert/options.rb +7 -2
- data/cert/lib/cert/runner.rb +23 -11
- data/deliver/lib/assets/summary.html.erb +3 -3
- data/deliver/lib/deliver/app_screenshot.rb +215 -347
- data/deliver/lib/deliver/app_screenshot_iterator.rb +4 -1
- data/deliver/lib/deliver/app_screenshot_validator.rb +5 -21
- data/deliver/lib/deliver/loader.rb +2 -9
- data/deliver/lib/deliver/options.rb +1 -1
- data/deliver/lib/deliver/runner.rb +1 -1
- data/deliver/lib/deliver/upload_metadata.rb +5 -0
- data/deliver/lib/deliver/upload_screenshots.rb +4 -2
- data/fastlane/lib/assets/completions/completion.bash +1 -1
- data/fastlane/lib/assets/completions/completion.sh +2 -2
- data/fastlane/lib/fastlane/actions/app_store_build_number.rb +16 -15
- data/fastlane/lib/fastlane/actions/appium.rb +1 -1
- data/fastlane/lib/fastlane/actions/docs/create_app_online.md +6 -3
- data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +12 -8
- data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +56 -17
- data/fastlane/lib/fastlane/actions/docs/upload_to_testflight.md +13 -1
- data/fastlane/lib/fastlane/actions/get_version_number.rb +1 -1
- data/fastlane/lib/fastlane/actions/import_certificate.rb +9 -1
- data/fastlane/lib/fastlane/actions/import_from_git.rb +11 -4
- data/fastlane/lib/fastlane/actions/increment_build_number.rb +1 -1
- data/fastlane/lib/fastlane/actions/install_xcode_plugin.rb +3 -2
- data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +2 -2
- data/fastlane/lib/fastlane/actions/modify_services.rb +1 -0
- data/fastlane/lib/fastlane/actions/notarize.rb +4 -0
- data/fastlane/lib/fastlane/actions/onesignal.rb +1 -1
- data/fastlane/lib/fastlane/actions/register_device.rb +1 -1
- data/fastlane/lib/fastlane/actions/register_devices.rb +1 -1
- data/fastlane/lib/fastlane/actions/setup_ci.rb +14 -4
- data/fastlane/lib/fastlane/actions/testfairy.rb +41 -4
- data/fastlane/lib/fastlane/actions/unlock_keychain.rb +6 -1
- data/fastlane/lib/fastlane/actions/upload_to_app_store.rb +1 -1
- data/fastlane/lib/fastlane/actions/xcov.rb +1 -7
- data/fastlane/lib/fastlane/cli_tools_distributor.rb +9 -0
- data/fastlane/lib/fastlane/documentation/markdown_docs_generator.rb +4 -4
- data/fastlane/lib/fastlane/erb_template_helper.rb +1 -7
- data/fastlane/lib/fastlane/fast_file.rb +9 -6
- data/fastlane/lib/fastlane/helper/s3_client_helper.rb +4 -0
- data/fastlane/lib/fastlane/plugins/template/%gem_name%.gemspec.erb +1 -1
- data/fastlane/lib/fastlane/plugins/template/.github/workflows/test.yml +20 -20
- data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +1 -1
- data/fastlane/lib/fastlane/version.rb +2 -1
- data/fastlane/swift/Actions.swift +1 -1
- data/fastlane/swift/Appfile.swift +13 -5
- data/fastlane/swift/ArgumentProcessor.swift +1 -1
- data/fastlane/swift/Atomic.swift +1 -1
- data/fastlane/swift/ControlCommand.swift +5 -4
- data/fastlane/swift/Deliverfile.swift +2 -2
- data/fastlane/swift/DeliverfileProtocol.swift +265 -68
- data/fastlane/swift/Fastlane.swift +187 -168
- data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.pbxproj +3 -1
- data/fastlane/swift/Gymfile.swift +2 -2
- data/fastlane/swift/GymfileProtocol.swift +227 -54
- data/fastlane/swift/LaneFileProtocol.swift +7 -5
- data/fastlane/swift/MainProcess.swift +1 -1
- data/fastlane/swift/Matchfile.swift +2 -2
- data/fastlane/swift/MatchfileProtocol.swift +226 -59
- 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 +45 -13
- data/fastlane/swift/RubyCommand.swift +6 -7
- data/fastlane/swift/RubyCommandable.swift +1 -1
- data/fastlane/swift/Runner.swift +3 -3
- data/fastlane/swift/RunnerArgument.swift +1 -1
- data/fastlane/swift/Scanfile.swift +2 -2
- data/fastlane/swift/ScanfileProtocol.swift +334 -84
- data/fastlane/swift/Screengrabfile.swift +2 -2
- data/fastlane/swift/ScreengrabfileProtocol.swift +89 -24
- data/fastlane/swift/Snapshotfile.swift +2 -2
- data/fastlane/swift/SnapshotfileProtocol.swift +216 -53
- data/fastlane/swift/SocketClient.swift +7 -7
- data/fastlane/swift/SocketClientDelegateProtocol.swift +1 -1
- data/fastlane/swift/SocketResponse.swift +1 -1
- data/fastlane/swift/formatting/Brewfile.lock.json +15 -25
- data/fastlane/swift/formatting/Rakefile +1 -2
- data/fastlane/swift/main.swift +1 -1
- data/fastlane_core/lib/assets/XMLTemplate.xml.erb +5 -1
- data/fastlane_core/lib/fastlane_core/cert_checker.rb +10 -0
- data/fastlane_core/lib/fastlane_core/command_executor.rb +3 -1
- data/fastlane_core/lib/fastlane_core/fastlane_pty.rb +5 -1
- data/fastlane_core/lib/fastlane_core/helper.rb +6 -1
- data/fastlane_core/lib/fastlane_core/ipa_file_analyser.rb +4 -14
- data/fastlane_core/lib/fastlane_core/ipa_upload_package_builder.rb +19 -2
- data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +143 -106
- data/fastlane_core/lib/fastlane_core/keychain_importer.rb +3 -1
- data/fastlane_core/lib/fastlane_core/project.rb +8 -0
- data/fastlane_core/lib/fastlane_core/provisioning_profile.rb +7 -1
- data/frameit/lib/frameit/device.rb +2 -2
- data/frameit/lib/frameit/device_types.rb +108 -70
- data/frameit/lib/frameit/template_finder.rb +1 -1
- data/gym/lib/assets/wrap_xcodebuild/xcbuild-safe.sh +1 -0
- data/gym/lib/gym/module.rb +9 -4
- data/gym/lib/gym/options.rb +20 -2
- data/gym/lib/gym/runner.rb +38 -3
- data/match/lib/assets/READMETemplate.md +2 -2
- data/match/lib/match/generator.rb +2 -2
- data/match/lib/match/options.rb +1 -0
- data/match/lib/match/runner.rb +1 -1
- data/match/lib/match/storage/s3_storage.rb +4 -7
- data/pilot/lib/pilot/build_manager.rb +7 -1
- data/precheck/lib/precheck/options.rb +1 -1
- data/produce/lib/produce/commands_generator.rb +2 -0
- data/produce/lib/produce/developer_center.rb +1 -0
- data/produce/lib/produce/options.rb +1 -1
- data/produce/lib/produce/service.rb +6 -1
- data/scan/lib/scan/error_handler.rb +5 -0
- data/scan/lib/scan/options.rb +13 -3
- data/scan/lib/scan/test_command_generator.rb +10 -2
- data/sigh/lib/assets/resign.sh +7 -5
- data/sigh/lib/sigh/local_manage.rb +6 -4
- data/sigh/lib/sigh/options.rb +1 -0
- data/sigh/lib/sigh/runner.rb +23 -3
- data/snapshot/lib/snapshot/detect_values.rb +1 -1
- data/snapshot/lib/snapshot/options.rb +13 -1
- data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +4 -2
- data/spaceship/lib/spaceship/client.rb +153 -22
- data/spaceship/lib/spaceship/connect_api/models/age_rating_declaration.rb +65 -9
- data/spaceship/lib/spaceship/connect_api/models/app_info_localization.rb +4 -4
- data/spaceship/lib/spaceship/connect_api/models/app_screenshot_set.rb +7 -1
- data/spaceship/lib/spaceship/connect_api/models/app_store_version_localization.rb +16 -16
- data/spaceship/lib/spaceship/connect_api/models/build_upload.rb +42 -0
- data/spaceship/lib/spaceship/connect_api/models/bundle_id_capability.rb +2 -0
- data/spaceship/lib/spaceship/connect_api/models/certificate.rb +33 -2
- data/spaceship/lib/spaceship/connect_api/models/device.rb +1 -2
- data/spaceship/lib/spaceship/connect_api/models/profile.rb +2 -3
- data/spaceship/lib/spaceship/connect_api/models/webhook.rb +62 -0
- data/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb +0 -6
- data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +9 -0
- data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +38 -0
- data/spaceship/lib/spaceship/connect_api.rb +2 -0
- data/spaceship/lib/spaceship/errors.rb +23 -6
- data/spaceship/lib/spaceship/portal/key.rb +22 -3
- data/spaceship/lib/spaceship/portal/portal_client.rb +29 -2
- data/spaceship/lib/spaceship/spaceauth_runner.rb +5 -15
- data/supply/lib/supply/client.rb +18 -1
- data/supply/lib/supply/uploader.rb +22 -11
- data/trainer/lib/trainer/legacy_xcresult.rb +586 -0
- data/trainer/lib/trainer/options.rb +5 -0
- data/trainer/lib/trainer/plist_test_summary_parser.rb +84 -0
- data/trainer/lib/trainer/test_parser.rb +12 -293
- data/trainer/lib/trainer/xcresult/helper.rb +63 -0
- data/trainer/lib/trainer/xcresult/repetition.rb +39 -0
- data/trainer/lib/trainer/xcresult/test_case.rb +221 -0
- data/trainer/lib/trainer/xcresult/test_case_attributes.rb +49 -0
- data/trainer/lib/trainer/xcresult/test_plan.rb +91 -0
- data/trainer/lib/trainer/xcresult/test_suite.rb +134 -0
- data/trainer/lib/trainer/xcresult.rb +31 -388
- data/trainer/lib/trainer.rb +3 -1
- metadata +172 -33
- data/fastlane/lib/fastlane/actions/hipchat.rb +0 -200
- data/fastlane/lib/fastlane/core_ext/bundler_monkey_patch.rb +0 -14
- data/fastlane/lib/fastlane/plugins/template/.circleci/config.yml +0 -43
- data/fastlane/lib/fastlane/plugins/template/.travis.yml +0 -4
|
@@ -8,7 +8,7 @@ module Fastlane
|
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
case detect_provider(params)
|
|
11
|
-
when 'circleci'
|
|
11
|
+
when 'circleci', 'codebuild'
|
|
12
12
|
setup_output_paths
|
|
13
13
|
end
|
|
14
14
|
|
|
@@ -20,7 +20,7 @@ module Fastlane
|
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
def self.detect_provider(params)
|
|
23
|
-
params[:provider] || (Helper.is_circle_ci? ? 'circleci' : nil)
|
|
23
|
+
params[:provider] || (Helper.is_circle_ci? ? 'circleci' : nil) || (Helper.is_codebuild? ? 'codebuild' : nil)
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
def self.setup_keychain(params)
|
|
@@ -34,7 +34,7 @@ module Fastlane
|
|
|
34
34
|
return
|
|
35
35
|
end
|
|
36
36
|
|
|
37
|
-
keychain_name =
|
|
37
|
+
keychain_name = params[:keychain_name]
|
|
38
38
|
ENV["MATCH_KEYCHAIN_NAME"] = keychain_name
|
|
39
39
|
ENV["MATCH_KEYCHAIN_PASSWORD"] = ""
|
|
40
40
|
|
|
@@ -108,7 +108,12 @@ module Fastlane
|
|
|
108
108
|
env_name: "FL_SETUP_CI_TIMEOUT",
|
|
109
109
|
description: "Set a custom timeout in seconds for keychain. Set `0` if you want to specify 'no time-out'",
|
|
110
110
|
type: Integer,
|
|
111
|
-
default_value: 3600)
|
|
111
|
+
default_value: 3600),
|
|
112
|
+
FastlaneCore::ConfigItem.new(key: :keychain_name,
|
|
113
|
+
env_name: "FL_SETUP_CI_KEYCHAIN_NAME",
|
|
114
|
+
description: "Set a custom keychain name",
|
|
115
|
+
type: String,
|
|
116
|
+
default_value: "fastlane_tmp_keychain")
|
|
112
117
|
]
|
|
113
118
|
end
|
|
114
119
|
|
|
@@ -128,6 +133,11 @@ module Fastlane
|
|
|
128
133
|
'setup_ci(
|
|
129
134
|
provider: "circleci",
|
|
130
135
|
timeout: 0
|
|
136
|
+
)',
|
|
137
|
+
'setup_ci(
|
|
138
|
+
provider: "circleci",
|
|
139
|
+
timeout: 0,
|
|
140
|
+
keychain_name: "custom_keychain_name"
|
|
131
141
|
)'
|
|
132
142
|
]
|
|
133
143
|
end
|
|
@@ -98,6 +98,14 @@ module Fastlane
|
|
|
98
98
|
[key, value]
|
|
99
99
|
when :tags
|
|
100
100
|
[key, value.join(',')]
|
|
101
|
+
when :folder_name
|
|
102
|
+
[key, value]
|
|
103
|
+
when :landing_page_mode
|
|
104
|
+
[key, value]
|
|
105
|
+
when :upload_to_saucelabs
|
|
106
|
+
[key, value]
|
|
107
|
+
when :platform
|
|
108
|
+
[key, value]
|
|
101
109
|
else
|
|
102
110
|
UI.user_error!("Unknown parameter: #{key}")
|
|
103
111
|
end
|
|
@@ -143,11 +151,14 @@ module Fastlane
|
|
|
143
151
|
private_class_method :parse_response
|
|
144
152
|
|
|
145
153
|
def self.description
|
|
146
|
-
'Upload a new build to
|
|
154
|
+
'Upload a new build to SauceLabs\' TestFairy'
|
|
147
155
|
end
|
|
148
156
|
|
|
149
157
|
def self.details
|
|
150
|
-
|
|
158
|
+
<<~DETAILS
|
|
159
|
+
Upload a new build to [TestFairy](https://saucelabs.com/products/mobile-testing/app-betas).
|
|
160
|
+
You can retrieve your API key on [your settings page](https://app.testfairy.com/settings/access-key)
|
|
161
|
+
DETAILS
|
|
151
162
|
end
|
|
152
163
|
|
|
153
164
|
def self.available_options
|
|
@@ -237,7 +248,7 @@ module Fastlane
|
|
|
237
248
|
FastlaneCore::ConfigItem.new(key: :custom,
|
|
238
249
|
optional: true,
|
|
239
250
|
env_name: "FL_TESTFAIRY_CUSTOM",
|
|
240
|
-
description: "Array of custom options. Contact support
|
|
251
|
+
description: "Array of custom options. Contact support for more information",
|
|
241
252
|
default_value: ''),
|
|
242
253
|
FastlaneCore::ConfigItem.new(key: :timeout,
|
|
243
254
|
env_name: "FL_TESTFAIRY_TIMEOUT",
|
|
@@ -249,7 +260,33 @@ module Fastlane
|
|
|
249
260
|
env_name: "FL_TESTFAIRY_TAGS",
|
|
250
261
|
description: "Custom tags that can be used to organize your builds",
|
|
251
262
|
type: Array,
|
|
252
|
-
default_value: [])
|
|
263
|
+
default_value: []),
|
|
264
|
+
FastlaneCore::ConfigItem.new(key: :folder_name,
|
|
265
|
+
optional: true,
|
|
266
|
+
env_name: "FL_TESTFAIRY_FOLDER_NAME",
|
|
267
|
+
description: "Name of the dashboard folder that contains this app",
|
|
268
|
+
default_value: ''),
|
|
269
|
+
FastlaneCore::ConfigItem.new(key: :landing_page_mode,
|
|
270
|
+
optional: true,
|
|
271
|
+
env_name: "FL_TESTFAIRY_LANDING_PAGE_MODE",
|
|
272
|
+
description: "Visibility of build landing after upload. Can be 'open' or 'closed'",
|
|
273
|
+
default_value: 'open',
|
|
274
|
+
verify_block: proc do |value|
|
|
275
|
+
UI.user_error!("The landing page mode can only be open or closed") unless %w(open closed).include?(value)
|
|
276
|
+
end),
|
|
277
|
+
FastlaneCore::ConfigItem.new(key: :upload_to_saucelabs,
|
|
278
|
+
optional: true,
|
|
279
|
+
env_name: "FL_TESTFAIRY_UPLOAD_TO_SAUCELABS",
|
|
280
|
+
description: "Upload file directly to Sauce Labs. It can be 'on' or 'off'",
|
|
281
|
+
default_value: 'off',
|
|
282
|
+
verify_block: proc do |value|
|
|
283
|
+
UI.user_error!("The upload to Sauce Labs can only be on or off") unless %w(on off).include?(value)
|
|
284
|
+
end),
|
|
285
|
+
FastlaneCore::ConfigItem.new(key: :platform,
|
|
286
|
+
optional: true,
|
|
287
|
+
env_name: "FL_TESTFAIRY_PLATFORM",
|
|
288
|
+
description: "Use if upload build is not iOS or Android. Contact support for more information",
|
|
289
|
+
default_value: '')
|
|
253
290
|
]
|
|
254
291
|
end
|
|
255
292
|
|
|
@@ -42,7 +42,12 @@ module Fastlane
|
|
|
42
42
|
end
|
|
43
43
|
|
|
44
44
|
def self.replace_keychain_in_search_list(keychain_path)
|
|
45
|
-
|
|
45
|
+
begin
|
|
46
|
+
UI.message("Reading existing default keychain")
|
|
47
|
+
Actions.lane_context[Actions::SharedValues::ORIGINAL_DEFAULT_KEYCHAIN] = Fastlane::Actions.sh("security default-keychain").strip
|
|
48
|
+
rescue => e
|
|
49
|
+
raise unless e.message.include?("security: SecKeychainCopyDefault: A default keychain could not be found.")
|
|
50
|
+
end
|
|
46
51
|
escaped_path = keychain_path.shellescape
|
|
47
52
|
Fastlane::Actions.sh("security list-keychains -s #{escaped_path}", log: false)
|
|
48
53
|
end
|
|
@@ -20,7 +20,7 @@ module Fastlane
|
|
|
20
20
|
def self.details
|
|
21
21
|
[
|
|
22
22
|
"Create nice code coverage reports and post coverage summaries on Slack *(xcov gem is required)*.",
|
|
23
|
-
"More information: [https://github.com/
|
|
23
|
+
"More information: [https://github.com/fastlane-community/xcov](https://github.com/fastlane-community/xcov)."
|
|
24
24
|
].join("\n")
|
|
25
25
|
end
|
|
26
26
|
|
|
@@ -31,12 +31,6 @@ module Fastlane
|
|
|
31
31
|
def self.available_options
|
|
32
32
|
return [] unless Helper.mac?
|
|
33
33
|
|
|
34
|
-
# We call Gem::Specification.find_by_name in many more places than this, but for right now
|
|
35
|
-
# this is the only place we're having trouble. If there are other reports about RubyGems
|
|
36
|
-
# 2.6.2 causing problems, we may need to move this code and require it someplace better,
|
|
37
|
-
# like fastlane_core
|
|
38
|
-
require 'fastlane/core_ext/bundler_monkey_patch'
|
|
39
|
-
|
|
40
34
|
begin
|
|
41
35
|
Gem::Specification.find_by_name('xcov')
|
|
42
36
|
rescue Gem::LoadError
|
|
@@ -65,6 +65,15 @@ module Fastlane
|
|
|
65
65
|
end
|
|
66
66
|
end
|
|
67
67
|
|
|
68
|
+
# Ruby version warning
|
|
69
|
+
if Gem::Version.new(RUBY_VERSION) < Gem::Version.new(Fastlane::SUGGESTED_MINIMUM_RUBY) && !FastlaneCore::Env.truthy?("FASTLANE_SKIP_RUBY_VERSION_WARNING")
|
|
70
|
+
warn = "WARNING: Support for your Ruby version (#{RUBY_VERSION}) is going away. fastlane will soon require Ruby #{Fastlane::SUGGESTED_MINIMUM_RUBY} or newer."
|
|
71
|
+
UI.important(warn)
|
|
72
|
+
at_exit do
|
|
73
|
+
UI.important(warn)
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
68
77
|
# Needs to go after load_dot_env for variable FASTLANE_SKIP_UPDATE_CHECK
|
|
69
78
|
FastlaneCore::UpdateChecker.start_looking_for_update('fastlane')
|
|
70
79
|
|
|
@@ -97,7 +97,7 @@ module Fastlane
|
|
|
97
97
|
if File.exist?(custom_file_location)
|
|
98
98
|
UI.verbose("Using custom md.erb file for action #{action.action_name}")
|
|
99
99
|
|
|
100
|
-
result = ERB.new(File.read(custom_file_location),
|
|
100
|
+
result = ERB.new(File.read(custom_file_location), trim_mode: '-').result(binding) # https://web.archive.org/web/20160430190141/www.rrn.dk/rubys-erb-templating-system
|
|
101
101
|
|
|
102
102
|
return result
|
|
103
103
|
end
|
|
@@ -122,7 +122,7 @@ module Fastlane
|
|
|
122
122
|
end
|
|
123
123
|
|
|
124
124
|
template = File.join(Fastlane::ROOT, "lib/assets/ActionDetails.md.erb")
|
|
125
|
-
result = ERB.new(File.read(template),
|
|
125
|
+
result = ERB.new(File.read(template), trim_mode: '-').result(binding)
|
|
126
126
|
|
|
127
127
|
action_mds[action.action_name] = result
|
|
128
128
|
end
|
|
@@ -139,7 +139,7 @@ module Fastlane
|
|
|
139
139
|
|
|
140
140
|
# Generate actions.md
|
|
141
141
|
template = File.join(Fastlane::ROOT, "lib/assets/Actions.md.erb")
|
|
142
|
-
result = ERB.new(File.read(template),
|
|
142
|
+
result = ERB.new(File.read(template), trim_mode: '-').result(binding) # https://web.archive.org/web/20160430190141/www.rrn.dk/rubys-erb-templating-system
|
|
143
143
|
File.write(File.join(docs_dir, "generated", "actions.md"), result)
|
|
144
144
|
|
|
145
145
|
# Generate actions sub pages (e.g. generated/actions/slather.md, generated/actions/scan.md)
|
|
@@ -165,7 +165,7 @@ module Fastlane
|
|
|
165
165
|
end
|
|
166
166
|
|
|
167
167
|
template = File.join(Fastlane::ROOT, "lib/assets/ActionDetails.md.erb")
|
|
168
|
-
result = ERB.new(File.read(template),
|
|
168
|
+
result = ERB.new(File.read(template), trim_mode: '-').result(binding) # https://web.archive.org/web/20160430190141/www.rrn.dk/rubys-erb-templating-system
|
|
169
169
|
|
|
170
170
|
# Actions get placed in "generated/actions" directory
|
|
171
171
|
file_name = File.join(generated_actions_dir, "#{action.action_name}.md")
|
|
@@ -26,13 +26,7 @@ module Fastlane
|
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
def render(template)
|
|
29
|
-
|
|
30
|
-
# https://bugs.ruby-lang.org/issues/14256
|
|
31
|
-
if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("2.6.0")
|
|
32
|
-
ERB.new(template, trim_mode: @trim_mode).result(binding)
|
|
33
|
-
else
|
|
34
|
-
ERB.new(template, nil, @trim_mode).result(binding)
|
|
35
|
-
end
|
|
29
|
+
ERB.new(template, trim_mode: @trim_mode).result(binding)
|
|
36
30
|
end
|
|
37
31
|
end
|
|
38
32
|
end
|
|
@@ -278,7 +278,8 @@ module Fastlane
|
|
|
278
278
|
# @param version [String, Array] Version requirement for repo tags
|
|
279
279
|
# @param dependencies [Array] An optional array of additional Fastfiles in the repository
|
|
280
280
|
# @param cache_path [String] An optional path to a directory where the repository should be cloned into
|
|
281
|
-
|
|
281
|
+
# @param git_extra_headers [Array] An optional array of custom HTTP headers to access the git repo (`Authorization: Basic <YOUR BASE64 KEY>`, `Cache-Control: no-cache`, etc.)
|
|
282
|
+
def import_from_git(url: nil, branch: 'HEAD', path: 'fastlane/Fastfile', version: nil, dependencies: [], cache_path: nil, git_extra_headers: []) # rubocop:disable Metrics/PerceivedComplexity
|
|
282
283
|
UI.user_error!("Please pass a path to the `import_from_git` action") if url.to_s.length == 0
|
|
283
284
|
|
|
284
285
|
Actions.execute_action('import_from_git') do
|
|
@@ -297,8 +298,6 @@ module Fastlane
|
|
|
297
298
|
import_block = proc do |target_path|
|
|
298
299
|
clone_folder = File.join(target_path, repo_name)
|
|
299
300
|
|
|
300
|
-
branch_option = "--branch #{branch}" if branch != 'HEAD'
|
|
301
|
-
|
|
302
301
|
checkout_dependencies = dependencies.map(&:shellescape).join(" ")
|
|
303
302
|
|
|
304
303
|
# If the current call is eligible for caching, we check out all the
|
|
@@ -309,12 +308,16 @@ module Fastlane
|
|
|
309
308
|
if Dir[clone_folder].empty?
|
|
310
309
|
UI.message("Cloning remote git repo...")
|
|
311
310
|
Helper.with_env_values('GIT_TERMINAL_PROMPT' => '0') do
|
|
311
|
+
command = ['git', 'clone', url, clone_folder, '--no-checkout']
|
|
312
312
|
# When using cached clones, we need the entire repository history
|
|
313
313
|
# so we can switch between tags or branches instantly, or else,
|
|
314
314
|
# it would defeat the caching's purpose.
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
315
|
+
command += ['--depth', '1'] unless is_eligible_for_caching
|
|
316
|
+
command += ['--branch', branch] unless branch == 'HEAD'
|
|
317
|
+
git_extra_headers.each do |header|
|
|
318
|
+
command += ['--config', "http.extraHeader=#{header}"]
|
|
319
|
+
end
|
|
320
|
+
Actions.sh(*command)
|
|
318
321
|
end
|
|
319
322
|
end
|
|
320
323
|
|
|
@@ -39,6 +39,10 @@ module Fastlane
|
|
|
39
39
|
obj.public_url.to_s
|
|
40
40
|
end
|
|
41
41
|
|
|
42
|
+
def download_file(bucket_name, key, destination_path)
|
|
43
|
+
Aws::S3::TransferManager.new(client: client).download_file(destination_path, bucket: bucket_name, key: key)
|
|
44
|
+
end
|
|
45
|
+
|
|
42
46
|
def delete_file(bucket_name, file_name)
|
|
43
47
|
bucket = find_bucket!(bucket_name)
|
|
44
48
|
file = bucket.object(file_name)
|
|
@@ -15,7 +15,7 @@ Gem::Specification.new do |spec|
|
|
|
15
15
|
spec.files = Dir["lib/**/*"] + %w(README.md LICENSE)
|
|
16
16
|
spec.require_paths = ['lib']
|
|
17
17
|
spec.metadata['rubygems_mfa_required'] = 'true'
|
|
18
|
-
spec.required_ruby_version = '>= 2.
|
|
18
|
+
spec.required_ruby_version = '>= 2.7'
|
|
19
19
|
|
|
20
20
|
# Don't add a dependency to fastlane or fastlane_re
|
|
21
21
|
# since this would cause a circular dependency
|
|
@@ -6,24 +6,24 @@ on:
|
|
|
6
6
|
jobs:
|
|
7
7
|
test:
|
|
8
8
|
runs-on: ubuntu-latest
|
|
9
|
+
strategy:
|
|
10
|
+
matrix:
|
|
11
|
+
ruby-version: ['3.0', '3.1', '3.2', '3.3', '3.4']
|
|
9
12
|
steps:
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
with:
|
|
28
|
-
name: test-results
|
|
29
|
-
path: test-results
|
|
13
|
+
- uses: actions/checkout@v6
|
|
14
|
+
|
|
15
|
+
- name: Set up Ruby
|
|
16
|
+
uses: ruby/setup-ruby@v1
|
|
17
|
+
with:
|
|
18
|
+
ruby-version: ${{ matrix.ruby-version }}
|
|
19
|
+
bundler-cache: true
|
|
20
|
+
|
|
21
|
+
- name: Run tests
|
|
22
|
+
run: bundle exec rake
|
|
23
|
+
|
|
24
|
+
- name: Upload artifact
|
|
25
|
+
uses: actions/upload-artifact@v5
|
|
26
|
+
if: failure()
|
|
27
|
+
with:
|
|
28
|
+
name: test-results-ruby-${{ matrix.ruby-version }}
|
|
29
|
+
path: test-results
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
module Fastlane
|
|
2
|
-
VERSION = '2.
|
|
2
|
+
VERSION = '2.232.0'.freeze
|
|
3
3
|
SUMMARY = "The easiest way to build and release mobile apps.".freeze
|
|
4
4
|
DESCRIPTION = "The easiest way to automate beta deployments and releases for your iOS and Android apps".freeze
|
|
5
5
|
MINIMUM_XCODE_RELEASE = "7.0".freeze
|
|
6
6
|
RUBOCOP_REQUIREMENT = '1.50.2'.freeze
|
|
7
|
+
SUGGESTED_MINIMUM_RUBY = '3.2.0'.freeze
|
|
7
8
|
end
|
|
@@ -1,11 +1,19 @@
|
|
|
1
1
|
// Appfile.swift
|
|
2
|
-
// Copyright (c)
|
|
2
|
+
// Copyright (c) 2026 FastlaneTools
|
|
3
3
|
|
|
4
|
-
var appIdentifier: String {
|
|
5
|
-
|
|
4
|
+
var appIdentifier: String {
|
|
5
|
+
return ""
|
|
6
|
+
} // The bundle identifier of your app
|
|
7
|
+
var appleID: String {
|
|
8
|
+
return ""
|
|
9
|
+
} // Your Apple Developer Portal username
|
|
6
10
|
|
|
7
|
-
var teamID: String {
|
|
8
|
-
|
|
11
|
+
var teamID: String {
|
|
12
|
+
return ""
|
|
13
|
+
} // Developer Portal Team ID
|
|
14
|
+
var itcTeam: String? {
|
|
15
|
+
return nil
|
|
16
|
+
} // App Store Connect Team ID (may be nil if no team)
|
|
9
17
|
|
|
10
18
|
// you can even provide different app identifiers, Apple IDs and team names per lane:
|
|
11
19
|
// More information: https://docs.fastlane.tools/advanced/#appfile
|
data/fastlane/swift/Atomic.swift
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// ControlCommand.swift
|
|
2
|
-
// Copyright (c)
|
|
2
|
+
// Copyright (c) 2026 FastlaneTools
|
|
3
3
|
|
|
4
4
|
//
|
|
5
5
|
// ** NOTE **
|
|
@@ -12,7 +12,9 @@ import Foundation
|
|
|
12
12
|
|
|
13
13
|
struct ControlCommand: RubyCommandable {
|
|
14
14
|
static let commandKey = "command"
|
|
15
|
-
var type: CommandType {
|
|
15
|
+
var type: CommandType {
|
|
16
|
+
return .control
|
|
17
|
+
}
|
|
16
18
|
|
|
17
19
|
enum ShutdownCommandType {
|
|
18
20
|
static let userMessageKey: String = "userMessage"
|
|
@@ -59,8 +61,7 @@ struct ControlCommand: RubyCommandable {
|
|
|
59
61
|
}
|
|
60
62
|
|
|
61
63
|
let jsonData = try! JSONSerialization.data(withJSONObject: jsonDictionary, options: [])
|
|
62
|
-
|
|
63
|
-
return jsonString
|
|
64
|
+
return String(data: jsonData, encoding: .utf8)!
|
|
64
65
|
}
|
|
65
66
|
|
|
66
67
|
init(commandType: ShutdownCommandType, message: String? = nil) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Deliverfile.swift
|
|
2
|
-
// Copyright (c)
|
|
2
|
+
// Copyright (c) 2026 FastlaneTools
|
|
3
3
|
|
|
4
4
|
// This class is automatically included in FastlaneRunner during build
|
|
5
5
|
|
|
@@ -17,4 +17,4 @@ public class Deliverfile: DeliverfileProtocol {
|
|
|
17
17
|
// during the `init` process, and you won't see this message
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
// Generated with fastlane 2.
|
|
20
|
+
// Generated with fastlane 2.232.0
|