fastlane 2.226.0 → 2.227.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.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +96 -96
  3. data/cert/lib/cert/options.rb +7 -2
  4. data/cert/lib/cert/runner.rb +23 -11
  5. data/deliver/lib/deliver/options.rb +1 -1
  6. data/fastlane/lib/fastlane/actions/app_store_build_number.rb +1 -1
  7. data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +1 -1
  8. data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +1 -1
  9. data/fastlane/lib/fastlane/actions/notarize.rb +4 -0
  10. data/fastlane/lib/fastlane/actions/onesignal.rb +1 -1
  11. data/fastlane/lib/fastlane/actions/setup_ci.rb +14 -4
  12. data/fastlane/lib/fastlane/actions/testfairy.rb +5 -2
  13. data/fastlane/lib/fastlane/actions/unlock_keychain.rb +6 -1
  14. data/fastlane/lib/fastlane/version.rb +1 -1
  15. data/fastlane/swift/Actions.swift +1 -1
  16. data/fastlane/swift/Appfile.swift +1 -1
  17. data/fastlane/swift/ArgumentProcessor.swift +1 -1
  18. data/fastlane/swift/Atomic.swift +1 -1
  19. data/fastlane/swift/ControlCommand.swift +1 -1
  20. data/fastlane/swift/Deliverfile.swift +2 -2
  21. data/fastlane/swift/DeliverfileProtocol.swift +2 -2
  22. data/fastlane/swift/Fastlane.swift +20 -10
  23. data/fastlane/swift/Gymfile.swift +2 -2
  24. data/fastlane/swift/GymfileProtocol.swift +2 -2
  25. data/fastlane/swift/LaneFileProtocol.swift +1 -1
  26. data/fastlane/swift/MainProcess.swift +1 -1
  27. data/fastlane/swift/Matchfile.swift +2 -2
  28. data/fastlane/swift/MatchfileProtocol.swift +2 -2
  29. data/fastlane/swift/OptionalConfigValue.swift +1 -1
  30. data/fastlane/swift/Plugins.swift +1 -1
  31. data/fastlane/swift/Precheckfile.swift +2 -2
  32. data/fastlane/swift/PrecheckfileProtocol.swift +2 -2
  33. data/fastlane/swift/RubyCommand.swift +1 -1
  34. data/fastlane/swift/RubyCommandable.swift +1 -1
  35. data/fastlane/swift/Runner.swift +1 -1
  36. data/fastlane/swift/RunnerArgument.swift +1 -1
  37. data/fastlane/swift/Scanfile.swift +2 -2
  38. data/fastlane/swift/ScanfileProtocol.swift +2 -2
  39. data/fastlane/swift/Screengrabfile.swift +2 -2
  40. data/fastlane/swift/ScreengrabfileProtocol.swift +2 -2
  41. data/fastlane/swift/Snapshotfile.swift +2 -2
  42. data/fastlane/swift/SnapshotfileProtocol.swift +2 -2
  43. data/fastlane/swift/SocketClient.swift +1 -1
  44. data/fastlane/swift/SocketClientDelegateProtocol.swift +1 -1
  45. data/fastlane/swift/SocketResponse.swift +1 -1
  46. data/fastlane/swift/main.swift +1 -1
  47. data/fastlane_core/lib/fastlane_core/helper.rb +6 -1
  48. data/match/lib/assets/READMETemplate.md +2 -2
  49. data/match/lib/match/generator.rb +2 -2
  50. data/match/lib/match/runner.rb +1 -1
  51. data/precheck/lib/precheck/options.rb +1 -1
  52. data/produce/lib/produce/options.rb +1 -1
  53. data/spaceship/lib/spaceship/connect_api/models/certificate.rb +1 -0
  54. data/supply/lib/supply/uploader.rb +19 -12
  55. data/trainer/lib/trainer/legacy_xcresult.rb +586 -0
  56. data/trainer/lib/trainer/options.rb +5 -0
  57. data/trainer/lib/trainer/plist_test_summary_parser.rb +84 -0
  58. data/trainer/lib/trainer/test_parser.rb +12 -293
  59. data/trainer/lib/trainer/xcresult/helper.rb +53 -0
  60. data/trainer/lib/trainer/xcresult/repetition.rb +39 -0
  61. data/trainer/lib/trainer/xcresult/test_case.rb +221 -0
  62. data/trainer/lib/trainer/xcresult/test_case_attributes.rb +49 -0
  63. data/trainer/lib/trainer/xcresult/test_plan.rb +91 -0
  64. data/trainer/lib/trainer/xcresult/test_suite.rb +134 -0
  65. data/trainer/lib/trainer/xcresult.rb +31 -388
  66. data/trainer/lib/trainer.rb +3 -1
  67. metadata +29 -21
