fastlane 2.103.1 → 2.104.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6d6001c750f5d13d29fbeac83440655919bf0364
4
- data.tar.gz: d30f64f058ab3030df43527320b975f71f99183e
3
+ metadata.gz: ea532950502bd5448c144045cec72c59174c2935
4
+ data.tar.gz: f0005241440286c16af2d5ca3ce6895a0c0bafbe
5
5
  SHA512:
6
- metadata.gz: 3ef73d2a09bc3de7d3ad0136b541668ec83cbcfaf51826d90dd6951ef107bcdd4cd889e73585acd454396391ee8655b328e24823cdd07e6b0d412c97e0c3e068
7
- data.tar.gz: 115cf7dccc61c94e7b9a7af1ea01dd39f7e741a630fb76692d8539992b7748522cf5d100c49bd77dd733adf41c18bf1b345b9b1d6435456f3c512c87a89d66e7
6
+ metadata.gz: '0818efee4e51ddc9c23988da1448596aff4481650ecc381d61536be9d3d947694b05ff2c4450aa49f65e7c442a83731ac1fad55da3060f8a180764c7b5922f4e'
7
+ data.tar.gz: 1e196366b4e2579baa59c17c55307b02600b76d942562a39849c1ee69512ad494d9f844dcde3e11dfade0872a01978f324d526f03c8ac40f7e5433e29c79e9ae
data/README.md CHANGED
@@ -32,131 +32,131 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
32
32
 
33
33
  <table id='team'>
34
34
  <tr>
35
- <td id='helmut-januschka'>
36
- <a href='https://github.com/hjanuschka'>
37
- <img src='https://github.com/hjanuschka.png?size=140'>
35
+ <td id='maksym-grebenets'>
36
+ <a href='https://github.com/mgrebenets'>
37
+ <img src='https://github.com/mgrebenets.png?size=140'>
38
38
  </a>
39
- <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
39
+ <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
40
40
  </td>
41
- <td id='kohki-miki'>
42
- <a href='https://github.com/giginet'>
43
- <img src='https://github.com/giginet.png?size=140'>
41
+ <td id='matthew-ellis'>
42
+ <a href='https://github.com/matthewellis'>
43
+ <img src='https://github.com/matthewellis.png?size=140'>
44
44
  </a>
45
- <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
45
+ <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
46
46
  </td>
47
- <td id='jérôme-lacoste'>
48
- <a href='https://github.com/lacostej'>
49
- <img src='https://github.com/lacostej.png?size=140'>
47
+ <td id='jimmy-dee'>
48
+ <a href='https://github.com/jdee'>
49
+ <img src='https://github.com/jdee.png?size=140'>
50
50
  </a>
51
- <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
51
+ <h4 align='center'>Jimmy Dee</h4>
52
52
  </td>
53
- <td id='aaron-brager'>
54
- <a href='https://github.com/getaaron'>
55
- <img src='https://github.com/getaaron.png?size=140'>
53
+ <td id='josh-holtz'>
54
+ <a href='https://github.com/joshdholtz'>
55
+ <img src='https://github.com/joshdholtz.png?size=140'>
56
56
  </a>
57
- <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
57
+ <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
58
58
  </td>
59
- <td id='jorge-revuelta-h'>
60
- <a href='https://github.com/minuscorp'>
61
- <img src='https://github.com/minuscorp.png?size=140'>
59
+ <td id='joshua-liebowitz'>
60
+ <a href='https://github.com/taquitos'>
61
+ <img src='https://github.com/taquitos.png?size=140'>
62
62
  </a>
63
- <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
63
+ <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
64
64
  </td>
65
65
  </tr>
66
66
  <tr>
67
- <td id='iulian-onofrei'>
68
- <a href='https://github.com/revolter'>
69
- <img src='https://github.com/revolter.png?size=140'>
70
- </a>
71
- <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
72
- </td>
73
- <td id='andrew-mcburney'>
74
- <a href='https://github.com/AndrewMcBurney'>
75
- <img src='https://github.com/AndrewMcBurney.png?size=140'>
76
- </a>
77
- <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
78
- </td>
79
67
  <td id='felix-krause'>
80
68
  <a href='https://github.com/KrauseFx'>
81
69
  <img src='https://github.com/KrauseFx.png?size=140'>
