fastlane 2.148.1 → 2.149.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +74 -74
  3. data/deliver/lib/deliver/app_screenshot.rb +3 -3
  4. data/fastlane/lib/assets/.s3_html_template.erb.swp +0 -0
  5. data/fastlane/lib/assets/s3_html_template.erb +1 -1
  6. data/fastlane/lib/fastlane/actions/.hipchat.rb.swp +0 -0
  7. data/fastlane/lib/fastlane/actions/.slack.rb.swp +0 -0
  8. data/fastlane/lib/fastlane/actions/docs/capture_android_screenshots.md +42 -2
  9. data/fastlane/lib/fastlane/actions/hipchat.rb +1 -1
  10. data/fastlane/lib/fastlane/actions/slack.rb +1 -1
  11. data/fastlane/lib/fastlane/actions/slather.rb +8 -1
  12. data/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +1 -1
  13. data/fastlane/lib/fastlane/swift_fastlane_function.rb +15 -2
  14. data/fastlane/lib/fastlane/version.rb +1 -1
  15. data/fastlane/swift/Deliverfile.swift +1 -1
  16. data/fastlane/swift/Fastlane.swift +35 -14
  17. data/fastlane/swift/Gymfile.swift +1 -1
  18. data/fastlane/swift/GymfileProtocol.swift +1 -1
  19. data/fastlane/swift/Matchfile.swift +1 -1
  20. data/fastlane/swift/Precheckfile.swift +1 -1
  21. data/fastlane/swift/Scanfile.swift +1 -1
  22. data/fastlane/swift/ScanfileProtocol.swift +2 -2
  23. data/fastlane/swift/Screengrabfile.swift +1 -1
  24. data/fastlane/swift/Snapshotfile.swift +1 -1
  25. data/fastlane/swift/SnapshotfileProtocol.swift +9 -1
  26. data/fastlane_core/lib/fastlane_core/project.rb +1 -0
  27. data/gym/lib/gym/options.rb +1 -1
  28. data/match/lib/match/nuke.rb +21 -16
  29. data/match/lib/match/storage/git_storage.rb +4 -0
  30. data/match/lib/match/storage/google_cloud_storage.rb +4 -0
  31. data/match/lib/match/storage/interface.rb +4 -0
  32. data/match/lib/match/storage/s3_storage.rb +4 -0
  33. data/scan/lib/scan/.options.rb.swp +0 -0
  34. data/scan/lib/scan/options.rb +1 -1
  35. data/scan/lib/scan/test_result_parser.rb +9 -2
  36. data/snapshot/lib/snapshot/options.rb +12 -1
  37. data/snapshot/lib/snapshot/reports_generator.rb +1 -1
  38. data/snapshot/lib/snapshot/test_command_generator.rb +8 -3
  39. data/spaceship/lib/spaceship/client.rb +9 -1
  40. data/spaceship/lib/spaceship/errors.rb +3 -0
  41. metadata +24 -20
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d311b368e5f5da222194f21d2e5b19d8a2f8ef65784a8ced79b8da42dd6e8729
4
- data.tar.gz: 4c9282af10929d5db5384be25b9ea68483a12c436d971b78968ba440b44a5dfe
3
+ metadata.gz: e1a754f320b6a2a0f0f624fa8fd7d7b51fd0a46060a2baad5097716e3236e7ca
4
+ data.tar.gz: cc01aeb35c73ac933644477ccceff7c0c2c0b11c9ef866b0bac94ebc7bf83648
5
5
  SHA512:
6
- metadata.gz: 997c07666770d0ccb3fd06355c5857b8024462bc05621263143aaf271277be79cd77f0a03f66633e31044838e93966cb22e883a67e6bb817091fc51846c60cb3
7
- data.tar.gz: d73f71f22de449f565a0790cd1494188e666620f695f8283f640af1d055fbfad1c30041744e74bc9a1a4aeb9d7377484329f9a4175d44cff5aa7c0e4d4b842de
6
+ metadata.gz: 253bb74d256220c9c5807c8675696930e836b2e780135d4c4d95d1dc9feb61d2049c7b713e43a3b198bbf79447c73182f9d6a34f2a4d5b92b9997bffaf15bc57
7
+ data.tar.gz: f612886813a3cb594e45dfaf1bb4901cf21fc834fa1b63bf5623765314003410fac0ae7ccf5624bfd9de36a5fd2abc5207cd0c71ed379ff858905a2ba21b2e81
data/README.md CHANGED
@@ -34,6 +34,24 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
34
34
  <!-- This table is regenerated and resorted on each release -->
35
35
  <table id='team'>
36
36
  <tr>
37
+ <td id='olivier-halligon'>
38
+ <a href='https://github.com/AliSoftware'>
39
+ <img src='https://github.com/AliSoftware.png?size=140'>
40
+ </a>
41
+ <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
42
+ </td>
43
+ <td id='jimmy-dee'>
44
+ <a href='https://github.com/jdee'>
45
+ <img src='https://github.com/jdee.png?size=140'>
46
+ </a>
47
+ <h4 align='center'>Jimmy Dee</h4>
48
+ </td>
49
+ <td id='matthew-ellis'>
50
+ <a href='https://github.com/matthewellis'>
51
+ <img src='https://github.com/matthewellis.png?size=140'>
52
+ </a>
53
+ <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
54
+ </td>
37
55
  <td id='felix-krause'>
38
56
  <a href='https://github.com/KrauseFx'>
39
57
  <img src='https://github.com/KrauseFx.png?size=140'>
@@ -46,11 +64,13 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
46
64
  </a>
47
65
  <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
48
66
  </td>
49
- <td id='olivier-halligon'>
50
- <a href='https://github.com/AliSoftware'>
51
- <img src='https://github.com/AliSoftware.png?size=140'>
67
+ </tr>
68
+ <tr>
69
+ <td id='daniel-jankowski'>
70
+ <a href='https://github.com/mollyIV'>
71
+ <img src='https://github.com/mollyIV.png?size=140'>
52
72
  </a>
53
- <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
73
+ <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
54
74
  </td>
55
75
  <td id='manu-wallner'>
56
76
  <a href='https://github.com/milch'>
@@ -64,51 +84,31 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
64
84
  </a>
65
85
  <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
66
86
  </td>
67
- </tr>
68
- <tr>
69
- <td id='maksym-grebenets'>
70
- <a href='https://github.com/mgrebenets'>
71
- <img src='https://github.com/mgrebenets.png?size=140'>
72
- </a>
73
- <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
74
- </td>
75
- <td id='joshua-liebowitz'>
76
- <a href='https://github.com/taquitos'>
77
- <img src='https://github.com/taquitos.png?size=140'>
78
- </a>
79
- <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
80
- </td>
81
- <td id='daniel-jankowski'>
82
- <a href='https://github.com/mollyIV'>
83
- <img src='https://github.com/mollyIV.png?size=140'>
84
- </a>
85
- <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
86
- </td>
87
- <td id='josh-holtz'>
88
- <a href='https://github.com/joshdholtz'>
89
- <img src='https://github.com/joshdholtz.png?size=140'>
87
+ <td id='stefan-natchev'>
88
+ <a href='https://github.com/snatchev'>
89
+ <img src='https://github.com/snatchev.png?size=140'>
90
90
  </a>
91
- <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
91
+ <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
92
92
  </td>
93
- <td id='max-ott'>
94
- <a href='https://github.com/max-ott'>
95
- <img src='https://github.com/max-ott.png?size=140'>
93
+ <td id='jérôme-lacoste'>
94
+ <a href='https://github.com/lacostej'>
95
+ <img src='https://github.com/lacostej.png?size=140'>
96
96
  </a>
97
- <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
97
+ <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
98
98
  </td>
99
99
  </tr>
100
100
  <tr>
101
- <td id='helmut-januschka'>
102
- <a href='https://github.com/hjanuschka'>
103
- <img src='https://github.com/hjanuschka.png?size=140'>
101
+ <td id='kohki-miki'>
102
+ <a href='https://github.com/giginet'>
103
+ <img src='https://github.com/giginet.png?size=140'>
104
104
  </a>