@@ -1,5 +1,5 @@
1
1
  // Fastlane.swift
2
- // Copyright (c) 2024 FastlaneTools
2
+ // Copyright (c) 2025 FastlaneTools
3
3
 
4
4
  import Foundation
5
5
 
@@ -2690,7 +2690,7 @@ public func cert(development: OptionalConfigValue<Bool> = .fastlaneDefault(false
2690
2690
  teamName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
2691
2691
  filename: OptionalConfigValue<String?> = .fastlaneDefault(nil),
2692
2692
  outputPath: String = ".",
2693
- keychainPath: String,
2693
+ keychainPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
2694
2694
  keychainPassword: OptionalConfigValue<String?> = .fastlaneDefault(nil),
2695
2695
  skipSetPartitionList: OptionalConfigValue<Bool> = .fastlaneDefault(false),
2696
2696
  platform: String = "ios")
@@ -2706,7 +2706,7 @@ public func cert(development: OptionalConfigValue<Bool> = .fastlaneDefault(false
2706
2706
  let teamNameArg = teamName.asRubyArgument(name: "team_name", type: nil)
2707
2707
  let filenameArg = filename.asRubyArgument(name: "filename", type: nil)
2708
2708
  let outputPathArg = RubyCommand.Argument(name: "output_path", value: outputPath, type: nil)
2709
- let keychainPathArg = RubyCommand.Argument(name: "keychain_path", value: keychainPath, type: nil)
2709
+ let keychainPathArg = keychainPath.asRubyArgument(name: "keychain_path", type: nil)
2710
2710
  let keychainPasswordArg = keychainPassword.asRubyArgument(name: "keychain_password", type: nil)
2711
2711
  let skipSetPartitionListArg = skipSetPartitionList.asRubyArgument(name: "skip_set_partition_list", type: nil)
2712
2712
  let platformArg = RubyCommand.Argument(name: "platform", value: platform, type: nil)
@@ -4842,7 +4842,7 @@ public func getCertificates(development: OptionalConfigValue<Bool> = .fastlaneDe
4842
4842
  teamName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
4843
4843
  filename: OptionalConfigValue<String?> = .fastlaneDefault(nil),
4844
4844
  outputPath: String = ".",
4845
- keychainPath: String,
4845
+ keychainPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
4846
4846
  keychainPassword: OptionalConfigValue<String?> = .fastlaneDefault(nil),
4847
4847
  skipSetPartitionList: OptionalConfigValue<Bool> = .fastlaneDefault(false),
4848
4848
  platform: String = "ios")
@@ -4858,7 +4858,7 @@ public func getCertificates(development: OptionalConfigValue<Bool> = .fastlaneDe
4858
4858
  let teamNameArg = teamName.asRubyArgument(name: "team_name", type: nil)
4859
4859
  let filenameArg = filename.asRubyArgument(name: "filename", type: nil)
4860
4860
  let outputPathArg = RubyCommand.Argument(name: "output_path", value: outputPath, type: nil)
4861
- let keychainPathArg = RubyCommand.Argument(name: "keychain_path", value: keychainPath, type: nil)
4861
+ let keychainPathArg = keychainPath.asRubyArgument(name: "keychain_path", type: nil)
4862
4862
  let keychainPasswordArg = keychainPassword.asRubyArgument(name: "keychain_password", type: nil)
4863
4863
  let skipSetPartitionListArg = skipSetPartitionList.asRubyArgument(name: "skip_set_partition_list", type: nil)
4864
4864
  let platformArg = RubyCommand.Argument(name: "platform", value: platform, type: nil)
@@ -9931,6 +9931,7 @@ public func setPodKey(useBundleExec: OptionalConfigValue<Bool> = .fastlaneDefaul
9931
9931
  - force: Force setup, even if not executed by CI
9932
9932
  - provider: CI provider. If none is set, the provider is detected automatically
9933
9933
  - timeout: Set a custom timeout in seconds for keychain. Set `0` if you want to specify 'no time-out'
9934
+ - keychainName: Set a custom keychain name
9934
9935
 
9935
9936
  - Creates a new temporary keychain for use with match|
9936
9937
  - Switches match to `readonly` mode to not create new profiles/cert on CI|
@@ -9940,14 +9941,17 @@ public func setPodKey(useBundleExec: OptionalConfigValue<Bool> = .fastlaneDefaul
9940
9941
  */
9941
9942
  public func setupCi(force: OptionalConfigValue<Bool> = .fastlaneDefault(false),
9942
9943
  provider: OptionalConfigValue<String?> = .fastlaneDefault(nil),
9943
- timeout: Int = 3600)
9944
+ timeout: Int = 3600,
9945
+ keychainName: String = "fastlane_tmp_keychain")
9944
9946
  {
9945
9947
  let forceArg = force.asRubyArgument(name: "force", type: nil)
9946
9948
  let providerArg = provider.asRubyArgument(name: "provider", type: nil)
9947
9949
  let timeoutArg = RubyCommand.Argument(name: "timeout", value: timeout, type: nil)
9950
+ let keychainNameArg = RubyCommand.Argument(name: "keychain_name", value: keychainName, type: nil)
9948
9951
  let array: [RubyCommand.Argument?] = [forceArg,
9949
9952
  providerArg,
9950
- timeoutArg]
9953
+ timeoutArg,
9954
+ keychainNameArg]
9951
9955
  let args: [RubyCommand.Argument] = array
9952
9956
  .filter { $0?.value != nil }
9953
9957
  .compactMap { $0 }
@@ -11588,7 +11592,7 @@ public func teamName() {
11588
11592
  }
11589
11593
 
11590
11594
  /**
11591
- Upload a new build to [TestFairy](https://www.testfairy.com/)
11595
+ Upload a new build to SauceLabs' TestFairy
11592
11596
 
11593
11597
  - parameters:
11594
11598
  - apiKey: API Key for TestFairy
@@ -11610,7 +11614,9 @@ public func teamName() {
11610
11614
  - uploadToSaucelabs: Upload file directly to Sauce Labs. It can be 'on' or 'off'
11611
11615
  - platform: Use if upload build is not iOS or Android. Contact support for more information
11612
11616
 
11613
- You can retrieve your API key on [your settings page](https://free.testfairy.com/settings/)
11617
+ Upload a new build to [TestFairy](https://saucelabs.com/products/mobile-testing/app-betas).
11618
+ You can retrieve your API key on [your settings page](https://app.testfairy.com/settings/access-key)
11619
+
11614
11620
  */
11615
11621
  public func testfairy(apiKey: String,
11616
11622
  ipa: OptionalConfigValue<String?> = .fastlaneDefault(nil),
@@ -11856,6 +11862,7 @@ public func testflight(apiKeyPath: OptionalConfigValue<String?> = .fastlaneDefau
11856
11862
  - outputFilename: Filename the xml file should be written to. Defaults to name of input file. (Only works if one input file is used)
11857
11863
  - failBuild: Should this step stop the build if the tests fail? Set this to false if you're handling this with a test reporter
11858
11864
  - xcprettyNaming: Produces class name and test name identical to xcpretty naming in junit file
11865
+ - forceLegacyXcresulttool: Force the use of the '--legacy' flag for xcresulttool instead of using the new commands
11859
11866
  - silent: Silences all output
11860
11867
  - outputRemoveRetryAttempts: Doesn't include retry attempts in the output
11861
11868
 
@@ -11867,6 +11874,7 @@ public func trainer(path: String = ".",
11867
11874
  outputFilename: OptionalConfigValue<String?> = .fastlaneDefault(nil),
11868
11875
  failBuild: OptionalConfigValue<Bool> = .fastlaneDefault(true),
11869
11876
  xcprettyNaming: OptionalConfigValue<Bool> = .fastlaneDefault(false),
11877
+ forceLegacyXcresulttool: OptionalConfigValue<Bool> = .fastlaneDefault(false),
11870
11878
  silent: OptionalConfigValue<Bool> = .fastlaneDefault(false),
11871
11879
  outputRemoveRetryAttempts: OptionalConfigValue<Bool> = .fastlaneDefault(false))
11872
11880
  {
@@ -11876,6 +11884,7 @@ public func trainer(path: String = ".",
11876
11884
  let outputFilenameArg = outputFilename.asRubyArgument(name: "output_filename", type: nil)
11877
11885
  let failBuildArg = failBuild.asRubyArgument(name: "fail_build", type: nil)
11878
11886
  let xcprettyNamingArg = xcprettyNaming.asRubyArgument(name: "xcpretty_naming", type: nil)
11887
+ let forceLegacyXcresulttoolArg = forceLegacyXcresulttool.asRubyArgument(name: "force_legacy_xcresulttool", type: nil)
11879
11888
  let silentArg = silent.asRubyArgument(name: "silent", type: nil)
11880
11889
  let outputRemoveRetryAttemptsArg = outputRemoveRetryAttempts.asRubyArgument(name: "output_remove_retry_attempts", type: nil)
11881
11890
  let array: [RubyCommand.Argument?] = [pathArg,
@@ -11884,6 +11893,7 @@ public func trainer(path: String = ".",
11884
11893
  outputFilenameArg,
11885
11894
  failBuildArg,
11886
11895
  xcprettyNamingArg,
11896
+ forceLegacyXcresulttoolArg,
11887
11897
  silentArg,
11888
11898
  outputRemoveRetryAttemptsArg]
11889
11899
  let args: [RubyCommand.Argument] = array
@@ -13877,4 +13887,4 @@ public let snapshotfile: Snapshotfile = .init()
13877
13887
 
13878
13888
  // Please don't remove the lines below
13879
13889
  // They are used to detect outdated files
13880
- // FastlaneRunnerAPIVersion [0.9.185]
13890
+ // FastlaneRunnerAPIVersion [0.9.186]
@@ -1,5 +1,5 @@
1
1
  // Gymfile.swift
2
- // Copyright (c) 2024 FastlaneTools
2
+ // Copyright (c) 2025 FastlaneTools
3
3
 
4
4
  // This class is automatically included in FastlaneRunner during build
5
5
 
@@ -17,4 +17,4 @@ public class Gymfile: GymfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.226.0
20
+ // Generated with fastlane 2.227.0
@@ -1,5 +1,5 @@
1
1
  // GymfileProtocol.swift
2
- // Copyright (c) 2024 FastlaneTools
2
+ // Copyright (c) 2025 FastlaneTools
3
3
 
4
4
  public protocol GymfileProtocol: AnyObject {
5
5
  /// Path to the workspace file
@@ -212,4 +212,4 @@ public extension GymfileProtocol {
212
212
 
213
213
  // Please don't remove the lines below
214
214
  // They are used to detect outdated files
215
- // FastlaneRunnerAPIVersion [0.9.135]
215
+ // FastlaneRunnerAPIVersion [0.9.136]
@@ -1,5 +1,5 @@
1
1
  // LaneFileProtocol.swift
2
- // Copyright (c) 2024 FastlaneTools
2
+ // Copyright (c) 2025 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -1,5 +1,5 @@
1
1
  // MainProcess.swift
2
- // Copyright (c) 2024 FastlaneTools
2
+ // Copyright (c) 2025 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -1,5 +1,5 @@
1
1
  // Matchfile.swift
2
- // Copyright (c) 2024 FastlaneTools
2
+ // Copyright (c) 2025 FastlaneTools
3
3
 
4
4
  // This class is automatically included in FastlaneRunner during build
5
5
 
@@ -17,4 +17,4 @@ public class Matchfile: MatchfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.226.0
20
+ // Generated with fastlane 2.227.0
@@ -1,5 +1,5 @@
1
1
  // MatchfileProtocol.swift
2
- // Copyright (c) 2024 FastlaneTools
2
+ // Copyright (c) 2025 FastlaneTools
3
3
 
4
4
  public protocol MatchfileProtocol: AnyObject {
5
5
  /// Define the profile type, can be appstore, adhoc, development, enterprise, developer_id, mac_installer_distribution, developer_id_installer
@@ -232,4 +232,4 @@ public extension MatchfileProtocol {
232
232
 
233
233
  // Please don't remove the lines below
234
234
  // They are used to detect outdated files
235
- // FastlaneRunnerAPIVersion [0.9.129]
235
+ // FastlaneRunnerAPIVersion [0.9.130]
@@ -1,5 +1,5 @@
1
1
  // OptionalConfigValue.swift
2
- // Copyright (c) 2024 FastlaneTools
2
+ // Copyright (c) 2025 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -1,5 +1,5 @@
1
1
  // Plugins.swift
2
- // Copyright (c) 2024 FastlaneTools
2
+ // Copyright (c) 2025 FastlaneTools
3
3
 
4
4
  // This autogenerated file will be overwritten or replaced when installing/updating plugins or running "fastlane generate_swift"
5
5
  //
@@ -1,5 +1,5 @@
1
1
  // Precheckfile.swift
2
- // Copyright (c) 2024 FastlaneTools
2
+ // Copyright (c) 2025 FastlaneTools
3
3
 
4
4
  // This class is automatically included in FastlaneRunner during build
5
5
 
@@ -17,4 +17,4 @@ public class Precheckfile: PrecheckfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.226.0
20
+ // Generated with fastlane 2.227.0
@@ -1,5 +1,5 @@
1
1
  // PrecheckfileProtocol.swift
2
- // Copyright (c) 2024 FastlaneTools
2
+ // Copyright (c) 2025 FastlaneTools
3
3
 
4
4
  public protocol PrecheckfileProtocol: AnyObject {
5
5
  /// Path to your App Store Connect API Key JSON file (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-json-file)
@@ -52,4 +52,4 @@ public extension PrecheckfileProtocol {
52
52
 
53
53
  // Please don't remove the lines below
54
54
  // They are used to detect outdated files
55
- // FastlaneRunnerAPIVersion [0.9.128]
55
+ // FastlaneRunnerAPIVersion [0.9.129]
@@ -1,5 +1,5 @@
1
1
  // RubyCommand.swift
2
- // Copyright (c) 2024 FastlaneTools
2
+ // Copyright (c) 2025 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -1,5 +1,5 @@
1
1
  // RubyCommandable.swift
2
- // Copyright (c) 2024 FastlaneTools
2
+ // Copyright (c) 2025 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -1,5 +1,5 @@
1
1
  // Runner.swift
2
- // Copyright (c) 2024 FastlaneTools
2
+ // Copyright (c) 2025 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -1,5 +1,5 @@
1
1
  // RunnerArgument.swift
2
- // Copyright (c) 2024 FastlaneTools
2
+ // Copyright (c) 2025 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -1,5 +1,5 @@
1
1
  // Scanfile.swift
2
- // Copyright (c) 2024 FastlaneTools
2
+ // Copyright (c) 2025 FastlaneTools
3
3
 
4
4
  // This class is automatically included in FastlaneRunner during build
5
5
 
@@ -17,4 +17,4 @@ public class Scanfile: ScanfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.226.0
20
+ // Generated with fastlane 2.227.0
@@ -1,5 +1,5 @@
1
1
  // ScanfileProtocol.swift
2
- // Copyright (c) 2024 FastlaneTools
2
+ // Copyright (c) 2025 FastlaneTools
3
3
 
4
4
  public protocol ScanfileProtocol: AnyObject {
5
5
  /// Path to the workspace file
@@ -324,4 +324,4 @@ public extension ScanfileProtocol {
324
324
 
325
325
  // Please don't remove the lines below
326
326
  // They are used to detect outdated files
327
- // FastlaneRunnerAPIVersion [0.9.140]
327
+ // FastlaneRunnerAPIVersion [0.9.141]
@@ -1,5 +1,5 @@
1
1
  // Screengrabfile.swift
2
- // Copyright (c) 2024 FastlaneTools
2
+ // Copyright (c) 2025 FastlaneTools
3
3
 
4
4
  // This class is automatically included in FastlaneRunner during build
5
5
 
@@ -17,4 +17,4 @@ public class Screengrabfile: ScreengrabfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.226.0
20
+ // Generated with fastlane 2.227.0
@@ -1,5 +1,5 @@
1
1
  // ScreengrabfileProtocol.swift
2
- // Copyright (c) 2024 FastlaneTools
2
+ // Copyright (c) 2025 FastlaneTools
3
3
 
4
4
  public protocol ScreengrabfileProtocol: AnyObject {
5
5
  /// Path to the root of your Android SDK installation, e.g. ~/tools/android-sdk-macosx
@@ -96,4 +96,4 @@ public extension ScreengrabfileProtocol {
96
96
 
97
97
  // Please don't remove the lines below
98
98
  // They are used to detect outdated files
99
- // FastlaneRunnerAPIVersion [0.9.130]
99
+ // FastlaneRunnerAPIVersion [0.9.131]
@@ -1,5 +1,5 @@
1
1
  // Snapshotfile.swift
2
- // Copyright (c) 2024 FastlaneTools
2
+ // Copyright (c) 2025 FastlaneTools
3
3
 
4
4
  // This class is automatically included in FastlaneRunner during build
5
5
 
@@ -17,4 +17,4 @@ public class Snapshotfile: SnapshotfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.226.0
20
+ // Generated with fastlane 2.227.0
@@ -1,5 +1,5 @@
1
1
  // SnapshotfileProtocol.swift
2
- // Copyright (c) 2024 FastlaneTools
2
+ // Copyright (c) 2025 FastlaneTools
3
3
 
4
4
  public protocol SnapshotfileProtocol: AnyObject {
5
5
  /// Path to the workspace file
@@ -208,4 +208,4 @@ public extension SnapshotfileProtocol {
208
208
 
209
209
  // Please don't remove the lines below
210
210
  // They are used to detect outdated files
211
- // FastlaneRunnerAPIVersion [0.9.124]
211
+ // FastlaneRunnerAPIVersion [0.9.125]
@@ -1,5 +1,5 @@
1
1
  // SocketClient.swift
2
- // Copyright (c) 2024 FastlaneTools
2
+ // Copyright (c) 2025 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -1,5 +1,5 @@
1
1
  // SocketClientDelegateProtocol.swift
2
- // Copyright (c) 2024 FastlaneTools
2
+ // Copyright (c) 2025 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -1,5 +1,5 @@
1
1
  // SocketResponse.swift
2
- // Copyright (c) 2024 FastlaneTools
2
+ // Copyright (c) 2025 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -1,5 +1,5 @@
1
1
  // main.swift
2
- // Copyright (c) 2024 FastlaneTools
2
+ // Copyright (c) 2025 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -74,7 +74,7 @@ module FastlaneCore
74
74
  return true if self.is_circle_ci?
75
75
 
76
76
  # Check for Jenkins, Travis CI, ... environment variables
77
- ['JENKINS_HOME', 'JENKINS_URL', 'TRAVIS', 'CI', 'APPCENTER_BUILD_ID', 'TEAMCITY_VERSION', 'GO_PIPELINE_NAME', 'bamboo_buildKey', 'GITLAB_CI', 'XCS', 'TF_BUILD', 'GITHUB_ACTION', 'GITHUB_ACTIONS', 'BITRISE_IO', 'BUDDY'].each do |current|
77
+ ['JENKINS_HOME', 'JENKINS_URL', 'TRAVIS', 'CI', 'APPCENTER_BUILD_ID', 'TEAMCITY_VERSION', 'GO_PIPELINE_NAME', 'bamboo_buildKey', 'GITLAB_CI', 'XCS', 'TF_BUILD', 'GITHUB_ACTION', 'GITHUB_ACTIONS', 'BITRISE_IO', 'BUDDY', 'CODEBUILD_BUILD_ARN'].each do |current|
78
78
  return true if FastlaneCore::Env.truthy?(current)
79
79
  end
80
80
  return false
@@ -84,6 +84,11 @@ module FastlaneCore
84
84
  return ENV.key?('CIRCLECI')
85
85
  end
86
86
 
87
+ # @return [boolean] true if environment variable CODEBUILD_BUILD_ARN is set
88
+ def self.is_codebuild?
89
+ return ENV.key?('CODEBUILD_BUILD_ARN')
90
+ end
91
+
87
92
  def self.operating_system
88
93
  return "macOS" if RUBY_PLATFORM.downcase.include?("darwin")
89
94
  return "Windows" if RUBY_PLATFORM.downcase.include?("mswin")
@@ -1,11 +1,11 @@
1
1
  ## [fastlane match](https://docs.fastlane.tools/actions/match/)
2
2
 
3
+ > Do not modify this file, as it gets overwritten every time you run _match_.
4
+
3
5
  This repository contains all your certificates and provisioning profiles needed to build and sign your applications. They are encrypted using OpenSSL via a passphrase.
4
6
 
5
7
  **Important:** Make sure this repository is set to private and only your team members have access to this repo.
6
8
 
7
- Do not modify this file, as it gets overwritten every time you run _match_.
8
-
9
9
  ### Installation
10
10
 
11
11
  Make sure you have the latest version of the Xcode command line tools installed:
@@ -32,8 +32,8 @@ module Match
32
32
  username: params[:username],
33
33
  team_id: params[:team_id],
34
34
  team_name: params[:team_name],
35
- keychain_path: FastlaneCore::Helper.keychain_path(params[:keychain_name]),
36
- keychain_password: params[:keychain_password],
35
+ keychain_path: Helper.mac? ? FastlaneCore::Helper.keychain_path(params[:keychain_name]) : nil,
36
+ keychain_password: Helper.mac? ? params[:keychain_password] : nil,
37
37
  skip_set_partition_list: params[:skip_set_partition_list]
38
38
  })
39
39
 
@@ -56,7 +56,7 @@ module Match
56
56
 
57
57
  unless params[:readonly]
58
58
  self.spaceship = SpaceshipEnsure.new(params[:username], params[:team_id], params[:team_name], api_token(params))
59
- if params[:type] == "enterprise" && !Spaceship.client.in_house?
59
+ if params[:type] == "enterprise" && !Spaceship::ConnectAPI.client.in_house?
60
60
  UI.user_error!("You defined the profile type 'enterprise', but your Apple account doesn't support In-House profiles")
61
61
  end
62
62
  end
@@ -84,7 +84,7 @@ module Precheck
84
84
  optional: true,
85
85
  default_value: "ios",
86
86
  verify_block: proc do |value|
87
- UI.user_error!("The platform can only be ios, appletvos, or osx") unless %w(ios appletvos osx).include?(value)
87
+ UI.user_error!("The platform can only be ios, appletvos/tvos or osx") unless %w(ios appletvos tvos osx).include?(value)
88
88
  end),
89
89
  FastlaneCore::ConfigItem.new(key: :default_rule_level,
90
90
  short_option: "-r",
@@ -54,7 +54,7 @@ module Produce
54
54
  optional: true,
55
55
  default_value: "ios",
56
56
  verify_block: proc do |value|
57
- UI.user_error!("The platform can only be ios or osx") unless %w(ios osx tvos).include?(value)
57
+ UI.user_error!("The platform can only be ios, osx or tvos") unless %w(ios osx tvos).include?(value)
58
58
  end),
59
59
  FastlaneCore::ConfigItem.new(key: :platforms,
60
60
  short_option: "-J",
@@ -52,6 +52,7 @@ module Spaceship
52
52
  end
53
53
 
54
54
  def valid?
55
+ return false if expiration_date.nil? || expiration_date.empty?
55
56
  Time.parse(expiration_date) > Time.now
56
57
  end
57
58
 
@@ -133,16 +133,23 @@ module Supply
133
133
  UI.message("Updating #{version_code}'s rollout to '#{Supply.config[:rollout]}' on track '#{Supply.config[:track]}'...")
134
134
 
135
135
  if track && release
136
- completed = Supply.config[:rollout].to_f == 1
137
- release.user_fraction = completed ? nil : Supply.config[:rollout]
138
- if Supply.config[:release_status]
139
- release.status = Supply.config[:release_status]
140
- else
141
- release.status = completed ? Supply::ReleaseStatus::COMPLETED : Supply::ReleaseStatus::IN_PROGRESS
142
- end
143
-
144
- # Deleted other version codes if completed because only allowed on completed version in a release
145
- track.releases.delete_if { |r| !(r.version_codes || []).map(&:to_s).include?(version_code) } if completed
136
+ rollout = Supply.config[:rollout]
137
+ status = Supply.config[:release_status]
138
+
139
+ # If release_status not provided explicitly (and thus defaults to 'completed'), but rollout is provided with a value < 1.0, then set to 'inProgress' instead
140
+ status = Supply::ReleaseStatus::IN_PROGRESS if status == Supply::ReleaseStatus::COMPLETED && !rollout.nil? && rollout.to_f < 1
141
+ # If release_status is set to 'inProgress' but rollout is provided with a value = 1.0, then set to 'completed' instead
142
+ status = Supply::ReleaseStatus::COMPLETED if status == Supply::ReleaseStatus::IN_PROGRESS && rollout.to_f == 1
143
+ # If release_status is set to 'inProgress' but no rollout value is provided, error out
144
+ UI.user_error!("You need to provide a rollout value when release_status is set to 'inProgress'") if status == Supply::ReleaseStatus::IN_PROGRESS && rollout.nil?
145
+ release.status = status
146
+ # user_fraction is only valid for IN_PROGRESS or HALTED status
147
+ # https://googleapis.dev/ruby/google-api-client/latest/Google/Apis/AndroidpublisherV3/TrackRelease.html#user_fraction-instance_method
148
+ release.user_fraction = [Supply::ReleaseStatus::IN_PROGRESS, Supply::ReleaseStatus::HALTED].include?(release.status) ? rollout : nil
149
+
150
+ # It's okay to set releases to an array containing the newest release
151
+ # Google Play will keep previous releases there untouched
152
+ track.releases = [release]
146
153
  else
147
154
  UI.user_error!("Unable to find version to rollout in track '#{Supply.config[:track]}'")
148
155
  end
@@ -213,7 +220,7 @@ module Supply
213
220
  end
214
221
 
215
222
  if track_to
216
- # Its okay to set releases to an array containing the newest release
223
+ # It's okay to set releases to an array containing the newest release
217
224
  # Google Play will keep previous releases there this release is a partial rollout
218
225
  track_to.releases = [release]
219
226
  else
@@ -438,7 +445,7 @@ module Supply
438
445
  tracks = client.tracks(Supply.config[:track])
439
446
  track = tracks.first
440
447
  if track
441
- # Its okay to set releases to an array containing the newest release
448
+ # It's okay to set releases to an array containing the newest release
442
449
  # Google Play will keep previous releases there this release is a partial rollout
443
450
  track.releases = [track_release]
444
451
  else