82
70
  </a>
83
71
  <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
84
72
  </td>
85
- <td id='jimmy-dee'>
86
- <a href='https://github.com/jdee'>
87
- <img src='https://github.com/jdee.png?size=140'>
73
+ <td id='stefan-natchev'>
74
+ <a href='https://github.com/snatchev'>
75
+ <img src='https://github.com/snatchev.png?size=140'>
88
76
  </a>
89
- <h4 align='center'>Jimmy Dee</h4>
77
+ <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
90
78
  </td>
91
- <td id='luka-mirosevic'>
92
- <a href='https://github.com/lmirosevic'>
93
- <img src='https://github.com/lmirosevic.png?size=140'>
79
+ <td id='helmut-januschka'>
80
+ <a href='https://github.com/hjanuschka'>
81
+ <img src='https://github.com/hjanuschka.png?size=140'>
94
82
  </a>
95
- <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
83
+ <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
84
+ </td>
85
+ <td id='fumiya-nakamura'>
86
+ <a href='https://github.com/nafu'>
87
+ <img src='https://github.com/nafu.png?size=140'>
88
+ </a>
89
+ <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
90
+ </td>
91
+ <td id='jorge-revuelta-h'>
92
+ <a href='https://github.com/minuscorp'>
93
+ <img src='https://github.com/minuscorp.png?size=140'>
94
+ </a>
95
+ <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
96
96
  </td>
97
97
  </tr>
98
98
  <tr>
99
- <td id='danielle-tomlinson'>
100
- <a href='https://github.com/DanToml'>
101
- <img src='https://github.com/DanToml.png?size=140'>
99
+ <td id='olivier-halligon'>
100
+ <a href='https://github.com/AliSoftware'>
101
+ <img src='https://github.com/AliSoftware.png?size=140'>
102
102
  </a>
103
- <h4 align='center'><a href='https://twitter.com/DanToml'>Danielle Tomlinson</a></h4>
103
+ <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
104
104
  </td>
105
- <td id='manu-wallner'>
106
- <a href='https://github.com/milch'>
107
- <img src='https://github.com/milch.png?size=140'>
105
+ <td id='jan-piotrowski'>
106
+ <a href='https://github.com/janpio'>
107
+ <img src='https://github.com/janpio.png?size=140'>
108
108
  </a>
109
- <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
109
+ <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
110
110
  </td>
111
- <td id='maksym-grebenets'>
112
- <a href='https://github.com/mgrebenets'>
113
- <img src='https://github.com/mgrebenets.png?size=140'>
111
+ <td id='jérôme-lacoste'>
112
+ <a href='https://github.com/lacostej'>
113
+ <img src='https://github.com/lacostej.png?size=140'>
114
114
  </a>
115
- <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
115
+ <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
116
116
  </td>
117
- <td id='fumiya-nakamura'>
118
- <a href='https://github.com/nafu'>
119
- <img src='https://github.com/nafu.png?size=140'>
117
+ <td id='andrew-mcburney'>
118
+ <a href='https://github.com/AndrewMcBurney'>
119
+ <img src='https://github.com/AndrewMcBurney.png?size=140'>
120
120
  </a>
121
- <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
121
+ <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
122
122
  </td>
123
- <td id='matthew-ellis'>
124
- <a href='https://github.com/matthewellis'>
125
- <img src='https://github.com/matthewellis.png?size=140'>
123
+ <td id='iulian-onofrei'>
124
+ <a href='https://github.com/revolter'>
125
+ <img src='https://github.com/revolter.png?size=140'>
126
126
  </a>
127
- <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
127
+ <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
128
128
  </td>
129
129
  </tr>
130
130
  <tr>
131
- <td id='stefan-natchev'>
132
- <a href='https://github.com/snatchev'>
133
- <img src='https://github.com/snatchev.png?size=140'>
131
+ <td id='luka-mirosevic'>
132
+ <a href='https://github.com/lmirosevic'>
133
+ <img src='https://github.com/lmirosevic.png?size=140'>
134
134
  </a>
135
- <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
135
+ <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
136
136
  </td>
137
- <td id='joshua-liebowitz'>
138
- <a href='https://github.com/taquitos'>
139
- <img src='https://github.com/taquitos.png?size=140'>
137
+ <td id='manu-wallner'>
138
+ <a href='https://github.com/milch'>
139
+ <img src='https://github.com/milch.png?size=140'>
140
140
  </a>
