fastlane 2.229.0 → 2.230.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 +100 -94
- 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/upload_metadata.rb +5 -0
- data/deliver/lib/deliver/upload_screenshots.rb +4 -2
- data/fastlane/lib/fastlane/actions/docs/create_app_online.md +2 -1
- data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +3 -1
- data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +34 -6
- data/fastlane/lib/fastlane/actions/docs/upload_to_testflight.md +2 -0
- data/fastlane/lib/fastlane/actions/install_xcode_plugin.rb +3 -2
- data/fastlane/lib/fastlane/actions/modify_services.rb +1 -0
- data/fastlane/lib/fastlane/actions/notarize.rb +1 -1
- data/fastlane/lib/fastlane/actions/xcov.rb +1 -7
- data/fastlane/lib/fastlane/documentation/markdown_docs_generator.rb +4 -4
- data/fastlane/lib/fastlane/plugins/template/.github/workflows/test.yml +20 -20
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/DeliverfileProtocol.swift +1 -1
- data/fastlane/swift/Fastlane.swift +85 -13
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/GymfileProtocol.swift +9 -1
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/MatchfileProtocol.swift +1 -1
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
- data/fastlane/swift/Scanfile.swift +1 -1
- data/fastlane/swift/ScanfileProtocol.swift +5 -1
- data/fastlane/swift/Screengrabfile.swift +1 -1
- data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
- data/fastlane/swift/Snapshotfile.swift +1 -1
- data/fastlane/swift/SnapshotfileProtocol.swift +5 -1
- data/fastlane_core/lib/fastlane_core/fastlane_pty.rb +5 -1
- data/fastlane_core/lib/fastlane_core/ipa_upload_package_builder.rb +14 -0
- data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +38 -8
- data/fastlane_core/lib/fastlane_core/project.rb +4 -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/gym/module.rb +9 -4
- data/gym/lib/gym/options.rb +14 -1
- data/gym/lib/gym/runner.rb +38 -3
- data/produce/lib/produce/developer_center.rb +1 -0
- data/produce/lib/produce/service.rb +6 -1
- data/scan/lib/scan/options.rb +5 -0
- data/scan/lib/scan/test_command_generator.rb +8 -0
- data/sigh/lib/sigh/local_manage.rb +6 -4
- data/sigh/lib/sigh/runner.rb +18 -1
- data/snapshot/lib/snapshot/options.rb +5 -0
- data/spaceship/lib/spaceship/connect_api/models/age_rating_declaration.rb +62 -8
- 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/bundle_id_capability.rb +2 -0
- data/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb +0 -6
- data/spaceship/lib/spaceship/errors.rb +8 -6
- data/supply/lib/supply/client.rb +18 -1
- metadata +75 -29
- 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
|
@@ -3,25 +3,22 @@ require 'fastimage'
|
|
|
3
3
|
module Deliver
|
|
4
4
|
class AppScreenshotValidator
|
|
5
5
|
# A simple structure that holds error information as well as formatted error messages consistently
|
|
6
|
-
# Set `to_skip` to `true` when just needing to skip uploading rather than causing a crash.
|
|
7
6
|
class ValidationError
|
|
8
7
|
# Constants that can be given to `type` param
|
|
9
8
|
INVALID_SCREEN_SIZE = 'Invalid screen size'.freeze
|
|
10
|
-
UNACCEPTABLE_DEVICE = 'Not an accepted App Store Connect device'.freeze
|
|
11
9
|
INVALID_FILE_EXTENSION = 'Invalid file extension'.freeze
|
|
12
10
|
FILE_EXTENSION_MISMATCH = 'File extension mismatches its image format'.freeze
|
|
13
11
|
|
|
14
|
-
attr_reader :type, :path, :debug_info
|
|
12
|
+
attr_reader :type, :path, :debug_info
|
|
15
13
|
|
|
16
|
-
def initialize(type: nil, path: nil, debug_info: nil
|
|
14
|
+
def initialize(type: nil, path: nil, debug_info: nil)
|
|
17
15
|
@type = type
|
|
18
16
|
@path = path
|
|
19
17
|
@debug_info = debug_info
|
|
20
|
-
@to_skip = to_skip
|
|
21
18
|
end
|
|
22
19
|
|
|
23
20
|
def to_s
|
|
24
|
-
"
|
|
21
|
+
"🚫 Error: #{path} - #{type} (#{debug_info})"
|
|
25
22
|
end
|
|
26
23
|
|
|
27
24
|
def inspect
|
|
@@ -46,7 +43,6 @@ module Deliver
|
|
|
46
43
|
errors_found = []
|
|
47
44
|
|
|
48
45
|
validate_screen_size(screenshot, errors_found)
|
|
49
|
-
validate_device_type(screenshot, errors_found)
|
|
50
46
|
validate_file_extension_and_format(screenshot, errors_found)
|
|
51
47
|
|
|
52
48
|
# Merge errors found into given errors array
|
|
@@ -55,22 +51,10 @@ module Deliver
|
|
|
55
51
|
end
|
|
56
52
|
|
|
57
53
|
def self.validate_screen_size(screenshot, errors_found)
|
|
58
|
-
if screenshot.
|
|
54
|
+
if screenshot.display_type.nil?
|
|
59
55
|
errors_found << ValidationError.new(type: ValidationError::INVALID_SCREEN_SIZE,
|
|
60
56
|
path: screenshot.path,
|
|
61
|
-
debug_info: "Actual size is #{get_formatted_size(screenshot)}. See the specifications to fix #{APP_SCREENSHOT_SPEC_URL}")
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
# Checking if the device type exists in spaceship
|
|
66
|
-
# Ex: iPhone 6.1 inch isn't supported in App Store Connect but need
|
|
67
|
-
# to have it in there for frameit support
|
|
68
|
-
def self.validate_device_type(screenshot, errors_found)
|
|
69
|
-
if !screenshot.screen_size.nil? && screenshot.device_type.nil?
|
|
70
|
-
errors_found << ValidationError.new(type: ValidationError::UNACCEPTABLE_DEVICE,
|
|
71
|
-
path: screenshot.path,
|
|
72
|
-
debug_info: "Screen size #{screenshot.screen_size} is not accepted. See the specifications to fix #{APP_SCREENSHOT_SPEC_URL}",
|
|
73
|
-
to_skip: true)
|
|
57
|
+
debug_info: "Screenshot size is not supported. Actual size is #{get_formatted_size(screenshot)}. See the specifications to fix #{APP_SCREENSHOT_SPEC_URL}")
|
|
74
58
|
end
|
|
75
59
|
end
|
|
76
60
|
|
|
@@ -100,16 +100,9 @@ module Deliver
|
|
|
100
100
|
errors = []
|
|
101
101
|
valid_screenshots = screenshots.select { |screenshot| Deliver::AppScreenshotValidator.validate(screenshot, errors) }
|
|
102
102
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
unless errors_to_skip.empty?
|
|
106
|
-
UI.important("🏃 Screenshots to be skipped are detected!")
|
|
107
|
-
errors_to_skip.each { |error| UI.message(error) }
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
unless errors_to_crash.empty?
|
|
103
|
+
unless errors.empty?
|
|
111
104
|
UI.important("🚫 Invalid screenshots were detected! Here are the reasons:")
|
|
112
|
-
|
|
105
|
+
errors.each { |error| UI.error(error) }
|
|
113
106
|
UI.user_error!("Canceled uploading screenshots. Please check the error messages above and fix the screenshots.")
|
|
114
107
|
end
|
|
115
108
|
|
|
@@ -705,6 +705,11 @@ module Deliver
|
|
|
705
705
|
def app_rating(app_info)
|
|
706
706
|
return unless options[:app_rating_config_path]
|
|
707
707
|
|
|
708
|
+
unless app_info
|
|
709
|
+
UI.important("Skipping age rating update because app info could not be fetched.")
|
|
710
|
+
return
|
|
711
|
+
end
|
|
712
|
+
|
|
708
713
|
require 'json'
|
|
709
714
|
begin
|
|
710
715
|
json = JSON.parse(File.read(options[:app_rating_config_path]))
|
|
@@ -93,7 +93,9 @@ module Deliver
|
|
|
93
93
|
|
|
94
94
|
# Verify all screenshots have been deleted
|
|
95
95
|
# Sometimes API requests will fail but screenshots will still be deleted
|
|
96
|
-
count = iterator.each_app_screenshot_set
|
|
96
|
+
count = iterator.each_app_screenshot_set
|
|
97
|
+
.select { |localization, _| screenshots_per_language.keys.include?(localization.locale) }
|
|
98
|
+
.map { |_, app_screenshot_set| app_screenshot_set }
|
|
97
99
|
.reduce(0) { |sum, app_screenshot_set| sum + app_screenshot_set.app_screenshots.size }
|
|
98
100
|
|
|
99
101
|
UI.important("Number of screenshots not deleted: #{count}")
|
|
@@ -134,7 +136,7 @@ module Deliver
|
|
|
134
136
|
number_of_screenshots_per_set[app_screenshot_set] ||= (app_screenshot_set.app_screenshots || []).count
|
|
135
137
|
|
|
136
138
|
if number_of_screenshots_per_set[app_screenshot_set] >= 10
|
|
137
|
-
UI.error("Too many screenshots found for device '#{screenshot.
|
|
139
|
+
UI.error("Too many screenshots found for device '#{screenshot.display_type}' in '#{screenshot.language}', skipping this one (#{screenshot.path})")
|
|
138
140
|
next
|
|
139
141
|
end
|
|
140
142
|
|
|
@@ -302,7 +302,7 @@ lane :release do
|
|
|
302
302
|
app_version: '1.0',
|
|
303
303
|
sku: '123',
|
|
304
304
|
team_name: 'SunApps GmbH', # only necessary when in multiple teams
|
|
305
|
-
|
|
305
|
+
|
|
306
306
|
# Optional
|
|
307
307
|
# App services can be enabled during app creation
|
|
308
308
|
enable_services: {
|
|
@@ -317,6 +317,7 @@ lane :release do
|
|
|
317
317
|
car_play_navigation_app: "on", # Valid values: "on", "off"
|
|
318
318
|
car_play_voip_calling_app: "on", # Valid values: "on", "off"
|
|
319
319
|
class_kit: "on", # Valid values: "on", "off"
|
|
320
|
+
declared_age_range: "on", # Valid values: "on", "off"
|
|
320
321
|
icloud: "xcode5_compatible", # Valid values: "xcode5_compatible", "xcode6_compatible", "off"
|
|
321
322
|
critical_alerts: "on", # Valid values: "on", "off"
|
|
322
323
|
custom_network_protocol: "on", # Valid values: "on", "off"
|
|
@@ -215,7 +215,9 @@ fastlane match development
|
|
|
215
215
|
This will create a new certificate and provisioning profile (if required) and store them in your selected storage.
|
|
216
216
|
If you previously ran _match_ with the configured storage it will automatically install the existing profiles from your storage.
|
|
217
217
|
|
|
218
|
-
The provisioning profiles are installed in `~/Library/MobileDevice/Provisioning Profiles` while the certificates and private keys are installed in your Keychain.
|
|
218
|
+
The provisioning profiles are installed in `~/Library/Developer/Xcode/UserData/Provisioning Profiles` (`~/Library/MobileDevice/Provisioning Profiles` for Xcode versions prior to 16.0) while the certificates and private keys are installed in your Keychain.
|
|
219
|
+
|
|
220
|
+
> fastlane relies on the system's default Xcode version to determine the current version. The path where provisioning profiles are stored changed in Xcode 16. If you use the `xcode_select` or `xcodes` actions and you have Xcode 15 and 16 installed in your system, please make sure to execute them before invoking the `sync_code_signing` action.
|
|
219
221
|
|
|
220
222
|
To get a more detailed output of what _match_ is doing use
|
|
221
223
|
|
|
@@ -597,7 +597,9 @@ Key | Editable While Live | Directory | Filename | Deprecated Filename
|
|
|
597
597
|
- 2: Frequent/Intense (Legacy value, use `FREQUENT_OR_INTENSE`instead)
|
|
598
598
|
|
|
599
599
|
- `NONE`
|
|
600
|
+
- `INFREQUENT`
|
|
600
601
|
- `INFREQUENT_OR_MILD`
|
|
602
|
+
- `FREQUENT`
|
|
601
603
|
- `FREQUENT_OR_INTENSE`
|
|
602
604
|
|
|
603
605
|
**Keys**
|
|
@@ -605,19 +607,33 @@ Key | Editable While Live | Directory | Filename | Deprecated Filename
|
|
|
605
607
|
- `alcoholTobaccoOrDrugUseOrReferences`
|
|
606
608
|
- `contests`
|
|
607
609
|
- `gamblingSimulated`
|
|
608
|
-
- `
|
|
609
|
-
- `profanityOrCrudeHumor`
|
|
610
|
-
|
|
610
|
+
- `gunsOrOtherWeapons`
|
|
611
611
|
- `horrorOrFearThemes`
|
|
612
|
-
- `kidsAgeBand`
|
|
613
612
|
- `matureOrSuggestiveThemes`
|
|
613
|
+
- `medicalOrTreatmentInformation`
|
|
614
|
+
- `profanityOrCrudeHumor`
|
|
614
615
|
- `sexualContentGraphicAndNudity`
|
|
615
616
|
- `sexualContentOrNudity`
|
|
616
617
|
- `violenceCartoonOrFantasy`
|
|
617
618
|
- `violenceRealistic`
|
|
618
619
|
- `violenceRealisticProlongedGraphicOrSadistic`
|
|
619
620
|
|
|
620
|
-
####
|
|
621
|
+
#### Age Rating
|
|
622
|
+
|
|
623
|
+
**Values**
|
|
624
|
+
|
|
625
|
+
- `NONE`
|
|
626
|
+
- `NINE_PLUS`
|
|
627
|
+
- `THIRTEEN_PLUS`
|
|
628
|
+
- `SIXTEEN_PLUS`
|
|
629
|
+
- `EIGHTEEN_PLUS`
|
|
630
|
+
- `UNRATED`
|
|
631
|
+
|
|
632
|
+
**Keys**
|
|
633
|
+
|
|
634
|
+
- `ageRatingOverrideV2`
|
|
635
|
+
|
|
636
|
+
#### Korea Age Rating
|
|
621
637
|
|
|
622
638
|
**Values**
|
|
623
639
|
|
|
@@ -629,13 +645,25 @@ Key | Editable While Live | Directory | Filename | Deprecated Filename
|
|
|
629
645
|
|
|
630
646
|
- `koreaAgeRatingOverride`
|
|
631
647
|
|
|
648
|
+
#### URL
|
|
649
|
+
|
|
650
|
+
**Keys**
|
|
651
|
+
|
|
652
|
+
- `developerAgeRatingInfoUrl`
|
|
653
|
+
|
|
632
654
|
#### Boolean
|
|
633
655
|
|
|
634
656
|
**Keys**
|
|
635
657
|
|
|
658
|
+
- `advertising`
|
|
659
|
+
- `ageAssurance`
|
|
636
660
|
- `gambling`
|
|
637
|
-
- `
|
|
661
|
+
- `healthOrWellnessTopics`
|
|
638
662
|
- `lootBox`
|
|
663
|
+
- `messagingAndChat`
|
|
664
|
+
- `parentalControls`
|
|
665
|
+
- `unrestrictedWebAccess`
|
|
666
|
+
- `userGeneratedContent`
|
|
639
667
|
|
|
640
668
|
#### Kids Age
|
|
641
669
|
|
|
@@ -82,6 +82,8 @@ _pilot_ uses [_spaceship_](https://spaceship.airforce) to submit the build metad
|
|
|
82
82
|
### Upload from Linux
|
|
83
83
|
|
|
84
84
|
To upload binaries from Linux:
|
|
85
|
+
|
|
86
|
+
- have the package file and the `AppStoreInfo.plist` file in the same location on disk (_check [fastlane gym](https://docs.fastlane.tools/actions/gym/) on how to make them_)
|
|
85
87
|
- make sure you have [Transporter on Linux](https://help.apple.com/itc/transporteruserguide/en.lproj/static.html) installed
|
|
86
88
|
- set the following environment variables:
|
|
87
89
|
- `FASTLANE_ITUNES_TRANSPORTER_USE_SHELL_SCRIPT=true`
|
|
@@ -3,6 +3,7 @@ module Fastlane
|
|
|
3
3
|
class InstallXcodePluginAction < Action
|
|
4
4
|
def self.run(params)
|
|
5
5
|
require 'fileutils'
|
|
6
|
+
require 'tmpdir'
|
|
6
7
|
|
|
7
8
|
if params[:github]
|
|
8
9
|
base_api_url = params[:github].sub('https://github.com', 'https://api.github.com/repos')
|
|
@@ -25,10 +26,10 @@ module Fastlane
|
|
|
25
26
|
end
|
|
26
27
|
|
|
27
28
|
zip_path = File.join(Dir.tmpdir, 'plugin.zip')
|
|
28
|
-
sh("curl -
|
|
29
|
+
Action.sh("curl", "-L", "-s", "-o", zip_path, params[:url])
|
|
29
30
|
plugins_path = "#{ENV['HOME']}/Library/Application Support/Developer/Shared/Xcode/Plug-ins"
|
|
30
31
|
FileUtils.mkdir_p(plugins_path)
|
|
31
|
-
Action.sh("unzip -qo
|
|
32
|
+
Action.sh("unzip", "-qo", zip_path, "-d", plugins_path)
|
|
32
33
|
|
|
33
34
|
UI.success("Plugin #{File.basename(params[:url], '.zip')} installed successfully")
|
|
34
35
|
UI.message("Please restart Xcode to use the newly installed plugin")
|
|
@@ -49,6 +49,7 @@ module Fastlane
|
|
|
49
49
|
associated_domains: 'associated_domains',
|
|
50
50
|
auto_fill_credential: 'auto_fill_credential',
|
|
51
51
|
class_kit: 'class_kit',
|
|
52
|
+
declared_age_range: 'declared_age_range',
|
|
52
53
|
icloud: 'icloud',
|
|
53
54
|
custom_network_protocol: 'custom_network_protocol',
|
|
54
55
|
data_protection: 'data_protection',
|
|
@@ -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
|
|
@@ -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")
|
|
@@ -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,5 +1,5 @@
|
|
|
1
1
|
module Fastlane
|
|
2
|
-
VERSION = '2.
|
|
2
|
+
VERSION = '2.230.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
|