fastlane 2.103.1 → 2.104.0

Sign up to get free protection for your applications and to get access to all the features.
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