141
- <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
141
+ <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
142
142
  </td>
143
- <td id='jan-piotrowski'>
144
- <a href='https://github.com/janpio'>
145
- <img src='https://github.com/janpio.png?size=140'>
143
+ <td id='aaron-brager'>
144
+ <a href='https://github.com/getaaron'>
145
+ <img src='https://github.com/getaaron.png?size=140'>
146
146
  </a>
147
- <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
147
+ <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
148
148
  </td>
149
- <td id='olivier-halligon'>
150
- <a href='https://github.com/AliSoftware'>
151
- <img src='https://github.com/AliSoftware.png?size=140'>
149
+ <td id='danielle-tomlinson'>
150
+ <a href='https://github.com/DanToml'>
151
+ <img src='https://github.com/DanToml.png?size=140'>
152
152
  </a>
153
- <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
153
+ <h4 align='center'><a href='https://twitter.com/DanToml'>Danielle Tomlinson</a></h4>
154
154
  </td>
155
- <td id='josh-holtz'>
156
- <a href='https://github.com/joshdholtz'>
157
- <img src='https://github.com/joshdholtz.png?size=140'>
155
+ <td id='kohki-miki'>
156
+ <a href='https://github.com/giginet'>
157
+ <img src='https://github.com/giginet.png?size=140'>
158
158
  </a>
159
- <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
159
+ <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
160
160
  </td>
161
161
  </tr>
162
162
  </table>
@@ -55,12 +55,26 @@ module Deliver
55
55
  UI.user_error!("Could not find app with app identifier") unless app
56
56
 
57
57
  start = Time.now
58
+ build = nil
58
59
 
59
60
  loop do
60
- build = find_build(app.latest_version.candidate_builds)
61
- return build if build.processing == false
61
+ latest_build = find_build(app.latest_version.candidate_builds)
62
+
63
+ # Sometimes latest build will disappear and a different build would get selected
64
+ # Only set build if no latest build found or if same build versions as previously fetched build
65
+ # Issue: https://github.com/fastlane/fastlane/issues/10945
66
+ if build.nil? || (latest_build && latest_build.train_version == build.train_version && latest_build.build_version == build.build_version)
67
+ build = latest_build
68
+ end
69
+
70
+ return build if build && build.processing == false
71
+
72
+ if build
73
+ UI.message("Waiting App Store Connect processing for build #{build.train_version} (#{build.build_version})... this might take a while...")
74
+ else
75
+ UI.message("Waiting App Store Connect processing for build... this might take a while...")
76
+ end
62
77
 
63
- UI.message("Waiting App Store Connect processing for build #{build.train_version} (#{build.build_version})... this might take a while...")
64
78
  if (Time.now - start) > (60 * 5)
65
79
  UI.message("")
66
80
  UI.message("You can tweet: \"App Store Connect #iosprocessingtime #{((Time.now - start) / 60).round} minutes\"")
@@ -3,7 +3,7 @@ This file is auto-generated and will be re-generated every time the docs are upd
3
3
  To modify it, go to its source at https://github.com/fastlane/fastlane/blob/master/fastlane/lib/assets/Actions.md.erb
4
4
  -->
5
5
 
6
- {!docs/setup-fastlane-header.md!}
6
+ {!docs/includes/setup-fastlane-header.md!}
7
7
 
8
8
  # fastlane actions
9
9
 
@@ -22,12 +22,13 @@ You can import another `Fastfile` by using the `import` action. This is useful i
22
22
  import './path/to/other/Fastfile'
