fastlane 2.148.1 → 2.149.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +74 -74
- data/deliver/lib/deliver/app_screenshot.rb +3 -3
- data/fastlane/lib/assets/.s3_html_template.erb.swp +0 -0
- data/fastlane/lib/assets/s3_html_template.erb +1 -1
- data/fastlane/lib/fastlane/actions/.hipchat.rb.swp +0 -0
- data/fastlane/lib/fastlane/actions/.slack.rb.swp +0 -0
- data/fastlane/lib/fastlane/actions/docs/capture_android_screenshots.md +42 -2
- data/fastlane/lib/fastlane/actions/hipchat.rb +1 -1
- data/fastlane/lib/fastlane/actions/slack.rb +1 -1
- data/fastlane/lib/fastlane/actions/slather.rb +8 -1
- data/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +1 -1
- data/fastlane/lib/fastlane/swift_fastlane_function.rb +15 -2
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/Fastlane.swift +35 -14
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/GymfileProtocol.swift +1 -1
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/Scanfile.swift +1 -1
- data/fastlane/swift/ScanfileProtocol.swift +2 -2
- data/fastlane/swift/Screengrabfile.swift +1 -1
- data/fastlane/swift/Snapshotfile.swift +1 -1
- data/fastlane/swift/SnapshotfileProtocol.swift +9 -1
- data/fastlane_core/lib/fastlane_core/project.rb +1 -0
- data/gym/lib/gym/options.rb +1 -1
- data/match/lib/match/nuke.rb +21 -16
- data/match/lib/match/storage/git_storage.rb +4 -0
- data/match/lib/match/storage/google_cloud_storage.rb +4 -0
- data/match/lib/match/storage/interface.rb +4 -0
- data/match/lib/match/storage/s3_storage.rb +4 -0
- data/scan/lib/scan/.options.rb.swp +0 -0
- data/scan/lib/scan/options.rb +1 -1
- data/scan/lib/scan/test_result_parser.rb +9 -2
- data/snapshot/lib/snapshot/options.rb +12 -1
- data/snapshot/lib/snapshot/reports_generator.rb +1 -1
- data/snapshot/lib/snapshot/test_command_generator.rb +8 -3
- data/spaceship/lib/spaceship/client.rb +9 -1
- data/spaceship/lib/spaceship/errors.rb +3 -0
- metadata +24 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e1a754f320b6a2a0f0f624fa8fd7d7b51fd0a46060a2baad5097716e3236e7ca
|
4
|
+
data.tar.gz: cc01aeb35c73ac933644477ccceff7c0c2c0b11c9ef866b0bac94ebc7bf83648
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
50
|
-
<
|
51
|
-
<
|
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/
|
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
|
-
|
68
|
-
<
|
69
|
-
<
|
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/
|
91
|
+
<h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
|
92
92
|
</td>
|
93
|
-
<td id='
|
94
|
-
<a href='https://github.com/
|
95
|
-
<img src='https://github.com/
|
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/
|
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='
|
102
|
-
<a href='https://github.com/
|
103
|
-
<img src='https://github.com/
|
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/
|
105
|
+
<h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
|
106
106
|
</td>
|
107
|
-
<td id='
|
108
|
-
<a href='https://github.com/
|
109
|
-
<img src='https://github.com/
|
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/
|
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='
|
120
|
-
<a href='https://github.com/
|
121
|
-
<img src='https://github.com/
|
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/
|
123
|
+
<h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
|
124
124
|
</td>
|
125
|
-
<td id='
|
126
|
-
<a href='https://github.com/
|
127
|
-
<img src='https://github.com/
|
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/
|
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='
|
134
|
-
<a href='https://github.com/
|
135
|
-
<img src='https://github.com/
|
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/
|
137
|
+
<h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
|
138
138
|
</td>
|
139
|
-
<td id='
|
140
|
-
<a href='https://github.com/
|
141
|
-
<img src='https://github.com/
|
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/
|
143
|
+
<h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
|
144
144
|
</td>
|
145
|
-
<td id='
|
146
|
-
<a href='https://github.com/
|
147
|
-
<img src='https://github.com/
|
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/
|
149
|
+
<h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
|
150
150
|
</td>
|
151
|
-
<td id='
|
152
|
-
<a href='https://github.com/
|
153
|
-
<img src='https://github.com/
|
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'>
|
155
|
+
<h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
|
156
156
|
</td>
|
157
|
-
<td id='
|
158
|
-
<a href='https://github.com/
|
159
|
-
<img src='https://github.com/
|
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/
|
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
|
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", #
|
133
|
-
ScreenSize::IOS_55 => "iPhone 6 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",
|
Binary file
|
@@ -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://
|
75
|
+
<img src="https://fastlane.tools/assets/img/fastlane_icon.png" id="fastlaneLogo" />
|
76
76
|
</body>
|
77
77
|
|
78
78
|
<script type='text/javascript'>
|
Binary file
|
Binary file
|
@@ -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
|
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://
|
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://
|
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.
|
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
|
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
|
@@ -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
|
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
|
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
|
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://
|
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://
|
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:
|
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.
|
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.
|
8927
|
+
// FastlaneRunnerAPIVersion [0.9.77]
|
@@ -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
|
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
|
@@ -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://
|
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.
|
261
|
+
// FastlaneRunnerAPIVersion [0.9.30]
|
@@ -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.
|
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}"
|
data/gym/lib/gym/options.rb
CHANGED
@@ -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
|
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
|
data/match/lib/match/nuke.rb
CHANGED
@@ -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
|
-
|
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 +=
|
145
|
-
keys +=
|
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 +=
|
152
|
-
profiles +=
|
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
|
Binary file
|
data/scan/lib/scan/options.rb
CHANGED
@@ -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://
|
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
|
-
|
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
|
-
|
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 =
|
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(
|
19
|
+
parts += pipe(log_path: log_path)
|
20
20
|
|
21
21
|
return parts
|
22
22
|
end
|
23
23
|
|
24
|
-
def pipe(
|
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
|
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
|
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
|
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.
|
4
|
+
version: 2.149.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
8
|
-
- Aaron Brager
|
9
|
-
- Stefan Natchev
|
7
|
+
- Kohki Miki
|
10
8
|
- Andrew McBurney
|
11
|
-
-
|
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
|
-
-
|
22
|
+
- Aaron Brager
|
21
23
|
- Fumiya Nakamura
|
22
|
-
- Matthew Ellis
|
23
24
|
- Daniel Jankowski
|
24
|
-
-
|
25
|
-
-
|
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-
|
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: '
|
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: '
|
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
|