105
- <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
105
+ <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
106
106
  </td>
107
- <td id='aaron-brager'>
108
- <a href='https://github.com/getaaron'>
109
- <img src='https://github.com/getaaron.png?size=140'>
107
+ <td id='danielle-tomlinson'>
108
+ <a href='https://github.com/endocrimes'>
109
+ <img src='https://github.com/endocrimes.png?size=140'>
110
110
  </a>
111
- <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
111
+ <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
112
112
  </td>
113
113
  <td id='andrew-mcburney'>
114
114
  <a href='https://github.com/armcburney'>
@@ -116,64 +116,64 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
116
116
  </a>
117
117
  <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
118
118
  </td>
119
- <td id='kohki-miki'>
120
- <a href='https://github.com/giginet'>
121
- <img src='https://github.com/giginet.png?size=140'>
119
+ <td id='iulian-onofrei'>
120
+ <a href='https://github.com/revolter'>
121
+ <img src='https://github.com/revolter.png?size=140'>
122
122
  </a>
123
- <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
123
+ <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
124
124
  </td>
125
- <td id='stefan-natchev'>
126
- <a href='https://github.com/snatchev'>
127
- <img src='https://github.com/snatchev.png?size=140'>
125
+ <td id='helmut-januschka'>
126
+ <a href='https://github.com/hjanuschka'>
127
+ <img src='https://github.com/hjanuschka.png?size=140'>
128
128
  </a>
129
- <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
129
+ <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
130
130
  </td>
131
131
  </tr>
132
132
  <tr>
133
- <td id='danielle-tomlinson'>
134
- <a href='https://github.com/endocrimes'>
135
- <img src='https://github.com/endocrimes.png?size=140'>
133
+ <td id='joshua-liebowitz'>
134
+ <a href='https://github.com/taquitos'>
135
+ <img src='https://github.com/taquitos.png?size=140'>
136
136
  </a>
137
- <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
137
+ <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
138
138
  </td>
139
- <td id='jérôme-lacoste'>
140
- <a href='https://github.com/lacostej'>
141
- <img src='https://github.com/lacostej.png?size=140'>
139
+ <td id='aaron-brager'>
140
+ <a href='https://github.com/getaaron'>
141
+ <img src='https://github.com/getaaron.png?size=140'>
142
142
  </a>
143
- <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
143
+ <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
144
144
  </td>
145
- <td id='iulian-onofrei'>
146
- <a href='https://github.com/revolter'>
147
- <img src='https://github.com/revolter.png?size=140'>
145
+ <td id='jorge-revuelta-h'>
146
+ <a href='https://github.com/minuscorp'>
147
+ <img src='https://github.com/minuscorp.png?size=140'>
148
148
  </a>
149
- <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
149
+ <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
150
150
  </td>
151
- <td id='jimmy-dee'>
152
- <a href='https://github.com/jdee'>
153
- <img src='https://github.com/jdee.png?size=140'>
151
+ <td id='max-ott'>
152
+ <a href='https://github.com/max-ott'>
153
+ <img src='https://github.com/max-ott.png?size=140'>
154
154
  </a>
155
- <h4 align='center'>Jimmy Dee</h4>
155
+ <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
156
156
  </td>
157
- <td id='matthew-ellis'>
158
- <a href='https://github.com/matthewellis'>
159
- <img src='https://github.com/matthewellis.png?size=140'>
157
+ <td id='maksym-grebenets'>
158
+ <a href='https://github.com/mgrebenets'>
159
+ <img src='https://github.com/mgrebenets.png?size=140'>
160
160
  </a>
161
- <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
161
+ <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
162
162
  </td>
163
163
  </tr>
164
164
  <tr>
165
+ <td id='josh-holtz'>
166
+ <a href='https://github.com/joshdholtz'>
167
+ <img src='https://github.com/joshdholtz.png?size=140'>
168
+ </a>
169
+ <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
170
+ </td>
165
171
  <td id='luka-mirosevic'>
166
172
  <a href='https://github.com/lmirosevic'>
167
173
  <img src='https://github.com/lmirosevic.png?size=140'>
168
174
  </a>
169
175
  <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
170
176
  </td>
171
- <td id='jorge-revuelta-h'>
172
- <a href='https://github.com/minuscorp'>
173
- <img src='https://github.com/minuscorp.png?size=140'>
174
- </a>
175
- <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
176
- </td>
177
177
  </table>
178
178
 