23
23
  ```
24
24
 
25
- For _fastlane_ plugins, check out the [available plugins](https://docs.fastlane.tools/plugins/available-plugins/) page.
25
+ For _fastlane_ plugins, check out the [available plugins](/plugins/available-plugins/) page.
26
+ If you want to create your own action, check out the [local actions](/create-action/#local-actions) page.
26
27
 
27
28
  <%- @categories.each do |category, actions| -%>
28
29
  - [<%= category %>](#<%= category.gsub(" ", "-").downcase %>)
29
30
  <%- end -%>
30
- - [Plugins](https://docs.fastlane.tools/plugins/available-plugins/)
31
+ - [Plugins](/plugins/available-plugins/)
31
32
 
32
33
  <%- @categories.each do |category, actions| %>
33
34
  # <%= category %>
@@ -33,20 +33,7 @@ _supply_ uploads app metadata, screenshots, binaries, and app bundles to Google
33
33
 
34
34
  Setup consists of setting up your Google Developers Service Account
35
35
 
36
- 1. Open the [Google Play Console](https://play.google.com/apps/publish/)
37
- 1. Select **Settings** tab, followed by the **API access** tab
38
- 1. Click the **Create Service Account** button and follow the **Google API Console** link in the dialog
39
- 1. Click the **Create Service account** button at the top of the developers console screen
40
- 1. Provide a name for the service account
41
- 1. Click **Select a role** and choose **Service Accounts > Service Account User**
42
- 1. Check the **Furnish a new private key** checkbox
43
- 1. Select **JSON** as the Key type
44
- 1. Click **Create** to close the dialog
45
- 1. Make a note of the file name of the JSON file downloaded to your computer
46
- 1. Back on the Google Play developer console, click **Done** to close the dialog
47
- 1. Click on **Grant Access** for the newly added service account
48
- 1. Choose **Release Manager** from the **Role** dropdown
49
- 1. Click **Add user** to close the dialog
36
+ {!docs/includes/google-credentials.md!}
50
37
 
51
38
  ### Migrating Google credential format (from .p12 key file to .json)
52
39
 
@@ -77,7 +77,15 @@ module Fastlane
77
77
  private_class_method
78
78
 
79
79
  def self.test_summary_filenames(derived_data_path)
80
- Dir["#{derived_data_path}/**/Logs/Test/*TestSummaries.plist"]
80
+ files = []
81
+
82
+ # Xcode < 10
83
+ files += Dir["#{derived_data_path}/**/Logs/Test/*TestSummaries.plist"]
84
+
85
+ # Xcode 10
86
+ files += Dir["#{derived_data_path}/**/Logs/Test/*.xcresult/TestSummaries.plist"]
87
+
88
+ return files
81
89
  end
82
90
 
83
91
  def self.example_code
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.103.1'.freeze
2
+ VERSION = '2.104.0'.freeze
3
3
  DESCRIPTION = "The easiest way to automate beta deployments and releases for your iOS and Android apps".freeze
4
4
  MINIMUM_XCODE_RELEASE = "7.0".freeze
5
5
  RUBOCOP_REQUIREMENT = '0.49.1'.freeze
@@ -18,4 +18,4 @@ class Deliverfile: DeliverfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.103.1
21
+ // Generated with fastlane 2.104.0
@@ -2602,6 +2602,7 @@ func runTests(workspace: String? = nil,
2602
2602
  device: String? = nil,
2603
2603
  toolchain: String? = nil,
2604
2604
  devices: [String]? = nil,
2605
+ skipDetectDevices: Bool = false,
2605
2606
  scheme: String? = nil,
2606
2607
  clean: Bool = false,
2607
2608
  codeCoverage: Bool? = nil,
@@ -2644,6 +2645,7 @@ func runTests(workspace: String? = nil,
2644
2645
  RubyCommand.Argument(name: "device", value: device),
2645
2646
  RubyCommand.Argument(name: "toolchain", value: toolchain),
2646
2647
  RubyCommand.Argument(name: "devices", value: devices),
2648
+ RubyCommand.Argument(name: "skip_detect_devices", value: skipDetectDevices),
2647
2649
  RubyCommand.Argument(name: "scheme", value: scheme),
2648
2650
  RubyCommand.Argument(name: "clean", value: clean),
2649
2651
  RubyCommand.Argument(name: "code_coverage", value: codeCoverage),
@@ -2728,6 +2730,7 @@ func scan(workspace: String? = scanfile.workspace,
2728
2730
  device: String? = scanfile.device,
2729
2731
  toolchain: String? = scanfile.toolchain,
2730
2732
  devices: [String]? = scanfile.devices,
2733
+ skipDetectDevices: Bool = scanfile.skipDetectDevices,
2731
2734
  scheme: String? = scanfile.scheme,
2732
2735
  clean: Bool = scanfile.clean,
2733
2736
  codeCoverage: Bool? = scanfile.codeCoverage,
@@ -2770,6 +2773,7 @@ func scan(workspace: String? = scanfile.workspace,
2770
2773
  RubyCommand.Argument(name: "device", value: device),
2771
2774
  RubyCommand.Argument(name: "toolchain", value: toolchain),
2772
2775
  RubyCommand.Argument(name: "devices", value: devices),
2776
+ RubyCommand.Argument(name: "skip_detect_devices", value: skipDetectDevices),
2773
2777
  RubyCommand.Argument(name: "scheme", value: scheme),
2774
2778
  RubyCommand.Argument(name: "clean", value: clean),
2775
2779
  RubyCommand.Argument(name: "code_coverage", value: codeCoverage),
@@ -4073,4 +4077,4 @@ let screengrabfile: Screengrabfile = Screengrabfile()
4073
4077
  let snapshotfile: Snapshotfile = Snapshotfile()
4074
4078
  // Please don't remove the lines below
4075
4079
  // They are used to detect outdated files
4076
- // FastlaneRunnerAPIVersion [0.9.27]
4080
+ // FastlaneRunnerAPIVersion [0.9.28]
@@ -18,4 +18,4 @@ class Gymfile: GymfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.103.1
21
+ // Generated with fastlane 2.104.0
@@ -18,4 +18,4 @@ class Matchfile: MatchfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.103.1
21
+ // Generated with fastlane 2.104.0
@@ -18,4 +18,4 @@ class Precheckfile: PrecheckfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.103.1
21
+ // Generated with fastlane 2.104.0
@@ -18,4 +18,4 @@ class Scanfile: ScanfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.103.1
21
+ // Generated with fastlane 2.104.0
@@ -4,6 +4,7 @@ protocol ScanfileProtocol: class {
4
4
  var device: String? { get }
5
5
  var toolchain: String? { get }
6
6
  var devices: [String]? { get }
7
+ var skipDetectDevices: Bool { get }
7
8
  var scheme: String? { get }
8
9
  var clean: Bool { get }
9
10
  var codeCoverage: Bool? { get }
@@ -49,6 +50,7 @@ extension ScanfileProtocol {
49
50
  var device: String? { return nil }
50
51
  var toolchain: String? { return nil }
51
52
  var devices: [String]? { return nil }
53
+ var skipDetectDevices: Bool { return false }
52
54
  var scheme: String? { return nil }
53
55
  var clean: Bool { return false }
54
56
  var codeCoverage: Bool? { return nil }
@@ -90,4 +92,4 @@ extension ScanfileProtocol {
90
92
 
91
93
  // Please don't remove the lines below
92
94
  // They are used to detect outdated files
93
- // FastlaneRunnerAPIVersion [0.9.3]
95
+ // FastlaneRunnerAPIVersion [0.9.4]
@@ -18,4 +18,4 @@ class Screengrabfile: ScreengrabfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.103.1
21
+ // Generated with fastlane 2.104.0
@@ -18,4 +18,4 @@ class Snapshotfile: SnapshotfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.103.1
21
+ // Generated with fastlane 2.104.0
@@ -64,6 +64,9 @@ module FastlaneCore
64
64
  end
65
65
  end
66
66
  rescue => ex
67
+ # FastlanePty adds exit_status on to StandardError so every error will have a status code
68
+ status = ex.exit_status
69
+
67
70
  # This could happen when the environment is wrong:
68
71
  # > invalid byte sequence in US-ASCII (ArgumentError)
69
72
  output << ex.to_s
@@ -1,7 +1,23 @@
1
1
  # Source: Mix of https://github.com/fastlane/fastlane/pull/7202/files,
2
2
  # https://github.com/fastlane/fastlane/pull/11384#issuecomment-356084518 and
3
3
  # https://github.com/DragonBox/u3d/blob/59e471ad78ac00cb629f479dbe386c5ad2dc5075/lib/u3d_core/command_runner.rb#L88-L96
4
+
5
+ class StandardError
6
+ def exit_status
7
+ return -1
8
+ end
9
+ end
10
+
4
11
  module FastlaneCore
12
+ class FastlanePtyError < StandardError
13
+ attr_reader :exit_status
14
+ def initialize(e, exit_status)
15
+ super(e)
16
+ set_backtrace(e.backtrace) if e
17
+ @exit_status = exit_status
18
+ end
19
+ end
20
+
5
21
  class FastlanePty
6
22
  def self.spawn(command)
7
23
  require 'pty'
@@ -31,6 +47,11 @@ module FastlaneCore
31
47
  command_stdout.close
32
48
  p.value.exitstatus
33
49
  end
50
+ rescue StandardError => e
51
+ # Wrapping any error in FastlanePtyError to allow
52
+ # callers to see and use $?.exitstatus that
53
+ # would usually get returned
54
+ raise FastlanePtyError.new(e, $?.exitstatus)
34
55
  end
35
56
  end
36
57
  end
@@ -279,14 +279,20 @@ module FastlaneCore
279
279
  end
280
280
 
281
281
  # Zips directory
282
- def self.zip_directory(path, output_path, contents_only: false, print: true)
282
+ def self.zip_directory(path, output_path, contents_only: false, overwrite: false, print: true)
283
+ if overwrite
284
+ overwrite_command = " && rm -f '#{output_path}'"
285
+ else
286
+ overwrite_command = ""
287
+ end
288
+
283
289
  if contents_only
284
- command = "cd '#{path}' && zip -r '#{output_path}' *"
290
+ command = "cd '#{path}'#{overwrite_command} && zip -r '#{output_path}' *"
285
291
  else
286
292
  containing_path = File.expand_path("..", path)
287
293
  contents_path = File.basename(path)
288
294
 
289
- command = "cd '#{containing_path}' && zip -r '#{output_path}' '#{contents_path}'"
295
+ command = "cd '#{containing_path}'#{overwrite_command} && zip -r '#{output_path}' '#{contents_path}'"
290
296
  end
291
297
 
292
298
  UI.command(command) unless print
@@ -61,6 +61,8 @@ module FastlaneCore
61
61
  end
62
62
  end
63
63
  rescue => ex
64
+ # FastlanePty adds exit_status on to StandardError so every error will have a status code
65
+ exit_status = ex.exit_status
64
66
  @errors << ex.to_s
65
67
  end
66
68
 
@@ -166,27 +166,33 @@ module Scan
166
166
  set_of_simulators.to_a
167
167
  end
168
168
 
169
- default = lambda do
170
- UI.error("Couldn't find any matching simulators for '#{devices}' - falling back to default simulator") if (devices || []).count > 0
169
+ unless Scan.config[:skip_detect_devices]
170
+ default = lambda do
171
+ UI.error("Couldn't find any matching simulators for '#{devices}' - falling back to default simulator") if (devices || []).count > 0
171
172
 
172
- result = Array(
173
- simulators
174
- .select { |sim| sim.name == default_device_name }
175
- .reverse # more efficient, because `simctl` prints higher versions first
176
- .sort_by! { |sim| Gem::Version.new(sim.os_version) }
177
- .last || simulators.first
178
- )
173
+ result = Array(
174
+ simulators
175
+ .select { |sim| sim.name == default_device_name }
176
+ .reverse # more efficient, because `simctl` prints higher versions first
177
+ .sort_by! { |sim| Gem::Version.new(sim.os_version) }
178
+ .last || simulators.first
179
+ )
179
180
 
180
- UI.message("Found simulator \"#{result.first.name} (#{result.first.os_version})\"") if result.first
181
+ UI.message("Found simulator \"#{result.first.name} (#{result.first.os_version})\"") if result.first
181
182
 
182
- result
183
+ result
184
+ end
183
185
  end
184
186
 
185
187
  # grab the first unempty evaluated array
186
- Scan.devices = [matches, default].lazy.map { |x|
187
- arr = x.call
188
- arr unless arr.empty?
189
- }.reject(&:nil?).first
188
+ if default
189
+ Scan.devices = [matches, default].lazy.map { |x|
190
+ arr = x.call
191
+ arr unless arr.empty?
192
+ }.reject(&:nil?).first
193
+ else
194
+ Scan.devices = []
195
+ end
190
196
  end
191
197
 
192
198
  def self.min_xcode8?
@@ -205,7 +211,7 @@ module Scan
205
211
  # building up the destination now
206
212
  if Scan.devices && Scan.devices.count > 0
207
213
  Scan.config[:destination] = Scan.devices.map { |d| "platform=#{d.os_type} Simulator,id=#{d.udid}" }
208
- else
214
+ elsif Scan.project.mac_app?
209
215
  Scan.config[:destination] = min_xcode8? ? ["platform=macOS"] : ["platform=OS X"]
210
216
  end
211
217
  end
@@ -61,6 +61,11 @@ module Scan
61
61
  conflict_block: proc do |value|
62
62
  UI.user_error!("You can't use 'device' and 'devices' options in one run")
63
63
  end),
64
+ FastlaneCore::ConfigItem.new(key: :skip_detect_devices,
65
+ description: "Should skip auto detecting of devices if none were specified",
66
+ default_value: false,
67
+ type: Boolean,
68
+ optional: true),
64
69
  FastlaneCore::ConfigItem.new(key: :scheme,
65
70
  short_option: "-s",
66
71
  optional: true,
@@ -110,7 +110,7 @@ module Scan
110
110
 
111
111
  # Zips build products and moves it to output directory
112
112
  UI.message("Zipping build products")
113
- FastlaneCore::Helper.zip_directory(path, output_path, contents_only: true, print: false)
113
+ FastlaneCore::Helper.zip_directory(path, output_path, contents_only: true, overwrite: true, print: false)
114
114
  UI.message("Succesfully zipped build products: #{output_path}")
115
115
  end
116
116
 
metadata CHANGED
@@ -1,33 +1,33 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.103.1
4
+ version: 2.104.0
5
5
  platform: ruby
6
6
  authors:
7
+ - Stefan Natchev
7
8
  - Helmut Januschka
8
- - Felix Krause
9
- - Jimmy Dee
10
- - Andrew McBurney
11
- - Luka Mirosevic
12
- - Iulian Onofrei
13
9
  - Danielle Tomlinson
10
+ - Jérôme Lacoste
14
11
  - Aaron Brager
15
- - Jorge Revuelta H
16
- - Stefan Natchev
17
- - Josh Holtz
18
12
  - Olivier Halligon
19
- - Matthew Ellis
20
- - Fumiya Nakamura
21
- - Manu Wallner
22
- - Jérôme Lacoste
13
+ - Iulian Onofrei
23
14
  - Joshua Liebowitz
24
- - Jan Piotrowski
15
+ - Josh Holtz
16
+ - Manu Wallner
25
17
  - Maksym Grebenets
18
+ - Jan Piotrowski
19
+ - Andrew McBurney
26
20
  - Kohki Miki
21
+ - Fumiya Nakamura
22
+ - Felix Krause
23
+ - Jimmy Dee
24
+ - Luka Mirosevic
25
+ - Matthew Ellis
26
+ - Jorge Revuelta H
27
27
  autorequire:
28
28
  bindir: bin
29
29
  cert_chain: []
30
- date: 2018-09-05 00:00:00.000000000 Z
30
+ date: 2018-09-08 00:00:00.000000000 Z
31
31
  dependencies:
32
32
  - !ruby/object:Gem::Dependency
33
33
  name: slack-notifier
@@ -475,7 +475,7 @@ dependencies:
475
475
  requirements:
476
476
  - - ">="
477
477
  - !ruby/object:Gem::Version
478
- version: 1.2.1
478
+ version: 1.2.2
479
479
  - - "<"
480
480
  - !ruby/object:Gem::Version
481
481
  version: 2.0.0
@@ -485,7 +485,7 @@ dependencies:
485
485
  requirements:
486
486
  - - ">="
487
487
  - !ruby/object:Gem::Version
488
- version: 1.2.1
488
+ version: 1.2.2
489
489
  - - "<"
490
490
  - !ruby/object:Gem::Version
491
491
  version: 2.0.0
@@ -1284,6 +1284,7 @@ files:
1284
1284
  - fastlane_core/README.md
1285
1285
  - fastlane_core/lib/assets/XMLTemplate.xml.erb
1286
1286
  - fastlane_core/lib/fastlane_core.rb
1287
+ - fastlane_core/lib/fastlane_core/.command_executor.rb.swp
1287
1288
  - fastlane_core/lib/fastlane_core/analytics/action_completion_context.rb
1288
1289
  - fastlane_core/lib/fastlane_core/analytics/action_launch_context.rb
1289
1290
  - fastlane_core/lib/fastlane_core/analytics/analytics_event_builder.rb