179
179
  Special thanks to all [contributors](https://github.com/fastlane/fastlane/graphs/contributors) for extending and improving _fastlane_.
@@ -97,7 +97,7 @@ module Deliver
97
97
  matching = {
98
98
  ScreenSize::IOS_35 => "iphone35",
99
99
  ScreenSize::IOS_40 => "iphone4",
100
- ScreenSize::IOS_47 => "iphone6", # also 7 and 8
100
+ ScreenSize::IOS_47 => "iphone6", # also 7 & 8
101
101
  ScreenSize::IOS_55 => "iphone6Plus", # also 7 Plus & 8 Plus
102
102
  ScreenSize::IOS_58 => "iphone58",
103
103
  ScreenSize::IOS_65 => "iphone65",
@@ -129,8 +129,8 @@ module Deliver
129
129
  matching = {
130
130
  ScreenSize::IOS_35 => "iPhone 4",
131
131
  ScreenSize::IOS_40 => "iPhone 5",
132
- ScreenSize::IOS_47 => "iPhone 6", # and 7
133
- ScreenSize::IOS_55 => "iPhone 6 Plus", # and 7 Plus
132
+ ScreenSize::IOS_47 => "iPhone 6", # also 7 & 8
133
+ ScreenSize::IOS_55 => "iPhone 6 Plus", # also 7 Plus & 8 Plus
134
134
  ScreenSize::IOS_58 => "iPhone XS",
135
135
  ScreenSize::IOS_61 => "iPhone XR",
136
136
  ScreenSize::IOS_65 => "iPhone XS Max",
@@ -72,7 +72,7 @@
72
72
  <p id="footnote">
73
73
  This is a beta version and is not meant to share with the public.
74
74
  </p>
75
- <img src="https://s3-eu-west-1.amazonaws.com/fastlane.tools/fastlane_medium.png" id="fastlaneLogo" />
75
+ <img src="https://fastlane.tools/assets/img/fastlane_icon.png" id="fastlaneLogo" />
76
76
  </body>
77
77
 
78
78
  <script type='text/javascript'>
@@ -52,7 +52,25 @@ Ensure that the following permissions exist in your **src/debug/AndroidManifest.
52
52
 
53
53
  ##### Configuring your <a href="#ui-tests">UI Tests</a> for Screenshots
54
54
 
55
- 1. Add `@ClassRule public static final LocaleTestRule localeTestRule = new LocaleTestRule();` to your tests class to handle automatic switching of locales
55
+ 1. Add `LocaleTestRule` to your tests class to handle automatic switching of locales.
56
+ If you're using Java use:
57
+ ```java
58
+ @ClassRule
59
+ public static final LocaleTestRule localeTestRule = new LocaleTestRule();
60
+ ```
61
+ If you're using Kotlin use:
62
+ ```kotlin
63
+ @Rule @JvmField
64
+ val localeTestRule = LocaleTestRule()
65
+ ```
66
+ Important is the `@JvmField` annotation. It won't work like that:
67
+ ```kotlin
68
+ companion object {
69
+ @get:ClassRule
70
+ val localeTestRule = LocaleTestRule()
71
+ }
72
+ ```
73
+
56
74
  2. To capture screenshots, add the following to your tests `Screengrab.screenshot("name_of_screenshot_here");` on the appropriate screens
57
75
 
58
76
  # Generating Screenshots with Screengrab
@@ -137,6 +155,7 @@ fastlane action screengrab
137
155
  Check out [Testing UI for a Single App](http://developer.android.com/training/testing/ui-testing/espresso-testing.html) for an introduction to using Espresso for UI testing.
138
156
 
139
157
  ##### Example UI Test Class (Using JUnit4)
158
+ Java:
140
159
  ```java
141
160
  @RunWith(JUnit4.class)
142
161
  public class JUnit4StyleTests {
@@ -157,6 +176,28 @@ public class JUnit4StyleTests {
157
176
  }
158
177
 
159
178
  ```
179
+ Kotlin:
180
+ ```kotlin
181
+ @RunWith(JUnit4.class)
182
+ class JUnit4StyleTests {
183
+ @get:Rule
184
+ var activityRule = ActivityTestRule(MainActivity::class.java)
185
+
186
+ @Rule @JvmField
187
+ val localeTestRule = LocaleTestRule()
188
+
189
+ @Test
190
+ fun testTakeScreenshot() {
191
+ Screengrab.screenshot("before_button_click")
192
+
193
+ onView(withId(R.id.fab)).perform(click())
194
+
195
+ Screengrab.screenshot("after_button_click")
196
+ }
197
+ }
198
+
199
+ ```
200
+
160
201
  There is an [example project](https://github.com/fastlane/fastlane/tree/master/screengrab/example/src/androidTest/java/tools/fastlane/localetester) showing how to use use JUnit 3 or 4 and Espresso with the screengrab Java library to capture screenshots during a UI test run.
161
202
 
162
203
  Using JUnit 4 is preferable because of its ability to perform actions before and after the entire test class is run. This means you will change the device's locale far fewer times when compared with JUnit 3 running those commands before and after each test method.
@@ -290,4 +331,3 @@ Sit back and enjoy your new screenshots!
290
331
  Note: while this could also be done by creating a new build variant (i.e. debug, release and creating a new one called screengrab), [Android only allows one build type to be tested](http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Testing) which defaults to debug. That's why we use product flavors.
291
332
 
292
333
  </details>
293
-
@@ -25,7 +25,7 @@ module Fastlane
25
25
 
26
26
  message = options[:message]
27
27
  if (message_format == "html") && (options[:include_html_header] == true)
28
- message = "<table><tr><td><img src='https://s3-eu-west-1.amazonaws.com/fastlane.tools/fastlane.png' width='50' height='50'></td><td>#{message[0..9999]}</td></tr></table>"
28
+ message = "<table><tr><td><img src='https://fastlane.tools/assets/img/fastlane_icon.png' width='50' height='50'></td><td>#{message[0..9999]}</td></tr></table>"
29
29
  end
30
30
 
31
31
  if api_version.to_i == 1
@@ -105,7 +105,7 @@ module Fastlane
105
105
  FastlaneCore::ConfigItem.new(key: :icon_url,
106
106
  env_name: "FL_SLACK_ICON_URL",
107
107
  description: "Overrides the webhook's image property if use_webhook_configured_username_and_icon is false",
108
- default_value: "https://s3-eu-west-1.amazonaws.com/fastlane.tools/fastlane.png",
108
+ default_value: "https://fastlane.tools/assets/img/fastlane_icon.png",
109
109
  is_string: true,
110
110
  optional: true),
111
111
  FastlaneCore::ConfigItem.new(key: :payload,
@@ -1,7 +1,7 @@
1
1
  module Fastlane
2
2
  module Actions
3
3
  class SlatherAction < Action
4
- # https://github.com/SlatherOrg/slather/blob/v2.4.2/lib/slather/command/coverage_command.rb
4
+ # https://github.com/SlatherOrg/slather/blob/v2.4.9/lib/slather/command/coverage_command.rb
5
5
  ARGS_MAP = {
6
6
  travis: '--travis',
7
7
  travis_pro: '--travispro',
@@ -14,6 +14,7 @@ module Fastlane
14
14
  simple_output: '--simple-output',
15
15
  gutter_json: '--gutter-json',
16
16
  cobertura_xml: '--cobertura-xml',
17
+ sonarqube_xml: '--sonarqube-xml',
17
18
  llvm_cov: '--llvm-cov',
18
19
  html: '--html',
19
20
  show: '--show',
@@ -213,6 +214,12 @@ module Fastlane
213
214
  is_string: false,
214
215
  type: Boolean,
215
216
  optional: true),
217
+ FastlaneCore::ConfigItem.new(key: :sonarqube_xml,
218
+ env_name: "FL_SLATHER_SONARQUBE_XML_ENABLED",
219
+ description: "Tell slather that it should output results as SonarQube Generic XML format",
220
+ is_string: false,
221
+ type: Boolean,
222
+ optional: true),
216
223
  FastlaneCore::ConfigItem.new(key: :llvm_cov,
217
224
  env_name: "FL_SLATHER_LLVM_COV_ENABLED",
218
225
  description: "Tell slather that it should output results as llvm-cov show format",
@@ -119,7 +119,7 @@ module Fastlane
119
119
  end
120
120
 
121
121
  def self.find_gsp_path(params)
122
- return if params[:api_token]
122
+ return if params[:api_token] && params[:gsp_path].nil?
123
123
 
124
124
  if params[:gsp_path].to_s.length > 0
125
125
  params[:gsp_path] = File.expand_path(params[:gsp_path])
@@ -95,6 +95,8 @@ module Fastlane
95
95
  return "Int"
96
96
  elsif type_override == Boolean
97
97
  return "Bool"
98
+ elsif type_override == Float
99
+ return "Float"
98
100
  elsif type_override == :string_callback
99
101
  return "((String) -> Void)"
100
102
  else
@@ -130,8 +132,19 @@ module Fastlane
130
132
  type = "[String]"
131
133
  elsif default_value.kind_of?(Hash)
132
134
  type = "[String : Any]"
135
+ # Altough we can have a default value of Integer type, if param_type_override overridden that value, respect it.
133
136
  elsif default_value.kind_of?(Integer)
134
- type = "Int"
137
+ if type == "Double" || type == "Float"
138
+ begin
139
+ # If we're not able to instantiate
140
+ _ = BigDecimal(default_value)
141
+ rescue
142
+ # We set it as a Int
143
+ type = "Int"
144
+ end
145
+ else
146
+ type = "Int"
147
+ end
135
148
  end
136
149
  return "#{type}#{optional_specifier}"
137
150
  end
@@ -149,7 +162,7 @@ module Fastlane
149
162
  # we can't handle default values for Hashes, yet
150
163
  # see method swift_default_implementations for similar behavior
151
164
  default_value = "[:]"
152
- elsif type != "Bool" && type != "[String]" && type != "Int" && type != "((String) -> Void)"
165
+ elsif type != "Bool" && type != "[String]" && type != "Int" && type != "((String) -> Void)" && type != "Float" && type != "Double"
153
166
  default_value = "\"#{default_value}\""
154
167
  end
155
168
  end
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.148.1'.freeze
2
+ VERSION = '2.149.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.148.1
21
+ // Generated with fastlane 2.149.0
@@ -894,7 +894,7 @@ func buildAndroidApp(task: String? = nil,
894
894
  - skipArchive: After building, don't archive, effectively not including -archivePath param
895
895
  - skipCodesigning: Build without codesigning
896
896
  - catalystPlatform: Platform to build when using a Catalyst enabled app. Valid values are: ios, macos
897
- - installerCertName: Full name of 3rd Party Mac Developer Installer or Deveoper ID Installer certificate. Example: `3rd Party Mac Developer Installer: Your Company (ABC1234XWYZ)`
897
+ - installerCertName: Full name of 3rd Party Mac Developer Installer or Developer ID Installer certificate. Example: `3rd Party Mac Developer Installer: Your Company (ABC1234XWYZ)`
898
898
  - buildPath: The directory in which the archive should be stored in
899
899
  - archivePath: The path to the created archive
900
900
  - derivedDataPath: The directory where built products and other derived data will go
@@ -1171,7 +1171,7 @@ func buildIosApp(workspace: String? = nil,
1171
1171
  - skipBuildArchive: Export ipa from previously built xcarchive. Uses archive_path as source
1172
1172
  - skipArchive: After building, don't archive, effectively not including -archivePath param
1173
1173
  - skipCodesigning: Build without codesigning
1174
- - installerCertName: Full name of 3rd Party Mac Developer Installer or Deveoper ID Installer certificate. Example: `3rd Party Mac Developer Installer: Your Company (ABC1234XWYZ)`
1174
+ - installerCertName: Full name of 3rd Party Mac Developer Installer or Developer ID Installer certificate. Example: `3rd Party Mac Developer Installer: Your Company (ABC1234XWYZ)`
1175
1175
  - buildPath: The directory in which the archive should be stored in
1176
1176
  - archivePath: The path to the created archive
1177
1177
  - derivedDataPath: The directory where built products and other derived data will go
@@ -1448,6 +1448,7 @@ func captureAndroidScreenshots(androidHome: String? = nil,
1448
1448
  - appIdentifier: The bundle identifier of the app to uninstall (only needed when enabling reinstall_app)
1449
1449
  - addPhotos: A list of photos that should be added to the simulator before running the application
1450
1450
  - addVideos: A list of videos that should be added to the simulator before running the application
1451
+ - htmlTemplate: A path to screenshots.html template
1451
1452
  - buildlogPath: The directory where to store the build log
1452
1453
  - clean: Should the project be cleaned before building it?
1453
1454
  - testWithoutBuilding: Test without building, requires a derived data path
@@ -1467,6 +1468,7 @@ func captureAndroidScreenshots(androidHome: String? = nil,
1467
1468
  - testplan: The testplan associated with the scheme that should be used for testing
1468
1469
  - onlyTesting: Array of strings matching Test Bundle/Test Suite/Test Cases to run
1469
1470
  - skipTesting: Array of strings matching Test Bundle/Test Suite/Test Cases to skip
1471
+ - disableXcpretty: Disable xcpretty formatting of build
1470
1472
  */
1471
1473
  func captureIosScreenshots(workspace: String? = nil,
1472
1474
  project: String? = nil,
@@ -1489,6 +1491,7 @@ func captureIosScreenshots(workspace: String? = nil,
1489
1491
  appIdentifier: String? = nil,
1490
1492
  addPhotos: [String]? = nil,
1491
1493
  addVideos: [String]? = nil,
1494
+ htmlTemplate: String = "/Users/josh/Projects/fastlane/fastlane/snapshot/lib/snapshot/page.html.erb",
1492
1495
  buildlogPath: String = "~/Library/Logs/snapshot",
1493
1496
  clean: Bool = false,
1494
1497
  testWithoutBuilding: Bool? = nil,
@@ -1507,7 +1510,8 @@ func captureIosScreenshots(workspace: String? = nil,
1507
1510
  clonedSourcePackagesPath: String? = nil,
1508
1511
  testplan: String? = nil,
1509
1512
  onlyTesting: Any? = nil,
1510
- skipTesting: Any? = nil) {
1513
+ skipTesting: Any? = nil,
1514
+ disableXcpretty: Bool? = nil) {
1511
1515
  let command = RubyCommand(commandID: "", methodName: "capture_ios_screenshots", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
1512
1516
  RubyCommand.Argument(name: "project", value: project),
1513
1517
  RubyCommand.Argument(name: "xcargs", value: xcargs),
@@ -1529,6 +1533,7 @@ func captureIosScreenshots(workspace: String? = nil,
1529
1533
  RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
1530
1534
  RubyCommand.Argument(name: "add_photos", value: addPhotos),
1531
1535
  RubyCommand.Argument(name: "add_videos", value: addVideos),
1536
+ RubyCommand.Argument(name: "html_template", value: htmlTemplate),
1532
1537
  RubyCommand.Argument(name: "buildlog_path", value: buildlogPath),
1533
1538
  RubyCommand.Argument(name: "clean", value: clean),
1534
1539
  RubyCommand.Argument(name: "test_without_building", value: testWithoutBuilding),
@@ -1547,7 +1552,8 @@ func captureIosScreenshots(workspace: String? = nil,
1547
1552
  RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath),
1548
1553
  RubyCommand.Argument(name: "testplan", value: testplan),
1549
1554
  RubyCommand.Argument(name: "only_testing", value: onlyTesting),
1550
- RubyCommand.Argument(name: "skip_testing", value: skipTesting)])
1555
+ RubyCommand.Argument(name: "skip_testing", value: skipTesting),
1556
+ RubyCommand.Argument(name: "disable_xcpretty", value: disableXcpretty)])
1551
1557
  _ = runner.executeCommand(command)
1552
1558
  }
1553
1559
 
@@ -1576,6 +1582,7 @@ func captureIosScreenshots(workspace: String? = nil,
1576
1582
  - appIdentifier: The bundle identifier of the app to uninstall (only needed when enabling reinstall_app)
1577
1583
  - addPhotos: A list of photos that should be added to the simulator before running the application
1578
1584
  - addVideos: A list of videos that should be added to the simulator before running the application
1585
+ - htmlTemplate: A path to screenshots.html template
1579
1586
  - buildlogPath: The directory where to store the build log
1580
1587
  - clean: Should the project be cleaned before building it?
1581
1588
  - testWithoutBuilding: Test without building, requires a derived data path
@@ -1595,6 +1602,7 @@ func captureIosScreenshots(workspace: String? = nil,
1595
1602
  - testplan: The testplan associated with the scheme that should be used for testing
1596
1603
  - onlyTesting: Array of strings matching Test Bundle/Test Suite/Test Cases to run
1597
1604
  - skipTesting: Array of strings matching Test Bundle/Test Suite/Test Cases to skip
1605
+ - disableXcpretty: Disable xcpretty formatting of build
1598
1606
  */
1599
1607
  func captureScreenshots(workspace: String? = nil,
1600
1608
  project: String? = nil,
@@ -1617,6 +1625,7 @@ func captureScreenshots(workspace: String? = nil,
1617
1625
  appIdentifier: String? = nil,
1618
1626
  addPhotos: [String]? = nil,
1619
1627
  addVideos: [String]? = nil,
1628
+ htmlTemplate: String = "/Users/josh/Projects/fastlane/fastlane/snapshot/lib/snapshot/page.html.erb",
1620
1629
  buildlogPath: String = "~/Library/Logs/snapshot",
1621
1630
  clean: Bool = false,
1622
1631
  testWithoutBuilding: Bool? = nil,
@@ -1635,7 +1644,8 @@ func captureScreenshots(workspace: String? = nil,
1635
1644
  clonedSourcePackagesPath: String? = nil,
1636
1645
  testplan: String? = nil,
1637
1646
  onlyTesting: Any? = nil,
1638
- skipTesting: Any? = nil) {
1647
+ skipTesting: Any? = nil,
1648
+ disableXcpretty: Bool? = nil) {
1639
1649
  let command = RubyCommand(commandID: "", methodName: "capture_screenshots", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
1640
1650
  RubyCommand.Argument(name: "project", value: project),
1641
1651
  RubyCommand.Argument(name: "xcargs", value: xcargs),
@@ -1657,6 +1667,7 @@ func captureScreenshots(workspace: String? = nil,
1657
1667
  RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
1658
1668
  RubyCommand.Argument(name: "add_photos", value: addPhotos),
1659
1669
  RubyCommand.Argument(name: "add_videos", value: addVideos),
1670
+ RubyCommand.Argument(name: "html_template", value: htmlTemplate),
1660
1671
  RubyCommand.Argument(name: "buildlog_path", value: buildlogPath),
1661
1672
  RubyCommand.Argument(name: "clean", value: clean),
1662
1673
  RubyCommand.Argument(name: "test_without_building", value: testWithoutBuilding),
@@ -1675,7 +1686,8 @@ func captureScreenshots(workspace: String? = nil,
1675
1686
  RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath),
1676
1687
  RubyCommand.Argument(name: "testplan", value: testplan),
1677
1688
  RubyCommand.Argument(name: "only_testing", value: onlyTesting),
1678
- RubyCommand.Argument(name: "skip_testing", value: skipTesting)])
1689
+ RubyCommand.Argument(name: "skip_testing", value: skipTesting),
1690
+ RubyCommand.Argument(name: "disable_xcpretty", value: disableXcpretty)])
1679
1691
  _ = runner.executeCommand(command)
1680
1692
  }
1681
1693
 
@@ -3735,7 +3747,7 @@ func gradle(task: String? = nil,
3735
3747
  - skipArchive: After building, don't archive, effectively not including -archivePath param
3736
3748
  - skipCodesigning: Build without codesigning
3737
3749
  - catalystPlatform: Platform to build when using a Catalyst enabled app. Valid values are: ios, macos
3738
- - installerCertName: Full name of 3rd Party Mac Developer Installer or Deveoper ID Installer certificate. Example: `3rd Party Mac Developer Installer: Your Company (ABC1234XWYZ)`
3750
+ - installerCertName: Full name of 3rd Party Mac Developer Installer or Developer ID Installer certificate. Example: `3rd Party Mac Developer Installer: Your Company (ABC1234XWYZ)`
3739
3751
  - buildPath: The directory in which the archive should be stored in
3740
3752
  - archivePath: The path to the created archive
3741
3753
  - derivedDataPath: The directory where built products and other derived data will go
@@ -5801,7 +5813,7 @@ func runTests(workspace: String? = nil,
5801
5813
  slackMessage: String? = nil,
5802
5814
  slackUseWebhookConfiguredUsernameAndIcon: Bool = false,
5803
5815
  slackUsername: String = "fastlane",
5804
- slackIconUrl: String = "https://s3-eu-west-1.amazonaws.com/fastlane.tools/fastlane.png",
5816
+ slackIconUrl: String = "https://fastlane.tools/assets/img/fastlane_icon.png",
5805
5817
  skipSlack: Bool = false,
5806
5818
  slackOnlyOnFailure: Bool = false,
5807
5819
  destination: Any? = nil,
@@ -6626,7 +6638,7 @@ func slack(message: String? = nil,
6626
6638
  useWebhookConfiguredUsernameAndIcon: Bool = false,
6627
6639
  slackUrl: String,
6628
6640
  username: String = "fastlane",
6629
- iconUrl: String = "https://s3-eu-west-1.amazonaws.com/fastlane.tools/fastlane.png",
6641
+ iconUrl: String = "https://fastlane.tools/assets/img/fastlane_icon.png",
6630
6642
  payload: [String : Any] = [:],
6631
6643
  defaultPayloads: [String]? = nil,
6632
6644
  attachmentProperties: [String : Any] = [:],
@@ -6707,6 +6719,7 @@ func slackTrainStart(distance: Int = 5,
6707
6719
  - simpleOutput: Tell slather that it should output results to the terminal
6708
6720
  - gutterJson: Tell slather that it should output results as Gutter JSON format
6709
6721
  - coberturaXml: Tell slather that it should output results as Cobertura XML format
6722
+ - sonarqubeXml: Tell slather that it should output results as SonarQube Generic XML format
6710
6723
  - llvmCov: Tell slather that it should output results as llvm-cov show format
6711
6724
  - html: Tell slather that it should output results as static HTML pages
6712
6725
  - show: Tell slather that it should open static html pages automatically
@@ -6740,6 +6753,7 @@ func slather(buildDirectory: String? = nil,
6740
6753
  simpleOutput: Bool? = nil,
6741
6754
  gutterJson: Bool? = nil,
6742
6755
  coberturaXml: Bool? = nil,
6756
+ sonarqubeXml: Bool? = nil,
6743
6757
  llvmCov: Any? = nil,
6744
6758
  html: Bool? = nil,
6745
6759
  show: Bool = false,
@@ -6769,6 +6783,7 @@ func slather(buildDirectory: String? = nil,
6769
6783
  RubyCommand.Argument(name: "simple_output", value: simpleOutput),
6770
6784
  RubyCommand.Argument(name: "gutter_json", value: gutterJson),
6771
6785
  RubyCommand.Argument(name: "cobertura_xml", value: coberturaXml),
6786
+ RubyCommand.Argument(name: "sonarqube_xml", value: sonarqubeXml),
6772
6787
  RubyCommand.Argument(name: "llvm_cov", value: llvmCov),
6773
6788
  RubyCommand.Argument(name: "html", value: html),
6774
6789
  RubyCommand.Argument(name: "show", value: show),
@@ -6810,6 +6825,7 @@ func slather(buildDirectory: String? = nil,
6810
6825
  - appIdentifier: The bundle identifier of the app to uninstall (only needed when enabling reinstall_app)
6811
6826
  - addPhotos: A list of photos that should be added to the simulator before running the application
6812
6827
  - addVideos: A list of videos that should be added to the simulator before running the application
6828
+ - htmlTemplate: A path to screenshots.html template
6813
6829
  - buildlogPath: The directory where to store the build log
6814
6830
  - clean: Should the project be cleaned before building it?
6815
6831
  - testWithoutBuilding: Test without building, requires a derived data path
@@ -6829,6 +6845,7 @@ func slather(buildDirectory: String? = nil,
6829
6845
  - testplan: The testplan associated with the scheme that should be used for testing
6830
6846
  - onlyTesting: Array of strings matching Test Bundle/Test Suite/Test Cases to run
6831
6847
  - skipTesting: Array of strings matching Test Bundle/Test Suite/Test Cases to skip
6848
+ - disableXcpretty: Disable xcpretty formatting of build
6832
6849
  */
6833
6850
  func snapshot(workspace: Any? = snapshotfile.workspace,
6834
6851
  project: Any? = snapshotfile.project,
@@ -6851,6 +6868,7 @@ func snapshot(workspace: Any? = snapshotfile.workspace,
6851
6868
  appIdentifier: Any? = snapshotfile.appIdentifier,
6852
6869
  addPhotos: [String]? = snapshotfile.addPhotos,
6853
6870
  addVideos: [String]? = snapshotfile.addVideos,
6871
+ htmlTemplate: Any = snapshotfile.htmlTemplate,
6854
6872
  buildlogPath: Any = snapshotfile.buildlogPath,
6855
6873
  clean: Bool = snapshotfile.clean,
6856
6874
  testWithoutBuilding: Bool? = snapshotfile.testWithoutBuilding,
@@ -6869,7 +6887,8 @@ func snapshot(workspace: Any? = snapshotfile.workspace,
6869
6887
  clonedSourcePackagesPath: Any? = snapshotfile.clonedSourcePackagesPath,
6870
6888
  testplan: Any? = snapshotfile.testplan,
6871
6889
  onlyTesting: Any? = snapshotfile.onlyTesting,
6872
- skipTesting: Any? = snapshotfile.skipTesting) {
6890
+ skipTesting: Any? = snapshotfile.skipTesting,
6891
+ disableXcpretty: Bool? = snapshotfile.disableXcpretty) {
6873
6892
  let command = RubyCommand(commandID: "", methodName: "snapshot", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
6874
6893
  RubyCommand.Argument(name: "project", value: project),
6875
6894
  RubyCommand.Argument(name: "xcargs", value: xcargs),
@@ -6891,6 +6910,7 @@ func snapshot(workspace: Any? = snapshotfile.workspace,
6891
6910
  RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
6892
6911
  RubyCommand.Argument(name: "add_photos", value: addPhotos),
6893
6912
  RubyCommand.Argument(name: "add_videos", value: addVideos),
6913
+ RubyCommand.Argument(name: "html_template", value: htmlTemplate),
6894
6914
  RubyCommand.Argument(name: "buildlog_path", value: buildlogPath),
6895
6915
  RubyCommand.Argument(name: "clean", value: clean),
6896
6916
  RubyCommand.Argument(name: "test_without_building", value: testWithoutBuilding),
@@ -6909,7 +6929,8 @@ func snapshot(workspace: Any? = snapshotfile.workspace,
6909
6929
  RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath),
6910
6930
  RubyCommand.Argument(name: "testplan", value: testplan),
6911
6931
  RubyCommand.Argument(name: "only_testing", value: onlyTesting),
6912
- RubyCommand.Argument(name: "skip_testing", value: skipTesting)])
6932
+ RubyCommand.Argument(name: "skip_testing", value: skipTesting),
6933
+ RubyCommand.Argument(name: "disable_xcpretty", value: disableXcpretty)])
6913
6934
  _ = runner.executeCommand(command)
6914
6935
  }
6915
6936
 
@@ -8742,7 +8763,7 @@ func xcov(workspace: String? = nil,
8742
8763
  htmlReport: Bool = true,
8743
8764
  markdownReport: Bool = false,
8744
8765
  jsonReport: Bool = false,
8745
- minimumCoveragePercentage: Int = 0,
8766
+ minimumCoveragePercentage: Float = 0,
8746
8767
  slackUrl: String? = nil,
8747
8768
  slackChannel: String? = nil,
8748
8769
  skipSlack: Bool = false,
@@ -8758,7 +8779,7 @@ func xcov(workspace: String? = nil,
8758
8779
  coverallsServiceJobId: String? = nil,
8759
8780
  coverallsRepoToken: String? = nil,
8760
8781
  xcconfig: String? = nil,
8761
- ideFoundationPath: String = "/Applications/Xcode-11.4.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
8782
+ ideFoundationPath: String = "/Applications/Xcode-11.5.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
8762
8783
  legacySupport: Bool = false) {
8763
8784
  let command = RubyCommand(commandID: "", methodName: "xcov", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
8764
8785
  RubyCommand.Argument(name: "project", value: project),
@@ -8903,4 +8924,4 @@ let snapshotfile: Snapshotfile = Snapshotfile()
8903
8924
 
8904
8925
  // Please don't remove the lines below
8905
8926
  // They are used to detect outdated files
8906
- // FastlaneRunnerAPIVersion [0.9.76]
8927
+ // FastlaneRunnerAPIVersion [0.9.77]
@@ -18,4 +18,4 @@ class Gymfile: GymfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.148.1
21
+ // Generated with fastlane 2.149.0
@@ -60,7 +60,7 @@ protocol GymfileProtocol: class {
60
60
  /// Platform to build when using a Catalyst enabled app. Valid values are: ios, macos
61
61
  var catalystPlatform: String? { get }
62
62
 
63
- /// Full name of 3rd Party Mac Developer Installer or Deveoper ID Installer certificate. Example: `3rd Party Mac Developer Installer: Your Company (ABC1234XWYZ)`
63
+ /// Full name of 3rd Party Mac Developer Installer or Developer ID Installer certificate. Example: `3rd Party Mac Developer Installer: Your Company (ABC1234XWYZ)`
64
64
  var installerCertName: String? { get }
65
65
 
66
66
  /// The directory in which the archive should be stored in
@@ -18,4 +18,4 @@ class Matchfile: MatchfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.148.1
21
+ // Generated with fastlane 2.149.0
@@ -18,4 +18,4 @@ class Precheckfile: PrecheckfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.148.1
21
+ // Generated with fastlane 2.149.0
@@ -18,4 +18,4 @@ class Scanfile: ScanfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.148.1
21
+ // Generated with fastlane 2.149.0
@@ -246,7 +246,7 @@ extension ScanfileProtocol {
246
246
  var slackMessage: String? { return nil }
247
247
  var slackUseWebhookConfiguredUsernameAndIcon: Bool { return false }
248
248
  var slackUsername: String { return "fastlane" }
249
- var slackIconUrl: String { return "https://s3-eu-west-1.amazonaws.com/fastlane.tools/fastlane.png" }
249
+ var slackIconUrl: String { return "https://fastlane.tools/assets/img/fastlane_icon.png" }
250
250
  var skipSlack: Bool { return false }
251
251
  var slackOnlyOnFailure: Bool { return false }
252
252
  var destination: String? { return nil }
@@ -258,4 +258,4 @@ extension ScanfileProtocol {
258
258
 
259
259
  // Please don't remove the lines below
260
260
  // They are used to detect outdated files
261
- // FastlaneRunnerAPIVersion [0.9.29]
261
+ // FastlaneRunnerAPIVersion [0.9.30]
@@ -18,4 +18,4 @@ class Screengrabfile: ScreengrabfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.148.1
21
+ // Generated with fastlane 2.149.0
@@ -18,4 +18,4 @@ class Snapshotfile: SnapshotfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.148.1
21
+ // Generated with fastlane 2.149.0
@@ -63,6 +63,9 @@ protocol SnapshotfileProtocol: class {
63
63
  /// A list of videos that should be added to the simulator before running the application
64
64
  var addVideos: [String]? { get }
65
65
 
66
+ /// A path to screenshots.html template
67
+ var htmlTemplate: String { get }
68
+
66
69
  /// The directory where to store the build log
67
70
  var buildlogPath: String { get }
68
71
 
@@ -119,6 +122,9 @@ protocol SnapshotfileProtocol: class {
119
122
 
120
123
  /// Array of strings matching Test Bundle/Test Suite/Test Cases to skip
121
124
  var skipTesting: String? { get }
125
+
126
+ /// Disable xcpretty formatting of build
127
+ var disableXcpretty: Bool? { get }
122
128
  }
123
129
 
124
130
  extension SnapshotfileProtocol {
@@ -143,6 +149,7 @@ extension SnapshotfileProtocol {
143
149
  var appIdentifier: String? { return nil }
144
150
  var addPhotos: [String]? { return nil }
145
151
  var addVideos: [String]? { return nil }
152
+ var htmlTemplate: String { return "/Users/josh/Projects/fastlane/fastlane/snapshot/lib/snapshot/page.html.erb" }
146
153
  var buildlogPath: String { return "~/Library/Logs/snapshot" }
147
154
  var clean: Bool { return false }
148
155
  var testWithoutBuilding: Bool? { return nil }
@@ -162,8 +169,9 @@ extension SnapshotfileProtocol {
162
169
  var testplan: String? { return nil }
163
170
  var onlyTesting: String? { return nil }
164
171
  var skipTesting: String? { return nil }
172
+ var disableXcpretty: Bool? { return nil }
165
173
  }
166
174
 
167
175
  // Please don't remove the lines below
168
176
  // They are used to detect outdated files
169
- // FastlaneRunnerAPIVersion [0.9.9]
177
+ // FastlaneRunnerAPIVersion [0.9.10]
@@ -321,6 +321,7 @@ module FastlaneCore
321
321
  proj << "-project #{options[:project].shellescape}" if options[:project]
322
322
  proj << "-configuration #{options[:configuration].shellescape}" if options[:configuration]
323
323
  proj << "-xcconfig #{options[:xcconfig].shellescape}" if options[:xcconfig]
324
+ proj << "-derivedDataPath #{options[:derived_data_path].shellescape}" if options[:derived_data_path]
324
325
 
325
326
  if FastlaneCore::Helper.xcode_at_least?('11.0') && options[:cloned_source_packages_path]
326
327
  proj << "-clonedSourcePackagesDirPath #{options[:cloned_source_packages_path].shellescape}"
@@ -155,7 +155,7 @@ module Gym
155
155
  end),
156
156
  FastlaneCore::ConfigItem.new(key: :installer_cert_name,
157
157
  env_name: "GYM_INSTALLER_CERT_NAME",
158
- description: "Full name of 3rd Party Mac Developer Installer or Deveoper ID Installer certificate. Example: `3rd Party Mac Developer Installer: Your Company (ABC1234XWYZ)`",
158
+ description: "Full name of 3rd Party Mac Developer Installer or Developer ID Installer certificate. Example: `3rd Party Mac Developer Installer: Your Company (ABC1234XWYZ)`",
159
159
  type: String,
160
160
  optional: true),
161
161
  # Very optional
@@ -27,6 +27,8 @@ module Match
27
27
 
28
28
  update_optional_values_depending_on_storage_type(params)
29
29
 
30
+ spaceship_login
31
+
30
32
  self.storage = Storage.for_mode(params[:storage_mode], {
31
33
  git_url: params[:git_url],
32
34
  shallow_clone: params[:shallow_clone],
@@ -41,7 +43,8 @@ module Match
41
43
  s3_region: params[:s3_region].to_s,
42
44
  s3_access_key: params[:s3_access_key].to_s,
43
45
  s3_secret_access_key: params[:s3_secret_access_key].to_s,
44
- s3_bucket: params[:s3_bucket].to_s
46
+ s3_bucket: params[:s3_bucket].to_s,
47
+ team_id: params[:team_id] || Spaceship.client.team_id
45
48
  })
46
49
  self.storage.download
47
50
 
@@ -93,17 +96,7 @@ module Match
93
96
  end
94
97
  end
95
98
 
96
- # Collect all the certs/profiles
97
- def prepare_list
98
- UI.message("Fetching certificates and profiles...")
99
- cert_type = Match.cert_type_sym(type)
100
- cert_types = [cert_type]
101
-
102
- prov_types = []
103
- prov_types = [:development] if cert_type == :development
104
- prov_types = [:appstore, :adhoc, :developer_id] if cert_type == :distribution
105
- prov_types = [:enterprise] if cert_type == :enterprise
106
-
99
+ def spaceship_login
107
100
  Spaceship.login(params[:username])
108
101
  Spaceship.select_team(team_id: params[:team_id], team_name: params[:team_name])
109
102
 
@@ -116,6 +109,18 @@ module Match
116
109
 
117
110
  UI.user_error!("Enterprise account nuke cancelled") unless UI.confirm("Do you really want to nuke your Enterprise account?")
118
111
  end
112
+ end
113
+
114
+ # Collect all the certs/profiles
115
+ def prepare_list
116
+ UI.message("Fetching certificates and profiles...")
117
+ cert_type = Match.cert_type_sym(type)
118
+ cert_types = [cert_type]
119
+
120
+ prov_types = []
121
+ prov_types = [:development] if cert_type == :development
122
+ prov_types = [:appstore, :adhoc, :developer_id] if cert_type == :distribution
123
+ prov_types = [:enterprise] if cert_type == :enterprise
119
124
 
120
125
  # Get all iOS and macOS profile
121
126
  self.profiles = []
@@ -141,15 +146,15 @@ module Match
141
146
  certs = []
142
147
  keys = []
143
148
  cert_types.each do |ct|
144
- certs += Dir[File.join(self.storage.working_directory, "**", ct.to_s, "*.cer")]
145
- keys += Dir[File.join(self.storage.working_directory, "**", ct.to_s, "*.p12")]
149
+ certs += self.storage.list_files(file_name: ct.to_s, file_ext: "cer")
150
+ keys += self.storage.list_files(file_name: ct.to_s, file_ext: "p12")
146
151
  end
147
152
 
148
153
  # Finds all the iOS and macOS profofiles in the file storage
149
154
  profiles = []
150
155
  prov_types.each do |prov_type|
151
- profiles += Dir[File.join(self.storage.working_directory, "**", prov_type.to_s, "*.mobileprovision")]
152
- profiles += Dir[File.join(self.storage.working_directory, "**", prov_type.to_s, "*.provisionprofile")]
156
+ profiles += self.storage.list_files(file_name: prov_type.to_s, file_ext: "mobileprovision")
157
+ profiles += self.storage.list_files(file_name: prov_type.to_s, file_ext: "provisionprofile")
153
158
  end
154
159
 
155
160
  self.files = certs + keys + profiles
@@ -152,6 +152,10 @@ module Match
152
152
  return "git_url(\"#{url}\")"
153
153
  end
154
154
 
155
+ def list_files(file_name: "", file_ext: "")
156
+ Dir[File.join(working_directory, "**", file_name, "*.#{file_ext}")]
157
+ end
158
+
155
159
  private
156
160
 
157
161
  # Create and checkout an specific branch in the git repo
@@ -180,6 +180,10 @@ module Match
180
180
  false
181
181
  end
182
182
 
183
+ def list_files(file_name: "", file_ext: "")
184
+ Dir[File.join(working_directory, self.team_id, "**", file_name, "*.#{file_ext}")]
185
+ end
186
+
183
187
  def generate_matchfile_content
184
188
  return "google_cloud_bucket_name(\"#{self.bucket_name}\")"
185
189
  end
@@ -96,6 +96,10 @@ module Match
96
96
  not_implemented(__method__)
97
97
  end
98
98
 
99
+ def list_files(file_name: "", file_ext: "")
100
+ not_implemented(__method__)
101
+ end
102
+
99
103
  # Implement this for the `fastlane match init` command
100
104
  # This method must return the content of the Matchfile
101
105
  # that should be generated
@@ -139,6 +139,10 @@ module Match
139
139
  false
140
140
  end
141
141
 
142
+ def list_files(file_name: "", file_ext: "")
143
+ Dir[File.join(working_directory, self.team_id, "**", file_name, "*.#{file_ext}")]
144
+ end
145
+
142
146
  # Implement this for the `fastlane match init` command
143
147
  # This method must return the content of the Matchfile
144
148
  # that should be generated
@@ -398,7 +398,7 @@ module Scan
398
398
  FastlaneCore::ConfigItem.new(key: :slack_icon_url,
399
399
  env_name: "SCAN_SLACK_ICON_URL",
400
400
  description: "Overrides the webhook's image property if slack_use_webhook_configured_username_and_icon is false",
401
- default_value: "https://s3-eu-west-1.amazonaws.com/fastlane.tools/fastlane.png",
401
+ default_value: "https://fastlane.tools/assets/img/fastlane_icon.png",
402
402
  is_string: true,
403
403
  optional: true),
404
404
  FastlaneCore::ConfigItem.new(key: :skip_slack,
@@ -3,6 +3,13 @@ require_relative 'module'
3
3
  module Scan
4
4
  class TestResultParser
5
5
  def parse_result(output)
6
+ unless output
7
+ return {
8
+ tests: 0,
9
+ failures: 0
10
+ }
11
+ end
12
+
6
13
  # e.g. ...<testsuites tests='2' failures='1'>...
7
14
  matched = output.scan(/<testsuites\b(?=[^<>]*\s+tests='(\d+)')(?=[^<>]*\s+failures='(\d+)')[^<>]+>/)
8
15
 
@@ -10,13 +17,13 @@ module Scan
10
17
  tests = matched[0][0].to_i
11
18
  failures = matched[0][1].to_i
12
19
 
13
- return {
20
+ {
14
21
  tests: tests,
15
22
  failures: failures
16
23
  }
17
24
  else
18
25
  UI.error("Couldn't parse the number of tests from the output")
19
- return {
26
+ {
20
27
  tests: 0,
21
28
  failures: 0
22
29
  }
@@ -152,6 +152,12 @@ module Snapshot
152
152
  description: "A list of videos that should be added to the simulator before running the application",
153
153
  type: Array,
154
154
  optional: true),
155
+ FastlaneCore::ConfigItem.new(key: :html_template,
156
+ env_name: 'SNAPSHOT_HTML_TEMPLATE',
157
+ short_option: "-e",
158
+ description: "A path to screenshots.html template",
159
+ default_value: File.join(Snapshot::ROOT, "lib", "snapshot/page.html.erb"),
160
+ optional: true),
155
161
 
156
162
  # Everything around building
157
163
  FastlaneCore::ConfigItem.new(key: :buildlog_path,
@@ -263,7 +269,12 @@ module Snapshot
263
269
  is_string: false,
264
270
  verify_block: proc do |value|
265
271
  verify_type('skip_testing', [Array, String], value)
266
- end)
272
+ end),
273
+ FastlaneCore::ConfigItem.new(key: :disable_xcpretty,
274
+ env_name: "SNAPSHOT_DISABLE_XCPRETTY",
275
+ description: "Disable xcpretty formatting of build",
276
+ type: Boolean,
277
+ optional: true)
267
278
  ]
268
279
  end
269
280
  end
@@ -36,7 +36,7 @@ module Snapshot
36
36
  end
37
37
  end
38
38
 
39
- html_path = File.join(Snapshot::ROOT, "lib", "snapshot/page.html.erb")
39
+ html_path = Snapshot.config[:html_template]
40
40
  html = ERB.new(File.read(html_path)).result(binding) # https://web.archive.org/web/20160430190141/www.rrn.dk/rubys-erb-templating-system
41
41
 
42
42
  export_path = "#{screens_path}/screenshots.html"
@@ -16,20 +16,25 @@ module Snapshot
16
16
  parts += build_settings
17
17
  parts += actions
18
18
  parts += suffix
19
- parts += pipe(language: language, locale: locale, log_path: log_path)
19
+ parts += pipe(log_path: log_path)
20
20
 
21
21
  return parts
22
22
  end
23
23
 
24
- def pipe(language: nil, locale: nil, log_path: nil)
24
+ def pipe(log_path: nil)
25
25
  tee_command = ['tee']
26
26
  tee_command << '-a' if log_path && File.exist?(log_path)
27
27
  tee_command << log_path.shellescape if log_path
28
28
 
29
+ pipe = ["| #{tee_command.join(' ')}"]
30
+ if Snapshot.config[:disable_xcpretty]
31
+ return pipe
32
+ end
33
+
29
34
  xcpretty = "xcpretty #{Snapshot.config[:xcpretty_args]}"
30
35
  xcpretty << "--no-color" if Helper.colors_disabled?
31
36
 
32
- return ["| #{tee_command.join(' ')} | #{xcpretty}"]
37
+ return pipe << "| #{xcpretty}"
33
38
  end
34
39
 
35
40
  def destination(devices)
@@ -54,6 +54,7 @@ module Spaceship
54
54
  GatewayTimeoutError = Spaceship::GatewayTimeoutError
55
55
  InternalServerError = Spaceship::InternalServerError
56
56
  BadGatewayError = Spaceship::BadGatewayError
57
+ AccessForbiddenError = Spaceship::AccessForbiddenError
57
58
 
58
59
  def self.hostname
59
60
  raise "You must implement self.hostname"
@@ -628,7 +629,8 @@ module Spaceship
628
629
  Faraday::TimeoutError,
629
630
  BadGatewayError,
630
631
  AppleTimeoutError,
631
- GatewayTimeoutError => ex
632
+ GatewayTimeoutError,
633
+ AccessForbiddenError => ex
632
634
  tries -= 1
633
635
  unless tries.zero?
634
636
  msg = "Timeout received: '#{ex.class}', '#{ex.message}'. Retrying after 3 seconds (remaining: #{tries})..."
@@ -865,6 +867,12 @@ module Spaceship
865
867
  raise BadGatewayError.new, "Apple 502 detected - this might be temporary server error, try again later"
866
868
  end
867
869
 
870
+ if resp_hash[:status] == 403
871
+ msg = "Access forbidden"
872
+ logger.warn(msg)
873
+ raise AccessForbiddenError.new, msg
874
+ end
875
+
868
876
  return response
869
877
  end
870
878
  end
@@ -76,4 +76,7 @@ module Spaceship
76
76
 
77
77
  # Raised when 504 is received from App Store Connect
78
78
  class GatewayTimeoutError < BasicPreferredInfoError; end
79
+
80
+ # Raised when 403 is received from portal request
81
+ class AccessForbiddenError < BasicPreferredInfoError; end
79
82
  end
metadata CHANGED
@@ -1,35 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.148.1
4
+ version: 2.149.0
5
5
  platform: ruby
6
6
  authors:
7
- - Jan Piotrowski
8
- - Aaron Brager
9
- - Stefan Natchev
7
+ - Kohki Miki
10
8
  - Andrew McBurney
11
- - Olivier Halligon
12
- - Danielle Tomlinson
13
- - Jimmy Dee
14
- - Joshua Liebowitz
15
- - Felix Krause
9
+ - Jan Piotrowski
16
10
  - Iulian Onofrei
11
+ - Luka Mirosevic
12
+ - Jimmy Dee
13
+ - Josh Holtz
17
14
  - Max Ott
15
+ - Matthew Ellis
16
+ - Felix Krause
17
+ - Olivier Halligon
18
+ - Stefan Natchev
19
+ - Helmut Januschka
18
20
  - Maksym Grebenets
19
21
  - Manu Wallner
20
- - Jorge Revuelta H
22
+ - Aaron Brager
21
23
  - Fumiya Nakamura
22
- - Matthew Ellis
23
24
  - Daniel Jankowski
24
- - Helmut Januschka
25
- - Josh Holtz
25
+ - Danielle Tomlinson
26
+ - Jorge Revuelta H
27
+ - Joshua Liebowitz
26
28
  - Jérôme Lacoste
27
- - Luka Mirosevic
28
- - Kohki Miki
29
29
  autorequire:
30
30
  bindir: bin
31
31
  cert_chain: []
32
- date: 2020-05-18 00:00:00.000000000 Z
32
+ date: 2020-06-03 00:00:00.000000000 Z
33
33
  dependencies:
34
34
  - !ruby/object:Gem::Dependency
35
35
  name: slack-notifier
@@ -697,16 +697,16 @@ dependencies:
697
697
  name: rake
698
698
  requirement: !ruby/object:Gem::Requirement
699
699
  requirements:
700
- - - "<"
700
+ - - ">="
701
701
  - !ruby/object:Gem::Version
702
- version: '12'
702
+ version: '0'
703
703
  type: :development
704
704
  prerelease: false
705
705
  version_requirements: !ruby/object:Gem::Requirement
706
706
  requirements:
707
- - - "<"
707
+ - - ">="
708
708
  - !ruby/object:Gem::Version
709
- version: '12'
709
+ version: '0'
710
710
  - !ruby/object:Gem::Dependency
711
711
  name: rspec
712
712
  requirement: !ruby/object:Gem::Requirement
@@ -1008,6 +1008,7 @@ files:
1008
1008
  - deliver/lib/deliver/upload_price_tier.rb
1009
1009
  - deliver/lib/deliver/upload_screenshots.rb
1010
1010
  - fastlane/README.md
1011
+ - fastlane/lib/assets/.s3_html_template.erb.swp
1011
1012
  - fastlane/lib/assets/ActionDetails.md.erb
1012
1013
  - fastlane/lib/assets/Actions.md.erb
1013
1014
  - fastlane/lib/assets/AppfileTemplate
@@ -1028,6 +1029,8 @@ files:
1028
1029
  - fastlane/lib/fastlane.rb
1029
1030
  - fastlane/lib/fastlane/action.rb
1030
1031
  - fastlane/lib/fastlane/action_collector.rb
1032
+ - fastlane/lib/fastlane/actions/.hipchat.rb.swp
1033
+ - fastlane/lib/fastlane/actions/.slack.rb.swp
1031
1034
  - fastlane/lib/fastlane/actions/README.md
1032
1035
  - fastlane/lib/fastlane/actions/actions_helper.rb
1033
1036
  - fastlane/lib/fastlane/actions/adb.rb
@@ -1571,6 +1574,7 @@ files:
1571
1574
  - scan/lib/assets/ScanfileTemplate
1572
1575
  - scan/lib/assets/ScanfileTemplate.swift
1573
1576
  - scan/lib/scan.rb
1577
+ - scan/lib/scan/.options.rb.swp
1574
1578
  - scan/lib/scan/commands_generator.rb
1575
1579
  - scan/lib/scan/detect_values.rb
1576
1580
  - scan/lib/scan/error_handler.rb